Nikolay Sivov : dwrite: Implement GetFontFamily() for system font collection.

Alexandre Julliard julliard at winehq.org
Tue Oct 23 13:37:18 CDT 2012


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Oct 22 00:06:03 2012 -0400

dwrite: Implement GetFontFamily() for system font collection.

---

 dlls/dwrite/font.c       |   14 ++++++++++++--
 dlls/dwrite/tests/font.c |    7 +++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 60aa7db..bdc84ee 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -161,6 +161,8 @@ struct dwrite_fontface {
     LONG ref;
 };
 
+static HRESULT create_fontfamily(const WCHAR *familyname, IDWriteFontFamily **family);
+
 static inline struct dwrite_fontface *impl_from_IDWriteFontFace(IDWriteFontFace *iface)
 {
     return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace_iface);
@@ -666,8 +668,16 @@ static UINT32 WINAPI dwritefontcollection_GetFontFamilyCount(IDWriteFontCollecti
 static HRESULT WINAPI dwritefontcollection_GetFontFamily(IDWriteFontCollection *iface, UINT32 index, IDWriteFontFamily **family)
 {
     struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
-    FIXME("(%p)->(%u %p): stub\n", This, index, family);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%u %p)\n", This, index, family);
+
+    if (index >= This->count)
+    {
+        *family = NULL;
+        return E_FAIL;
+    }
+
+    return create_fontfamily(This->families[index], family);
 }
 
 static HRESULT WINAPI dwritefontcollection_FindFamilyName(IDWriteFontCollection *iface, const WCHAR *name, UINT32 *index, BOOL *exists)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 423c876..dde50eb 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -526,6 +526,7 @@ todo_wine
 static void test_system_fontcollection(void)
 {
     IDWriteFontCollection *collection, *coll2;
+    IDWriteFontFamily *family;
     HRESULT hr;
     UINT32 i;
     BOOL ret;
@@ -546,6 +547,12 @@ static void test_system_fontcollection(void)
     i = IDWriteFontCollection_GetFontFamilyCount(collection);
     ok(i, "got %u\n", i);
 
+    /* invalid index */
+    family = (void*)0xdeadbeef;
+    hr = IDWriteFontCollection_GetFontFamily(collection, i, &family);
+    ok(hr == E_FAIL, "got 0x%08x\n", hr);
+    ok(family == NULL, "got %p\n", family);
+
     ret = FALSE;
     i = (UINT32)-1;
     hr = IDWriteFontCollection_FindFamilyName(collection, tahomaW, &i, &ret);




More information about the wine-cvs mailing list