[PATCH 6/9] dwrite: Use separate structure for set entry description.
Nikolay Sivov
nsivov at codeweavers.com
Mon Apr 25 05:31:46 CDT 2022
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/font.c | 81 ++++++++++++++++++++++++----------------------
1 file changed, 43 insertions(+), 38 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index aa14eb3360c..bdd8c7fcc8b 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -452,13 +452,18 @@ struct dwrite_fontresource
IDWriteFactory7 *factory;
};
-struct dwrite_fontset_entry
+struct dwrite_fontset_entry_desc
{
- LONG refcount;
IDWriteFontFile *file;
DWRITE_FONT_FACE_TYPE face_type;
unsigned int face_index;
unsigned int simulations;
+};
+
+struct dwrite_fontset_entry
+{
+ LONG refcount;
+ struct dwrite_fontset_entry_desc desc;
IDWriteLocalizedStrings *props[DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME + 1];
};
@@ -7465,7 +7470,7 @@ static void release_fontset_entry(struct dwrite_fontset_entry *entry)
if (InterlockedDecrement(&entry->refcount) > 0)
return;
- IDWriteFontFile_Release(entry->file);
+ IDWriteFontFile_Release(entry->desc.file);
for (i = 0; i < ARRAY_SIZE(entry->props); ++i)
{
if (entry->props[i] && entry->props[i] != MISSING_SET_PROP)
@@ -7497,9 +7502,9 @@ static IDWriteLocalizedStrings * fontset_entry_get_property(struct dwrite_fontse
return value;
}
- get_filestream_from_file(entry->file, &stream_desc.stream);
- stream_desc.face_type = entry->face_type;
- stream_desc.face_index = entry->face_index;
+ get_filestream_from_file(entry->desc.file, &stream_desc.stream);
+ stream_desc.face_type = entry->desc.face_type;
+ stream_desc.face_index = entry->desc.face_index;
if (property == DWRITE_FONT_PROPERTY_ID_FULL_NAME)
opentype_get_font_info_strings(&stream_desc, DWRITE_INFORMATIONAL_STRING_FULL_NAME, &value);
@@ -7572,8 +7577,8 @@ static HRESULT WINAPI dwritefontset_GetFontFaceReference(IDWriteFontSet3 *iface,
if (index >= set->count)
return E_INVALIDARG;
- return IDWriteFactory7_CreateFontFaceReference_(set->factory, set->entries[index]->file,
- set->entries[index]->face_index, set->entries[index]->simulations, reference);
+ return IDWriteFactory7_CreateFontFaceReference_(set->factory, set->entries[index]->desc.file,
+ set->entries[index]->desc.face_index, set->entries[index]->desc.simulations, reference);
}
static HRESULT WINAPI dwritefontset_FindFontFaceReference(IDWriteFontSet3 *iface,
@@ -7820,8 +7825,8 @@ static HRESULT WINAPI dwritefontset1_CreateFontResource(IDWriteFontSet3 *iface,
if (index >= set->count)
return E_INVALIDARG;
- return IDWriteFactory7_CreateFontResource(set->factory, set->entries[index]->file,
- set->entries[index]->face_index, resource);
+ return IDWriteFactory7_CreateFontResource(set->factory, set->entries[index]->desc.file,
+ set->entries[index]->desc.face_index, resource);
}
static HRESULT WINAPI dwritefontset1_CreateFontFace(IDWriteFontSet3 *iface, UINT32 index, IDWriteFontFace5 **fontface)
@@ -7909,11 +7914,11 @@ static HRESULT fontset_create_entry(IDWriteFontFile *file, DWRITE_FONT_FACE_TYPE
return E_OUTOFMEMORY;
entry->refcount = 1;
- entry->file = file;
- IDWriteFontFile_AddRef(entry->file);
- entry->face_type = face_type;
- entry->face_index = face_index;
- entry->simulations = simulations;
+ entry->desc.file = file;
+ IDWriteFontFile_AddRef(entry->desc.file);
+ entry->desc.face_type = face_type;
+ entry->desc.face_index = face_index;
+ entry->desc.simulations = simulations;
*ret = entry;
@@ -8034,8 +8039,7 @@ static ULONG WINAPI dwritefontsetbuilder_Release(IDWriteFontSetBuilder2 *iface)
return refcount;
}
-static HRESULT fontset_builder_add_entry(struct dwrite_fontset_builder *builder, IDWriteFontFile *file,
- DWRITE_FONT_FACE_TYPE face_type, unsigned int face_index, unsigned int simulations)
+static HRESULT fontset_builder_add_entry(struct dwrite_fontset_builder *builder, const struct dwrite_fontset_entry_desc *desc)
{
struct dwrite_fontset_entry *entry;
HRESULT hr;
@@ -8046,7 +8050,7 @@ static HRESULT fontset_builder_add_entry(struct dwrite_fontset_builder *builder,
return E_OUTOFMEMORY;
}
- if (FAILED(hr = fontset_create_entry(file, face_type, face_index, simulations, &entry)))
+ if (FAILED(hr = fontset_create_entry(desc->file, desc->face_type, desc->face_index, desc->simulations, &entry)))
return hr;
builder->entries[builder->count++] = entry;
@@ -8056,13 +8060,14 @@ static HRESULT fontset_builder_add_entry(struct dwrite_fontset_builder *builder,
static HRESULT fontset_builder_add_file(struct dwrite_fontset_builder *builder, IDWriteFontFile *file)
{
+ struct dwrite_fontset_entry_desc desc = { 0 };
DWRITE_FONT_FILE_TYPE filetype;
- DWRITE_FONT_FACE_TYPE facetype;
unsigned int i, face_count;
BOOL supported = FALSE;
HRESULT hr;
- if (FAILED(hr = IDWriteFontFile_Analyze(file, &supported, &filetype, &facetype, &face_count)))
+ desc.file = file;
+ if (FAILED(hr = IDWriteFontFile_Analyze(desc.file, &supported, &filetype, &desc.face_type, &face_count)))
return hr;
if (!supported)
@@ -8070,7 +8075,8 @@ static HRESULT fontset_builder_add_file(struct dwrite_fontset_builder *builder,
for (i = 0; i < face_count; ++i)
{
- if (FAILED(hr = fontset_builder_add_entry(builder, file, facetype, i, DWRITE_FONT_SIMULATIONS_NONE)))
+ desc.face_index = i;
+ if (FAILED(hr = fontset_builder_add_entry(builder, &desc)))
break;
}
@@ -8086,34 +8092,33 @@ static HRESULT WINAPI dwritefontsetbuilder_AddFontFaceReference_(IDWriteFontSetB
}
static HRESULT WINAPI dwritefontsetbuilder_AddFontFaceReference(IDWriteFontSetBuilder2 *iface,
- IDWriteFontFaceReference *ref)
+ IDWriteFontFaceReference *reference)
{
struct dwrite_fontset_builder *builder = impl_from_IDWriteFontSetBuilder2(iface);
- unsigned int face_count, face_index, simulations;
+ struct dwrite_fontset_entry_desc desc = { 0 };
DWRITE_FONT_FILE_TYPE file_type;
- DWRITE_FONT_FACE_TYPE face_type;
- IDWriteFontFile *file;
+ unsigned int face_count;
BOOL supported;
HRESULT hr;
- TRACE("%p, %p.\n", iface, ref);
+ TRACE("%p, %p.\n", iface, reference);
- if (FAILED(hr = IDWriteFontFaceReference_GetFontFile(ref, &file))) return hr;
- if (FAILED(hr = IDWriteFontFile_Analyze(file, &supported, &file_type, &face_type, &face_count)))
- goto done;
+ if (FAILED(hr = IDWriteFontFaceReference_GetFontFile(reference, &desc.file))) return hr;
- if (!supported)
+ if (SUCCEEDED(hr = IDWriteFontFile_Analyze(desc.file, &supported, &file_type, &desc.face_type, &face_count)))
{
- hr = DWRITE_E_FILEFORMAT;
- goto done;
- }
+ if (!supported)
+ hr = DWRITE_E_FILEFORMAT;
- face_index = IDWriteFontFaceReference_GetFontFaceIndex(ref);
- simulations = IDWriteFontFaceReference_GetSimulations(ref);
- hr = fontset_builder_add_entry(builder, file, face_type, face_index, simulations);
+ if (SUCCEEDED(hr))
+ {
+ desc.face_index = IDWriteFontFaceReference_GetFontFaceIndex(reference);
+ desc.simulations = IDWriteFontFaceReference_GetSimulations(reference);
+ hr = fontset_builder_add_entry(builder, &desc);
+ }
+ }
-done:
- IDWriteFontFile_Release(file);
+ IDWriteFontFile_Release(desc.file);
return hr;
}
--
2.35.1
More information about the wine-devel
mailing list