From: Akihiro Sagawa sagawa.aki@gmail.com
--- dlls/d2d1/device.c | 8 ++++++++ dlls/d2d1/tests/d2d1.c | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+)
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index 4246b84979f..4a781033499 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -129,6 +129,8 @@ static void d2d_device_context_draw(struct d2d_device_context *render_target, en unsigned int offset; D3D11_VIEWPORT vp;
+ assert(render_target->target.type == D2D_TARGET_BITMAP); + vp.TopLeftX = 0; vp.TopLeftY = 0; vp.Width = render_target->pixel_size.width; @@ -1549,6 +1551,12 @@ static void d2d_device_context_draw_glyph_run(struct d2d_device_context *context if (FAILED(context->error.code)) return;
+ if (context->target.type == D2D_TARGET_UNKNOWN) + { + d2d_device_context_set_error(context, D2DERR_WRONG_STATE); + return; + } + if (context->target.type == D2D_TARGET_COMMAND_LIST) { d2d_command_list_draw_glyph_run(context->target.command_list, context, baseline_origin, glyph_run, diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index e7673a9dbeb..16285b104f9 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -15718,6 +15718,8 @@ static void test_get_dxgi_device(BOOL d3d11) static void test_no_target(BOOL d3d11) { D2D1_BITMAP_PROPERTIES bitmap_desc; + IDWriteFactory *dwrite_factory; + IDWriteTextFormat *text_format; struct d2d1_test_context ctx; ID2D1SolidColorBrush *brush; ID2D1DeviceContext *context; @@ -15827,6 +15829,28 @@ static void test_no_target(BOOL d3d11) ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#lx.\n", hr); ok(t1 == 0x40 && t2 == 0x10, "Unexpected tags %s:%s.\n", wine_dbgstr_longlong(t1), wine_dbgstr_longlong(t2));
+ /* DrawText method */ + hr = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (IUnknown **)&dwrite_factory); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + hr = IDWriteFactory_CreateTextFormat(dwrite_factory, L"Tahoma", NULL, DWRITE_FONT_WEIGHT_NORMAL, + DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 10.0f, L"", &text_format); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + + ID2D1RenderTarget_BeginDraw(rt); + + ID2D1RenderTarget_SetTags(rt, 0x50, 0x10); + ID2D1RenderTarget_DrawText(rt, L"Wine", 4, text_format, &rect, (ID2D1Brush *)brush, D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL); + + ID2D1RenderTarget_SetTags(rt, 0x50, 0x20); + ID2D1RenderTarget_DrawText(rt, L"Wine", 4, text_format, &rect, (ID2D1Brush *)brush, D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL); + + hr = ID2D1RenderTarget_EndDraw(rt, &t1, &t2); + ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#lx.\n", hr); + ok(t1 == 0x50 && t2 == 0x10, "Unexpected tags %s:%s.\n", wine_dbgstr_longlong(t1), wine_dbgstr_longlong(t2)); + + IDWriteTextFormat_Release(text_format); + IDWriteFactory_Release(dwrite_factory); + ID2D1SolidColorBrush_Release(brush);
ID2D1RenderTarget_Release(rt);