[PATCH 5/5] dwrite: Implement another GetFontFamily() variant.

Nikolay Sivov nsivov at codeweavers.com
Thu Jun 11 07:09:00 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/font.c       | 18 +++++++++++++++---
 dlls/dwrite/tests/font.c | 25 ++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index baee8d1e491..19fe911420f 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -3002,11 +3002,23 @@ static HRESULT WINAPI dwritefontcollection1_GetFontFamily(IDWriteFontCollection3
 }
 
 static HRESULT WINAPI dwritefontcollection2_GetFontFamily(IDWriteFontCollection3 *iface,
-        UINT32 index, IDWriteFontFamily2 **family)
+        UINT32 index, IDWriteFontFamily2 **ret)
 {
-    FIXME("%p, %u, %p.\n", iface, index, family);
+    struct dwrite_fontcollection *collection = impl_from_IDWriteFontCollection3(iface);
+    struct dwrite_fontfamily *family;
+    HRESULT hr;
 
-    return E_NOTIMPL;
+    TRACE("%p, %u, %p.\n", iface, index, ret);
+
+    *ret = NULL;
+
+    if (index >= collection->count)
+        return E_FAIL;
+
+    if (SUCCEEDED(hr = create_fontfamily(collection, index, &family)))
+        *ret = &family->IDWriteFontFamily2_iface;
+
+    return hr;
 }
 
 static HRESULT WINAPI dwritefontcollection2_GetMatchingFonts(IDWriteFontCollection3 *iface,
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 07baf112eed..e1024d0263b 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -1521,14 +1521,15 @@ static void test_GetFontFamily(void)
 {
     IDWriteFontCollection *collection, *collection2;
     IDWriteFontCollection *syscoll;
+    IDWriteFontCollection2 *coll2;
     IDWriteFontFamily *family, *family2;
     IDWriteFontFamily1 *family1;
     IDWriteGdiInterop *interop;
     IDWriteFont *font, *font2;
     IDWriteFactory *factory;
     LOGFONTW logfont;
+    ULONG ref, count;
     HRESULT hr;
-    ULONG ref;
 
     factory = create_factory();
 
@@ -1656,6 +1657,28 @@ if (0) /* crashes on native */
     else
         win_skip("IDWriteFontFamily1 is not supported.\n");
 
+    /* IDWriteFontCollection2::GetFontFamily() */
+    if (SUCCEEDED(IDWriteFontCollection_QueryInterface(syscoll, &IID_IDWriteFontCollection2, (void **)&coll2)))
+    {
+        IDWriteFontFamily2 *family2;
+
+        count = IDWriteFontCollection2_GetFontFamilyCount(coll2);
+        ok(!!count, "Unexpected family count.\n");
+
+        family2 = (void *)0xdeadbeef;
+        hr = IDWriteFontCollection2_GetFontFamily(coll2, count, &family2);
+        ok(hr == E_FAIL, "Unexpected hr %#x.\n", hr);
+        ok(!family2, "Unexpected pointer.\n");
+
+        hr = IDWriteFontCollection2_GetFontFamily(coll2, 0, &family2);
+        ok(hr == S_OK, "Failed to get family, hr %#x.\n", hr);
+        IDWriteFontFamily2_Release(family2);
+
+        IDWriteFontCollection2_Release(coll2);
+    }
+    else
+        win_skip("IDWriteFontCollection2 is not supported.\n");
+
     IDWriteFontCollection_Release(syscoll);
     IDWriteFontCollection_Release(collection2);
     IDWriteFontCollection_Release(collection);
-- 
2.26.2




More information about the wine-devel mailing list