freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] parthw-cleaned 47ba34a 4/6: [gf] * src/gf/gfdrivr.c: Added G


From: Parth Wazurkar
Subject: [freetype2] parthw-cleaned 47ba34a 4/6: [gf] * src/gf/gfdrivr.c: Added GF_Face_Init, GF_Face_Done and GF_Glyph_Load functions.
Date: Tue, 26 Jun 2018 14:01:49 -0400 (EDT)

branch: parthw-cleaned
commit 47ba34ac27a6b24c7918402ae8394bc70c5e3ee3
Author: Parth Wazurkar <address@hidden>
Commit: Parth Wazurkar <address@hidden>

    [gf] * src/gf/gfdrivr.c: Added GF_Face_Init, GF_Face_Done and GF_Glyph_Load 
functions.
---
 src/gf/gfdrivr.c | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 166 insertions(+), 3 deletions(-)

diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c
index ee20b70..c0f4274 100644
--- a/src/gf/gfdrivr.c
+++ b/src/gf/gfdrivr.c
@@ -130,7 +130,18 @@
   FT_CALLBACK_DEF( void )
   GF_Face_Done( FT_Face        gfface )         /* GF_Face */
   {
-    //TO-DO
+    GF_Face    face = (GF_Face)gfface;
+    FT_Memory  memory;
+
+
+    if ( !face )
+      return;
+
+    memory = FT_FACE_MEMORY( face );
+
+    gf_free_font( face->gf_glyph );
+
+    FT_FREE( /*  */ );
   }
 
 
@@ -141,7 +152,107 @@
                  FT_Int         num_params,
                  FT_Parameter*  params )
   {
-    //TO-DO
+    GF_Face   face   = (GF_Face)gfface;
+    FT_Error   error;
+    FT_Memory  memory = FT_FACE_MEMORY( face );
+
+    FT_UNUSED( num_params );
+    FT_UNUSED( params );
+
+    FT_TRACE2(( "GF driver\n" ));
+
+    /* load font */
+    error = gf_load_font( stream, face );
+    if ( !error )
+      goto Exit;
+
+    if ( FT_ERR_EQ( error, Unknown_File_Format ) )
+    {
+      goto Exit
+    }
+
+    /* sanity check */
+    if ( !face-> /*  */ )
+    {
+      FT_TRACE2(( "/*  */" ));
+      error = FT_THROW( Invalid_File_Format );
+      goto Fail;
+    }
+
+    /* we now need to fill the root FT_Face fields */
+    /* with relevant information                   */
+    {
+      FT_Face   root = FT_FACE( face );
+      GF_Face   font = face->font;
+
+
+      root->face_index  = /*  */  ;
+
+      root->face_flags |= /*  */ ;
+
+      /* set up the `fixed_sizes' array */
+      if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
+        goto Fail;
+
+      root->num_fixed_sizes = 1;
+
+      {
+        FT_Bitmap_Size*  bsize = root->available_sizes;
+        FT_UShort        x_res, y_res;
+
+        bsize->width  = (FT_Short) /*  */ ;
+        bsize->height = (FT_Short) /*  */ ;
+        bsize->size   =            /*  */ ;
+
+        x_res = /*  */ ;
+        y_res = /*  */ ;
+
+        bsize->y_ppem = /*  */ ;
+        bsize->x_ppem = /*  */ ;
+      }
+
+      /* Charmaps */
+
+      {
+        FT_CharMapRec  charmap;
+
+
+        charmap.encoding    = FT_ENCODING_NONE;
+        /* initial platform/encoding should indicate unset status? */
+        charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
+        charmap.encoding_id = TT_APPLE_ID_DEFAULT;
+        charmap.face        = root;
+
+        error = FT_CMap_New( gf_cmap_class, NULL, &charmap, NULL );
+
+        if ( error )
+          goto Fail;
+      }
+
+
+      /* reserve one slot for the .notdef glyph at index 0 */
+      root->num_glyphs = /*  */ ;
+
+      root->family_name = /*  */;
+      root->style_name  = /*  */;
+
+      if ( root->style_flags & FT_STYLE_FLAG_BOLD )
+      {
+        if ( root->style_flags & FT_STYLE_FLAG_ITALIC )
+          root->style_name = (char *)"Bold Italic";
+        else
+          root->style_name = (char *)"Bold";
+      }
+      else if ( root->style_flags & FT_STYLE_FLAG_ITALIC )
+        root->style_name = (char *)"Italic";
+    }
+    goto Exit;
+
+  Fail:
+    GF_Face_Done( gfface );
+
+  Exit:
+    return error;
   }
 
   FT_CALLBACK_DEF( FT_Error )
@@ -207,7 +318,59 @@
                   FT_UInt       glyph_index,
                   FT_Int32      load_flags )
   {
-    //TO-DO
+    GF_Face      gf     = (GF_Face)FT_SIZE_FACE( size );
+    FT_Face      face   = FT_FACE( gf );
+    FT_Error     error  = FT_Err_Ok;
+    FT_Bitmap*   bitmap = &slot->bitmap;
+    GF_BitmapRec glyph ;
+
+    FT_UNUSED( load_flags );
+
+
+    if ( !face )
+    {
+      error = FT_THROW( Invalid_Face_Handle );
+      goto Exit;
+    }
+
+    if ( glyph_index >= (FT_UInt)face->num_glyphs )
+    {
+      error = FT_THROW( Invalid_Argument );
+      goto Exit;
+    }
+
+    FT_TRACE1(( "GF_Glyph_Load: glyph index %d\n", glyph_index ));
+
+    if ( glyph_index > 0 )
+      glyph_index--;                           /* revert to real index */
+    else
+      glyph_index = /*  */;                    /* the `.notdef' glyph  */
+
+    /* slot, bitmap => freetype, glyph => gflib */
+    glyph = gf->gf_glyph->bm_table[glyph_index];
+
+    bitmap->rows  = /*  */ ;
+    bitmap->width = /*  */ ;
+    bitmap->pitch = /*  */ ;     /* (In BDF) same as FT_Bitmap.pitch */
+
+    /* note: we don't allocate a new array to hold the bitmap; */
+    /*       we can simply point to it                         */
+    ft_glyphslot_set_bitmap( slot, glyph.bitmap );
+
+    slot->format      = FT_GLYPH_FORMAT_BITMAP;
+    slot->bitmap_left = glyph.bbx.x_offset;
+    slot->bitmap_top  = glyph.bbx.ascent;
+
+    slot->metrics.horiAdvance  = (FT_Pos) /*  */ ;
+    slot->metrics.horiBearingX = (FT_Pos) /*  */ ;
+    slot->metrics.horiBearingY = (FT_Pos) /*  */ ;
+    slot->metrics.width        = (FT_Pos) /*  */ ;
+    slot->metrics.height       = (FT_Pos) /*  */ ;
+
+    ft_synthesize_vertical_metrics( &slot->metrics, /*  */ );
+
+  Exit:
+    return error;
   }
 
 



reply via email to

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