Nikolay Sivov : d2d1/effect: Set property index.
Module: wine Branch: master Commit: 8eff207c231a34294e28062778c6b5508d72332e URL: https://source.winehq.org/git/wine.git/?a=commit;h=8eff207c231a34294e2806277... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Sun Jun 26 13:28:05 2022 +0300 d2d1/effect: Set property index. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> --- dlls/d2d1/factory.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c index 0cb4b5df7d6..16e12d818bc 100644 --- a/dlls/d2d1/factory.c +++ b/dlls/d2d1/factory.c @@ -34,6 +34,7 @@ struct d2d_effect_property { WCHAR *name; D2D1_PROPERTY_TYPE type; + UINT32 index; union { size_t offset; @@ -50,6 +51,7 @@ struct d2d_effect_properties size_t offset; size_t size; size_t count; + size_t custom_count; struct { BYTE *ptr; @@ -766,7 +768,7 @@ static struct d2d_effect_property * parse_effect_get_property(const struct d2d_e } static HRESULT parse_effect_add_property(struct d2d_effect_properties *props, const WCHAR *name, - D2D1_PROPERTY_TYPE type, const WCHAR *value) + UINT32 index, D2D1_PROPERTY_TYPE type, const WCHAR *value) { static const UINT32 sizes[] = { @@ -814,6 +816,8 @@ static HRESULT parse_effect_add_property(struct d2d_effect_properties *props, co } p = &props->properties[props->count++]; + p->index = index; + if (p->index < 0x80000000) props->custom_count++; p->name = wcsdup(name); p->type = type; if (p->type == D2D1_PROPERTY_TYPE_STRING) @@ -834,11 +838,22 @@ static HRESULT parse_effect_add_property(struct d2d_effect_properties *props, co return S_OK; } +static UINT32 parse_effect_get_property_index(struct d2d_effect_properties *props, + const WCHAR *name) +{ + if (!wcscmp(name, L"DisplayName")) return D2D1_PROPERTY_DISPLAYNAME; + if (!wcscmp(name, L"Author")) return D2D1_PROPERTY_AUTHOR; + if (!wcscmp(name, L"Category")) return D2D1_PROPERTY_CATEGORY; + if (!wcscmp(name, L"Description")) return D2D1_PROPERTY_DESCRIPTION; + return props->custom_count; +} + static HRESULT parse_effect_property(IXmlReader *reader, struct d2d_effect_registration *effect) { WCHAR *name = NULL, *value = NULL; D2D1_PROPERTY_TYPE type; unsigned int depth; + UINT32 index; HRESULT hr; if (FAILED(hr = parse_effect_get_attribute(reader, L"name", &name))) @@ -865,7 +880,10 @@ static HRESULT parse_effect_property(IXmlReader *reader, struct d2d_effect_regis } if (SUCCEEDED(hr)) - hr = parse_effect_add_property(&effect->properties, name, type, value); + { + index = parse_effect_get_property_index(&effect->properties, name); + hr = parse_effect_add_property(&effect->properties, name, index, type, value); + } free(value); free(name);
participants (1)
-
Alexandre Julliard