Commit bb59c3c958cac48044dc5ce3c0a393196c627974

Liu Kunpeng(柳鲲鹏) 2022-10-16T22:10:19

* src/base/ftsynth.c (FT_GlyphSlot_Slant): New API with custom slant. * include/freetype/ftsynth.h (FT_GlyphSlot_Slant): Declare it.

diff --git a/include/freetype/ftsynth.h b/include/freetype/ftsynth.h
index afc40b1..013f1cc 100644
--- a/include/freetype/ftsynth.h
+++ b/include/freetype/ftsynth.h
@@ -68,10 +68,15 @@ FT_BEGIN_HEADER
   FT_EXPORT( void )
   FT_GlyphSlot_Embolden( FT_GlyphSlot  slot );
 
-  /* Slant an outline glyph to the right by about 12 degrees. */
+  /* Slant an outline glyph to the right by about 12 degrees.              */
   FT_EXPORT( void )
   FT_GlyphSlot_Oblique( FT_GlyphSlot  slot );
 
+  /* Slant an outline glyph by a given sine of an angle.                   */
+  FT_EXPORT( void )
+  FT_GlyphSlot_Slant( FT_GlyphSlot  slot,
+                      FT_Fixed      slant );
+
   /* */
 
 
diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
index 10bbe0d..fd595e1 100644
--- a/src/base/ftsynth.c
+++ b/src/base/ftsynth.c
@@ -46,6 +46,16 @@
   FT_EXPORT_DEF( void )
   FT_GlyphSlot_Oblique( FT_GlyphSlot  slot )
   {
+    FT_GlyphSlot_Slant( slot, 0x0366A );
+  }
+
+
+  /* documentation is in ftsynth.h */
+
+  FT_EXPORT_DEF( void )
+  FT_GlyphSlot_Slant( FT_GlyphSlot  slot,
+                      FT_Fixed      slant )
+  {
     FT_Matrix    transform;
     FT_Outline*  outline;
 
@@ -61,13 +71,11 @@
 
     /* we don't touch the advance width */
 
-    /* For italic, simply apply a shear transform, with an angle */
-    /* of about 12 degrees.                                      */
-
+    /* For italic, simply apply a shear transform */
     transform.xx = 0x10000L;
     transform.yx = 0x00000L;
 
-    transform.xy = 0x0366AL;
+    transform.xy = slant;
     transform.yy = 0x10000L;
 
     FT_Outline_Transform( outline, &transform );