[PATCH 4/5] dwrite: Remove flag marking system collections

Nikolay Sivov nsivov at codeweavers.com
Tue Mar 8 13:46:54 CST 2016


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 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;
-- 
2.7.0




More information about the wine-patches mailing list