[Gdiplus 06/16] Implement GdipCloneFontFamily

Adam Petaccia adam at tpetaccia.com
Wed Jul 2 12:25:04 CDT 2008


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

diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c
index c3d24d3..6b8c4cf 100644
--- a/dlls/gdiplus/font.c
+++ b/dlls/gdiplus/font.c
@@ -411,10 +411,25 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily* FontFamily, GpFontFamily**
 {
     if (!(FontFamily && clonedFontFamily)) return InvalidParameter;
 
-    FIXME("stub: %p (%s), %p\n", FontFamily,
+    TRACE("stub: %p (%s), %p\n", FontFamily,
             debugstr_w(FontFamily->FamilyName), clonedFontFamily);
 
-    return NotImplemented;
+    *clonedFontFamily = GdipAlloc(sizeof(GpFontFamily));
+    if (!*clonedFontFamily) return OutOfMemory;
+
+    **clonedFontFamily = *FontFamily;
+
+    (*clonedFontFamily)->FamilyName = GdipAlloc(sizeof(WCHAR) * LF_FACESIZE);
+    if (!(*clonedFontFamily)->FamilyName)
+    {
+        GdipFree (clonedFontFamily);
+        return OutOfMemory;
+    }
+
+    lstrcpynW((*clonedFontFamily)->FamilyName, FontFamily->FamilyName,
+            LF_FACESIZE);
+
+    return Ok;
 }
 
 /*******************************************************************************
diff --git a/dlls/gdiplus/tests/font.c b/dlls/gdiplus/tests/font.c
index d3c65cc..0449142 100644
--- a/dlls/gdiplus/tests/font.c
+++ b/dlls/gdiplus/tests/font.c
@@ -183,15 +183,12 @@ static void test_fontfamily (void)
     }
 
     ZeroMemory (FamilyName, sizeof(FamilyName));
-todo_wine
-{
     stat = GdipCloneFontFamily(FontFamily, &ClonedFontFamily);
     expect (Ok, stat);
     GdipDeleteFontFamily(FontFamily);
     stat = GdipGetFamilyName(ClonedFontFamily, FamilyName, LANG_NEUTRAL);
     expect(Ok, stat);
     expect(0, lstrcmpiW(FamilyName, arial));
-}
 
     GdipDeleteFontFamily(ClonedFontFamily);
 }
-- 
1.5.4.3




More information about the wine-patches mailing list