Nikolay Sivov : dwrite: Remove flag marking system collections.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Mar 9 08:05:55 CST 2016
Module: wine
Branch: master
Commit: 42de7a468cd76693f0b3dc0be0a239bc5497a80c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=42de7a468cd76693f0b3dc0be0a239bc5497a80c
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Mar 8 22:46:54 2016 +0300
dwrite: Remove flag marking system collections.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dwrite/font.c | 40 ++++++++++++++++++++++++++++++++++------
1 file changed, 34 insertions(+), 6 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 5d29038..0c04d56 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -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;
More information about the wine-cvs
mailing list