[PATCH 3/4] dwrite: Update matches list to IDWriteFontList2.
Nikolay Sivov
nsivov at codeweavers.com
Wed Oct 9 03:04:56 CDT 2019
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/font.c | 131 +++++++++++++++++++++------------------
dlls/dwrite/tests/font.c | 8 +++
2 files changed, 79 insertions(+), 60 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index f83c14381f..6432acb231 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -135,9 +135,10 @@ struct dwrite_fontfamily
struct dwrite_fontcollection *collection;
};
-struct dwrite_fontlist {
- IDWriteFontList1 IDWriteFontList1_iface;
- LONG ref;
+struct dwrite_fontlist
+{
+ IDWriteFontList2 IDWriteFontList2_iface;
+ LONG refcount;
struct dwrite_font_data **fonts;
UINT32 font_count;
@@ -313,9 +314,9 @@ static inline struct dwrite_colorglyphenum *impl_from_IDWriteColorGlyphRunEnumer
return CONTAINING_RECORD(iface, struct dwrite_colorglyphenum, IDWriteColorGlyphRunEnumerator_iface);
}
-static inline struct dwrite_fontlist *impl_from_IDWriteFontList1(IDWriteFontList1 *iface)
+static inline struct dwrite_fontlist *impl_from_IDWriteFontList2(IDWriteFontList2 *iface)
{
- return CONTAINING_RECORD(iface, struct dwrite_fontlist, IDWriteFontList1_iface);
+ return CONTAINING_RECORD(iface, struct dwrite_fontlist, IDWriteFontList2_iface);
}
static inline struct dwrite_fontfacereference *impl_from_IDWriteFontFaceReference1(IDWriteFontFaceReference1 *iface)
@@ -1842,19 +1843,18 @@ static HRESULT create_font(struct dwrite_fontfamily *family, UINT32 index, IDWri
return S_OK;
}
-/* IDWriteFontList1 */
-static HRESULT WINAPI dwritefontlist_QueryInterface(IDWriteFontList1 *iface, REFIID riid, void **obj)
+/* IDWriteFontList2 */
+static HRESULT WINAPI dwritefontlist_QueryInterface(IDWriteFontList2 *iface, REFIID riid, void **obj)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
-
- TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
- if (IsEqualIID(riid, &IID_IDWriteFontList1) ||
+ if (IsEqualIID(riid, &IID_IDWriteFontList2) ||
+ IsEqualIID(riid, &IID_IDWriteFontList1) ||
IsEqualIID(riid, &IID_IDWriteFontList) ||
IsEqualIID(riid, &IID_IUnknown))
{
*obj = iface;
- IDWriteFontList1_AddRef(iface);
+ IDWriteFontList2_AddRef(iface);
return S_OK;
}
@@ -1864,102 +1864,104 @@ static HRESULT WINAPI dwritefontlist_QueryInterface(IDWriteFontList1 *iface, REF
return E_NOINTERFACE;
}
-static ULONG WINAPI dwritefontlist_AddRef(IDWriteFontList1 *iface)
+static ULONG WINAPI dwritefontlist_AddRef(IDWriteFontList2 *iface)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
- ULONG ref = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(%d)\n", This, ref);
- return ref;
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
+ ULONG refcount = InterlockedIncrement(&fontlist->refcount);
+
+ TRACE("%p, refcount %u.\n", iface, refcount);
+
+ return refcount;
}
-static ULONG WINAPI dwritefontlist_Release(IDWriteFontList1 *iface)
+static ULONG WINAPI dwritefontlist_Release(IDWriteFontList2 *iface)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
- ULONG ref = InterlockedDecrement(&This->ref);
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
+ ULONG refcount = InterlockedDecrement(&fontlist->refcount);
- TRACE("(%p)->(%d)\n", This, ref);
+ TRACE("%p, refcount %u.\n", iface, refcount);
- if (!ref) {
+ if (!refcount)
+ {
UINT32 i;
- for (i = 0; i < This->font_count; i++)
- release_font_data(This->fonts[i]);
- IDWriteFontFamily2_Release(&This->family->IDWriteFontFamily2_iface);
- heap_free(This->fonts);
- heap_free(This);
+ for (i = 0; i < fontlist->font_count; i++)
+ release_font_data(fontlist->fonts[i]);
+ IDWriteFontFamily2_Release(&fontlist->family->IDWriteFontFamily2_iface);
+ heap_free(fontlist->fonts);
+ heap_free(fontlist);
}
- return ref;
+ return refcount;
}
-static HRESULT WINAPI dwritefontlist_GetFontCollection(IDWriteFontList1 *iface, IDWriteFontCollection **collection)
+static HRESULT WINAPI dwritefontlist_GetFontCollection(IDWriteFontList2 *iface, IDWriteFontCollection **collection)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
- return IDWriteFontFamily2_GetFontCollection(&This->family->IDWriteFontFamily2_iface, collection);
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
+ return IDWriteFontFamily2_GetFontCollection(&fontlist->family->IDWriteFontFamily2_iface, collection);
}
-static UINT32 WINAPI dwritefontlist_GetFontCount(IDWriteFontList1 *iface)
+static UINT32 WINAPI dwritefontlist_GetFontCount(IDWriteFontList2 *iface)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
- TRACE("(%p)\n", This);
- return This->font_count;
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
+
+ TRACE("%p.\n", iface);
+
+ return fontlist->font_count;
}
-static HRESULT WINAPI dwritefontlist_GetFont(IDWriteFontList1 *iface, UINT32 index, IDWriteFont **font)
+static HRESULT WINAPI dwritefontlist_GetFont(IDWriteFontList2 *iface, UINT32 index, IDWriteFont **font)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
- TRACE("(%p)->(%u %p)\n", This, index, font);
+ TRACE("%p, %u, %p.\n", iface, index, font);
*font = NULL;
- if (This->font_count == 0)
+ if (fontlist->font_count == 0)
return S_FALSE;
- if (index >= This->font_count)
+ if (index >= fontlist->font_count)
return E_INVALIDARG;
- return create_font(This->family, index, (IDWriteFont3 **)font);
+ return create_font(fontlist->family, index, (IDWriteFont3 **)font);
}
-static DWRITE_LOCALITY WINAPI dwritefontlist1_GetFontLocality(IDWriteFontList1 *iface, UINT32 index)
+static DWRITE_LOCALITY WINAPI dwritefontlist1_GetFontLocality(IDWriteFontList2 *iface, UINT32 index)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
-
- FIXME("(%p)->(%u): stub\n", This, index);
+ FIXME("%p, %u.\n", iface, index);
return DWRITE_LOCALITY_LOCAL;
}
-static HRESULT WINAPI dwritefontlist1_GetFont(IDWriteFontList1 *iface, UINT32 index, IDWriteFont3 **font)
+static HRESULT WINAPI dwritefontlist1_GetFont(IDWriteFontList2 *iface, UINT32 index, IDWriteFont3 **font)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
+ struct dwrite_fontlist *fontlist = impl_from_IDWriteFontList2(iface);
- TRACE("(%p)->(%u %p)\n", This, index, font);
+ TRACE("%p, %u, %p.\n", iface, index, font);
*font = NULL;
- if (This->font_count == 0)
+ if (fontlist->font_count == 0)
return S_FALSE;
- if (index >= This->font_count)
+ if (index >= fontlist->font_count)
return E_FAIL;
- return create_font(This->family, index, font);
+ return create_font(fontlist->family, index, font);
}
-static HRESULT WINAPI dwritefontlist1_GetFontFaceReference(IDWriteFontList1 *iface, UINT32 index,
+static HRESULT WINAPI dwritefontlist1_GetFontFaceReference(IDWriteFontList2 *iface, UINT32 index,
IDWriteFontFaceReference **reference)
{
- struct dwrite_fontlist *This = impl_from_IDWriteFontList1(iface);
IDWriteFont3 *font;
HRESULT hr;
- TRACE("(%p)->(%u %p)\n", This, index, reference);
+ TRACE("%p, %u, %p.\n", iface, index, reference);
*reference = NULL;
- hr = IDWriteFontList1_GetFont(iface, index, &font);
+ hr = IDWriteFontList2_GetFont(iface, index, &font);
if (FAILED(hr))
return hr;
@@ -1969,7 +1971,15 @@ static HRESULT WINAPI dwritefontlist1_GetFontFaceReference(IDWriteFontList1 *ifa
return hr;
}
-static const IDWriteFontList1Vtbl dwritefontlistvtbl = {
+static HRESULT WINAPI dwritefontlist2_GetFontSet(IDWriteFontList2 *iface, IDWriteFontSet1 **fontset)
+{
+ FIXME("%p, %p.\n", iface, fontset);
+
+ return E_NOTIMPL;
+}
+
+static const IDWriteFontList2Vtbl dwritefontlistvtbl =
+{
dwritefontlist_QueryInterface,
dwritefontlist_AddRef,
dwritefontlist_Release,
@@ -1978,7 +1988,8 @@ static const IDWriteFontList1Vtbl dwritefontlistvtbl = {
dwritefontlist_GetFont,
dwritefontlist1_GetFontLocality,
dwritefontlist1_GetFont,
- dwritefontlist1_GetFontFaceReference
+ dwritefontlist1_GetFontFaceReference,
+ dwritefontlist2_GetFontSet,
};
static HRESULT WINAPI dwritefontfamily_QueryInterface(IDWriteFontFamily2 *iface, REFIID riid, void **obj)
@@ -2207,8 +2218,8 @@ static HRESULT WINAPI dwritefontfamily_GetMatchingFonts(IDWriteFontFamily2 *ifac
return E_OUTOFMEMORY;
}
- fonts->IDWriteFontList1_iface.lpVtbl = &dwritefontlistvtbl;
- fonts->ref = 1;
+ fonts->IDWriteFontList2_iface.lpVtbl = &dwritefontlistvtbl;
+ fonts->refcount = 1;
fonts->family = family;
IDWriteFontFamily2_AddRef(&fonts->family->IDWriteFontFamily2_iface);
fonts->font_count = 0;
@@ -2237,7 +2248,7 @@ static HRESULT WINAPI dwritefontfamily_GetMatchingFonts(IDWriteFontFamily2 *ifac
init_font_prop_vec(weight, stretch, style, &req);
matchingfonts_sort(fonts, &req);
- *ret = (IDWriteFontList *)&fonts->IDWriteFontList1_iface;
+ *ret = (IDWriteFontList *)&fonts->IDWriteFontList2_iface;
return S_OK;
}
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c
index 2fdf93106b..8b44c43e86 100644
--- a/dlls/dwrite/tests/font.c
+++ b/dlls/dwrite/tests/font.c
@@ -3897,6 +3897,7 @@ static void test_GetMatchingFonts(void)
IDWriteFactory *factory;
IDWriteFontList *fontlist, *fontlist2;
IDWriteFontList1 *fontlist1;
+ IDWriteFontList2 *fontlist3;
HRESULT hr;
ULONG ref;
@@ -3971,6 +3972,13 @@ static void test_GetMatchingFonts(void)
else
win_skip("IDWriteFontList1 is not supported.\n");
+ if (SUCCEEDED(IDWriteFontList_QueryInterface(fontlist, &IID_IDWriteFontList2, (void **)&fontlist3)))
+ {
+ IDWriteFontList2_Release(fontlist3);
+ }
+ else
+ win_skip("IDWriteFontList2 is not supported.\n");
+
IDWriteFontList_Release(fontlist);
IDWriteFontFamily_Release(family);
--
2.23.0
More information about the wine-devel
mailing list