dwrite: Remove flag marking system collections.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2016-03-08 22:46:54 +03:00 committed by Alexandre Julliard
parent 962f16e94b
commit 42de7a468c
1 changed files with 34 additions and 6 deletions

View File

@ -125,7 +125,6 @@ struct dwrite_fontcollection {
struct dwrite_fontfamily_data **family_data;
UINT32 family_count;
UINT32 family_alloc;
BOOL is_system;
};
struct dwrite_fontfamily {
@ -1967,7 +1966,7 @@ BOOL is_system_collection(IDWriteFontCollection *collection)
return IDWriteFontCollection_QueryInterface(collection, &IID_issystemcollection, (void**)&obj) == S_OK;
}
static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection1 *iface, REFIID riid, void **obj)
static HRESULT WINAPI dwritesystemfontcollection_QueryInterface(IDWriteFontCollection1 *iface, REFIID riid, void **obj)
{
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
@ -1983,12 +1982,31 @@ static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection1
*obj = NULL;
if (This->is_system && IsEqualIID(riid, &IID_issystemcollection))
if (IsEqualIID(riid, &IID_issystemcollection))
return S_OK;
return E_NOINTERFACE;
}
static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection1 *iface, REFIID riid, void **obj)
{
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
if (IsEqualIID(riid, &IID_IDWriteFontCollection1) ||
IsEqualIID(riid, &IID_IDWriteFontCollection) ||
IsEqualIID(riid, &IID_IUnknown))
{
*obj = iface;
IDWriteFontCollection1_AddRef(iface);
return S_OK;
}
*obj = NULL;
return E_NOINTERFACE;
}
static ULONG WINAPI dwritefontcollection_AddRef(IDWriteFontCollection1 *iface)
{
struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection1(iface);
@ -2165,6 +2183,18 @@ static const IDWriteFontCollection1Vtbl fontcollectionvtbl = {
dwritefontcollection1_GetFontFamily
};
static const IDWriteFontCollection1Vtbl systemfontcollectionvtbl = {
dwritesystemfontcollection_QueryInterface,
dwritefontcollection_AddRef,
dwritefontcollection_Release,
dwritefontcollection_GetFontFamilyCount,
dwritefontcollection_GetFontFamily,
dwritefontcollection_FindFamilyName,
dwritefontcollection_GetFontFromFontFace,
dwritefontcollection1_GetFontSet,
dwritefontcollection1_GetFontFamily
};
static HRESULT fontfamily_add_font(struct dwrite_fontfamily_data *family_data, struct dwrite_font_data *font_data)
{
if (family_data->font_count + 1 >= family_data->font_alloc) {
@ -2213,12 +2243,10 @@ static HRESULT fontcollection_add_family(struct dwrite_fontcollection *collectio
static HRESULT init_font_collection(struct dwrite_fontcollection *collection, BOOL is_system)
{
collection->IDWriteFontCollection1_iface.lpVtbl = &fontcollectionvtbl;
collection->IDWriteFontCollection1_iface.lpVtbl = is_system ? &systemfontcollectionvtbl : &fontcollectionvtbl;
collection->ref = 1;
collection->family_count = 0;
collection->family_alloc = is_system ? 30 : 5;
collection->is_system = is_system;
collection->family_data = heap_alloc(sizeof(*collection->family_data) * collection->family_alloc);
if (!collection->family_data)
return E_OUTOFMEMORY;