Commit 1c23bf04 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

dwrite: Added some layout tests, simplify debug output for text ranges.

parent 01b2b307
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include "dwrite.h" #include "dwrite.h"
#include "dwrite_private.h" #include "dwrite_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(dwrite); WINE_DEFAULT_DEBUG_CHANNEL(dwrite);
enum scriptcode { enum scriptcode {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include "wine/debug.h"
#include "wine/unicode.h" #include "wine/unicode.h"
static inline void *heap_alloc(size_t len) static inline void *heap_alloc(size_t len)
...@@ -71,6 +72,11 @@ static inline LPWSTR heap_strdupnW(const WCHAR *str, UINT32 len) ...@@ -71,6 +72,11 @@ static inline LPWSTR heap_strdupnW(const WCHAR *str, UINT32 len)
return ret; return ret;
} }
static inline const char *debugstr_range(const DWRITE_TEXT_RANGE *range)
{
return wine_dbg_sprintf("%u:%u", range->startPosition, range->length);
}
extern HRESULT create_font_from_logfont(const LOGFONTW*, IDWriteFont**) DECLSPEC_HIDDEN; extern HRESULT create_font_from_logfont(const LOGFONTW*, IDWriteFont**) DECLSPEC_HIDDEN;
extern HRESULT convert_fontface_to_logfont(IDWriteFontFace*, LOGFONTW*) DECLSPEC_HIDDEN; extern HRESULT convert_fontface_to_logfont(IDWriteFontFace*, LOGFONTW*) DECLSPEC_HIDDEN;
extern HRESULT create_textformat(const WCHAR*,IDWriteFontCollection*,DWRITE_FONT_WEIGHT,DWRITE_FONT_STYLE,DWRITE_FONT_STRETCH, extern HRESULT create_textformat(const WCHAR*,IDWriteFontCollection*,DWRITE_FONT_WEIGHT,DWRITE_FONT_STYLE,DWRITE_FONT_STRETCH,
......
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include "dwrite.h" #include "dwrite.h"
#include "dwrite_private.h" #include "dwrite_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(dwrite); WINE_DEFAULT_DEBUG_CHANNEL(dwrite);
/* PANOSE is 10 bytes in size, need to pack the structure properly */ /* PANOSE is 10 bytes in size, need to pack the structure properly */
......
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
#include "dwrite.h" #include "dwrite.h"
#include "dwrite_private.h" #include "dwrite_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(dwrite); WINE_DEFAULT_DEBUG_CHANNEL(dwrite);
struct dwrite_textformat_data { struct dwrite_textformat_data {
...@@ -354,84 +352,84 @@ static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout *iface, FL ...@@ -354,84 +352,84 @@ static HRESULT WINAPI dwritetextlayout_SetMaxHeight(IDWriteTextLayout *iface, FL
static HRESULT WINAPI dwritetextlayout_SetFontCollection(IDWriteTextLayout *iface, IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontCollection(IDWriteTextLayout *iface, IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%p %u:%u): stub\n", This, collection, range.startPosition, range.length); FIXME("(%p)->(%p %s): stub\n", This, collection, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetFontFamilyName(IDWriteTextLayout *iface, WCHAR const *name, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontFamilyName(IDWriteTextLayout *iface, WCHAR const *name, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%s %u:%u): stub\n", This, debugstr_w(name), range.startPosition, range.length); FIXME("(%p)->(%s %s): stub\n", This, debugstr_w(name), debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetFontWeight(IDWriteTextLayout *iface, DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontWeight(IDWriteTextLayout *iface, DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%d %u:%u): stub\n", This, weight, range.startPosition, range.length); FIXME("(%p)->(%d %s): stub\n", This, weight, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetFontStyle(IDWriteTextLayout *iface, DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontStyle(IDWriteTextLayout *iface, DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%d %u:%u): stub\n", This, style, range.startPosition, range.length); FIXME("(%p)->(%d %s): stub\n", This, style, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetFontStretch(IDWriteTextLayout *iface, DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontStretch(IDWriteTextLayout *iface, DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%d %u:%u): stub\n", This, stretch, range.startPosition, range.length); FIXME("(%p)->(%d %s): stub\n", This, stretch, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetFontSize(IDWriteTextLayout *iface, FLOAT size, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetFontSize(IDWriteTextLayout *iface, FLOAT size, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%f %u:%u): stub\n", This, size, range.startPosition, range.length); FIXME("(%p)->(%f %s): stub\n", This, size, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetUnderline(IDWriteTextLayout *iface, BOOL underline, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetUnderline(IDWriteTextLayout *iface, BOOL underline, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%d %u:%u): stub\n", This, underline, range.startPosition, range.length); FIXME("(%p)->(%d %s): stub\n", This, underline, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetStrikethrough(IDWriteTextLayout *iface, BOOL strikethrough, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetStrikethrough(IDWriteTextLayout *iface, BOOL strikethrough, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%d %u:%u): stub\n", This, strikethrough, range.startPosition, range.length); FIXME("(%p)->(%d %s): stub\n", This, strikethrough, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetDrawingEffect(IDWriteTextLayout *iface, IUnknown* effect, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetDrawingEffect(IDWriteTextLayout *iface, IUnknown* effect, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%p %u:%u): stub\n", This, effect, range.startPosition, range.length); FIXME("(%p)->(%p %s): stub\n", This, effect, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetInlineObject(IDWriteTextLayout *iface, IDWriteInlineObject *object, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetInlineObject(IDWriteTextLayout *iface, IDWriteInlineObject *object, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%p %u:%u): stub\n", This, object, range.startPosition, range.length); FIXME("(%p)->(%p %s): stub\n", This, object, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetTypography(IDWriteTextLayout *iface, IDWriteTypography* typography, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetTypography(IDWriteTextLayout *iface, IDWriteTypography* typography, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%p %u:%u): stub\n", This, typography, range.startPosition, range.length); FIXME("(%p)->(%p %s): stub\n", This, typography, debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout *iface, WCHAR const* locale, DWRITE_TEXT_RANGE range) static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout *iface, WCHAR const* locale, DWRITE_TEXT_RANGE range)
{ {
struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface); struct dwrite_textlayout *This = impl_from_IDWriteTextLayout(iface);
FIXME("(%p)->(%s %u:%u): stub\n", This, debugstr_w(locale), range.startPosition, range.length); FIXME("(%p)->(%s %s): stub\n", This, debugstr_w(locale), debugstr_range(&range));
return E_NOTIMPL; return E_NOTIMPL;
} }
......
...@@ -262,6 +262,106 @@ if (0) /* crashes on native */ ...@@ -262,6 +262,106 @@ if (0) /* crashes on native */
IDWriteTextFormat_Release(format); IDWriteTextFormat_Release(format);
} }
static void test_fontweight(void)
{
static const WCHAR strW[] = {'s','t','r','i','n','g',0};
static const WCHAR ruW[] = {'r','u',0};
IDWriteTextFormat *format, *fmt2;
IDWriteTextLayout *layout;
DWRITE_FONT_WEIGHT weight;
DWRITE_TEXT_RANGE range;
HRESULT hr;
hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_BOLD, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, 10.0, ruW, &format);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 0, format, 100.0, 100.0, 1.0, NULL, FALSE, &layout);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteTextLayout_QueryInterface(layout, &IID_IDWriteTextFormat, (void**)&fmt2);
ok(hr == S_OK, "got 0x%08x\n", hr);
weight = IDWriteTextFormat_GetFontWeight(fmt2);
todo_wine
ok(weight == DWRITE_FONT_WEIGHT_BOLD, "got %u\n", weight);
range.startPosition = 0;
range.length = 6;
hr = IDWriteTextLayout_SetFontWeight(layout, DWRITE_FONT_WEIGHT_NORMAL, range);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
/* IDWriteTextFormat methods output doesn't reflect layout changes */
weight = IDWriteTextFormat_GetFontWeight(fmt2);
todo_wine
ok(weight == DWRITE_FONT_WEIGHT_BOLD, "got %u\n", weight);
range.length = 0;
weight = DWRITE_FONT_WEIGHT_BOLD;
hr = layout->lpVtbl->IDWriteTextLayout_GetFontWeight(layout, 0, &weight, &range);
todo_wine {
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(weight == DWRITE_FONT_WEIGHT_NORMAL, "got %d\n", weight);
ok(range.length == 6, "got %d\n", range.length);
}
IDWriteTextLayout_Release(layout);
IDWriteTextFormat_Release(fmt2);
IDWriteTextFormat_Release(format);
}
static void test_SetInlineObject(void)
{
static const WCHAR strW[] = {'s','t','r','i','n','g',0};
static const WCHAR ruW[] = {'r','u',0};
IDWriteInlineObject *inlineobj, *inlineobj2;
IDWriteTextFormat *format;
IDWriteTextLayout *layout;
DWRITE_TEXT_RANGE range;
HRESULT hr;
hr = IDWriteFactory_CreateTextFormat(factory, tahomaW, NULL, DWRITE_FONT_WEIGHT_BOLD, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, 10.0, ruW, &format);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFactory_CreateGdiCompatibleTextLayout(factory, strW, 0, format, 100.0, 100.0, 1.0, NULL, FALSE, &layout);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFactory_CreateEllipsisTrimmingSign(factory, format, &inlineobj);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IDWriteFactory_CreateEllipsisTrimmingSign(factory, format, &inlineobj2);
ok(hr == S_OK, "got 0x%08x\n", hr);
range.startPosition = 0;
range.length = 2;
hr = IDWriteTextLayout_SetInlineObject(layout, inlineobj, range);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
range.startPosition = 1;
range.length = 1;
hr = IDWriteTextLayout_SetInlineObject(layout, inlineobj2, range);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
range.startPosition = 1;
range.length = 1;
hr = IDWriteTextLayout_SetInlineObject(layout, inlineobj, range);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
range.startPosition = 1;
range.length = 2;
hr = IDWriteTextLayout_SetInlineObject(layout, inlineobj, range);
todo_wine
ok(hr == S_OK, "got 0x%08x\n", hr);
IDWriteTextLayout_Release(layout);
IDWriteTextFormat_Release(format);
}
START_TEST(layout) START_TEST(layout)
{ {
HRESULT hr; HRESULT hr;
...@@ -279,6 +379,8 @@ START_TEST(layout) ...@@ -279,6 +379,8 @@ START_TEST(layout)
test_CreateTextFormat(); test_CreateTextFormat();
test_GetLocaleName(); test_GetLocaleName();
test_CreateEllipsisTrimmingSign(); test_CreateEllipsisTrimmingSign();
test_fontweight();
test_SetInlineObject();
IDWriteFactory_Release(factory); IDWriteFactory_Release(factory);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment