Module: wine Branch: master Commit: 34aa117278a01bddb53ee4e3cc9f003a1859a3a4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=34aa117278a01bddb53ee4e3c...
Author: Shawn M. Chapla schapla@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@codeweavers.com Signed-off-by: Esme Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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);