[10/12] gdi32: Scale outline font metrics
Dmitry Timoshkov
dmitry at codeweavers.com
Tue Jun 24 02:12:50 CDT 2008
Hello,
Changelog:
gdi32: Scale outline font metrics.
---
dlls/gdi32/freetype.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index e185544..f9df27b 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -4921,6 +4921,55 @@ static void scale_font_metrics(const GdiFont *font, LPTEXTMETRICW ptm)
#undef SCALE_Y
}
+static void scale_outline_font_metrics(const GdiFont *font, OUTLINETEXTMETRICW *potm)
+{
+ double scale_x, scale_y;
+
+ if (font->aveWidth)
+ {
+ scale_x = (double)font->aveWidth;
+ scale_x /= (double)font->potm->otmTextMetrics.tmAveCharWidth;
+ }
+ else
+ scale_x = font->scale_y;
+
+ scale_x *= fabs(font->font_desc.matrix.eM11);
+ scale_y = font->scale_y * fabs(font->font_desc.matrix.eM22);
+
+ scale_font_metrics(font, &potm->otmTextMetrics);
+
+#define SCALE_X(x) (x) = GDI_ROUND((double)(x) * (scale_x))
+#define SCALE_Y(y) (y) = GDI_ROUND((double)(y) * (scale_y))
+
+ SCALE_Y(potm->otmAscent);
+ SCALE_Y(potm->otmDescent);
+ SCALE_Y(potm->otmLineGap);
+ SCALE_Y(potm->otmsCapEmHeight);
+ SCALE_Y(potm->otmsXHeight);
+ SCALE_Y(potm->otmrcFontBox.top);
+ SCALE_Y(potm->otmrcFontBox.bottom);
+ SCALE_X(potm->otmrcFontBox.left);
+ SCALE_X(potm->otmrcFontBox.right);
+ SCALE_Y(potm->otmMacAscent);
+ SCALE_Y(potm->otmMacDescent);
+ SCALE_Y(potm->otmMacLineGap);
+ SCALE_X(potm->otmptSubscriptSize.x);
+ SCALE_Y(potm->otmptSubscriptSize.y);
+ SCALE_X(potm->otmptSubscriptOffset.x);
+ SCALE_Y(potm->otmptSubscriptOffset.y);
+ SCALE_X(potm->otmptSuperscriptSize.x);
+ SCALE_Y(potm->otmptSuperscriptSize.y);
+ SCALE_X(potm->otmptSuperscriptOffset.x);
+ SCALE_Y(potm->otmptSuperscriptOffset.y);
+ SCALE_Y(potm->otmsStrikeoutSize);
+ SCALE_Y(potm->otmsStrikeoutPosition);
+ SCALE_Y(potm->otmsUnderscoreSize);
+ SCALE_Y(potm->otmsUnderscorePosition);
+
+#undef SCALE_X
+#undef SCALE_Y
+}
+
/*************************************************************
* WineEngGetTextMetrics
*
@@ -4977,7 +5026,7 @@ UINT WineEngGetOutlineTextMetrics(GdiFont *font, UINT cbSize,
if(cbSize >= font->potm->otmSize)
{
memcpy(potm, font->potm, font->potm->otmSize);
- scale_font_metrics(font, &potm->otmTextMetrics);
+ scale_outline_font_metrics(font, potm);
}
LeaveCriticalSection( &freetype_cs );
return font->potm->otmSize;
@@ -5214,7 +5263,7 @@ UINT WineEngGetOutlineTextMetrics(GdiFont *font, UINT cbSize,
if(potm && needed <= cbSize)
{
memcpy(potm, font->potm, font->potm->otmSize);
- scale_font_metrics(font, &potm->otmTextMetrics);
+ scale_outline_font_metrics(font, potm);
}
end:
--
1.5.5.4
More information about the wine-patches
mailing list