freetype-devel
[Top][All Lists]
Advanced

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

[ft-devel] adjustable stroker radius


From: Alexei Podtelezhnikov
Subject: [ft-devel] adjustable stroker radius
Date: Fri, 17 Aug 2012 21:57:13 -0400

Hi All,

I'd like to introduce adjustable stroking radius to ftview
functionalities. This is a patch. Please comment.

diff --git a/src/ftview.c b/src/ftview.c
index 0b7bcbd..59dd8cc 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -77,6 +77,7 @@
     double         gamma;
     double         xbold_factor;
     double         ybold_factor;
+    double         radius;
     double         slant;

     int            debug;
@@ -94,7 +95,7 @@
     int            fw_index;

   } status = { RENDER_MODE_ALL, FT_ENCODING_NONE, 72, 48, -1,
-               1.0, 0.04, 0.04, 0.22,
+               1.0, 0.04, 0.04, 0.02, 0.22,
                0, 0, 0, 0, 0, NULL, { 0 }, 0, 0,
                0, { 0x10, 0x40, 0x70, 0x40, 0x10 }, 2 };

@@ -130,6 +131,8 @@
     FT_Face       face;
     FT_GlyphSlot  slot;

+    FT_Fixed  radius;
+

     error = FTDemo_Get_Size( handle, &size );

@@ -143,7 +146,10 @@
     face = size->face;
     slot = face->glyph;

-    FT_Stroker_Set( handle->stroker, 64,
+    radius = status.radius *
+             FT_MulFix( face->units_per_EM, face->size->metrics.y_scale );
+
+    FT_Stroker_Set( handle->stroker, radius,
                     FT_STROKER_LINECAP_ROUND,
                     FT_STROKER_LINEJOIN_ROUND,
                     0 );
@@ -617,6 +623,7 @@
     grLn();
     grWriteln( "  x, X        adjust horizontal emboldening" );
     grWriteln( "  y, Y        adjust vertical emboldening" );
+    grWriteln( "  r, R        adjust stroking radius" );
     grWriteln( "  s, S        adjust slanting" );
     grLn();
     grWriteln( "  F           toggle custom LCD filter mode" );
@@ -755,6 +762,23 @@


   static void
+  event_radius_change( double  delta )
+  {
+    status.radius += delta;
+
+    if ( status.radius > 0.05 )
+      status.radius = 0.05;
+    else if ( status.radius < 0.0 )
+      status.radius = 0.0;
+
+    sprintf( status.header_buffer, "stroking radius changed to %.3f",
+             status.radius );
+
+    status.header = status.header_buffer;
+  }
+
+
+  static void
   event_slant_change( double  delta )
   {
     status.slant += delta;
@@ -992,6 +1016,14 @@
       event_slant_change( -0.02 );
       break;

+    case grKEY( 'r' ):
+      event_radius_change( 0.005 );
+      break;
+
+    case grKEY( 'R' ):
+      event_radius_change( -0.005 );
+      break;
+
     case grKEY( 'x' ):
       event_bold_change( 0.005, 0.0 );
       break;



reply via email to

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