Evan Stade : gdiplus: Fixed conformance of font constructor.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 15 04:34:13 CDT 2007


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

Author: Evan Stade <estade at gmail.com>
Date:   Tue Aug 14 18:59:08 2007 -0700

gdiplus: Fixed conformance of font constructor.

---

 dlls/gdiplus/font.c       |   17 ++++++++++++++++-
 dlls/gdiplus/tests/font.c |    6 ++----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c
index a64ceac..d321ba9 100644
--- a/dlls/gdiplus/font.c
+++ b/dlls/gdiplus/font.c
@@ -31,13 +31,28 @@
 GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc,
     GDIPCONST LOGFONTW *logfont, GpFont **font)
 {
+    HFONT hfont, oldfont;
+    TEXTMETRICW textmet;
+
     if(!logfont || !font)
         return InvalidParameter;
 
     *font = GdipAlloc(sizeof(GpFont));
     if(!*font)  return OutOfMemory;
 
-    memcpy(&(*font)->lfw, logfont, sizeof(LOGFONTW));
+    memcpy(&(*font)->lfw.lfFaceName, logfont->lfFaceName, LF_FACESIZE *
+           sizeof(WCHAR));
+    (*font)->lfw.lfHeight = logfont->lfHeight;
+
+    hfont = CreateFontIndirectW(&(*font)->lfw);
+    oldfont = SelectObject(hdc, hfont);
+    GetTextMetricsW(hdc, &textmet);
+
+    (*font)->lfw.lfHeight = -textmet.tmHeight;
+    (*font)->lfw.lfWeight = textmet.tmWeight;
+
+    SelectObject(hdc, oldfont);
+    DeleteObject(hfont);
 
     return Ok;
 }
diff --git a/dlls/gdiplus/tests/font.c b/dlls/gdiplus/tests/font.c
index 1326a6a..e5d9bca 100644
--- a/dlls/gdiplus/tests/font.c
+++ b/dlls/gdiplus/tests/font.c
@@ -44,13 +44,11 @@ static void test_logfont(void)
     stat = GdipGetLogFontW(font, graphics, &lfw2);
     expect(Ok, stat);
 
-    todo_wine
-        ok(lfw2.lfHeight < 0, "Expected negative height\n");
+    ok(lfw2.lfHeight < 0, "Expected negative height\n");
     expect(0, lfw2.lfWidth);
     expect(0, lfw2.lfEscapement);
     expect(0, lfw2.lfOrientation);
-    todo_wine
-        ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n");
+    ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n");
     expect(0, lfw2.lfItalic);
     expect(0, lfw2.lfUnderline);
     expect(0, lfw2.lfStrikeOut);




More information about the wine-cvs mailing list