Module: wine Branch: master Commit: 3c16587ed46f6cfad283dbc694c014ecb379f1d9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c16587ed46f6cfad283dbc694...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Dec 25 15:58:01 2015 +0300
dwrite: Locale layout ranged attribute is case-insensitive.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dwrite/layout.c | 6 +++--- dlls/dwrite/tests/layout.c | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 30fade6..62beea4 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -1600,7 +1600,7 @@ static BOOL is_same_layout_attrvalue(struct layout_range_header const *h, enum l case LAYOUT_RANGE_ATTR_FONTCOLL: return range->collection == value->u.collection; case LAYOUT_RANGE_ATTR_LOCALE: - return strcmpW(range->locale, value->u.locale) == 0; + return strcmpiW(range->locale, value->u.locale) == 0; case LAYOUT_RANGE_ATTR_FONTFAMILY: return strcmpW(range->fontfamily, value->u.fontfamily) == 0; case LAYOUT_RANGE_ATTR_SPACING: @@ -1632,7 +1632,7 @@ static inline BOOL is_same_layout_attributes(struct layout_range_header const *h left->underline == right->underline && left->pair_kerning == right->pair_kerning && left->collection == right->collection && - !strcmpW(left->locale, right->locale) && + !strcmpiW(left->locale, right->locale) && !strcmpW(left->fontfamily, right->fontfamily); } case LAYOUT_RANGE_STRIKETHROUGH: @@ -1973,7 +1973,7 @@ static BOOL set_layout_range_attrval(struct layout_range_header *h, enum layout_ changed = set_layout_range_iface_attr((IUnknown**)&dest->collection, (IUnknown*)value->u.collection); break; case LAYOUT_RANGE_ATTR_LOCALE: - changed = strcmpW(dest->locale, value->u.locale) != 0; + changed = strcmpiW(dest->locale, value->u.locale) != 0; if (changed) strcpyW(dest->locale, value->u.locale); break; diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index 6bcc538..da7dfe9 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -1982,6 +1982,7 @@ todo_wine {
static void test_SetLocaleName(void) { + static const WCHAR eNuSW[] = {'e','N','-','u','S',0}; static const WCHAR strW[] = {'a','b','c','d',0}; WCHAR buffW[LOCALE_NAME_MAX_LENGTH+sizeof(strW)/sizeof(WCHAR)]; IDWriteTextFormat *format; @@ -2018,9 +2019,11 @@ if (0) /* crashes on native */ hr = IDWriteTextLayout_GetLocaleName(layout, 0, NULL, 1, NULL);
buffW[0] = 0; - hr = IDWriteTextLayout_GetLocaleName(layout, 0, buffW, sizeof(buffW)/sizeof(WCHAR), NULL); + range.length = 0; + hr = IDWriteTextLayout_GetLocaleName(layout, 0, buffW, sizeof(buffW)/sizeof(WCHAR), &range); ok(hr == S_OK, "got 0x%08x\n", hr); ok(!lstrcmpW(buffW, strW), "got %s\n", wine_dbgstr_w(buffW)); + ok(range.startPosition == 0 && range.length == 1, "got %u,%u\n", range.startPosition, range.length);
/* get with a shorter buffer */ buffW[0] = 0xa; @@ -2043,6 +2046,29 @@ if (0) /* crashes on native */ ok(hr == S_OK, "got 0x%08x\n", hr); ok(!lstrcmpW(buffW, strW), "got %s\n", wine_dbgstr_w(buffW));
+ /* set initial locale name for whole text, except with a different casing */ + range.startPosition = 0; + range.length = 4; + hr = IDWriteTextLayout_SetLocaleName(layout, eNuSW, range); + ok(hr == S_OK, "got 0x%08x\n", hr); + + buffW[0] = 0; + range.length = 0; + hr = IDWriteTextLayout_GetLocaleName(layout, 0, buffW, sizeof(buffW)/sizeof(WCHAR), &range); + ok(hr == S_OK, "got 0x%08x\n", hr); +todo_wine { + ok(!lstrcmpW(buffW, enusW), "got %s\n", wine_dbgstr_w(buffW)); + ok(range.startPosition == 0 && range.length == ~0u, "got %u,%u\n", range.startPosition, range.length); +} + /* check what's returned for positions after the text */ + buffW[0] = 0; + range.length = 0; + hr = IDWriteTextLayout_GetLocaleName(layout, 100, buffW, sizeof(buffW)/sizeof(WCHAR), &range); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(!lstrcmpW(buffW, enusW), "got %s\n", wine_dbgstr_w(buffW)); +todo_wine + ok(range.startPosition == 0 && range.length == ~0u, "got %u,%u\n", range.startPosition, range.length); + IDWriteTextLayout_Release(layout); IDWriteTextFormat_Release(format); IDWriteFactory_Release(factory);