Shawn M. Chapla : gdiplus: Preserve temp DC state for bitmap backed graphics objects.

Alexandre Julliard julliard at winehq.org
Mon Jun 22 15:55:58 CDT 2020


Module: wine
Branch: master
Commit: 34aa117278a01bddb53ee4e3cc9f003a1859a3a4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=34aa117278a01bddb53ee4e3cc9f003a1859a3a4

Author: Shawn M. Chapla <schapla at codeweavers.com>
Date:   Fri Jun 19 13:21:17 2020 -0400

gdiplus: Preserve temp DC state for bitmap backed graphics objects.

Signed-off-by: Shawn M. Chapla <schapla at codeweavers.com>
Signed-off-by: Esme Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdiplus/graphics.c       | 18 +++++++++++++++---
 dlls/gdiplus/tests/graphics.c |  2 +-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 4b141e19b6..3c5e25ec41 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -2536,6 +2536,12 @@ GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
             return stat;
     }
 
+    if (graphics->temp_hdc)
+    {
+        DeleteDC(graphics->temp_hdc);
+        graphics->temp_hdc = NULL;
+    }
+
     if(graphics->owndc)
         ReleaseDC(graphics->hwnd, graphics->hdc);
 
@@ -6662,7 +6668,15 @@ GpStatus WINGDIPAPI GdipGetDC(GpGraphics *graphics, HDC *hdc)
         if (!hbitmap)
             return GenericError;
 
-        temp_hdc = CreateCompatibleDC(0);
+        if (!graphics->temp_hdc)
+        {
+            temp_hdc = CreateCompatibleDC(0);
+        }
+        else
+        {
+            temp_hdc = graphics->temp_hdc;
+        }
+
         if (!temp_hdc)
         {
             DeleteObject(hbitmap);
@@ -6723,9 +6737,7 @@ GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics *graphics, HDC hdc)
             graphics->temp_hbitmap_width * 4, PixelFormat32bppARGB);
 
         /* Clean up. */
-        DeleteDC(graphics->temp_hdc);
         DeleteObject(graphics->temp_hbitmap);
-        graphics->temp_hdc = NULL;
         graphics->temp_hbitmap = NULL;
     }
     else if (hdc != graphics->hdc)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index 7040327e67..da15392732 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -6870,7 +6870,7 @@ static void test_gdi_interop(void)
 
     stat = GdipBitmapGetPixel(bitmap, 26, 26, &color);
     expect(Ok, stat);
-    todo_wine expect(0xff0000ff, color);
+    expect(0xff0000ff, color);
 
     stat = GdipBitmapGetPixel(bitmap, 86, 86, &color);
     expect(Ok, stat);




More information about the wine-cvs mailing list