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:
parent
6ba2c25d45
commit
3c16587ed4
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue