freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 0eb690e: [ftview] Fix charmap cycling.


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master 0eb690e: [ftview] Fix charmap cycling.
Date: Sat, 8 Oct 2016 03:04:32 +0000 (UTC)

branch: master
commit 0eb690ee171d8408d2f256975ec3723f6c059940
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [ftview] Fix charmap cycling.
    
    * src/ftview.c (event_change_encoding): Reimplement relying on
    `cmap_index' field in TFont structure.
---
 ChangeLog    |    7 +++++++
 src/ftview.c |   48 ++++++++++++++++++++++++++++++++++++------------
 2 files changed, 43 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 497574b..4e5d2eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-07  Alexei Podtelezhnikov  <address@hidden>
+
+       [ftview] Fix charmap cycling.
+
+       * src/ftview.c (event_change_encoding): Reimplement relying on
+       `cmap_index' field in TFont structure.
+
 2016-10-05  Alexei Podtelezhnikov  <address@hidden>
 
        [ftview] Implement cycling through available charmaps.
diff --git a/src/ftview.c b/src/ftview.c
index 8d46fb7..4889dc8 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -1039,27 +1039,51 @@
   static int
   event_encoding_change( void )
   {
-    FT_Face     face;
-    static int  i = 0;
+    PFont    font = handle->fonts[status.font_idx];
+    FT_Face  face;
+
+
+    if ( status.encoding != FT_ENCODING_NONE )
+      font->cmap_index++;
+    else
+      font->cmap_index = 0;
 
     error = FTC_Manager_LookupFace( handle->cache_manager,
                                     handle->scaler.face_id, &face );
 
-    if ( i < face->num_charmaps )
+    if ( font->cmap_index < face->num_charmaps )
     {
-      status.encoding = face->charmaps[i]->encoding;
-      status.offset   = 0x20;
-
-      FT_Set_Charmap( face, face->charmaps[i] );
-
-      i++;
+      status.encoding  = face->charmaps[font->cmap_index]->encoding;
+      status.offset    = 0x20;
     }
     else
     {
-      status.encoding = 0;
-      status.offset   = 0;
+      status.encoding  = FT_ENCODING_NONE;
+      status.offset    = 0;
+    }
 
-      i = 0;
+    switch ( status.encoding )
+    {
+    case FT_ENCODING_NONE:
+      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;
     }
 
     return 1;



reply via email to

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