freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master 016d0e6: [ftgrid, ftview, ftstring] Update font


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master 016d0e6: [ftgrid, ftview, ftstring] Update font and encoding handling.
Date: Thu, 28 Jun 2018 22:17:48 -0400 (EDT)

branch: master
commit 016d0e64b93ae7f21abe79d75d56291638b51a6f
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [ftgrid, ftview, ftstring] Update font and encoding handling.
    
    * src/ftcommon.c (my_face_requester): Check `cmap_index' range.
    (FTDemo_Install_Font): `cmap_index' obeys `handle->encoding' here,
    and postpone setting `num_indices'.
    (FTDemo_Set_Current_Font): `handle->encoding' obeys `cmap_index' here,
    also set `num_indices' accordingly.
    
    * src/ftview.c (event_encoding_change): Simplify by calling
    `FTDemo_Set_Current_Font'.
---
 ChangeLog      | 13 ++++++++++
 src/ftcommon.c | 81 ++++++++++++++++++++++++++++++++--------------------------
 src/ftview.c   | 38 ++-------------------------
 3 files changed, 60 insertions(+), 72 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fc63b2b..37f59b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2018-06-28  Alexei Podtelezhnikov  <address@hidden>
+
+       [ftgrid, ftview, ftstring] Update font and encoding handling.
+
+       * src/ftcommon.c (my_face_requester): Check `cmap_index' range.
+       (FTDemo_Install_Font): `cmap_index' obeys `handle->encoding' here,
+       and postpone setting `num_indices'.
+       (FTDemo_Set_Current_Font): `handle->encoding' obeys `cmap_index' here,
+       also set `num_indices' accordingly.
+
+       * src/ftview.c (event_encoding_change): Simplify by calling
+       `FTDemo_Set_Current_Font'.
+
 2018-06-25  Alexei Podtelezhnikov  <address@hidden>
 
        [ftstring] Improve stress test glyphs.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 2452b67..cb0b212 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -264,7 +264,7 @@
           *suffix = '\0';
       }
 
-      if ( (*aface)->charmaps )
+      if ( (*aface)->charmaps && font->cmap_index < (*aface)->num_charmaps )
         (*aface)->charmap = (*aface)->charmaps[font->cmap_index];
     }
 
@@ -428,13 +428,6 @@
           continue;
         }
 
-        if ( handle->encoding != FT_ENCODING_ORDER )
-        {
-          error = FT_Select_Charmap( face, (FT_Encoding)handle->encoding );
-          if ( error )
-            handle->encoding = FT_ENCODING_ORDER;
-        }
-
         font = (PFont)malloc( sizeof ( *font ) );
 
         /* We allocate four more bytes since we want to attach an AFM */
@@ -444,8 +437,13 @@
         strcpy( (char*)font->filepathname, filename );
 
         font->face_index = ( j << 16 ) + i;
-        font->cmap_index = face->charmap ? FT_Get_Charmap_Index( face->charmap 
)
-                                         : 0;
+
+        if ( handle-> encoding != FT_ENCODING_ORDER                      &&
+             FT_Select_Charmap( face, (FT_Encoding)handle->encoding ) ==
+                                                               FT_Err_Ok )
+          font->cmap_index = FT_Get_Charmap_Index( face->charmap );
+        else
+          font->cmap_index = face->num_charmaps;  /* FT_ENCODING_ORDER */
 
         if ( handle->preload )
         {
@@ -496,32 +494,6 @@
           font->file_size    = 0;
         }
 
-        switch ( handle->encoding )
-        {
-        case FT_ENCODING_ORDER:
-          font->num_indices = face->num_glyphs;
-          break;
-
-        case FT_ENCODING_UNICODE:
-          font->num_indices = 0x110000L;
-          break;
-
-        case FT_ENCODING_ADOBE_LATIN_1:
-        case FT_ENCODING_ADOBE_STANDARD:
-        case FT_ENCODING_ADOBE_EXPERT:
-        case FT_ENCODING_ADOBE_CUSTOM:
-        case FT_ENCODING_APPLE_ROMAN:
-          font->num_indices = 0x100L;
-          break;
-
-          /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
-        case FT_ENCODING_MS_SYMBOL:
-          font->num_indices = 0x10000L;
-
-        default:
-          font->num_indices = 0x10000L;
-        }
-
         FT_Done_Face( face );
         face = NULL;
 
@@ -555,9 +527,46 @@
   FTDemo_Set_Current_Font( FTDemo_Handle*  handle,
                            PFont           font )
   {
+    FT_Face  face;
+
+
     handle->current_font   = font;
     handle->scaler.face_id = (FTC_FaceID)font;
 
+    error = FTC_Manager_LookupFace( handle->cache_manager,
+                                    handle->scaler.face_id, &face );
+
+    if ( font->cmap_index < face->num_charmaps )
+      handle->encoding = face->charmaps[font->cmap_index]->encoding;
+    else
+      handle->encoding = FT_ENCODING_ORDER;
+
+    switch ( handle->encoding )
+    {
+    case FT_ENCODING_ORDER:
+      font->num_indices = face->num_glyphs;
+      break;
+
+    case FT_ENCODING_UNICODE:
+      font->num_indices = 0x110000L;
+      break;
+
+    case FT_ENCODING_ADOBE_LATIN_1:
+    case FT_ENCODING_ADOBE_STANDARD:
+    case FT_ENCODING_ADOBE_EXPERT:
+    case FT_ENCODING_ADOBE_CUSTOM:
+    case FT_ENCODING_APPLE_ROMAN:
+      font->num_indices = 0x100L;
+      break;
+
+    /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
+    case FT_ENCODING_MS_SYMBOL:
+      font->num_indices = 0x10000L;
+
+    default:
+      font->num_indices = 0x10000L;
+    }
+
     handle->string_reload = 1;
   }
 
diff --git a/src/ftview.c b/src/ftview.c
index 17e02b7..c248ee9 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -1024,43 +1024,9 @@
     else
       font->cmap_index = 0;
 
-    error = FTC_Manager_LookupFace( handle->cache_manager,
-                                    handle->scaler.face_id, &face );
+    FTDemo_Set_Current_Font( handle, font );
 
-    if ( font->cmap_index < face->num_charmaps )
-    {
-      handle->encoding = face->charmaps[font->cmap_index]->encoding;
-      status.offset    = 0x20;
-    }
-    else
-    {
-      handle->encoding = FT_ENCODING_ORDER;
-      status.offset    = 0;
-    }
-
-    switch ( handle->encoding )
-    {
-    case FT_ENCODING_ORDER:
-      font->num_indices = face->num_glyphs;
-      break;
-
-    case FT_ENCODING_UNICODE:
-      font->num_indices = 0x110000L;
-      break;
-
-    case FT_ENCODING_ADOBE_LATIN_1:
-    case FT_ENCODING_ADOBE_STANDARD:
-    case FT_ENCODING_ADOBE_EXPERT:
-    case FT_ENCODING_ADOBE_CUSTOM:
-    case FT_ENCODING_APPLE_ROMAN:
-      font->num_indices = 0x100L;
-      break;
-
-    /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
-    case FT_ENCODING_MS_SYMBOL:
-    default:
-      font->num_indices = 0x10000L;
-    }
+    status.offset = handle->encoding == FT_ENCODING_ORDER ? 0 : 0x20;
 
     return 1;
   }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]