dwrite: Locale layout ranged attribute is case-insensitive.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2015-12-25 15:58:01 +03:00 committed by Alexandre Julliard
parent 6ba2c25d45
commit 3c16587ed4
2 changed files with 30 additions and 4 deletions

View File

@ -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;

View File

@ -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);