Nikolay Sivov : dwrite: Implement GetFontSet() for families.

Alexandre Julliard julliard at winehq.org
Thu Mar 4 15:53:37 CST 2021


Module: wine
Branch: master
Commit: 3049c94753ed9f44083b38b89862e41966f76e97
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3049c94753ed9f44083b38b89862e41966f76e97

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Mar  4 18:39:38 2021 +0300

dwrite: Implement GetFontSet() for families.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

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

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index b64ea53692f..9232f29317f 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -2725,9 +2725,12 @@ static HRESULT WINAPI dwritefontfamily2_GetMatchingFonts(IDWriteFontFamily2 *ifa
 
 static HRESULT WINAPI dwritefontfamily2_GetFontSet(IDWriteFontFamily2 *iface, IDWriteFontSet1 **fontset)
 {
-    FIXME("%p, %p.\n", iface, fontset);
+    struct dwrite_fontfamily *family = impl_from_IDWriteFontFamily2(iface);
 
-    return E_NOTIMPL;
+    TRACE("%p, %p.\n", iface, fontset);
+
+    return fontset_create_from_font_data(family->collection->factory, family->data->fonts,
+            family->data->count, fontset);
 }
 
 static const IDWriteFontFamily2Vtbl fontfamilyvtbl =
@@ -2806,9 +2809,12 @@ static HRESULT WINAPI dwritefontfamilylist1_GetFontFaceReference(IDWriteFontList
 
 static HRESULT WINAPI dwritefontfamilylist2_GetFontSet(IDWriteFontList2 *iface, IDWriteFontSet1 **fontset)
 {
-    FIXME("%p, %p.\n", iface, fontset);
+    struct dwrite_fontfamily *family = impl_family_from_IDWriteFontList2(iface);
 
-    return E_NOTIMPL;
+    TRACE("%p, %p.\n", iface, fontset);
+
+    return fontset_create_from_font_data(family->collection->factory, family->data->fonts,
+            family->data->count, fontset);
 }
 
 static const IDWriteFontList2Vtbl fontfamilylistvtbl =
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 12ea78b634b..8fe59ca5a1e 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -1631,18 +1631,14 @@ if (0) /* crashes on native */
                 ok(fontlist == (IDWriteFontList *)fontlist2, "Unexpected interface pointer.\n");
 
                 hr = IDWriteFontList2_GetFontSet(fontlist2, &fontset);
-            todo_wine
                 ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
 
                 hr = IDWriteFontList2_GetFontSet(fontlist2, &fontset2);
-            todo_wine {
                 ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
                 ok(fontset != fontset2, "Unexpected instance.\n");
-            }
-                if (fontset2)
-                    IDWriteFontSet1_Release(fontset2);
-                if (fontset)
-                    IDWriteFontSet1_Release(fontset);
+
+                IDWriteFontSet1_Release(fontset2);
+                IDWriteFontSet1_Release(fontset);
 
                 IDWriteFontList2_Release(fontlist2);
             }
@@ -9959,17 +9955,13 @@ static void test_family_font_set(void)
     if (SUCCEEDED(IDWriteFontFamily_QueryInterface(family, &IID_IDWriteFontFamily2, (void **)&family2)))
     {
         hr = IDWriteFontFamily2_GetFontSet(family2, &fontset);
-    todo_wine
         ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
         hr = IDWriteFontFamily2_GetFontSet(family2, &fontset2);
-    todo_wine
         ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-    if (SUCCEEDED(hr))
-    {
         ok(fontset != fontset2, "Unexpected fontset instance.\n");
         IDWriteFontSet1_Release(fontset2);
         IDWriteFontSet1_Release(fontset);
-    }
+
         IDWriteFontFamily2_Release(family2);
     }
     else




More information about the wine-cvs mailing list