Module: wine Branch: master Commit: 537112fb52a18454eaa5993ec6b4862dd757043a URL: http://source.winehq.org/git/wine.git/?a=commit;h=537112fb52a18454eaa5993ec6...
Author: Evan Stade estade@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);