Module: wine Branch: master Commit: 10431905e50baa8d0b3ffaf50b9af3a34bf57157 URL: http://source.winehq.org/git/wine.git/?a=commit;h=10431905e50baa8d0b3ffaf50b...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Oct 22 00:06:03 2012 -0400
dwrite: Implement GetFontFamily() for system font collection.
---
dlls/dwrite/font.c | 14 ++++++++++++-- dlls/dwrite/tests/font.c | 7 +++++++ 2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 60aa7db..bdc84ee 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -161,6 +161,8 @@ struct dwrite_fontface { LONG ref; };
+static HRESULT create_fontfamily(const WCHAR *familyname, IDWriteFontFamily **family); + static inline struct dwrite_fontface *impl_from_IDWriteFontFace(IDWriteFontFace *iface) { return CONTAINING_RECORD(iface, struct dwrite_fontface, IDWriteFontFace_iface); @@ -666,8 +668,16 @@ static UINT32 WINAPI dwritefontcollection_GetFontFamilyCount(IDWriteFontCollecti 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; + + TRACE("(%p)->(%u %p)\n", This, index, family); + + if (index >= This->count) + { + *family = NULL; + return E_FAIL; + } + + return create_fontfamily(This->families[index], family); }
static HRESULT WINAPI dwritefontcollection_FindFamilyName(IDWriteFontCollection *iface, const WCHAR *name, UINT32 *index, BOOL *exists) diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 423c876..dde50eb 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -526,6 +526,7 @@ todo_wine static void test_system_fontcollection(void) { IDWriteFontCollection *collection, *coll2; + IDWriteFontFamily *family; HRESULT hr; UINT32 i; BOOL ret; @@ -546,6 +547,12 @@ static void test_system_fontcollection(void) i = IDWriteFontCollection_GetFontFamilyCount(collection); ok(i, "got %u\n", i);
+ /* invalid index */ + family = (void*)0xdeadbeef; + hr = IDWriteFontCollection_GetFontFamily(collection, i, &family); + ok(hr == E_FAIL, "got 0x%08x\n", hr); + ok(family == NULL, "got %p\n", family); + ret = FALSE; i = (UINT32)-1; hr = IDWriteFontCollection_FindFamilyName(collection, tahomaW, &i, &ret);