Nikolay Sivov : dwrite: Implement SetWordWrapping() for layout.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 13 09:30:03 CDT 2015
Module: wine
Branch: master
Commit: 2f79a876f917c1664fb9e5728a5f14ad3a4c45bc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f79a876f917c1664fb9e5728a5f14ad3a4c45bc
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Jul 12 23:35:32 2015 +0300
dwrite: Implement SetWordWrapping() for layout.
---
dlls/dwrite/layout.c | 34 ++++++++++++++++++++++++----------
dlls/dwrite/tests/layout.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+), 10 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index 70e2095..398c4ee 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -363,6 +363,16 @@ static inline HRESULT format_set_readingdirection(struct dwrite_textformat_data
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)
{
*fallback = format->fallback;
@@ -2199,7 +2209,6 @@ static HRESULT WINAPI dwritetextlayout_SetParagraphAlignment(IDWriteTextLayout2
static HRESULT WINAPI dwritetextlayout_SetWordWrapping(IDWriteTextLayout2 *iface, DWRITE_WORD_WRAPPING wrapping)
{
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
- TRACE("(%p)->(%d)\n", This, 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)
{
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
- FIXME("(%p)->(%d): stub\n", This, wrapping);
- return E_NOTIMPL;
+ BOOL changed;
+ 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)
@@ -4181,14 +4201,8 @@ static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat1
static HRESULT WINAPI dwritetextformat_SetWordWrapping(IDWriteTextFormat1 *iface, DWRITE_WORD_WRAPPING wrapping)
{
struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface);
-
TRACE("(%p)->(%d)\n", This, wrapping);
-
- if ((UINT32)wrapping > DWRITE_WORD_WRAPPING_CHARACTER)
- return E_INVALIDARG;
-
- This->format.wrapping = wrapping;
- return S_OK;
+ return format_set_wordwrapping(&This->format, wrapping, NULL);
}
static HRESULT WINAPI dwritetextformat_SetReadingDirection(IDWriteTextFormat1 *iface, DWRITE_READING_DIRECTION direction)
diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c
index 76bcdff..fa8d03a 100644
--- a/dlls/dwrite/tests/layout.c
+++ b/dlls/dwrite/tests/layout.c
@@ -3396,6 +3396,44 @@ static void test_pixelsnapping(void)
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)
{
static const WCHAR ctrlstrW[] = {0x202a,0};
@@ -3440,6 +3478,7 @@ START_TEST(layout)
test_SetParagraphAlignment();
test_SetReadingDirection();
test_pixelsnapping();
+ test_SetWordWrapping();
IDWriteFactory_Release(factory);
}
More information about the wine-cvs
mailing list