Dmitry Timoshkov : gdiplus: Retrieve LOGFONT from a GpFont using GdipGetLogFontW instead of accessing it directly .
Module: wine Branch: master Commit: 2c93bf7e4e469b36d3244f5a5f3c3c0ca0e0d897 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c93bf7e4e469b36d3244f5a5f... Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Fri May 11 19:19:21 2012 +0900 gdiplus: Retrieve LOGFONT from a GpFont using GdipGetLogFontW instead of accessing it directly. --- dlls/gdiplus/graphics.c | 12 +++++++----- dlls/gdiplus/graphicspath.c | 5 ++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index a5e3eb2..38335a8 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -2136,15 +2136,13 @@ void get_font_hfont(GpGraphics *graphics, GDIPCONST GpFont *font, HFONT *hfont) rel_height = sqrt((pt[2].Y-pt[0].Y)*(pt[2].Y-pt[0].Y)+ (pt[2].X-pt[0].X)*(pt[2].X-pt[0].X)); - lfw = font->lfw; - lfw.lfHeight = roundr(-font->pixel_size * rel_height); + GdipGetLogFontW((GpFont *)font, graphics, &lfw); + lfw.lfHeight = roundr(lfw.lfHeight * rel_height); unscaled_font = CreateFontIndirectW(&lfw); SelectObject(hdc, unscaled_font); GetTextMetricsW(hdc, &textmet); - lfw = font->lfw; - lfw.lfHeight = roundr(-font->pixel_size * rel_height); lfw.lfWidth = roundr(textmet.tmAveCharWidth * rel_width / rel_height); lfw.lfEscapement = lfw.lfOrientation = roundr((angle / M_PI) * 1800.0); @@ -4919,6 +4917,7 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, { GpStatus stat; int i; + LOGFONTW lfw; HFONT oldfont; struct measure_ranges_args args; HDC hdc, temp_hdc=NULL; @@ -4932,6 +4931,9 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, if (regionCount < stringFormat->range_count) return InvalidParameter; + stat = GdipGetLogFontW((GpFont *)font, graphics, &lfw); + if (stat != Ok) return stat; + if(!graphics->hdc) { hdc = temp_hdc = CreateCompatibleDC(0); @@ -4943,7 +4945,7 @@ GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, if (stringFormat->attr) TRACE("may be ignoring some format flags: attr %x\n", stringFormat->attr); - oldfont = SelectObject(hdc, CreateFontIndirectW(&font->lfw)); + oldfont = SelectObject(hdc, CreateFontIndirectW(&lfw)); for (i=0; i<stringFormat->range_count; i++) { diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index d37512e..5da53b2 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -942,6 +942,7 @@ GpStatus WINGDIPAPI GdipAddPathString(GpPath* path, GDIPCONST WCHAR* string, INT { GpFont *font; GpStatus status; + LOGFONTW lfw; HANDLE hfont; HDC dc; GpPath *backup; @@ -956,7 +957,9 @@ GpStatus WINGDIPAPI GdipAddPathString(GpPath* path, GDIPCONST WCHAR* string, INT if (status != Ok) return status; - hfont = CreateFontIndirectW(&font->lfw); + status = GdipGetLogFontW((GpFont *)font, NULL, &lfw); + if (status != Ok) return status; + hfont = CreateFontIndirectW(&lfw); if (!hfont) { WARN("Failed to create font\n");
participants (1)
-
Alexandre Julliard