mirror of
https://github.com/reactos/wine.git
synced 2025-02-18 20:10:18 +00:00
dwrite: Update to IDWriteFontCollection1.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
cf3e92994d
commit
962f16e94b
@ -119,7 +119,7 @@ struct dwrite_fontfamily_data {
|
||||
};
|
||||
|
||||
struct dwrite_fontcollection {
|
||||
IDWriteFontCollection IDWriteFontCollection_iface;
|
||||
IDWriteFontCollection1 IDWriteFontCollection1_iface;
|
||||
LONG ref;
|
||||
|
||||
struct dwrite_fontfamily_data **family_data;
|
||||
@ -263,9 +263,9 @@ static inline struct dwrite_fontfamily *impl_from_IDWriteFontFamily1(IDWriteFont
|
||||
return CONTAINING_RECORD(iface, struct dwrite_fontfamily, IDWriteFontFamily1_iface);
|
||||
}
|
||||
|
||||
static inline struct dwrite_fontcollection *impl_from_IDWriteFontCollection(IDWriteFontCollection *iface)
|
||||
static inline struct dwrite_fontcollection *impl_from_IDWriteFontCollection1(IDWriteFontCollection1 *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct dwrite_fontcollection, IDWriteFontCollection_iface);
|
||||
return CONTAINING_RECORD(iface, struct dwrite_fontcollection, IDWriteFontCollection1_iface);
|
||||
}
|
||||
|
||||
static inline struct dwrite_glyphrunanalysis *impl_from_IDWriteGlyphRunAnalysis(IDWriteGlyphRunAnalysis *iface)
|
||||
@ -1967,16 +1967,17 @@ BOOL is_system_collection(IDWriteFontCollection *collection)
|
||||
return IDWriteFontCollection_QueryInterface(collection, &IID_issystemcollection, (void**)&obj) == S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection *iface, REFIID riid, void **obj)
|
||||
static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection1 *iface, REFIID riid, void **obj)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
|
||||
|
||||
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||
IsEqualIID(riid, &IID_IDWriteFontCollection))
|
||||
if (IsEqualIID(riid, &IID_IDWriteFontCollection1) ||
|
||||
IsEqualIID(riid, &IID_IDWriteFontCollection) ||
|
||||
IsEqualIID(riid, &IID_IUnknown))
|
||||
{
|
||||
*obj = iface;
|
||||
IDWriteFontCollection_AddRef(iface);
|
||||
IDWriteFontCollection1_AddRef(iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@ -1988,18 +1989,18 @@ static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI dwritefontcollection_AddRef(IDWriteFontCollection *iface)
|
||||
static ULONG WINAPI dwritefontcollection_AddRef(IDWriteFontCollection1 *iface)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
ULONG ref = InterlockedIncrement(&This->ref);
|
||||
TRACE("(%p)->(%d)\n", This, ref);
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI dwritefontcollection_Release(IDWriteFontCollection *iface)
|
||||
static ULONG WINAPI dwritefontcollection_Release(IDWriteFontCollection1 *iface)
|
||||
{
|
||||
unsigned int i;
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
ULONG ref = InterlockedDecrement(&This->ref);
|
||||
TRACE("(%p)->(%d)\n", This, ref);
|
||||
|
||||
@ -2013,16 +2014,16 @@ static ULONG WINAPI dwritefontcollection_Release(IDWriteFontCollection *iface)
|
||||
return ref;
|
||||
}
|
||||
|
||||
static UINT32 WINAPI dwritefontcollection_GetFontFamilyCount(IDWriteFontCollection *iface)
|
||||
static UINT32 WINAPI dwritefontcollection_GetFontFamilyCount(IDWriteFontCollection1 *iface)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
TRACE("(%p)\n", This);
|
||||
return This->family_count;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritefontcollection_GetFontFamily(IDWriteFontCollection *iface, UINT32 index, IDWriteFontFamily **family)
|
||||
static HRESULT WINAPI dwritefontcollection_GetFontFamily(IDWriteFontCollection1 *iface, UINT32 index, IDWriteFontFamily **family)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
|
||||
TRACE("(%p)->(%u %p)\n", This, index, family);
|
||||
|
||||
@ -2031,7 +2032,7 @@ static HRESULT WINAPI dwritefontcollection_GetFontFamily(IDWriteFontCollection *
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return create_fontfamily(This->family_data[index], iface, (IDWriteFontFamily1**)family);
|
||||
return create_fontfamily(This->family_data[index], (IDWriteFontCollection*)iface, (IDWriteFontFamily1**)family);
|
||||
}
|
||||
|
||||
static UINT32 collection_find_family(struct dwrite_fontcollection *collection, const WCHAR *name)
|
||||
@ -2054,9 +2055,9 @@ static UINT32 collection_find_family(struct dwrite_fontcollection *collection, c
|
||||
return ~0u;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritefontcollection_FindFamilyName(IDWriteFontCollection *iface, const WCHAR *name, UINT32 *index, BOOL *exists)
|
||||
static HRESULT WINAPI dwritefontcollection_FindFamilyName(IDWriteFontCollection1 *iface, const WCHAR *name, UINT32 *index, BOOL *exists)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(name), index, exists);
|
||||
*index = collection_find_family(This, name);
|
||||
*exists = *index != ~0u;
|
||||
@ -2086,9 +2087,9 @@ static BOOL is_same_fontfile(IDWriteFontFile *left, IDWriteFontFile *right)
|
||||
return !memcmp(left_key, right_key, left_key_size);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritefontcollection_GetFontFromFontFace(IDWriteFontCollection *iface, IDWriteFontFace *face, IDWriteFont **font)
|
||||
static HRESULT WINAPI dwritefontcollection_GetFontFromFontFace(IDWriteFontCollection1 *iface, IDWriteFontFace *face, IDWriteFont **font)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
struct dwrite_fontfamily_data *found_family = NULL;
|
||||
struct dwrite_font_data *found_font = NULL;
|
||||
IDWriteFontFamily1 *family;
|
||||
@ -2125,7 +2126,7 @@ static HRESULT WINAPI dwritefontcollection_GetFontFromFontFace(IDWriteFontCollec
|
||||
if (!found_font)
|
||||
return DWRITE_E_NOFONT;
|
||||
|
||||
hr = create_fontfamily(found_family, iface, &family);
|
||||
hr = create_fontfamily(found_family, (IDWriteFontCollection*)iface, &family);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
@ -2134,14 +2135,34 @@ static HRESULT WINAPI dwritefontcollection_GetFontFromFontFace(IDWriteFontCollec
|
||||
return hr;
|
||||
}
|
||||
|
||||
static const IDWriteFontCollectionVtbl fontcollectionvtbl = {
|
||||
static HRESULT WINAPI dwritefontcollection1_GetFontSet(IDWriteFontCollection1 *iface, IDWriteFontSet **fontset)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
|
||||
FIXME("(%p)->(%p): stub\n", This, fontset);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritefontcollection1_GetFontFamily(IDWriteFontCollection1 *iface, UINT32 index, IDWriteFontFamily1 **family)
|
||||
{
|
||||
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
|
||||
|
||||
FIXME("(%p)->(%p): stub\n", This, family);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IDWriteFontCollection1Vtbl fontcollectionvtbl = {
|
||||
dwritefontcollection_QueryInterface,
|
||||
dwritefontcollection_AddRef,
|
||||
dwritefontcollection_Release,
|
||||
dwritefontcollection_GetFontFamilyCount,
|
||||
dwritefontcollection_GetFontFamily,
|
||||
dwritefontcollection_FindFamilyName,
|
||||
dwritefontcollection_GetFontFromFontFace
|
||||
dwritefontcollection_GetFontFromFontFace,
|
||||
dwritefontcollection1_GetFontSet,
|
||||
dwritefontcollection1_GetFontFamily
|
||||
};
|
||||
|
||||
static HRESULT fontfamily_add_font(struct dwrite_fontfamily_data *family_data, struct dwrite_font_data *font_data)
|
||||
@ -2192,7 +2213,7 @@ static HRESULT fontcollection_add_family(struct dwrite_fontcollection *collectio
|
||||
|
||||
static HRESULT init_font_collection(struct dwrite_fontcollection *collection, BOOL is_system)
|
||||
{
|
||||
collection->IDWriteFontCollection_iface.lpVtbl = &fontcollectionvtbl;
|
||||
collection->IDWriteFontCollection1_iface.lpVtbl = &fontcollectionvtbl;
|
||||
collection->ref = 1;
|
||||
collection->family_count = 0;
|
||||
collection->family_alloc = is_system ? 30 : 5;
|
||||
@ -3302,7 +3323,7 @@ HRESULT create_font_collection(IDWriteFactory2* factory, IDWriteFontFileEnumerat
|
||||
return hr;
|
||||
}
|
||||
|
||||
*ret = &collection->IDWriteFontCollection_iface;
|
||||
*ret = (IDWriteFontCollection*)&collection->IDWriteFontCollection1_iface;
|
||||
|
||||
TRACE("building font collection:\n");
|
||||
|
||||
@ -3705,7 +3726,7 @@ HRESULT get_eudc_fontcollection(IDWriteFactory2 *factory, IDWriteFontCollection
|
||||
return hr;
|
||||
}
|
||||
|
||||
*ret = &collection->IDWriteFontCollection_iface;
|
||||
*ret = (IDWriteFontCollection*)&collection->IDWriteFontCollection1_iface;
|
||||
|
||||
/* return empty collection if EUDC fonts are not configured */
|
||||
sprintfW(eudckeypathW, eudckeyfmtW, GetACP());
|
||||
@ -3732,7 +3753,7 @@ HRESULT get_eudc_fontcollection(IDWriteFactory2 *factory, IDWriteFontCollection
|
||||
|
||||
/* try to add global default if not defined for specific codepage */
|
||||
exists = FALSE;
|
||||
hr = IDWriteFontCollection_FindFamilyName(&collection->IDWriteFontCollection_iface, emptyW,
|
||||
hr = IDWriteFontCollection1_FindFamilyName(&collection->IDWriteFontCollection1_iface, emptyW,
|
||||
&index, &exists);
|
||||
if (FAILED(hr) || !exists) {
|
||||
const WCHAR globaldefaultW[] = {'E','U','D','C','.','T','T','E',0};
|
||||
|
@ -1606,6 +1606,7 @@ static void test_system_fontcollection(void)
|
||||
{
|
||||
IDWriteFontCollection *collection, *coll2;
|
||||
IDWriteLocalFontFileLoader *localloader;
|
||||
IDWriteFontCollection1 *collection1;
|
||||
IDWriteFactory *factory, *factory2;
|
||||
IDWriteFontFileLoader *loader;
|
||||
IDWriteFontFamily *family;
|
||||
@ -1722,6 +1723,31 @@ static void test_system_fontcollection(void)
|
||||
ok(!ret, "got %d\n", ret);
|
||||
ok(i == (UINT32)-1, "got %u\n", i);
|
||||
|
||||
hr = IDWriteFontCollection_QueryInterface(collection, &IID_IDWriteFontCollection1, (void**)&collection1);
|
||||
if (hr == S_OK) {
|
||||
IDWriteFontFamily1 *family1;
|
||||
|
||||
hr = IDWriteFontCollection1_QueryInterface(collection1, &IID_IDWriteFontCollection, (void**)&coll2);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
ok(coll2 == collection, "got %p, %p\n", collection, coll2);
|
||||
IDWriteFontCollection_Release(coll2);
|
||||
|
||||
family1 = (void*)0xdeadbeef;
|
||||
hr = IDWriteFontCollection1_GetFontFamily(collection1, ~0u, &family1);
|
||||
todo_wine {
|
||||
ok(hr == E_FAIL, "got 0x%08x\n", hr);
|
||||
ok(family1 == NULL, "got %p\n", family1);
|
||||
}
|
||||
hr = IDWriteFontCollection1_GetFontFamily(collection1, 0, &family1);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
if (hr == S_OK)
|
||||
IDWriteFontFamily1_Release(family1);
|
||||
IDWriteFontCollection1_Release(collection1);
|
||||
}
|
||||
else
|
||||
win_skip("IDWriteFontCollection1 is not supported.\n");
|
||||
|
||||
IDWriteFontCollection_Release(collection);
|
||||
IDWriteFactory_Release(factory);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user