shithub: freetype+ttf2subf

Download patch

ref: 54e75749465821066fe3ed533f00d6a2c67fbb37
parent: 76a5f62323d4fe3319d3d5410ded0ff9cab1f8c5
author: David Turner <[email protected]>
date: Fri Nov 3 21:52:02 EST 2000

defining new types to hold "internal" fields of public
objects:

  FT_Face_Internal, FT_Size_Internal, FT_Slot_Internal

these contain some fields that may change between releases
of FreeType, without affecting the size of FT_FaceRec,
FT_SizeRec, FT_GlyphSlotRec, etc.., which means that
drivers wouldn't need to be recompiled if we only add new
fields to an internal structure..

I plan to hack a few things related to the auto-hinter and
I need this move to ensure that we will not break binary
compatibility between 2.0 and 2.1 :-)

- David

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -393,6 +393,21 @@
   /*************************************************************************/
   /*************************************************************************/
 
+ /*********************************************************************
+  *
+  * <Type>
+  *    FT_Face_Internal
+  *
+  * <Description>
+  *    an opaque handle to a FT_Face_InternalRec structure, used to
+  *    model private data of a given FT_Face object.
+  *
+  *    this fields might change between releases of FreeType 2 and
+  *    are not generally available to client applications
+  *
+  */
+  typedef struct FT_Face_InternalRec_*   FT_Face_Internal;
+
   /*************************************************************************/
   /*                                                                       */
   /*                       FreeType base face class                        */
@@ -570,19 +585,11 @@
   /*                           this should be set to 0.  Only relevant for */
   /*                           scalable formats.                           */
   /*                                                                       */
-  /*    transform_matrix    :: A 2x2 matrix of 16.16 coefficients used     */
-  /*                           to transform glyph outlines after they are  */
-  /*                           loaded from the font.  Only used by the     */
-  /*                           convenience functions.                      */
+  /*    internal            :: a pointer to internal fields of the face    */
+  /*                           object. These fields can change freely      */
+  /*                           between releases of FreeType and are not    */
+  /*                           publicly available..                        */
   /*                                                                       */
-  /*    transform_delta     :: A translation vector used to transform      */
-  /*                           glyph outlines after they are loaded from   */
-  /*                           the font.  Only used by the convenience     */
-  /*                           functions.                                  */
-  /*                                                                       */
-  /*    transform_flags     :: Some flags used to classify the transform.  */
-  /*                           Only used by the convenience functions.     */
-  /*                                                                       */
   typedef struct  FT_FaceRec_
   {
     FT_Long          num_faces;
@@ -620,6 +627,7 @@
 
     FT_GlyphSlot     glyph;
     FT_Size          size;
+    FT_CharMap       charmap;
 
     /*@private begin */
 
@@ -627,19 +635,13 @@
     FT_Memory        memory;
     FT_Stream        stream;
 
-    FT_CharMap       charmap;
     FT_ListRec       sizes_list;
 
     FT_Generic       autohint;
     void*            extensions;
 
-    FT_UShort        max_points;
-    FT_Short         max_contours;
+    FT_Face_Internal internal;
 
-    FT_Matrix        transform_matrix;
-    FT_Vector        transform_delta;
-    FT_Int           transform_flags;
-
     /*@private end */
 
   } FT_FaceRec;
@@ -848,6 +850,17 @@
 #define FT_STYLE_FLAG_BOLD  2
 
 
+ /*********************************************************************
+  *
+  * <Type>
+  *    FT_Size_Internal
+  *
+  * <Description>
+  *    an opaque handle to a FT_Size_InternalRec structure, used to
+  *    model private data of a given FT_Size object.
+  */
+  typedef struct FT_Size_InternalRec_*   FT_Size_Internal;
+  
   /*************************************************************************/
   /*                                                                       */
   /*                    FreeType base size metrics                         */
