From: Akihiro Sagawa sagawa.aki@gmail.com
--- dlls/d2d1/device.c | 15 +++++++++++++++ dlls/d2d1/tests/d2d1.c | 13 +++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c index e06bbb32cb1..4246b84979f 100644 --- a/dlls/d2d1/device.c +++ b/dlls/d2d1/device.c @@ -657,6 +657,9 @@ static void STDMETHODCALLTYPE d2d_device_context_FillRectangle(ID2D1DeviceContex
TRACE("iface %p, rect %s, brush %p.\n", iface, debug_d2d_rect_f(rect), brush);
+ if (FAILED(context->error.code)) + return; + if (context->target.type == D2D_TARGET_COMMAND_LIST) { d2d_command_list_fill_rectangle(context->target.command_list, context, rect, brush); @@ -705,6 +708,9 @@ static void STDMETHODCALLTYPE d2d_device_context_FillRoundedRectangle(ID2D1Devic
TRACE("iface %p, rect %p, brush %p.\n", iface, rect, brush);
+ if (FAILED(render_target->error.code)) + return; + if (FAILED(hr = ID2D1Factory_CreateRoundedRectangleGeometry(render_target->factory, rect, &geometry))) { ERR("Failed to create geometry, hr %#lx.\n", hr); @@ -747,6 +753,9 @@ static void STDMETHODCALLTYPE d2d_device_context_FillEllipse(ID2D1DeviceContext6
TRACE("iface %p, ellipse %p, brush %p.\n", iface, ellipse, brush);
+ if (FAILED(render_target->error.code)) + return; + if (FAILED(hr = ID2D1Factory_CreateEllipseGeometry(render_target->factory, ellipse, &geometry))) { ERR("Failed to create geometry, hr %#lx.\n", hr); @@ -1109,6 +1118,12 @@ static void STDMETHODCALLTYPE d2d_device_context_FillGeometry(ID2D1DeviceContext if (FAILED(context->error.code)) return;
+ if (context->target.type == D2D_TARGET_UNKNOWN) + { + d2d_device_context_set_error(context, D2DERR_WRONG_STATE); + return; + } + if (opacity_brush && brush_impl->type != D2D_BRUSH_TYPE_BITMAP) { d2d_device_context_set_error(context, D2DERR_INCOMPATIBLE_BRUSH_TYPES); diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index fe993d11ad1..e7673a9dbeb 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -15814,6 +15814,19 @@ static void test_no_target(BOOL d3d11) ok(hr == D2DERR_WRONG_STATE, "Got unexpected hr %#lx.\n", hr); ok(t1 == 0x30 && t2 == 0x10, "Unexpected tags %s:%s.\n", wine_dbgstr_longlong(t1), wine_dbgstr_longlong(t2));
+ /* FillRectangle method */ + ID2D1RenderTarget_BeginDraw(rt); + + ID2D1RenderTarget_SetTags(rt, 0x40, 0x10); + ID2D1RenderTarget_FillRectangle(rt, &rect, (ID2D1Brush *)brush); + + ID2D1RenderTarget_SetTags(rt, 0x40, 0x20); + ID2D1RenderTarget_FillRectangle(rt, &rect, (ID2D1Brush *)brush); + + hr = ID2D1RenderTarget_EndDraw(rt, &t1, &t2); + 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)); + ID2D1SolidColorBrush_Release(brush);
ID2D1RenderTarget_Release(rt);