summaryrefslogtreecommitdiff
path: root/src/sfnt/sfobjs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sfnt/sfobjs.c')
-rw-r--r--src/sfnt/sfobjs.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 796d747cd..bfb079459 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -640,11 +640,23 @@
for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
{
- root->available_sizes[n].width =
- face->sbit_strikes[n].x_ppem;
-
- root->available_sizes[n].height =
- face->sbit_strikes[n].y_ppem;
+ FT_Bitmap_Size* bsize = root->available_sizes + n;
+ TT_SBit_Strike strike = face->sbit_strikes + n;
+ FT_UShort fupem = face->header.Units_Per_EM;
+ FT_Short height = face->horizontal.Ascender -
+ face->horizontal.Descender +
+ face->horizontal.Line_Gap;
+ FT_Short avg = face->os2.xAvgCharWidth;
+
+
+ /* assume 72dpi */
+ bsize->height =
+ (FT_Short)( ( height * strike->y_ppem + fupem/2 ) / fupem );
+ bsize->width =
+ (FT_Short)( ( avg * strike->y_ppem + fupem/2 ) / fupem );
+ bsize->size = strike->y_ppem << 6;
+ bsize->x_ppem = strike->x_ppem << 6;
+ bsize->y_ppem = strike->y_ppem << 6;
}
}
else
@@ -663,7 +675,7 @@
if ( has_outline == TRUE )
{
/* XXX What about if outline header is missing */
- /* (e.g. sfnt wrapped outline)? */
+ /* (e.g. sfnt wrapped bitmap)? */
root->bbox.xMin = face->header.xMin;
root->bbox.yMin = face->header.yMin;
root->bbox.xMax = face->header.xMax;