diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 19fe911420f..aa51c744297 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 e1024d0263b..becb1a741f7 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);