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:
parent
739d0a1dfa
commit
34aa117278
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue