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>
This commit is contained in:
Shawn M. Chapla 2020-06-19 13:21:17 -04:00 committed by Alexandre Julliard
parent 739d0a1dfa
commit 34aa117278
2 changed files with 16 additions and 4 deletions

View File

@ -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;
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)

View File

@ -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);