Nikolay Sivov : dwrite: Add partial implementation for IDWriteFontFace5::Equals().

Alexandre Julliard julliard at winehq.org
Fri Aug 21 16:43:27 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Aug 21 15:39:27 2020 +0300

dwrite: Add partial implementation for IDWriteFontFace5::Equals().

Issue with missing method spotted by Brendan Shanks.

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

---

 dlls/dwrite/font.c       | 17 +++++++++++++++++
 dlls/dwrite/tests/font.c | 11 ++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 19fe911420..aa51c74429 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -1562,6 +1562,22 @@ static HRESULT WINAPI dwritefontface5_GetFontResource(IDWriteFontFace5 *iface, I
     return IDWriteFactory7_CreateFontResource(fontface->factory, fontface->files[0], fontface->index, resource);
 }
 
+static BOOL WINAPI dwritefontface5_Equals(IDWriteFontFace5 *iface, IDWriteFontFace *other)
+{
+    struct dwrite_fontface *fontface = impl_from_IDWriteFontFace5(iface), *other_face;
+
+    TRACE("%p, %p.\n", iface, other);
+
+    if (!(other_face = unsafe_impl_from_IDWriteFontFace(other)))
+        return FALSE;
+
+    /* TODO: add variations support */
+
+    return fontface->index == other_face->index &&
+            fontface->simulations == other_face->simulations &&
+            is_same_fontfile(fontface->files[0], other_face->files[0]);
+}
+
 static const IDWriteFontFace5Vtbl dwritefontfacevtbl =
 {
     dwritefontface_QueryInterface,
@@ -1621,6 +1637,7 @@ static const IDWriteFontFace5Vtbl dwritefontfacevtbl =
     dwritefontface5_GetFontAxisValues,
     dwritefontface5_HasVariations,
     dwritefontface5_GetFontResource,
+    dwritefontface5_Equals,
 };
 
 static HRESULT WINAPI dwritefontface_reference_QueryInterface(IDWriteFontFaceReference *iface, REFIID riid, void **obj)
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index e1024d0263..becb1a741f 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -1817,13 +1817,14 @@ static void test_CreateFontFace(void)
     IDWriteFontCollection *collection;
     DWRITE_FONT_FILE_TYPE file_type;
     DWRITE_FONT_FACE_TYPE face_type;
+    IDWriteFontFace5 *fontface5;
     IDWriteGdiInterop *interop;
     IDWriteFont *font, *font2;
     IDWriteFontFamily *family;
     IDWriteFactory *factory;
     IDWriteFontFile *file;
+    BOOL supported, ret;
     LOGFONTW logfont;
-    BOOL supported;
     UINT32 count;
     WCHAR *path;
     HRESULT hr;
@@ -1908,6 +1909,14 @@ static void test_CreateFontFace(void)
     ok(hr == S_OK, "got 0x%08x\n", hr);
     ok(fontface == fontface2, "got %p, was %p\n", fontface2, fontface);
 
+    /* Trivial equality test */
+    if (SUCCEEDED(IDWriteFontFace_QueryInterface(fontface, &IID_IDWriteFontFace5, (void **)&fontface5)))
+    {
+        ret = IDWriteFontFace5_Equals(fontface5, fontface2);
+        ok(ret, "Unexpected result %d.\n", ret);
+        IDWriteFontFace5_Release(fontface5);
+    }
+
     IDWriteFontFace_Release(fontface);
     IDWriteFontFace_Release(fontface2);
     IDWriteFont_Release(font2);




More information about the wine-cvs mailing list