d2d1: Don't update target dpi if only one SetDpi() argument is zero.
authorNikolay Sivov <nsivov@codeweavers.com>
Tue, 19 Jan 2016 21:43:33 +0000 (00:43 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 20 Jan 2016 12:18:56 +0000 (21:18 +0900)
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
dlls/d2d1/render_target.c
dlls/d2d1/tests/d2d1.c

index 21c3125c8a5b11922ff4210f0c8eadade5bdba89..fba173820f9bf64918ac04be09a1f0ee47aa7f23 100644 (file)
@@ -1436,6 +1436,8 @@ static void STDMETHODCALLTYPE d2d_d3d_render_target_SetDpi(ID2D1RenderTarget *if
         dpi_x = 96.0f;
         dpi_y = 96.0f;
     }
+    else if (dpi_x == 0.0f || dpi_y == 0.0f)
+        return;
 
     render_target->dpi_x = dpi_x;
     render_target->dpi_y = dpi_y;
index b721c2684cdfd7125a6bd1f747837764b42e8637..7c554d2008318e35d1146841ed0f95f4aae4f89d 100644 (file)
@@ -587,6 +587,19 @@ static void test_clip(void)
     ok(dpi_x == 96.0f, "Got unexpected dpi_x %.8e.\n", dpi_x);
     ok(dpi_y == 96.0f, "Got unexpected dpi_y %.8e.\n", dpi_y);
 
+    ID2D1RenderTarget_SetDpi(rt, 192.0f, 192.0f);
+    ID2D1RenderTarget_SetDpi(rt, 0.0f, 96.0f);
+    ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y);
+    ok(dpi_x == 192.0f, "Got unexpected dpi_x %.8e.\n", dpi_x);
+    ok(dpi_y == 192.0f, "Got unexpected dpi_y %.8e.\n", dpi_y);
+
+    ID2D1RenderTarget_SetDpi(rt, 96.0f, 0.0f);
+    ID2D1RenderTarget_GetDpi(rt, &dpi_x, &dpi_y);
+    ok(dpi_x == 192.0f, "Got unexpected dpi_x %.8e.\n", dpi_x);
+    ok(dpi_y == 192.0f, "Got unexpected dpi_y %.8e.\n", dpi_y);
+
+    ID2D1RenderTarget_SetDpi(rt, 96.0f, 96.0f);
+
     /* Transformations apply to clip rects, the effective clip rect is the
      * (axis-aligned) bounding box of the transformed clip rect. */
     set_point(&point, 320.0f, 240.0f);