Module: wine Branch: master Commit: 15ef946f53f66f327a7ed45a0d2856aaff726561 URL: http://source.winehq.org/git/wine.git/?a=commit;h=15ef946f53f66f327a7ed45a0d...
Author: Aric Stewart aric@codeweavers.com Date: Mon Sep 8 19:10:48 2014 -0500
dwrite: Break fontfamily data into its own structure.
---
dlls/dwrite/font.c | 61 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 25 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 8b59a37..efa305e 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -58,6 +58,14 @@ struct dwrite_font_data { WCHAR *facename; };
+struct dwrite_fontfamily_data { + IDWriteLocalizedStrings *familyname; + + struct dwrite_font_data **fonts; + UINT32 font_count; + UINT32 alloc; +}; + struct dwrite_fontcollection { IDWriteFontCollection IDWriteFontCollection_iface; LONG ref; @@ -71,13 +79,9 @@ struct dwrite_fontfamily { IDWriteFontFamily IDWriteFontFamily_iface; LONG ref;
- struct dwrite_font_data **fonts; - UINT32 font_count; - UINT32 alloc; + struct dwrite_fontfamily_data *data;
IDWriteFontCollection* collection; - - IDWriteLocalizedStrings *familyname; };
struct dwrite_font { @@ -744,13 +748,14 @@ static ULONG WINAPI dwritefontfamily_Release(IDWriteFontFamily *iface) if (!ref) { int i; - IDWriteLocalizedStrings_Release(This->familyname); + IDWriteLocalizedStrings_Release(This->data->familyname);
if (This->collection) IDWriteFontCollection_Release(This->collection); - for (i = 0; i < This->font_count; i++) - _free_font_data(This->fonts[i]); - heap_free(This->fonts); + for (i = 0; i < This->data->font_count; i++) + _free_font_data(This->data->fonts[i]); + heap_free(This->data->fonts); + heap_free(This->data); heap_free(This); }
@@ -775,19 +780,19 @@ static UINT32 WINAPI dwritefontfamily_GetFontCount(IDWriteFontFamily *iface) { struct dwrite_fontfamily *This = impl_from_IDWriteFontFamily(iface); TRACE("(%p)\n", This); - return This->font_count; + return This->data->font_count; }
static HRESULT WINAPI dwritefontfamily_GetFont(IDWriteFontFamily *iface, UINT32 index, IDWriteFont **font) { struct dwrite_fontfamily *This = impl_from_IDWriteFontFamily(iface); TRACE("(%p)->(%u %p)\n", This, index, font); - if (This->font_count > 0) + if (This->data->font_count > 0) { HRESULT hr; - if (index >= This->font_count) + if (index >= This->data->font_count) return E_INVALIDARG; - hr = create_font_from_data(This->fonts[index], font); + hr = create_font_from_data(This->data->fonts[index], font); if (SUCCEEDED(hr)) { struct dwrite_font *font_data = impl_from_IDWriteFont(*font); @@ -803,7 +808,7 @@ static HRESULT WINAPI dwritefontfamily_GetFont(IDWriteFontFamily *iface, UINT32 static HRESULT WINAPI dwritefontfamily_GetFamilyNames(IDWriteFontFamily *iface, IDWriteLocalizedStrings **names) { struct dwrite_fontfamily *This = impl_from_IDWriteFontFamily(iface); - return clone_localizedstring(This->familyname, names); + return clone_localizedstring(This->data->familyname, names); }
static HRESULT WINAPI dwritefontfamily_GetFirstMatchingFont(IDWriteFontFamily *iface, DWRITE_FONT_WEIGHT weight, @@ -815,26 +820,26 @@ static HRESULT WINAPI dwritefontfamily_GetFirstMatchingFont(IDWriteFontFamily *i TRACE("(%p)->(%d %d %d %p)\n", This, weight, stretch, style, font);
/* fallback for system font collections */ - if (This->font_count == 0) + if (This->data->font_count == 0) { memset(&lf, 0, sizeof(lf)); lf.lfWeight = weight; lf.lfItalic = style == DWRITE_FONT_STYLE_ITALIC; - IDWriteLocalizedStrings_GetString(This->familyname, 0, lf.lfFaceName, LF_FACESIZE); + IDWriteLocalizedStrings_GetString(This->data->familyname, 0, lf.lfFaceName, LF_FACESIZE);
return create_font_from_logfont(&lf, font); } else { int i; - for (i = 0; i < This->font_count; i++) + for (i = 0; i < This->data->font_count; i++) { - if (style == This->fonts[i]->style && - weight == This->fonts[i]->weight && - stretch == This->fonts[i]->stretch) + if (style == This->data->fonts[i]->style && + weight == This->data->fonts[i]->weight && + stretch == This->data->fonts[i]->stretch) { HRESULT hr; - hr = create_font_from_data(This->fonts[i], font); + hr = create_font_from_data(This->data->fonts[i], font); if (SUCCEEDED(hr)) { struct dwrite_font *font_data = impl_from_IDWriteFont(*font); @@ -1043,14 +1048,20 @@ static HRESULT create_fontfamily(IDWriteLocalizedStrings *familyname, IDWriteFon
This = heap_alloc(sizeof(struct dwrite_fontfamily)); if (!This) return E_OUTOFMEMORY; + This->data = heap_alloc(sizeof(struct dwrite_fontfamily_data)); + if (!This) + { + heap_free(This); + return E_OUTOFMEMORY; + }
This->IDWriteFontFamily_iface.lpVtbl = &fontfamilyvtbl; This->ref = 1; - This->font_count = 0; - This->alloc = 2; - This->fonts = heap_alloc(sizeof(*This->fonts) * 2); + This->data->font_count = 0; + This->data->alloc = 2; + This->data->fonts = heap_alloc(sizeof(*This->data->fonts) * 2); This->collection = NULL; - This->familyname = familyname; + This->data->familyname = familyname;
*family = &This->IDWriteFontFamily_iface;