freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] parthw-cleaned 539bd3c 1/3: [gf] Use Unicode charmap and mod


From: Parth Wazurkar
Subject: [freetype2] parthw-cleaned 539bd3c 1/3: [gf] Use Unicode charmap and modify slot metric values.
Date: Sat, 7 Jul 2018 13:09:13 -0400 (EDT)

branch: parthw-cleaned
commit 539bd3cea35b5db6a806849fe3f92fe3e6be14da
Author: Parth Wazurkar <address@hidden>
Commit: Parth Wazurkar <address@hidden>

    [gf] Use Unicode charmap and modify slot metric values.
    
    * src/gf/gfdrivr.c(GF_Face_Init): Use Unicode charmap and
    modify FT_Bitmap_Size values.
    
    * src/gf/gfdrivr.c(GF_Glyph_Load): Modify FT_GlyphSlot and
    FT_Bitmap values.
---
 src/gf/gfdrivr.c | 78 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 41 insertions(+), 37 deletions(-)

diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c
index de156c4..cc2aa95 100644
--- a/src/gf/gfdrivr.c
+++ b/src/gf/gfdrivr.c
@@ -154,14 +154,14 @@
                  FT_Parameter*  params )
   {
     GF_Face     face   = (GF_Face)gfface;
-    FT_Error    error;
+    FT_Error    error  = FT_Err_Ok;
     FT_Memory   memory = FT_FACE_MEMORY( face );
-    GF_Glyph    go;
+    GF_Glyph    go=NULL;
     FT_UInt16   i,count;
 
     FT_UNUSED( num_params );
     FT_UNUSED( params );
-    go=NULL;
+
 
     FT_TRACE2(( "GF driver\n" ));
 
@@ -175,6 +175,7 @@
     else if ( error )
       goto Exit;
 
+    /* we have a gf font: let's construct the face object */
     face->gf_glyph = go ;
 
     /* sanity check */
@@ -219,7 +220,7 @@
     }
     gfface->num_glyphs      = (FT_Long)count;
 
-    FT_TRACE4(( "  number of glyphs: allocated %d\n",gfface->num_glyphs));
+    FT_TRACE4(( "  number of glyphs: allocated %d\n",gfface->num_glyphs ));
 
     if ( gfface->num_glyphs <= 0 )
     {
@@ -234,26 +235,27 @@
 
     {
       FT_Bitmap_Size*  bsize = gfface->available_sizes;
+      FT_UShort        x_res, y_res;
 
-      bsize->width  = (FT_Short) face->gf_glyph->font_bbx_w ;
       bsize->height = (FT_Short) face->gf_glyph->font_bbx_h ;
-      bsize->size   = (FT_Pos)   face->gf_glyph->ds         ; /* Preliminary 
to be checked for 26.6 fractional points*/
+      bsize->width  = (FT_Short) face->gf_glyph->font_bbx_w ;
+      bsize->size   = (FT_Pos)   face->gf_glyph->ds << 6    ;
 
-      /*x_res =  ;  To be Checked for x_resolution and y_resolution
-      y_res =  ;*/
+      x_res = toint( go->hppp * 72.27 );
+      y_res = toint( go->vppp * 72.27 );
 
-      bsize->y_ppem = (FT_Pos)face->gf_glyph->font_bbx_yoff ;
-      bsize->x_ppem = (FT_Pos)face->gf_glyph->font_bbx_xoff ;
+      bsize->y_ppem = (FT_Pos)(bsize->size/10) << 6 ;
+      bsize->x_ppem = (FT_Pos)bsize->y_ppem ;
     }
 
     /* Charmaps */
     {
       FT_CharMapRec  charmap;
 
-      charmap.encoding    = FT_ENCODING_NONE;
-      /* initial platform/encoding should indicate unset status? */
-      charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;  /*Preliminary */
-      charmap.encoding_id = TT_APPLE_ID_DEFAULT;
+      /* Unicode Charmap */
+      charmap.encoding    = FT_ENCODING_UNICODE;
+      charmap.platform_id = TT_PLATFORM_MICROSOFT;
+      charmap.encoding_id = TT_MS_ID_UNICODE_CS;
       charmap.face        = FT_FACE( face );
 
       error = FT_CMap_New( &gf_cmap_class, NULL, &charmap, NULL );
@@ -261,6 +263,7 @@
       if ( error )
         goto Fail;
     }
+
     if ( go->code_max < go->code_min )
     {
       FT_TRACE2(( "invalid number of glyphs\n" ));
@@ -279,16 +282,15 @@
   GF_Size_Select(  FT_Size   size,
                    FT_ULong  strike_index )
   {
-    GF_Face        face   = (GF_Face)size->face;
-
+    GF_Face     face  = (GF_Face)size->face;
+    GF_Glyph    go    = face->gf_glyph;
     FT_UNUSED( strike_index );
 
-
     FT_Select_Metrics( size->face, 0 );
 
-    size->metrics.ascender    = face->gf_glyph->font_bbx_xoff    * 64;
-    size->metrics.descender   = face->gf_glyph->font_bbx_yoff    * 64;
-    size->metrics.max_advance = face->gf_glyph->font_bbx_w       * 64;
+    size->metrics.ascender    = (go->font_bbx_h - go->font_bbx_yoff) * 64;
+    size->metrics.descender   = -go->font_bbx_yoff * 64;
+    size->metrics.max_advance = go->font_bbx_w * 64;
 
     return FT_Err_Ok;
 
@@ -315,7 +317,7 @@
       break;
 
     case FT_SIZE_REQUEST_TYPE_REAL_DIM:
-      if ( height == face->gf_glyph->font_bbx_h )  /* Preliminary */
+      if ( height == face->gf_glyph->font_bbx_h )
         error = FT_Err_Ok;
       break;
 
@@ -342,14 +344,14 @@
     FT_Face      face   = FT_FACE( gf );
     FT_Error     error  = FT_Err_Ok;
     FT_Bitmap*   bitmap = &slot->bitmap;
-    GF_BitmapRec bm ;
-    GF_Glyph    go;
+    GF_BitmapRec bm;
+    GF_Glyph     go;
+    FT_Int       ascent;
 
     go = gf->gf_glyph;
 
     FT_UNUSED( load_flags );
 
-
     if ( !face )
     {
       error = FT_THROW( Invalid_Face_Handle );
@@ -382,11 +384,12 @@
       goto Exit;
     }
 
-    /* slot, bitmap => freetype, glyph => gflib */
+    /* slot, bitmap => freetype, bm => gflib */
     bm = gf->gf_glyph->bm_table[glyph_index];
 
-    bitmap->rows  = bm.mv_y   ; /* Prelimiary */
-    bitmap->width = bm.mv_x   ; /* Prelimiary */
+    bitmap->rows       = bm.bbx_height / go->vppp;
+    bitmap->width      = bm.bbx_width  / go->hppp;
+    bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
 
     if ( !bm.raster )
     {
@@ -395,21 +398,22 @@
       goto Exit;
     }
 
-    bitmap->pitch = bm.raster ; /* Prelimiary */
+    bitmap->pitch = (int)bm.raster ;
 
     /* note: we don't allocate a new array to hold the bitmap; */
     /*       we can simply point to it                         */
-    ft_glyphslot_set_bitmap( slot, bm.bitmap ); /* TO CHECK for column and 
row? like winfont.*/
+    ft_glyphslot_set_bitmap( slot, bm.bitmap );
 
+    ascent = (bm.bbx_height + bm.off_y) / go->vppp;
     slot->format      = FT_GLYPH_FORMAT_BITMAP;
-    slot->bitmap_left = bm.off_x ; /* Prelimiary */
-    slot->bitmap_top  = bm.off_y ; /* Prelimiary */
-
-    slot->metrics.horiAdvance  = (FT_Pos) bm.bbx_width - bm.off_x       ; /* 
Prelimiary */
-    slot->metrics.horiBearingX = (FT_Pos) bm.off_x                      ; /* 
Prelimiary */
-    slot->metrics.horiBearingY = (FT_Pos) bm.off_y                      ; /* 
Prelimiary */
-    slot->metrics.width        = (FT_Pos) ( bitmap->width * 64 )        ; /* 
Prelimiary */
-    slot->metrics.height       = (FT_Pos) ( bitmap->rows * 64 )         ; /* 
Prelimiary */
+    slot->bitmap_left = bm.off_x / go->hppp;
+    slot->bitmap_top  = ascent ;
+
+    slot->metrics.horiAdvance  = (FT_Pos) bm.mv_x * 64;
+    slot->metrics.horiBearingX = (FT_Pos) bm.off_x * 64;
+    slot->metrics.horiBearingY = (FT_Pos) ascent * 64;
+    slot->metrics.width        = (FT_Pos) ( bitmap->width * 64 );
+    slot->metrics.height       = (FT_Pos) ( bitmap->rows * 64 );
 
     ft_synthesize_vertical_metrics( &slot->metrics, bm.bbx_height * 64 );
 



reply via email to

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