diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index b77f29fc8d9..942673d54d9 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -42,6 +42,15 @@ struct dwrite_textformat_data { DWRITE_FONT_STYLE style; DWRITE_FONT_STRETCH stretch; + DWRITE_PARAGRAPH_ALIGNMENT paralign; + DWRITE_READING_DIRECTION readingdir; + DWRITE_WORD_WRAPPING wrapping; + DWRITE_TEXT_ALIGNMENT textalignment; + DWRITE_FLOW_DIRECTION flow; + DWRITE_LINE_SPACING_METHOD spacingmethod; + + FLOAT spacing; + FLOAT baseline; FLOAT size; IDWriteFontCollection *collection; @@ -699,6 +708,16 @@ static void layout_format_from_textformat(struct dwrite_textlayout *layout, IDWr layout->format.style = IDWriteTextFormat_GetFontStyle(format); layout->format.stretch = IDWriteTextFormat_GetFontStretch(format); layout->format.size = IDWriteTextFormat_GetFontSize(format); + layout->format.textalignment = IDWriteTextFormat_GetTextAlignment(format); + layout->format.paralign = IDWriteTextFormat_GetParagraphAlignment(format); + layout->format.wrapping = IDWriteTextFormat_GetWordWrapping(format); + layout->format.readingdir = IDWriteTextFormat_GetReadingDirection(format); + layout->format.flow = IDWriteTextFormat_GetFlowDirection(format); + IDWriteTextFormat_GetLineSpacing(format, + &layout->format.spacingmethod, + &layout->format.spacing, + &layout->format.baseline + ); /* locale name and length */ locale_len = IDWriteTextFormat_GetLocaleNameLength(format); @@ -840,36 +859,36 @@ static HRESULT WINAPI dwritetextformat_SetLineSpacing(IDWriteTextFormat *iface, static DWRITE_TEXT_ALIGNMENT WINAPI dwritetextformat_GetTextAlignment(IDWriteTextFormat *iface) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p): stub\n", This); - return DWRITE_TEXT_ALIGNMENT_LEADING; + TRACE("(%p)\n", This); + return This->format.textalignment; } static DWRITE_PARAGRAPH_ALIGNMENT WINAPI dwritetextformat_GetParagraphAlignment(IDWriteTextFormat *iface) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p): stub\n", This); - return DWRITE_PARAGRAPH_ALIGNMENT_NEAR; + TRACE("(%p)\n", This); + return This->format.paralign; } static DWRITE_WORD_WRAPPING WINAPI dwritetextformat_GetWordWrapping(IDWriteTextFormat *iface) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p): stub\n", This); - return DWRITE_WORD_WRAPPING_NO_WRAP; + TRACE("(%p)\n", This); + return This->format.wrapping; } static DWRITE_READING_DIRECTION WINAPI dwritetextformat_GetReadingDirection(IDWriteTextFormat *iface) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p): stub\n", This); - return DWRITE_READING_DIRECTION_LEFT_TO_RIGHT; + TRACE("(%p)\n", This); + return This->format.readingdir; } static DWRITE_FLOW_DIRECTION WINAPI dwritetextformat_GetFlowDirection(IDWriteTextFormat *iface) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p): stub\n", This); - return DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM; + TRACE("(%p)\n", This); + return This->format.flow; } static FLOAT WINAPI dwritetextformat_GetIncrementalTabStop(IDWriteTextFormat *iface) @@ -891,8 +910,12 @@ static HRESULT WINAPI dwritetextformat_GetLineSpacing(IDWriteTextFormat *iface, FLOAT *spacing, FLOAT *baseline) { struct dwrite_textformat *This = impl_from_IDWriteTextFormat(iface); - FIXME("(%p)->(%p %p %p): stub\n", This, method, spacing, baseline); - return E_NOTIMPL; + TRACE("(%p)->(%p %p %p)\n", This, method, spacing, baseline); + + *method = This->format.spacingmethod; + *spacing = This->format.spacing; + *baseline = This->format.baseline; + return S_OK; } static HRESULT WINAPI dwritetextformat_GetFontCollection(IDWriteTextFormat *iface, IDWriteFontCollection **collection) @@ -1022,6 +1045,14 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle This->format.style = style; This->format.size = size; This->format.stretch = stretch; + This->format.textalignment = DWRITE_TEXT_ALIGNMENT_LEADING; + This->format.paralign = DWRITE_PARAGRAPH_ALIGNMENT_NEAR; + This->format.wrapping = DWRITE_WORD_WRAPPING_WRAP; + This->format.readingdir = DWRITE_READING_DIRECTION_LEFT_TO_RIGHT; + This->format.flow = DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM; + This->format.spacingmethod = DWRITE_LINE_SPACING_METHOD_DEFAULT; + This->format.spacing = 0.0; + This->format.baseline = 0.0; if (collection) { diff --git a/dlls/dwrite/tests/layout.c b/dlls/dwrite/tests/layout.c index 9656ba65074..b531b033ea4 100644 --- a/dlls/dwrite/tests/layout.c +++ b/dlls/dwrite/tests/layout.c @@ -110,7 +110,14 @@ static void test_CreateGdiCompatibleTextLayout(void) static void test_CreateTextFormat(void) { IDWriteFontCollection *collection, *syscoll; + DWRITE_PARAGRAPH_ALIGNMENT paralign; + DWRITE_READING_DIRECTION readdir; + DWRITE_WORD_WRAPPING wrapping; + DWRITE_TEXT_ALIGNMENT align; + DWRITE_FLOW_DIRECTION flow; + DWRITE_LINE_SPACING_METHOD method; IDWriteTextFormat *format; + FLOAT spacing, baseline; HRESULT hr; hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, @@ -131,6 +138,28 @@ if (0) /* crashes on native */ IDWriteFontCollection_Release(syscoll); IDWriteFontCollection_Release(collection); + /* default format properties */ + align = IDWriteTextFormat_GetTextAlignment(format); + ok(align == DWRITE_TEXT_ALIGNMENT_LEADING, "got %d\n", align); + + paralign = IDWriteTextFormat_GetParagraphAlignment(format); + ok(paralign == DWRITE_PARAGRAPH_ALIGNMENT_NEAR, "got %d\n", paralign); + + wrapping = IDWriteTextFormat_GetWordWrapping(format); + ok(wrapping == DWRITE_WORD_WRAPPING_WRAP, "got %d\n", wrapping); + + readdir = IDWriteTextFormat_GetReadingDirection(format); + ok(readdir == DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, "got %d\n", readdir); + + flow = IDWriteTextFormat_GetFlowDirection(format); + ok(flow == DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM, "got %d\n", flow); + + hr = IDWriteTextFormat_GetLineSpacing(format, &method, &spacing, &baseline); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(spacing == 0.0, "got %f\n", spacing); + ok(baseline == 0.0, "got %f\n", baseline); + ok(method == DWRITE_LINE_SPACING_METHOD_DEFAULT, "got %d\n", method); + IDWriteTextFormat_Release(format); }