@@ -914,16 +927,16 @@
   /*                                                                       */
   typedef struct  FT_Size_Metrics_
   {
-    FT_UShort   x_ppem;        /* horizontal pixels per EM               */
-    FT_UShort   y_ppem;        /* vertical pixels per EM                 */
+    FT_UShort  x_ppem;      /* horizontal pixels per EM               */
+    FT_UShort  y_ppem;      /* vertical pixels per EM                 */
 
-    FT_Fixed    x_scale;       /* two scales used to convert font units  */
-    FT_Fixed    y_scale;       /* to 26.6 frac. pixel coordinates..      */
+    FT_Fixed   x_scale;     /* two scales used to convert font units  */
+    FT_Fixed   y_scale;     /* to 26.6 frac. pixel coordinates..      */
 
-    FT_Pos      ascender;      /* ascender in 26.6 frac. pixels          */
-    FT_Pos      descender;     /* descender in 26.6 frac. pixels         */
-    FT_Pos      height;        /* text height in 26.6 frac. pixels       */
-    FT_Pos      max_advance;   /* max horizontal advance, in 26.6 pixels */
+    FT_Pos     ascender;    /* ascender in 26.6 frac. pixels          */
+    FT_Pos     descender;   /* descender in 26.6 frac. pixels         */
+    FT_Pos     height;      /* text height in 26.6 frac. pixels       */
+    FT_Pos     max_advance; /* max horizontal advance, in 26.6 pixels */
 
   } FT_Size_Metrics;
 
@@ -951,9 +964,11 @@
   /*                                                                       */
   typedef struct  FT_SizeRec_
   {
-    FT_Face          face;      /* parent face object              */
-    FT_Generic       generic;   /* generic pointer for client uses */
-    FT_Size_Metrics  metrics;   /* size metrics                    */
+    FT_Face           face;      /* parent face object              */
+    FT_Generic        generic;   /* generic pointer for client uses */
+    FT_Size_Metrics   metrics;   /* size metrics                    */
+    FT_Size_Internal  internal;
+    
 
   } FT_SizeRec;
 
@@ -974,20 +989,16 @@
   typedef struct FT_SubGlyph_  FT_SubGlyph;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_GlyphLoader                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The glyph loader is an internal object used to load several glyphs */
-  /*    together (for example, in the case of composites).                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The glyph loader implementation is not part of the high-level API, */
-  /*    hence the forward structure declaration.                           */
-  /*                                                                       */
-  typedef struct FT_GlyphLoader_  FT_GlyphLoader;
+ /*********************************************************************
+  *
+  * <Type>
+  *    FT_Slot_Internal
+  *
+  * <Description>
+  *    an opaque handle to a FT_Slot_InternalRec structure, used to
+  *    model private data of a given FT_GlyphSlot object.
+  */
+  typedef struct FT_Slot_InternalRec_*   FT_Slot_Internal;
 
 
   /*************************************************************************/
@@ -1146,14 +1157,7 @@
 
     void*             other;
 
-    /*@private begin */
-
-    FT_GlyphLoader*   loader;
-    FT_Bool           glyph_transformed;
-    FT_Matrix         glyph_matrix;
-    FT_Vector         glyph_delta;
-
-    /*@private end */
+    FT_Slot_Internal  internal;
 
   } FT_GlyphSlotRec;
 
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -75,6 +75,95 @@
 #define ABS( a )     ( (a) < 0 ? -(a) : (a) )
 #endif
 
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_GlyphLoader                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The glyph loader is an internal object used to load several glyphs */
+  /*    together (for example, in the case of composites).                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The glyph loader implementation is not part of the high-level API, */
+  /*    hence the forward structure declaration.                           */
+  /*                                                                       */
+  typedef struct FT_GlyphLoader_  FT_GlyphLoader;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Face_InternalRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    this structure contains the internal fields of each FT_Face        */
+  /*    object. These fields may change between different releases         */
+  /*    of FreeType.                                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    transform_matrix    :: A 2x2 matrix of 16.16 coefficients used     */
+  /*                           to transform glyph outlines after they are  */
+  /*                           loaded from the font.  Only used by the     */
+  /*                           convenience functions.                      */
+  /*                                                                       */
+  /*    transform_delta     :: A translation vector used to transform      */
+  /*                           glyph outlines after they are loaded from   */
+  /*                           the font.  Only used by the convenience     */
+  /*                           functions.                                  */
+  /*                                                                       */
+  /*    transform_flags     :: Some flags used to classify the transform.  */
+  /*                           Only used by the convenience functions.     */
+  /*                                                                       */
+  /*                                                                       */
+  /*                                                                       */
+  /*                                                                       */
+  typedef struct FT_Face_InternalRec_
+  {
+    FT_UShort        max_points;
+    FT_Short         max_contours;
+
+    FT_Matrix        transform_matrix;
+    FT_Vector        transform_delta;
+    FT_Int           transform_flags;
+  
+  } FT_Face_InternalRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Slot_InternalRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    this structure contains the internal fields of each FT_GlyphSlot   */
+  /*    object. These fields may change between different releases         */
+  /*    of FreeType.                                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    loader            :: the glyph loader object used to load          */
+  /*                         outlines in the glyph slot                    */
+  /*                                                                       */
+  /*    glyph_transformed :: boolean. set to TRUE when the loaded glyph    */
+  /*                         must be transformed through a specific        */
+  /*                         font transform. this is _not_ the same as     */
+  /*                         the face transform set through                */
+  /*                         FT_Set_Transform                              */
+  /*                                                                       */
+  /*    glyph_matrix      :: the 2x2 matrix corresponding to the glyph     */
+  /*                         transform, when required                      */
+  /*                                                                       */
+  /*    glyph_delta       :: the 2d translation vector corresponding to    */
+  /*                         the glyph transform, when required            */
+  /*                                                                       */
+  typedef struct FT_Slot_InternalRec_
+  {
+    FT_GlyphLoader*   loader;
+    FT_Bool           glyph_transformed;
+    FT_Matrix         glyph_matrix;
+    FT_Vector         glyph_delta;
+  
+  } FT_GlyphSlot_InternalRec;
 
   /*************************************************************************/
   /*************************************************************************/
--- a/src/autohint/ahhint.c
+++ b/src/autohint/ahhint.c
@@ -1286,12 +1286,12 @@
       /* XXX: TO DO - slot->linearHoriAdvance */
 
       /* now copy outline into glyph slot */
-      ah_loader_rewind( slot->loader );
-      error = ah_loader_copy_points( slot->loader, gloader );
+      ah_loader_rewind( slot->internal->loader );
+      error = ah_loader_copy_points( slot->internal->loader, gloader );
       if ( error )
         goto Exit;
 
-      slot->outline = slot->loader->base.outline;
+      slot->outline = slot->internal->loader->base.outline;
       slot->format  = ft_glyph_format_outline;
     }
 
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -674,16 +674,23 @@
     FT_Driver_Class*  clazz  = driver->clazz;
     FT_Memory         memory = driver->root.memory;
     FT_Error          error  = FT_Err_Ok;
+    FT_Slot_Internal  internal;
 
 
     slot->library = driver->root.library;
 
+    if ( ALLOC( internal, sizeof( *internal ) ) )
+      goto Exit;
+
+    slot->internal = internal;
+
     if ( FT_DRIVER_USES_OUTLINES( driver ) )
-      error = FT_GlyphLoader_New( memory, &slot->loader );
+      error = FT_GlyphLoader_New( memory, &internal->loader );
 
     if ( !error && clazz->init_slot )
       error = clazz->init_slot( slot );
 
+  Exit:
     return error;
   }
 
@@ -728,6 +735,9 @@
     FT_Memory         memory = driver->root.memory;
 
 
+    if ( clazz->done_slot )
+      clazz->done_slot( slot );
+
     /* free bitmap buffer if needed */
     if ( slot->flags & ft_glyph_own_bitmap )
       FREE( slot->bitmap.buffer );
@@ -735,12 +745,11 @@
     /* free glyph loader */
     if ( FT_DRIVER_USES_OUTLINES( driver ) )
     {
-      FT_GlyphLoader_Done( slot->loader );
-      slot->loader = 0;
+      FT_GlyphLoader_Done( slot->internal->loader );
+      slot->internal->loader = 0;
     }
 
