dwrite: Make it possible to set text alignment on created layout.
This commit is contained in:
parent
7a64715be3
commit
de46f610fe
|
@ -328,6 +328,14 @@ static inline const char *debugstr_run(const struct regular_layout_run *run)
|
|||
run->descr.stringLength);
|
||||
}
|
||||
|
||||
static inline HRESULT format_set_textalignment(struct dwrite_textformat_data *format, DWRITE_TEXT_ALIGNMENT alignment)
|
||||
{
|
||||
if ((UINT32)alignment > DWRITE_TEXT_ALIGNMENT_JUSTIFIED)
|
||||
return E_INVALIDARG;
|
||||
format->textalignment = alignment;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT get_fontfallback_from_format(const struct dwrite_textformat_data *format, IDWriteFontFallback **fallback)
|
||||
{
|
||||
*fallback = format->fallback;
|
||||
|
@ -1955,7 +1963,6 @@ static ULONG WINAPI dwritetextlayout_Release(IDWriteTextLayout2 *iface)
|
|||
static HRESULT WINAPI dwritetextlayout_SetTextAlignment(IDWriteTextLayout2 *iface, DWRITE_TEXT_ALIGNMENT alignment)
|
||||
{
|
||||
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
|
||||
TRACE("(%p)->(%d)\n", This, alignment);
|
||||
return IDWriteTextFormat1_SetTextAlignment(&This->IDWriteTextFormat1_iface, alignment);
|
||||
}
|
||||
|
||||
|
@ -2013,7 +2020,6 @@ static HRESULT WINAPI dwritetextlayout_SetLineSpacing(IDWriteTextLayout2 *iface,
|
|||
static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextlayout_GetTextAlignment(IDWriteTextLayout2 *iface)
|
||||
{
|
||||
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout2(iface);
|
||||
TRACE("(%p)\n", This);
|
||||
return IDWriteTextFormat1_GetTextAlignment(&This->IDWriteTextFormat1_iface);
|
||||
}
|
||||
|
||||
|
@ -2972,8 +2978,8 @@ static ULONG WINAPI dwritetextformat1_layout_Release(IDWriteTextFormat1 *iface)
|
|||
static HRESULT WINAPI dwritetextformat1_layout_SetTextAlignment(IDWriteTextFormat1 *iface, DWRITE_TEXT_ALIGNMENT alignment)
|
||||
{
|
||||
struct dwrite_textlayout *This = impl_layout_form_IDWriteTextFormat1(iface);
|
||||
FIXME("(%p)->(%d): stub\n", This, alignment);
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%d)\n", This, alignment);
|
||||
return format_set_textalignment(&This->format, alignment);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritetextformat1_layout_SetParagraphAlignment(IDWriteTextFormat1 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
|
||||
|
@ -3846,14 +3852,8 @@ static ULONG WINAPI dwritetextformat_Release(IDWriteTextFormat1 *iface)
|
|||
static HRESULT WINAPI dwritetextformat_SetTextAlignment(IDWriteTextFormat1 *iface, DWRITE_TEXT_ALIGNMENT alignment)
|
||||
{
|
||||
struct dwrite_textformat *This = impl_from_IDWriteTextFormat1(iface);
|
||||
|
||||
TRACE("(%p)->(%d)\n", This, alignment);
|
||||
|
||||
if ((UINT32)alignment > DWRITE_TEXT_ALIGNMENT_JUSTIFIED)
|
||||
return E_INVALIDARG;
|
||||
|
||||
This->format.textalignment = alignment;
|
||||
return S_OK;
|
||||
return format_set_textalignment(&This->format, alignment);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI dwritetextformat_SetParagraphAlignment(IDWriteTextFormat1 *iface, DWRITE_PARAGRAPH_ALIGNMENT alignment)
|
||||
|
|
|
@ -2863,6 +2863,65 @@ todo_wine {
|
|||
IDWriteFactory_Release(factory);
|
||||
}
|
||||
|
||||
static void test_SetTextAlignment(void)
|
||||
{
|
||||
static const WCHAR strW[] = {'a','b','c','d',0};
|
||||
IDWriteTextFormat1 *format1;
|
||||
IDWriteTextFormat *format;
|
||||
IDWriteTextLayout *layout;
|
||||
IDWriteFactory *factory;
|
||||
DWRITE_TEXT_ALIGNMENT 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_GetTextAlignment(format);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v);
|
||||
|
||||
hr = IDWriteFactory_CreateTextLayout(factory, strW, 4, format, 300.0, 100.0, &layout);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
|
||||
v = IDWriteTextLayout_GetTextAlignment(layout);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v);
|
||||
|
||||
hr = IDWriteTextLayout_SetTextAlignment(layout, DWRITE_TEXT_ALIGNMENT_TRAILING);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
|
||||
v = IDWriteTextFormat_GetTextAlignment(format);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v);
|
||||
|
||||
v = IDWriteTextLayout_GetTextAlignment(layout);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_TRAILING, "got %d\n", v);
|
||||
|
||||
hr = IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextFormat1, (void**)&format1);
|
||||
if (hr == S_OK) {
|
||||
hr = IDWriteTextFormat1_SetTextAlignment(format1, DWRITE_TEXT_ALIGNMENT_CENTER);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
|
||||
v = IDWriteTextFormat_GetTextAlignment(format);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", v);
|
||||
|
||||
v = IDWriteTextLayout_GetTextAlignment(layout);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_CENTER, "got %d\n", v);
|
||||
|
||||
v = IDWriteTextFormat1_GetTextAlignment(format1);
|
||||
ok(v == DWRITE_TEXT_ALIGNMENT_CENTER, "got %d\n", v);
|
||||
|
||||
IDWriteTextFormat1_Release(format1);
|
||||
}
|
||||
else
|
||||
win_skip("IDWriteTextFormat1 is not supported\n");
|
||||
|
||||
|
||||
IDWriteTextLayout_Release(layout);
|
||||
IDWriteTextFormat_Release(format);
|
||||
IDWriteFactory_Release(factory);
|
||||
}
|
||||
|
||||
START_TEST(layout)
|
||||
{
|
||||
static const WCHAR ctrlstrW[] = {0x202a,0};
|
||||
|
@ -2903,6 +2962,7 @@ START_TEST(layout)
|
|||
test_SetFlowDirection();
|
||||
test_SetDrawingEffect();
|
||||
test_GetLineMetrics();
|
||||
test_SetTextAlignment();
|
||||
|
||||
IDWriteFactory_Release(factory);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue