[2/3] gdiplus: Make GdipMeasureCharacterRanges use common font transformation code.

Dmitry Timoshkov dmitry at baikal.ru
Fri Aug 24 01:43:45 CDT 2012


... like GdipMeasureString, GdipDrawString, GdipMeasureDriverString and
GdipDrawDriverString do.
---
 dlls/gdiplus/graphics.c       | 10 +++++-----
 dlls/gdiplus/tests/graphics.c |  6 +++++-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 0056a2f..a0c130e 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -4927,8 +4927,7 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics,
 {
     GpStatus stat;
     int i;
-    LOGFONTW lfw;
-    HFONT oldfont;
+    HFONT gdifont, oldfont;
     struct measure_ranges_args args;
     HDC hdc, temp_hdc=NULL;
     GpPointF pt[3];
@@ -4971,8 +4970,8 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics,
     scaled_rect.Width = layoutRect->Width * args.rel_width;
     scaled_rect.Height = layoutRect->Height * args.rel_height;
 
-    get_log_fontW(font, graphics, &lfw);
-    oldfont = SelectObject(hdc, CreateFontIndirectW(&lfw));
+    get_font_hfont(graphics, font, &gdifont);
+    oldfont = SelectObject(hdc, gdifont);
 
     for (i=0; i<stringFormat->range_count; i++)
     {
@@ -4986,7 +4985,8 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics,
     stat = gdip_format_string(hdc, string, length, font, &scaled_rect, stringFormat,
         measure_ranges_callback, &args);
 
-    DeleteObject(SelectObject(hdc, oldfont));
+    SelectObject(hdc, oldfont);
+    DeleteObject(gdifont);
 
     if (temp_hdc)
         DeleteDC(temp_hdc);
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index 913d895..1cd847d 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -3828,9 +3828,13 @@ static void test_font_height_scaling(void)
                 win_skip("GdipMeasureCharacterRanges ignores units before Win7\n");
                 continue;
             }
+            /* FIXME: Wine uses integer gdi32 regions and rounding breaks things */
+            if (height < 1.0)
             expectf_(height, rect.Height, height / 15.0);
+            else
 todo_wine
-            expectf_(bounds.Width, rect.Width + margin * 2.0, bounds.Width / 25.0);
+            expectf_(height, rect.Height, height / 15.0);
+            expectf_(bounds.Width, rect.Width + margin * 2.0, bounds.Width / 15.0);
         }
     }
 
-- 
1.7.11.5




More information about the wine-patches mailing list