Nikolay Sivov : dwrite: Added a stub for IDWriteFontCollection.

Alexandre Julliard julliard at winehq.org
Mon Oct 22 13:42:45 CDT 2012


Module: wine
Branch: master
Commit: be699372c2150d1d2dd3b8496cf370981ceb6581
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=be699372c2150d1d2dd3b8496cf370981ceb6581

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat Oct 20 21:43:01 2012 -0400

dwrite: Added a stub for IDWriteFontCollection.

---

 dlls/dwrite/dwrite_private.h |    1 +
 dlls/dwrite/font.c           |  103 ++++++++++++++++++++++++++++++++++++++++++
 dlls/dwrite/main.c           |    4 +-
 3 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h
index 9e63da0..3135ade 100644
--- a/dlls/dwrite/dwrite_private.h
+++ b/dlls/dwrite/dwrite_private.h
@@ -68,6 +68,7 @@ static inline LPWSTR heap_strdupnW(const WCHAR *str, UINT32 len)
 }
 
 extern HRESULT create_font_from_logfont(const LOGFONTW*, IDWriteFont**) DECLSPEC_HIDDEN;
+extern HRESULT create_fontcollection(IDWriteFontCollection**) DECLSPEC_HIDDEN;
 extern HRESULT create_textformat(const WCHAR*,DWRITE_FONT_WEIGHT,DWRITE_FONT_STYLE,DWRITE_FONT_STRETCH,
                                  FLOAT,const WCHAR*,IDWriteTextFormat**) DECLSPEC_HIDDEN;
 extern HRESULT create_textlayout(const WCHAR*,UINT32,IDWriteTextLayout**) DECLSPEC_HIDDEN;
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index 90131b8..bb3e8a6 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -127,6 +127,11 @@ typedef struct
 #define MS_OS2_TAG  MS_MAKE_TAG('O','S','/','2')
 #define MS_POST_TAG MS_MAKE_TAG('p','o','s','t')
 
+struct dwrite_fontcollection {
+    IDWriteFontCollection IDWriteFontCollection_iface;
+    LONG ref;
+};
+
 struct dwrite_fontfamily {
     IDWriteFontFamily IDWriteFontFamily_iface;
     LONG ref;
@@ -166,6 +171,11 @@ static inline struct dwrite_fontfamily *impl_from_IDWriteFontFamily(IDWriteFontF
     return CONTAINING_RECORD(iface, struct dwrite_fontfamily, IDWriteFontFamily_iface);
 }
 
+static inline struct dwrite_fontcollection *impl_from_IDWriteFontCollection(IDWriteFontCollection *iface)
+{
+    return CONTAINING_RECORD(iface, struct dwrite_fontcollection, IDWriteFontCollection_iface);
+}
+
 static HRESULT WINAPI dwritefontface_QueryInterface(IDWriteFontFace *iface, REFIID riid, void **obj)
 {
     struct dwrite_fontface *This = impl_from_IDWriteFontFace(iface);
@@ -614,6 +624,99 @@ static const IDWriteFontFamilyVtbl fontfamilyvtbl = {
     dwritefontfamily_GetMatchingFonts
 };
 
+static HRESULT WINAPI dwritefontcollection_QueryInterface(IDWriteFontCollection *iface, REFIID riid, void **obj)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
+
+    if (IsEqualIID(riid, &IID_IUnknown) ||
+        IsEqualIID(riid, &IID_IDWriteFontCollection))
+    {
+        *obj = iface;
+        IDWriteFontCollection_AddRef(iface);
+        return S_OK;
+    }
+
+    *obj = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI dwritefontcollection_AddRef(IDWriteFontCollection *iface)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+    TRACE("(%p)->(%d)\n", This, ref);
+    return ref;
+}
+
+static ULONG WINAPI dwritefontcollection_Release(IDWriteFontCollection *iface)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p)->(%d)\n", This, ref);
+
+    if (!ref)
+        heap_free(This);
+
+    return ref;
+}
+
+static UINT32 WINAPI dwritefontcollection_GetFontFamilyCount(IDWriteFontCollection *iface)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    FIXME("(%p): stub\n", This);
+    return 0;
+}
+
+static HRESULT WINAPI dwritefontcollection_GetFontFamily(IDWriteFontCollection *iface, UINT32 index, IDWriteFontFamily **family)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    FIXME("(%p)->(%u %p): stub\n", This, index, family);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritefontcollection_FindFamilyName(IDWriteFontCollection *iface, const WCHAR *name, UINT32 *index, BOOL *exists)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    FIXME("(%p)->(%s %p %p): stub\n", This, debugstr_w(name), index, exists);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI dwritefontcollection_GetFontFromFontFace(IDWriteFontCollection *iface, IDWriteFontFace *face, IDWriteFont **font)
+{
+    struct dwrite_fontcollection *This = impl_from_IDWriteFontCollection(iface);
+    FIXME("(%p)->(%p %p): stub\n", This, face, font);
+    return E_NOTIMPL;
+}
+
+static const IDWriteFontCollectionVtbl fontcollectionvtbl = {
+    dwritefontcollection_QueryInterface,
+    dwritefontcollection_AddRef,
+    dwritefontcollection_Release,
+    dwritefontcollection_GetFontFamilyCount,
+    dwritefontcollection_GetFontFamily,
+    dwritefontcollection_FindFamilyName,
+    dwritefontcollection_GetFontFromFontFace
+};
+
+HRESULT create_fontcollection(IDWriteFontCollection **collection)
+{
+    struct dwrite_fontcollection *This;
+
+    *collection = NULL;
+
+    This = heap_alloc(sizeof(struct dwrite_fontcollection));
+    if (!This) return E_OUTOFMEMORY;
+
+    This->IDWriteFontCollection_iface.lpVtbl = &fontcollectionvtbl;
+    This->ref = 1;
+
+    *collection = &This->IDWriteFontCollection_iface;
+
+    return S_OK;
+}
+
 static HRESULT create_fontfamily(const WCHAR *familyname, IDWriteFontFamily **family)
 {
     struct dwrite_fontfamily *This;
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index 75445e8..29552c6 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -384,8 +384,8 @@ static ULONG WINAPI dwritefactory_Release(IDWriteFactory *iface)
 static HRESULT WINAPI dwritefactory_GetSystemFontCollection(IDWriteFactory *iface,
     IDWriteFontCollection **collection, BOOL check_for_updates)
 {
-    FIXME("(%p %d): stub\n", collection, check_for_updates);
-    return E_NOTIMPL;
+    FIXME("(%p %d): semi-stub\n", collection, check_for_updates);
+    return create_fontcollection(collection);
 }
 
 static HRESULT WINAPI dwritefactory_CreateCustomFontCollection(IDWriteFactory *iface,




More information about the wine-cvs mailing list