freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] slot-inflate 627f7733b: * src/base/ftsynth.c (FT_GlyphSlot_A


From: Werner Lemberg
Subject: [freetype2] slot-inflate 627f7733b: * src/base/ftsynth.c (FT_GlyphSlot_AdjustWeight): New API.
Date: Thu, 9 Mar 2023 07:45:45 -0500 (EST)

branch: slot-inflate
commit 627f7733bfb1612eaab23b804b2820282ae71b75
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    * src/base/ftsynth.c (FT_GlyphSlot_AdjustWeight): New API.
    * include/freetype/ftsynth.h (FT_GlyphSlot_AdjustWeight): Document it.
---
 include/freetype/ftsynth.h | 12 ++++++++++++
 src/base/ftsynth.c         | 20 ++++++++++++++------
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/include/freetype/ftsynth.h b/include/freetype/ftsynth.h
index 5d1969765..f957376fb 100644
--- a/include/freetype/ftsynth.h
+++ b/include/freetype/ftsynth.h
@@ -68,6 +68,18 @@ FT_BEGIN_HEADER
   FT_EXPORT( void )
   FT_GlyphSlot_Embolden( FT_GlyphSlot  slot );
 
+  /* Change the glyph weight either horizontally or vertically precisely.  */
+  /* The `xdelta` and `ydelta` values are fractions of the face Em size    */
+  /* (in fixed-point format).  Considering that a regular face would have  */
+  /* stem widths on the order of 0.1 Em, a delta of 0.05 (0x0CCC) might be */
+  /* noticeable.  To increase or decrease the weight, use positive or      */
+  /* negative values, respectively.                                        */
+  FT_EXPORT( void )
+  FT_GlyphSlot_AdjustWeight( FT_GlyphSlot  slot,
+                             FT_Fixed      xdelta,
+                             FT_Fixed      ydelta );
+
+
   /* Slant an outline glyph to the right by about 12 degrees.              */
   FT_EXPORT( void )
   FT_GlyphSlot_Oblique( FT_GlyphSlot  slot );
diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
index 6ec25e13e..f002c9637 100644
--- a/src/base/ftsynth.c
+++ b/src/base/ftsynth.c
@@ -97,9 +97,18 @@
 
   FT_EXPORT_DEF( void )
   FT_GlyphSlot_Embolden( FT_GlyphSlot  slot )
+  {
+    FT_GlyphSlot_AdjustWeight( slot, 0x0AAA, 0x0AAA );
+  }
+
+
+  FT_EXPORT_DEF( void )
+  FT_GlyphSlot_AdjustWeight( FT_GlyphSlot  slot,
+                             FT_Fixed      xdelta,
+                             FT_Fixed      ydelta )
   {
     FT_Library  library;
-    FT_Face     face;
+    FT_Size     size;
     FT_Error    error;
     FT_Pos      xstr, ystr;
 
@@ -108,16 +117,15 @@
       return;
 
     library = slot->library;
-    face    = slot->face;
+    size    = slot->face->size;
 
     if ( slot->format != FT_GLYPH_FORMAT_OUTLINE &&
          slot->format != FT_GLYPH_FORMAT_BITMAP  )
       return;
 
-    /* some reasonable strength */
-    xstr = FT_MulFix( face->units_per_EM,
-                      face->size->metrics.y_scale ) / 24;
-    ystr = xstr;
+    /* express deltas in pixels in 26.6 format */
+    xstr = FT_MulFix( (FT_Pos)size->metrics.x_ppem << 6, xdelta );
+    ystr = FT_MulFix( (FT_Pos)size->metrics.y_ppem << 6, ydelta );
 
     if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
       FT_Outline_EmboldenXY( &slot->outline, xstr, ystr );



reply via email to

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