[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 );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] slot-inflate 627f7733b: * src/base/ftsynth.c (FT_GlyphSlot_AdjustWeight): New API.,
Werner Lemberg <=