-    if ( clazz->done_slot )
-      clazz->done_slot( slot );
+    FREE( slot->internal );
   }
 
 
@@ -876,40 +885,45 @@
                                            FT_Matrix*  matrix,
                                            FT_Vector*  delta )
   {
+    FT_Face_Internal  internal;
+    
+
     if ( !face )
       return;
 
-    face->transform_flags = 0;
+    internal = face->internal;
 
+    internal->transform_flags = 0;
+
     if ( !matrix )
     {
-      face->transform_matrix.xx = 0x10000L;
-      face->transform_matrix.xy = 0;
-      face->transform_matrix.yx = 0;
-      face->transform_matrix.yy = 0x10000L;
-      matrix = &face->transform_matrix;
+      internal->transform_matrix.xx = 0x10000L;
+      internal->transform_matrix.xy = 0;
+      internal->transform_matrix.yx = 0;
+      internal->transform_matrix.yy = 0x10000L;
+      matrix = &internal->transform_matrix;
     }
     else
-      face->transform_matrix = *matrix;
+      internal->transform_matrix = *matrix;
 
     /* set transform_flags bit flag 0 if `matrix' isn't the identity */
     if ( ( matrix->xy | matrix->yx ) ||
          matrix->xx != 0x10000L      ||
          matrix->yy != 0x10000L      )
-      face->transform_flags |= 1;
+      internal->transform_flags |= 1;
 
     if ( !delta )
     {
-      face->transform_delta.x = 0;
-      face->transform_delta.y = 0;
-      delta = &face->transform_delta;
+      internal->transform_delta.x = 0;
+      internal->transform_delta.y = 0;
+      delta = &internal->transform_delta;
     }
     else
-      face->transform_delta = *delta;
+      internal->transform_delta = *delta;
 
     /* set transform_flags bit flag 1 if `delta' isn't the null vector */
     if ( delta->x | delta->y )
-      face->transform_flags |= 2;
+      internal->transform_flags |= 2;
   }
 
 
@@ -1044,8 +1058,11 @@
 
     if ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) == 0 )
     {
+      FT_Face_Internal  internal = face->internal;
+      
+      
       /* now, transform the glyph image if needed */
-      if ( face->transform_flags )
+      if ( internal->transform_flags )
       {
         /* get renderer */
         FT_Renderer  renderer = ft_lookup_glyph_renderer( slot );
@@ -1053,10 +1070,10 @@
 
         if ( renderer )
           error = renderer->clazz->transform_glyph( renderer, slot,
-                                                    &face->transform_matrix,
-                                                    &face->transform_delta );
+                                                    &internal->transform_matrix,
+                                                    &internal->transform_delta );
         /* transform advance */
-        FT_Vector_Transform( &slot->advance, &face->transform_matrix );
+        FT_Vector_Transform( &slot->advance, &internal->transform_matrix );
       }
     }
 
@@ -1147,6 +1164,7 @@
     if ( driver->clazz->done_size )
       driver->clazz->done_size( size );
 
+    FREE( size->internal );
     FREE( size );
   }
 
@@ -1190,6 +1208,7 @@
       ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
 
     /* get rid of it */
+    FREE( face->internal );
     FREE( face );
   }
 
@@ -1228,6 +1247,7 @@
     FT_Driver_Class*  clazz;
     FT_Face           face = 0;
     FT_Error          error;
+    FT_Face_Internal  internal;
 
 
     clazz  = driver->clazz;
@@ -1237,10 +1257,15 @@
     if ( ALLOC( face, clazz->face_object_size ) )
       goto Fail;
 
-    face->driver = driver;
-    face->memory = memory;
-    face->stream = stream;
+    if ( ALLOC( internal, sizeof(*internal) ) )
+      goto Fail;
+      
+    face->internal = internal;
 
