View Issue Details

IDProjectCategoryView StatusLast Update
0031720CommunityOCCT:Visualizationpublic2020-12-02 17:13
ReporterVico Liang Assigned Tobugmaster  
PrioritynormalSeverityminor 
Status closedResolutionfixed 
Product Version7.4.0 
Target Version7.5.0Fixed in Version7.5.0 
Summary0031720: Visualization, Font_FontMgr - register one more CJK fallback font available on newer Android devices
DescriptionFont_BRepFont has been tested to create shape for Chinese text. The test environment is on Android device. Any font not supported for Chinese will display a rectangle as its placeholder.

The problem may occur in below method: HasSymbol(theUChar) returns true even if it doesn't support Chinese because it has a placeholder for it.

bool Font_FTFont::loadGlyph (const Standard_Utf32Char theUChar)
{
  if (myUChar == theUChar)
  {
    return myUChar != 0;
  }

  myGlyphImg.Clear();
  myUChar = 0;
  myActiveFTFace = myFTFace;
  if (theUChar == 0)
  {
    return false;
  }

  if (myToUseUnicodeSubsetFallback
  && !HasSymbol (theUChar))
  {
    // try using fallback
    const Font_UnicodeSubset aSubset = CharSubset (theUChar);
    if (findAndInitFallback (aSubset)
     && myFallbackFaces[aSubset]->HasSymbol (theUChar))
    {
      myActiveFTFace = myFallbackFaces[aSubset]->myFTFace;
    }
  }

  if (FT_Load_Char (myActiveFTFace, theUChar, FT_Int32(myLoadFlags)) != 0
   || myActiveFTFace->glyph == NULL)
  {
    return false;
  }

  myUChar = theUChar;
  return true;
}
TagsNo tags attached.
Test case numberNot required

Attached Files

  • DroidSans.ttf (306,672 bytes)
  • occ_jni_cjk_KO.png (104,452 bytes)
  • occ_jni_cjk_OK.png (101,471 bytes)

Relationships

related to 0031728 closedbugmaster Community Visualization, Font_FontMgr - provide function to register fallback fonts in application level 
has duplicate 0031719 closedbugmaster Community no default Chinese Unicode support 
child of 0030782 closedbugmaster Open CASCADE Visualization, Font_FTFont - use predefined fallback fonts for extended Unicode subsets 

Activities

Vico Liang

2020-08-19 20:30

developer   ~0093555

Hope HasSymbol method can work more precisely and make the fallback works.

kgv

2020-08-19 20:36

developer   ~0093556

I don't think that HasSymbol() is a problem - correct fonts should not provide a placeholder for it (such placeholder is normally returned in a different way).

Would be helpful to know exactly font used in this case to verify if problem is with it or somewhere else.

Vico Liang

2020-08-19 20:48

developer   ~0093557

Android devide, font name: Roboto is a good case to reproduce the issue.

kgv

2020-08-20 16:34

developer  

DroidSans.ttf (306,672 bytes)

kgv

2020-08-20 16:37

developer   ~0093565

Last edited: 2020-08-20 16:39

With DroidSans.ttf (Roboto) from Android 7 device (attached to the bug):

pload MODELING VISUALIZATION
dtracelevel trace
vfont -verbose 1
#vfont -clear
vfont -add DroidSans.ttf
vinit View1
vtop
vpoint p00  0  0 0;vpoint p01  0 10 0;vpoint p11 10 10 0;vpoint p10 10  0 0
vfit
vzoom 0.8
vdrawtext t2 "简体中文 (Chinese)"    -pos  0  2 0 -halign left  -font Roboto


prints (on Windows):
Font_FontMgr, using font alias 'SimSun' instead of requested 'cjk'
Font_FTFont, using fallback font 'SimSun' for symbols unsupported by 'Roboto'


So that checking for a range looks as expected for this font as fallback is used. Do you have another result with Roboto font from your device?
Or maybe fallback found it actually not found or used a bad one?

Vico Liang

2020-08-20 17:20

developer   ~0093568

Last edited: 2020-08-20 17:20

whatever font are used, the unicode Chinese display as expected on Windows.
The problem occurs on mobile devices Android and iOS.

I'm not sure if it's suitable to attached the app link for you to see the issue.

https://play.google.com/store/apps/details?id=com.wuweido.cad
https://apps.apple.com/app/id1470242832

kgv

2020-08-21 11:47

developer  

occ_jni_cjk_KO.png (104,452 bytes)

kgv

2020-08-21 11:47

developer  

occ_jni_cjk_OK.png (101,471 bytes)

git

2020-08-21 11:49

administrator   ~0093579

Branch CR31720 has been created by kgv.

SHA-1: 46202841b3c27afe6782f1635d78579d51aa86d3


Detailed log of new commits:

Author: kgv
Date: Fri Aug 21 11:52:15 2020 +0300

    0031720: Visualization, Font_FontMgr - register one more CJK fallback font available on newer Android devices

kgv

2020-08-21 11:58

developer   ~0093581

Vico,

Font_FontMgr registers fallback fonts in constructor via addFontAlias() method in constructor. This logic is fragile, as it is based on the knowledge of standard font families pre-installed on specific platforms (and OS vendors tend to change fonts from version to version).

Newer Android devices are shipped with "Noto Sans CJK JP" font family supporting CJK characters. I have added this font in CR31720 - see attached screenshots of JNI sample:

