freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] sdf 391a87f 2/9: [ftsdf] Handle some events.


From: Werner LEMBERG
Subject: [freetype2-demos] sdf 391a87f 2/9: [ftsdf] Handle some events.
Date: Tue, 22 Dec 2020 12:07:35 -0500 (EST)

branch: sdf
commit 391a87f50f0fba78999e9b59f4696fe1c891dcba
Author: Anuj Verma <anujv@iitbhilai.ac.in>
Commit: Werner Lemberg <wl@gnu.org>

    [ftsdf] Handle some events.
    
    * src/ftsdf.c (event_font_update, event_color_change, event_help):
    New functions.
---
 ChangeLog   |   7 ++++
 src/ftsdf.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 138 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 6d13a0f..2363018 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2020-08-22  Anuj Verma  <anujv@iitbhilai.ac.in>
 
+       [ftsdf] Handle some events.
+
+       * src/ftsdf.c (event_font_update, event_color_change, event_help):
+       New functions.
+
+2020-08-22  Anuj Verma  <anujv@iitbhilai.ac.in>
+
        [ftsdf] New demo program to view SDF glyphs.
 
        * src/ftsdf.c: New file, with first templates.
diff --git a/src/ftsdf.c b/src/ftsdf.c
index dd8e688..6095dd8 100644
--- a/src/ftsdf.c
+++ b/src/ftsdf.c
@@ -69,4 +69,135 @@
     /* edge              */ 0.2f
   };
 
+
+  /* This event is triggered when rasterizer properties, */
+  /* the glyph index or the glyph size is updated.       */
+  static FT_Error
+  event_font_update( void )
+  {
+    FT_Error  err = FT_Err_Ok;
+
+    clock_t  start, end;
+
+
+    /* Set various properties of the renderers. */
+    FT_CALL( FT_Property_Set( handle->library, "bsdf", "spread",
+                              &status.spread ) );
+    FT_CALL( FT_Property_Set( handle->library, "sdf", "spread",
+                              &status.spread ) );
+    FT_CALL( FT_Property_Set( handle->library, "sdf", "overlaps",
+                              &status.overlaps ) );
+
+    /* Set pixel size and load the glyph index. */
+    FT_CALL( FT_Set_Pixel_Sizes( status.face, 0, status.ptsize ) );
+    FT_CALL( FT_Load_Glyph( status.face, status.glyph_index,
+                            FT_LOAD_DEFAULT ) );
+
+    /* This is just to measure the generation time. */
+    start = clock();
+
+    /* Finally render the glyph.  To force the 'bsdf' renderer (i.e., to */
+    /* generate SDF from bitmap) we must render the glyph first using    */
+    /* the smooth or the monochrome FreeType rasterizer.                 */
+    if ( status.use_bitmap )
+      FT_CALL( FT_Render_Glyph( status.face->glyph,
+               FT_RENDER_MODE_NORMAL ) );
+    FT_CALL( FT_Render_Glyph( status.face->glyph, FT_RENDER_MODE_SDF ) );
+
+    /* Compute and print the generation time. */
+    end = clock();
+
+    status.generation_time = ( (float)( end - start ) /
+                               (float)CLOCKS_PER_SEC ) * 1000.0f;
+
+    printf( "Generation Time: %.0f ms\n", status.generation_time );
+
+  Exit:
+    return err;
+  }
+
+
+  /* This event is triggered when we create a new display. */
+  /* We set various colors for the display buffer.         */
+  static void
+  event_color_change( void )
+  {
+    display->back_color = grFindColor( display->bitmap,
+                                       0, 0, 0, 0xff );
+    display->fore_color = grFindColor( display->bitmap,
+                                       255, 255, 255, 0xff );
+    display->warn_color = grFindColor( display->bitmap,
+                                       0, 255, 255, 0xff );
+  }
+
+
+  /* This event is triggered when the user presses the help */
+  /* screen button (either key '?' or F1).  It basically    */
+  /* prints the list of keys along with their usage to the  */
+  /* display window.                                        */
+  static void
+  event_help( void )
+  {
+    grEvent  dummy;
+
+
+    /* For the help screen we use a slightly gray color instead of */
+    /* a completely black background.                              */
+    display->back_color = grFindColor( display->bitmap,
+                                       30, 30, 30, 0xff );
+    FTDemo_Display_Clear( display );
+    display->back_color = grFindColor( display->bitmap,
+                                       0, 0, 0, 0xff );
+
+    /* Set some properties. */
+    grSetLineHeight( 10 );
+    grGotoxy( 0, 0 );
+    grSetMargin( 2, 1 );
+
+    /* Set the text color (kind of purple). */
+    grGotobitmapColor( display->bitmap, 204, 153, 204, 255 );
+
+    /* Print the keys and usage. */
+    grWriteln( "Signed Distance Field Viewer" );
+    grLn();
+    grWriteln( "Use the following keys:" );
+    grWriteln( "-----------------------" );
+    grLn();
+    grWriteln( "  F1 or ? or /       : display this help screen" );
+    grLn();
+    grWriteln( "  b                  : Toggle between bitmap/outline to be 
used for generating" );
+    grLn();
+    grWriteln( "  z, x               : Zoom/Scale Up and Down" );
+    grLn();
+    grWriteln( "  Up, Down Arrow     : Adjust glyph's point size by 1" );
+    grWriteln( "  PgUp, PgDn         : Adjust glyph's point size by 25" );
+    grLn();
+    grWriteln( "  Left, Right Arrow  : Adjust glyph index by 1" );
+    grWriteln( "  F5, F6             : Adjust glyph index by 50" );
+    grWriteln( "  F7, F8             : Adjust glyph index by 500" );
+    grLn();
+    grWriteln( "  o, l               : Adjust spread size by 1" );
+    grLn();
+    grWriteln( "  w, s               : Move glyph Up/Down" );
+    grWriteln( "  a, d               : Move glyph Left/right" );
+    grLn();
+    grWriteln( "  f                  : Toggle between bilinear/nearest 
filtering" );
+    grLn();
+    grWriteln( "  m                  : Toggle overlapping support" );
+    grLn();
+    grWriteln( "Reconstructing Image from SDF" );
+    grWriteln( "-----------------------------" );
+    grWriteln( "  r                  : Toggle between reconstruction/raw view" 
);
+    grWriteln( "  i, k               : Adjust width by 1 (makes the text 
bolder/thinner)" );
+    grWriteln( "  u, j               : Adjust edge by 1 (makes the text 
smoother/sharper)" );
+    grLn();
+    grWriteln( "press any key to exit this help screen" );
+
+    /* Now wait till any key press, otherwise the help screen */
+    /* only blinks and disappears.                            */
+    grRefreshSurface( display->surface );
+    grListenSurface( display->surface, gr_event_key, &dummy );
+  }
+
+
 /* END */



reply via email to

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