+    face->driver   = driver;
+    face->memory   = memory;
+    face->stream   = stream;
+
     error = clazz->init_face( stream,
                               face,
                               face_index,
@@ -1255,6 +1280,7 @@
     if ( error )
     {
       clazz->done_face( face );
+      FREE( face->internal );
       FREE( face );
       *aface = 0;
     }
@@ -1574,14 +1600,19 @@
       face->size = size;
     }
 
-    /* initialize transformation for convenience functions */
-    face->transform_matrix.xx = 0x10000L;
-    face->transform_matrix.xy = 0;
-    face->transform_matrix.yx = 0;
-    face->transform_matrix.yy = 0x10000L;
+    /* initialize internal face data */
+    {
+      FT_Face_Internal  internal = face->internal;
+      
 
-    face->transform_delta.x = 0;
-    face->transform_delta.y = 0;
+      internal->transform_matrix.xx = 0x10000L;
+      internal->transform_matrix.xy = 0;
+      internal->transform_matrix.yx = 0;
+      internal->transform_matrix.yy = 0x10000L;
+  
+      internal->transform_delta.x = 0;
+      internal->transform_delta.y = 0;
+    }
 
     *aface = face;
     goto Exit;
@@ -1809,6 +1840,9 @@
       goto Exit;
 
     size->face = face;
+    
+    /* for now, do not use any internal fields in size objects */
+    size->internal = 0;
 
     if ( clazz->init_size )
       error = clazz->init_size( size );