void OcctJni_Viewer::initContent()
...
+    myViewCube->SetBoxSideLabel (V3d_TypeOfOrientation_Zup_Top, u8"简体中文 go");
  }
  myContext->Display (myViewCube, false);


iOS is a different story, as this closed platform does not permit file access to standard fonts, and the only way to draw text there is shipping some fonts with application itself and registering them within Font_FontMgr (of course, this option is available on other platforms as well to ensure all necessary fonts are available, but this raises additional legal issues for finding free/buying fonts and bloats application binary with extra files).

kgv

2020-08-21 12:02

developer   ~0093582

Last edited: 2020-08-21 14:13

I'm curious, if Android 11 involves some new restrictions to file access to system fonts (as Google tries to lock up a normal file system access), or it remains permitted there...

kgv

2020-08-21 14:14

developer   ~0093583

Patch is ready for review in OCCT branch CR31720.

http://jenkins-test-12.nnov.opencascade.com:8080/view/CR31720-master-KGV/

Vico Liang

2020-08-21 14:49

developer   ~0093584

Dear KGV,

Thanks for working on this and knowledge sharing.I checked that method addFontAlias() is private, it would be great if it's public, if so developers have chances to register fallback fonts.

osa

2020-08-21 14:50

developer   ~0093585

The patch was reviewed

bugmaster

2020-08-22 16:02

administrator   ~0093596

Combination -
OCCT branch : IR-2020-08-21
master SHA - 1d99a2baaa614856d8ef8b0a9975af5c3bdf92c6
a206de37fbfa0bf71bd534ae47192bbec23b8522
Products branch : IR-2020-08-21 SHA - 9541102e96ff9ee3aeec6e3e32f20f63b3b38556
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 17322.48000000014 / 17160.470000000118 [+0.94%]
Products
Total CPU difference: 11882.560000000085 / 11820.020000000079 [+0.53%]
Windows-64-VC14:
OCCT
Total CPU difference: 18716.078125 / 18725.125 [-0.05%]
Products
Total CPU difference: 13242.09375 / 13316.109375 [-0.56%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2020-08-22 16:12

administrator   ~0093597

Branch CR31720 has been deleted by inv.

SHA-1: 46202841b3c27afe6782f1635d78579d51aa86d3

Related Changesets

occt: master 1d99a2ba

2020-08-21 08:52:15

kgv


Committer: bugmaster Details Diff
0031720: Visualization, Font_FontMgr - register one more CJK fallback font available on newer Android devices Affected Issues
0031720
mod - src/Font/Font_FontMgr.cxx Diff File

Issue History

Date Modified Username Field Change
2020-08-19 20:14 Vico Liang New Issue
2020-08-19 20:14 Vico Liang Assigned To => kgv
2020-08-19 20:20 kgv Relationship added has duplicate 0031719
2020-08-19 20:30 Vico Liang Note Added: 0093555
2020-08-19 20:36 kgv Note Added: 0093556
2020-08-19 20:48 Vico Liang Note Added: 0093557
2020-08-20 16:34 kgv File Added: DroidSans.ttf
2020-08-20 16:37 kgv Note Added: 0093565
2020-08-20 16:38 kgv Note Edited: 0093565
2020-08-20 16:38 kgv Assigned To kgv => Vico Liang
2020-08-20 16:38 kgv Status new => feedback
2020-08-20 16:38 kgv Note Edited: 0093565
2020-08-20 16:39 kgv Note Edited: 0093565
2020-08-20 17:20 Vico Liang Note Added: 0093568
2020-08-20 17:20 Vico Liang Note Edited: 0093568
2020-08-20 18:01 Vico Liang Assigned To Vico Liang => kgv
2020-08-21 11:47 kgv File Added: occ_jni_cjk_KO.png
2020-08-21 11:47 kgv File Added: occ_jni_cjk_OK.png
2020-08-21 11:49 kgv Summary fallback fonts not applied for unicode Chinese since most font have a placeholder for unsupported character. => Visualization, Font_FontMgr - register one more CJK fallback font available on newer Android devices
2020-08-21 11:49 git Note Added: 0093579
2020-08-21 11:58 kgv Note Added: 0093581
2020-08-21 12:02 kgv Note Added: 0093582
2020-08-21 12:23 kgv Note Edited: 0093582
2020-08-21 14:13 kgv Note Edited: 0093582
2020-08-21 14:14 kgv Note Added: 0093583
2020-08-21 14:14 kgv Assigned To kgv => osa
2020-08-21 14:14 kgv Status feedback => resolved
2020-08-21 14:14 kgv Product Version => 7.4.0
2020-08-21 14:14 kgv Relationship added child of 0030782
2020-08-21 14:49 Vico Liang Note Added: 0093584
2020-08-21 14:50 osa Note Added: 0093585
2020-08-21 14:50 osa Assigned To osa => bugmaster
2020-08-21 14:50 osa Status resolved => reviewed
2020-08-21 15:22 Vico Liang Relationship added related to 0031728
2020-08-22 16:02 bugmaster Note Added: 0093596
2020-08-22 16:02 bugmaster Status reviewed => tested
2020-08-22 16:05 bugmaster Test case number => Not required
2020-08-22 16:06 bugmaster Changeset attached => occt master 1d99a2ba
2020-08-22 16:06 bugmaster Status tested => verified
2020-08-22 16:06 bugmaster Resolution open => fixed
2020-08-22 16:12 git Note Added: 0093597
2020-12-02 16:43 emo Fixed in Version => 7.5.0
2020-12-02 17:13 emo Status verified => closed