freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 180741c 2/2: [ftdiff] Add support for third Tru


From: Werner LEMBERG
Subject: [freetype2-demos] master 180741c 2/2: [ftdiff] Add support for third TrueType interpreter version.
Date: Sat, 21 May 2016 14:12:39 +0000 (UTC)

branch: master
commit 180741c7831afa01d103b96d768e2942c725c11d
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    [ftdiff] Add support for third TrueType interpreter version.
    
    * src/ftdiff.c (ColumnStateRec):  Replace `tt_interpreter_version'
    with `tt_interpreter_versions' array.
    Add `num_tt_interpreter_versions' and `tt_interpreter_version_idx'.
    (render_state_init): Expand check for alternative TrueType
    interpreter versions.
    (render_state_draw): Updated.
    (process_event) <'H'>: Updated.
---
 ChangeLog    |   12 +++++++++
 src/ftdiff.c |   85 +++++++++++++++++++++++++++++++++++++++++++---------------
 2 files changed, 75 insertions(+), 22 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b06de63..3a270f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2016-05-21  Werner Lemberg  <address@hidden>
 
+       [ftdiff] Add support for third TrueType interpreter version.
+
+       * src/ftdiff.c (ColumnStateRec):  Replace `tt_interpreter_version'
+       with `tt_interpreter_versions' array.
+       Add `num_tt_interpreter_versions' and `tt_interpreter_version_idx'.
+       (render_state_init): Expand check for alternative TrueType
+       interpreter versions.
+       (render_state_draw): Updated.
+       (process_event) <'H'>: Updated.
+
+2016-05-21  Werner Lemberg  <address@hidden>
+
        [ftview] Add support for third TrueType interpreter version.
 
        * src/ftview.c (status): Replace `tt_interpreter_version' with
diff --git a/src/ftdiff.c b/src/ftdiff.c
index cd98202..f69a4ea 100644
--- a/src/ftdiff.c
+++ b/src/ftdiff.c
@@ -187,7 +187,9 @@
     int            fw_index;
 
     unsigned int   cff_hinting_engine;
-    unsigned int   tt_interpreter_version;
+    unsigned int   tt_interpreter_versions[3];
+    int            num_tt_interpreter_versions;
+    int            tt_interpreter_version_idx;
     FT_Bool        warping;
 
   } ColumnStateRec, *ColumnState;
@@ -231,9 +233,18 @@
                      FT_Library   library )
   {
     FT_UInt  cff_hinting_engine;
-    FT_UInt  tt_interpreter_version;
     FT_Bool  warping;
 
+    unsigned int  tt_interpreter_versions[3]  = { 0, 0, 0 };
+    int           num_tt_interpreter_versions = 0;
+    int           tt_interpreter_version_idx  = 0;
+
+    unsigned int  dflt_tt_interpreter_version;
+    int           i;
+    unsigned int  versions[3] = { TT_INTERPRETER_VERSION_35,
+                                  TT_INTERPRETER_VERSION_38,
+                                  TT_INTERPRETER_VERSION_40 };
+
 
     memset( state, 0, sizeof ( *state ) );
 
@@ -251,9 +262,25 @@
     FT_Property_Get( library,
                      "cff",
                      "hinting-engine", &cff_hinting_engine );
+
+    /* collect all available versions, then set again the default */
     FT_Property_Get( library,
                      "truetype",
-                     "interpreter-version", &tt_interpreter_version );
+                     "interpreter-version", &dflt_tt_interpreter_version );
+    for ( i = 0; i < 3; i++ )
+    {
+      error = FT_Property_Set( library,
+                               "truetype",
+                               "interpreter-version", &versions[i] );
+      if ( !error )
+        tt_interpreter_versions[num_tt_interpreter_versions++] = versions[i];
+      if ( versions[i] == dflt_tt_interpreter_version )
+        tt_interpreter_version_idx = i;
+    }
+    FT_Property_Set( library,
+                     "truetype",
+                     "interpreter-version", &dflt_tt_interpreter_version );
+
     FT_Property_Get( library,
                      "autofitter",
                      "warping", &warping );
@@ -265,7 +292,18 @@
     state->columns[0].lcd_filter             = FT_LCD_FILTER_DEFAULT;
     state->columns[0].hint_mode              = HINT_MODE_BYTECODE;
     state->columns[0].cff_hinting_engine     = cff_hinting_engine;
-    state->columns[0].tt_interpreter_version = tt_interpreter_version;
+
+    state->columns[0].tt_interpreter_versions[0] =
+      tt_interpreter_versions[0];
+    state->columns[0].tt_interpreter_versions[1] =
+      tt_interpreter_versions[1];
+    state->columns[0].tt_interpreter_versions[2] =
+      tt_interpreter_versions[2];
+    state->columns[0].num_tt_interpreter_versions =
+      num_tt_interpreter_versions;
+    state->columns[0].tt_interpreter_version_idx =
+      tt_interpreter_version_idx;
+
     state->columns[0].warping                = warping;
     state->columns[0].use_custom_lcd_filter  = 0;
     state->columns[0].fw_index               = 2;
@@ -536,13 +574,17 @@
     /* no need to check for errors: the values used here are always valid */
     FT_Property_Set( state->library,
                      "cff",
-                     "hinting-engine", &column->cff_hinting_engine );
+                     "hinting-engine",
+                     &column->cff_hinting_engine );
     FT_Property_Set( state->library,
                      "truetype",
-                     "interpreter-version", &column->tt_interpreter_version );
+                     "interpreter-version",
+                     &column->tt_interpreter_versions
+                       [column->tt_interpreter_version_idx] );
     FT_Property_Set( state->library,
                      "autofitter",
-                     "warping", &column->warping );
+                     "warping",
+                     &column->warping );
 
     /* changing a property is in most cases a global operation; */
     /* we are on the safe side if we reload the face completely */
@@ -766,7 +808,8 @@
 
         else if ( !strcmp( module->clazz->module_name, "truetype" ) )
         {
-          switch ( column->tt_interpreter_version )
+          switch ( column->tt_interpreter_versions[
+                     column->tt_interpreter_version_idx] )
           {
           case TT_INTERPRETER_VERSION_35:
             extra = " (TT v35)";
@@ -774,6 +817,9 @@
           case TT_INTERPRETER_VERSION_38:
             extra = " (TT v38)";
             break;
+          case TT_INTERPRETER_VERSION_40:
+            extra = " (TT v40)";
+            break;
           }
         }
       }
@@ -1236,20 +1282,15 @@
           }
           else if ( !strcmp( module->clazz->module_name, "truetype" ) )
           {
-            FT_UInt  new_interpreter_version;
-
-
-            if ( column->tt_interpreter_version == TT_INTERPRETER_VERSION_35 )
-              new_interpreter_version = TT_INTERPRETER_VERSION_38;
-            else
-              new_interpreter_version = TT_INTERPRETER_VERSION_35;
-
-            error = FT_Property_Set( state->library,
-                                     "truetype",
-                                     "interpreter-version",
-                                     &new_interpreter_version );
-            if ( !error )
-              column->tt_interpreter_version = new_interpreter_version;
+            column->tt_interpreter_version_idx += 1;
+            column->tt_interpreter_version_idx %=
+              column->num_tt_interpreter_versions;
+
+            FT_Property_Set( state->library,
+                             "truetype",
+                             "interpreter-version",
+                             &column->tt_interpreter_versions[
+                               column->tt_interpreter_version_idx] );
           }
         }
       }



reply via email to

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