Vincent Povirk : gdiplus: Implement GdipIsStyleAvailable.

Alexandre Julliard julliard at winehq.org
Mon May 10 11:59:10 CDT 2010


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Sat May  8 15:36:02 2010 -0500

gdiplus: Implement GdipIsStyleAvailable.

---

 dlls/gdiplus/font.c |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c
index 3a29771..f198863 100644
--- a/dlls/gdiplus/font.c
+++ b/dlls/gdiplus/font.c
@@ -760,15 +760,41 @@ GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily *family,
     return Ok;
 }
 
+static INT CALLBACK font_has_style_proc(const LOGFONTW *elf,
+                            const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
+{
+    INT fontstyle=0;
+
+    if (!ntm) return 1;
+
+    if (ntm->tmWeight >= FW_BOLD) fontstyle |= FontStyleBold;
+    if (ntm->tmItalic) fontstyle |= FontStyleItalic;
+    if (ntm->tmUnderlined) fontstyle |= FontStyleUnderline;
+    if (ntm->tmStruckOut) fontstyle |= FontStyleStrikeout;
+
+    return (INT)lParam != fontstyle;
+}
+
 GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily* family,
         INT style, BOOL* IsStyleAvailable)
 {
-    FIXME("%p %d %p stub!\n", family, style, IsStyleAvailable);
+    HDC hdc;
+
+    TRACE("%p %d %p\n", family, style, IsStyleAvailable);
 
     if (!(family && IsStyleAvailable))
         return InvalidParameter;
 
-    return NotImplemented;
+    *IsStyleAvailable = FALSE;
+
+    hdc = GetDC(0);
+
+    if(!EnumFontFamiliesW(hdc, family->FamilyName, font_has_style_proc, (LPARAM)style))
+        *IsStyleAvailable = TRUE;
+
+    ReleaseDC(0, hdc);
+
+    return Ok;
 }
 
 /*****************************************************************************




More information about the wine-cvs mailing list