Alex Henrie : gdi32: Scale outline font metrics as signed integers.

Alexandre Julliard julliard at winehq.org
Tue Dec 19 15:27:09 CST 2017


Module: wine
Branch: master
Commit: d819609255279fbc8d8a0d0b49d47fe35367a2df
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d819609255279fbc8d8a0d0b49d47fe35367a2df

Author: Alex Henrie <alexhenrie24 at gmail.com>
Date:   Mon Dec 18 20:31:06 2017 -0700

gdi32: Scale outline font metrics as signed integers.

Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/font.c     | 10 +++++-----
 dlls/gdi32/freetype.c |  5 +++--
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 3b3f0b5..d059f97 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -1664,16 +1664,16 @@ UINT WINAPI GetOutlineTextMetricsW(
         output->otmTextMetrics.tmOverhang         = width_to_LP( dc, output->otmTextMetrics.tmOverhang );
         output->otmAscent                = height_to_LP( dc, output->otmAscent);
         output->otmDescent               = height_to_LP( dc, output->otmDescent);
-        output->otmLineGap               = abs(INTERNAL_YDSTOWS(dc,output->otmLineGap));
-        output->otmsCapEmHeight          = abs(INTERNAL_YDSTOWS(dc,output->otmsCapEmHeight));
-        output->otmsXHeight              = abs(INTERNAL_YDSTOWS(dc,output->otmsXHeight));
+        output->otmLineGap               = INTERNAL_YDSTOWS(dc, output->otmLineGap);
+        output->otmsCapEmHeight          = INTERNAL_YDSTOWS(dc, output->otmsCapEmHeight);
+        output->otmsXHeight              = INTERNAL_YDSTOWS(dc, output->otmsXHeight);
         output->otmrcFontBox.top         = height_to_LP( dc, output->otmrcFontBox.top);
         output->otmrcFontBox.bottom      = height_to_LP( dc, output->otmrcFontBox.bottom);
         output->otmrcFontBox.left        = width_to_LP( dc, output->otmrcFontBox.left);
         output->otmrcFontBox.right       = width_to_LP( dc, output->otmrcFontBox.right);
         output->otmMacAscent             = height_to_LP( dc, output->otmMacAscent);
         output->otmMacDescent            = height_to_LP( dc, output->otmMacDescent);
-        output->otmMacLineGap            = abs(INTERNAL_YDSTOWS(dc,output->otmMacLineGap));
+        output->otmMacLineGap            = INTERNAL_YDSTOWS(dc, output->otmMacLineGap);
         output->otmptSubscriptSize.x     = width_to_LP( dc, output->otmptSubscriptSize.x);
         output->otmptSubscriptSize.y     = height_to_LP( dc, output->otmptSubscriptSize.y);
         output->otmptSubscriptOffset.x   = width_to_LP( dc, output->otmptSubscriptOffset.x);
@@ -1682,7 +1682,7 @@ UINT WINAPI GetOutlineTextMetricsW(
         output->otmptSuperscriptSize.y   = height_to_LP( dc, output->otmptSuperscriptSize.y);
         output->otmptSuperscriptOffset.x = width_to_LP( dc, output->otmptSuperscriptOffset.x);
         output->otmptSuperscriptOffset.y = height_to_LP( dc, output->otmptSuperscriptOffset.y);
-        output->otmsStrikeoutSize        = abs(INTERNAL_YDSTOWS(dc,output->otmsStrikeoutSize));
+        output->otmsStrikeoutSize        = INTERNAL_YDSTOWS(dc, output->otmsStrikeoutSize);
         output->otmsStrikeoutPosition    = height_to_LP( dc, output->otmsStrikeoutPosition);
         output->otmsUnderscoreSize       = height_to_LP( dc, output->otmsUnderscoreSize);
         output->otmsUnderscorePosition   = height_to_LP( dc, output->otmsUnderscorePosition);
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 7c5a7ef..660900a 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -7576,8 +7576,9 @@ static void scale_outline_font_metrics(const GdiFont *font, OUTLINETEXTMETRICW *
 
     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))
+/* Windows scales these values as signed integers even if they are unsigned */
+#define SCALE_X(x) (x) = GDI_ROUND((int)(x) * (scale_x))
+#define SCALE_Y(y) (y) = GDI_ROUND((int)(y) * (scale_y))
 
     SCALE_Y(potm->otmAscent);
     SCALE_Y(potm->otmDescent);




More information about the wine-cvs mailing list