dwrite: Implement SetWordWrapping() for layout.

This commit is contained in:
Nikolay Sivov 2015-07-12 23:35:32 +03:00 committed by Alexandre Julliard
parent cf5d9848d8
commit 2f79a876f9
2 changed files with 63 additions and 10 deletions

View File

@ -363,6 +363,16 @@ static inline HRESULT format_set_readingdirection(struct dwrite_textformat_data
return S_OK; return S_OK;
} }
static inline HRESULT format_set_wordwrapping(struct dwrite_textformat_data *format,
DWRITE_WORD_WRAPPING wrapping, BOOL *changed)
{
if ((UINT32)wrapping > DWRITE_WORD_WRAPPING_CHARACTER)
return E_INVALIDARG;
if (changed) *changed = format->wrapping != wrapping;
format->wrapping = wrapping;
return S_OK;
}
static HRESULT get_fontfallback_from_format(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback) static HRESULT get_fontfallback_from_format(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback)
{ {
*fallback = format->fallback; *fallback = format->fallback;
@ -2199,7 +2209,6 @@ static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout2
static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout2 *iface, DWRITE_WORD_WRAPPING wrapping) static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout2 *iface, DWRITE_WORD_WRAPPING wrapping)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
TRACE("(%p)->(%d)\n", This, wrapping);
return IDWriteTextFormat1_SetWordWrapping(&This->IDWriteTextFormat1_iface, wrapping); return IDWriteTextFormat1_SetWordWrapping(&This->IDWriteTextFormat1_iface, wrapping);
} }
@ -3296,8 +3305,19 @@ static HRESULT WINAPI dwritetextformat1_layout_SetParagraphAlignment(IDWriteText
static HRESULT WINAPI dwritetextformat1_layout_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping) static HRESULT WINAPI dwritetextformat1_layout_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping)
{ {
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface); struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
FIXME("(%p)->(%d): stub\n", This, wrapping); BOOL changed;
return E_NOTIMPL; HRESULT hr;
TRACE("(%p)->(%d)\n", This, wrapping);
hr = format_set_wordwrapping(&This->format, wrapping, &changed);
if (FAILED(hr))
return hr;
if (changed)
This->recompute |= RECOMPUTE_EFFECTIVE_RUNS;
return S_OK;
} }
static HRESULT WINAPI dwritetextformat1_layout_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction) static HRESULT WINAPI dwritetextformat1_layout_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction)
@ -4181,14 +4201,8 @@ static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat1
static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping) static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping)
{ {
struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface); struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface);
TRACE("(%p)->(%d)\n", This, wrapping); TRACE("(%p)->(%d)\n", This, wrapping);
return format_set_wordwrapping(&This->format, wrapping, NULL);
if ((UINT32)wrapping > DWRITE_WORD_WRAPPING_CHARACTER)
return E_INVALIDARG;
This->format.wrapping = wrapping;
return S_OK;
} }
static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction) static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction)

View File

@ -3396,6 +3396,44 @@ static void test_pixelsnapping(void)
IDWriteFactory_Release(factory); IDWriteFactory_Release(factory);
} }
static void test_SetWordWrapping(void)
{
static const WCHAR strW[] = {'a',0};
IDWriteTextFormat *format;
IDWriteTextLayout *layout;
IDWriteFactory *factory;
DWRITE_WORD_WRAPPING v;
HRESULT hr;
factory = create_factory();
hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, 12.0, enusW, &format);
ok(hr == S_OK, "got 0x%08x\n", hr);
v = IDWriteTextFormat_GetWordWrapping(format);
ok(v == DWRITE_WORD_WRAPPING_WRAP, "got %d\n", v);
hr = IDWriteFactory_CreateTextLayout(factory, strW, 1, format, 500.0, 100.0, &layout);
ok(hr == S_OK, "got 0x%08x\n", hr);
v = IDWriteTextLayout_GetWordWrapping(layout);
ok(v == DWRITE_WORD_WRAPPING_WRAP, "got %d\n", v);
hr = IDWriteTextLayout_SetWordWrapping(layout, DWRITE_WORD_WRAPPING_NO_WRAP);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteTextLayout_SetWordWrapping(layout, DWRITE_WORD_WRAPPING_NO_WRAP);
ok(hr == S_OK, "got 0x%08x\n", hr);
v = IDWriteTextFormat_GetWordWrapping(format);
ok(v == DWRITE_WORD_WRAPPING_WRAP, "got %d\n", v);
IDWriteTextLayout_Release(layout);
IDWriteTextFormat_Release(format);
IDWriteFactory_Release(factory);
}
START_TEST(layout) START_TEST(layout)
{ {
static const WCHAR ctrlstrW[] = {0x202a,0}; static const WCHAR ctrlstrW[] = {0x202a,0};
@ -3440,6 +3478,7 @@ START_TEST(layout)
test_SetParagraphAlignment(); test_SetParagraphAlignment();
test_SetReadingDirection(); test_SetReadingDirection();
test_pixelsnapping(); test_pixelsnapping();
test_SetWordWrapping();
IDWriteFactory_Release(factory); IDWriteFactory_Release(factory);
} }