freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 75e17ae: [ftgrid] Accept bitmap fonts.


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master 75e17ae: [ftgrid] Accept bitmap fonts.
Date: Wed, 9 May 2018 21:37:43 -0400 (EDT)

branch: master
commit 75e17aebca321b778bdaf44bb0dab49847689461
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [ftgrid] Accept bitmap fonts.
    
    * src/ftgrid.c (main): Accept bitmap fonts.
    (grid_status_draw_outline): Do bitmap for any font.
    (grid_status_rescale_initial): Bitmap-compatible improved layout.
---
 ChangeLog    |  8 ++++++
 src/ftgrid.c | 83 ++++++++++++++++++++++++++----------------------------------
 2 files changed, 44 insertions(+), 47 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8f5eb0a..dab4800 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2018-05-09  Alexei Podtelezhnikov  <address@hidden>
+
+       [ftgrid] Accept bitmap fonts.
+
+       * src/ftgrid.c (main): Accept bitmap fonts.
+       (grid_status_draw_outline): Do bitmap for any font.
+       (grid_status_rescale_initial): Bitmap-compatible improved layout.
+
 2018-05-08  Alexei Podtelezhnikov  <address@hidden>
 
        * src/ftgrid.c (main): Fail to open font earlier.
diff --git a/src/ftgrid.c b/src/ftgrid.c
index 4315573..288f400 100644
--- a/src/ftgrid.c
+++ b/src/ftgrid.c
@@ -236,26 +236,19 @@
   {
     FT_Size     size;
     FT_Error    err    = FTDemo_Get_Size( handle, &size );
-    FT_F26Dot6  margin = 4;
+    FT_F26Dot6  margin = 6;
 
 
     if ( !err )
     {
-      FT_Face  face = size->face;
-
-      int  xmin = FT_MulFix( face->bbox.xMin, size->metrics.x_scale );
-      int  ymin = FT_MulFix( face->bbox.yMin, size->metrics.y_scale );
-      int  xmax = FT_MulFix( face->bbox.xMax, size->metrics.x_scale );
-      int  ymax = FT_MulFix( face->bbox.yMax, size->metrics.y_scale );
+      int  xmin = 0;
+      int  ymin = size->metrics.descender;
+      int  xmax = size->metrics.max_advance;
+      int  ymax = size->metrics.ascender;
 
       FT_F26Dot6  x_scale, y_scale;
 
 
-      xmin &= ~63;
-      ymin &= ~63;
-      xmax  = ( xmax + 63 ) & ~63;
-      ymax  = ( ymax + 63 ) & ~63;
-
       if ( xmax - xmin )
         x_scale = st->disp_width  * ( 64 - 2 * margin ) / ( xmax - xmin );
       else
@@ -271,8 +264,8 @@
       else
         st->scale = y_scale;
 
-      st->x_origin = st->disp_width  * margin          - xmin * st->scale;
-      st->y_origin = st->disp_height * ( 64 - margin ) + ymin * st->scale;
+      st->x_origin = 32 * st->disp_width  - ( xmax + xmin ) * st->scale / 2;
+      st->y_origin = 32 * st->disp_height + ( ymax + ymin ) * st->scale / 2;
     }
     else
     {
@@ -721,6 +714,8 @@
                         handle->load_flags | FT_LOAD_NO_BITMAP ) )
       return;
 
+    slot = size->face->glyph;
+
     if ( st->do_grid )
     {
       /* show advance width */
@@ -747,42 +742,41 @@
                    st->axis_color );
     }
 
-    slot = size->face->glyph;
-    if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
+    /* render scaled bitmap */
+    if ( st->work & DO_BITMAP )
     {
-      FT_Glyph     glyph;
-      FT_Outline*  gimage = &slot->outline;
-      int          nn;
+      FT_Glyph        glyph, glyf;
+      int             left, top, x_advance, y_advance;
+      grBitmap        bitg;
 
 
-      /* render scaled bitmap */
-      if ( st->work & DO_BITMAP )
-      {
-        int             left, top, x_advance, y_advance;
-        grBitmap        bitg;
-        FT_Glyph        glyf;
+      FT_Get_Glyph( slot, &glyph );
+      error  = FTDemo_Glyph_To_Bitmap( handle, glyph, &bitg, &left, &top,
+                                       &x_advance, &y_advance, &glyf);
 
+      if ( !error )
+      {
+        bitmap_scale( &bitg, scale );
 
-        FT_Get_Glyph( slot, &glyph );
-        error  = FTDemo_Glyph_To_Bitmap( handle, glyph, &bitg, &left, &top,
-                                         &x_advance, &y_advance, &glyf);
+        grBlitGlyphToBitmap( display->bitmap, &bitg,
+                             ox + left * scale, oy - top * scale,
+                             st->axis_color );
 
-        if ( !error )
-        {
-          bitmap_scale( &bitg, scale );
+        free( bitg.buffer );
 
-          grBlitGlyphToBitmap( display->bitmap, &bitg,
-                               ox + left * scale, oy - top * scale,
-                               st->axis_color );
+        if ( glyf )
+          FT_Done_Glyph( glyf );
+      }
 
-          free( bitg.buffer );
+      FT_Done_Glyph( glyph );
+    }
 
-          if ( glyf )
-            FT_Done_Glyph( glyf );
-        }
+    if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
+    {
+      FT_Glyph     glyph;
+      FT_Outline*  gimage = &slot->outline;
+      int          nn;
 
-        FT_Done_Glyph( glyph );
-      }
 
       /* scale the outline */
       for ( nn = 0; nn < gimage->n_points; nn++ )
@@ -2044,13 +2038,8 @@
                       FT_STROKER_LINEJOIN_BEVEL, 0x20000 );
 
     for ( ; argc > 0; argc--, argv++ )
-    {
-      error = FTDemo_Install_Font( handle, argv[0], 1,
-                                   status.no_named_instances ? 1 : 0 );
-      if ( error == FT_Err_Invalid_Argument )
-        fprintf( stderr, "skipping font `%s' without outlines\n",
-                         argv[0] );
-    }
+      FTDemo_Install_Font( handle, argv[0], 0,
+                           status.no_named_instances ? 1 : 0 );
 
     if ( handle->num_fonts == 0 )
       Fatal( "could not find/open any font file" );



reply via email to

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