@@ -2037,6 +2071,21 @@
   /*                                                                       */
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    the values of "pixel_width" and "pixel_height" correspond to       */
+  /*    the pixel values of the _typographic_ character size, which are    */
+  /*    NOT necessarily the same as the dimensions of the glyph            */
+  /*    "bitmap cells".                                                    */
+  /*                                                                       */
+  /*    The "character size" is really the size of an abstract square      */
+  /*    called the "EM", used to design the font. However, depending       */
+  /*    on the font design, glyphs will be smaller or greater than the     */
+  /*    EM.                                                                */
+  /*                                                                       */
+  /*    this means that setting the pixel size to 8x8 doesn't guarantee    */
+  /*    in any way that you'll end up with glyph bitmaps that all fit      */
+  /*    within an 8x8 cell.. far from it..                                 */
   /*                                                                       */
   FT_EXPORT_DEF( FT_Error )  FT_Set_Pixel_Sizes( FT_Face  face,
                                                  FT_UInt  pixel_width,
--- a/src/cff/t2gload.c
+++ b/src/cff/t2gload.c
@@ -243,7 +243,7 @@
 
     if ( glyph )
     {
-      FT_GlyphLoader*  loader = glyph->root.loader;
+      FT_GlyphLoader*  loader = glyph->root.internal->loader;
 
 
       builder->loader  = loader;
--- a/src/cid/cidgload.c
+++ b/src/cid/cidgload.c
@@ -264,12 +264,15 @@
       /* advance width                                           */
       if ( load_flags & FT_LOAD_NO_RECURSE )
       {
+        FT_Slot_Internal  internal = glyph->root.internal;
+        
+        
         glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
         glyph->root.metrics.horiAdvance  = decoder.builder.advance.x;
 
-        glyph->root.glyph_matrix         = font_matrix;
-        glyph->root.glyph_delta          = font_offset;
-        glyph->root.glyph_transformed    = 1;
+        internal->glyph_matrix         = font_matrix;
+        internal->glyph_delta          = font_offset;
+        internal->glyph_transformed    = 1;
       }
       else
       {
@@ -280,7 +283,7 @@
         /* copy the _unscaled_ advance width */
         metrics->horiAdvance          = decoder.builder.advance.x;
         glyph->root.linearHoriAdvance = decoder.builder.advance.x;
-        glyph->root.glyph_transformed = 0;
+        glyph->root.internal->glyph_transformed = 0;
 
         /* make up vertical metrics */
         metrics->vertBearingX = 0;
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -269,8 +269,8 @@
         root->underline_position  = face->cid.font_info.underline_position;
         root->underline_thickness = face->cid.font_info.underline_thickness;
 
-        root->max_points   = 0;
-        root->max_contours = 0;
+        root->internal->max_points   = 0;
+        root->internal->max_contours = 0;
       }
     }
 
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -1076,7 +1076,7 @@
 
     if ( glyph )
     {
-      FT_GlyphLoader*  loader = glyph->loader;
+      FT_GlyphLoader*  loader = glyph->internal->loader;
 
 
       builder->loader  = loader;
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -222,7 +222,7 @@
     if ( decoder->builder.no_recurse )
     {
       FT_GlyphSlot     glyph  = (FT_GlyphSlot)decoder->builder.glyph;
-      FT_GlyphLoader*  loader = glyph->loader;
+      FT_GlyphLoader*  loader = glyph->internal->loader;
       FT_SubGlyph*     subg;
 
 
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -583,11 +583,11 @@
 
     face->root.num_glyphs = maxProfile->numGlyphs;
 
-    face->root.max_points = MAX( maxProfile->maxCompositePoints,
-                                 maxProfile->maxPoints );
+    face->root.internal->max_points = MAX( maxProfile->maxCompositePoints,
+                                           maxProfile->maxPoints );
 
-    face->root.max_contours = MAX( maxProfile->maxCompositeContours,
-                                   maxProfile->maxContours );
+    face->root.internal->max_contours = MAX( maxProfile->maxCompositeContours,
+                                             maxProfile->maxContours );
 
     face->max_components = (FT_ULong)maxProfile->maxComponentElements +
                            maxProfile->maxComponentDepth;
@@ -599,8 +599,8 @@
 
     /* We also increase maxPoints and maxContours in order to support */
     /* some broken fonts.                                             */
-    face->root.max_points   += 8;
-    face->root.max_contours += 4;
+    face->root.internal->max_points   += 8;
+    face->root.internal->max_contours += 4;
 
     FT_TRACE2(( "MAXP loaded.\n" ));
 
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -1127,8 +1127,8 @@
       glyph->outline.flags &= ~ft_outline_single_pass;
 
       /* copy outline to our glyph slot */
-      FT_GlyphLoader_Copy_Points( glyph->loader, loader->gloader );
-      glyph->outline = glyph->loader->base.outline;
+      FT_GlyphLoader_Copy_Points( glyph->internal->loader, loader->gloader );
+      glyph->outline = glyph->internal->loader->base.outline;
 
       /* translate array so that (0,0) is the glyph's origin */
       FT_Outline_Translate( &glyph->outline, -loader->pp1.x, 0 );
--- a/src/type1/t1gload.c
+++ b/src/type1/t1gload.c
@@ -214,11 +214,14 @@
       /* advance width                                           */
       if ( load_flags & FT_LOAD_NO_RECURSE )
       {
+        FT_Slot_Internal  internal = glyph->root.internal;
+        
+        
         glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
         glyph->root.metrics.horiAdvance  = decoder.builder.advance.x;
-        glyph->root.glyph_matrix         = font_matrix;
-        glyph->root.glyph_delta          = font_offset;
-        glyph->root.glyph_transformed    = 1;
+        internal->glyph_matrix         = font_matrix;
+        internal->glyph_delta          = font_offset;
+        internal->glyph_transformed    = 1;
       }
       else
       {
@@ -229,7 +232,7 @@
         /* copy the _unscaled_ advance width */
         metrics->horiAdvance          = decoder.builder.advance.x;
         glyph->root.linearHoriAdvance = decoder.builder.advance.x;
-/*        glyph->root.transformed       = 0; */
+        glyph->root.internal->glyph_transformed = 0;
 
         /* make up vertical metrics */
         metrics->vertBearingX = 0;
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -292,8 +292,8 @@
       root->underline_position  = face->type1.font_info.underline_position;
       root->underline_thickness = face->type1.font_info.underline_thickness;
 
-      root->max_points   = 0;
-      root->max_contours = 0;
+      root->internal->max_points   = 0;
+      root->internal->max_contours = 0;
     }
 
     /* charmap support -- synthetize unicode charmap if possible */