[PATCH 2/5] dwrite: Implement IDWriteFontSet::GetFontFaceReference().

Nikolay Sivov nsivov at codeweavers.com
Thu Mar 4 09:39:35 CST 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/font.c       | 14 ++++++++++++--
 dlls/dwrite/tests/font.c | 15 ++++++++-------
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index ef61b173824..98c194b8c30 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -7162,9 +7162,19 @@ static UINT32 WINAPI dwritefontset_GetFontCount(IDWriteFontSet3 *iface)
 static HRESULT WINAPI dwritefontset_GetFontFaceReference(IDWriteFontSet3 *iface, UINT32 index,
         IDWriteFontFaceReference **reference)
 {
-    FIXME("%p, %u, %p.\n", iface, index, reference);
+    struct dwrite_fontset *set = impl_from_IDWriteFontSet3(iface);
+    struct dwrite_fontset_entry *entry;
 
-    return E_NOTIMPL;
+    TRACE("%p, %u, %p.\n", iface, index, reference);
+
+    *reference = NULL;
+
+    if (index >= set->count)
+        return E_INVALIDARG;
+
+    entry = &set->entries[index];
+    return IDWriteFactory7_CreateFontFaceReference_(set->factory, entry->file, entry->face_index,
+            entry->simulations, reference);
 }
 
 static HRESULT WINAPI dwritefontset_FindFontFaceReference(IDWriteFontSet3 *iface,
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 97caa7b31a2..4dcbbc4d077 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -9454,22 +9454,23 @@ static void test_fontsetbuilder(void)
             setcount = IDWriteFontSet_GetFontCount(fontset);
             ok(setcount == 1, "Unexpected font count %u.\n", setcount);
 
+            ref2 = (void *)0xdeadbeef;
+            hr = IDWriteFontSet_GetFontFaceReference(fontset, setcount, &ref2);
+            ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+            ok(!ref2, "Unexpected pointer.\n");
+
             ref2 = NULL;
             hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref2);
-       todo_wine
             ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
             ok(ref2 != ref, "Unexpected reference.\n");
 
             ref3 = NULL;
             hr = IDWriteFontSet_GetFontFaceReference(fontset, 0, &ref3);
-       todo_wine {
             ok(hr == S_OK, "Failed to get font face reference, hr %#x.\n", hr);
             ok(ref2 != ref3, "Unexpected reference.\n");
-       }
-            if (ref3)
-                IDWriteFontFaceReference_Release(ref3);
-            if (ref2)
-                IDWriteFontFaceReference_Release(ref2);
+
+            IDWriteFontFaceReference_Release(ref3);
+            IDWriteFontFaceReference_Release(ref2);
 
             for (id = DWRITE_FONT_PROPERTY_ID_FAMILY_NAME; id < DWRITE_FONT_PROPERTY_ID_TOTAL; ++id)
             {
-- 
2.30.1




More information about the wine-devel mailing list