Commit 5e507b3e authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

gdi32: Fix METADC handling in PlayMetaFile.

parent 043cc241
...@@ -360,6 +360,7 @@ HMETAFILE WINAPI CopyMetaFileA( HMETAFILE hSrcMetaFile, LPCSTR lpFilename ) ...@@ -360,6 +360,7 @@ HMETAFILE WINAPI CopyMetaFileA( HMETAFILE hSrcMetaFile, LPCSTR lpFilename )
*/ */
BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf ) BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf )
{ {
BOOL metadc = GetObjectType(hdc) == OBJ_METADC;
METAHEADER *mh = get_metafile_bits( hmf ); METAHEADER *mh = get_metafile_bits( hmf );
METARECORD *mr; METARECORD *mr;
HANDLETABLE *ht; HANDLETABLE *ht;
...@@ -372,16 +373,19 @@ BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf ) ...@@ -372,16 +373,19 @@ BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf )
if (!mh) return FALSE; if (!mh) return FALSE;
/* save DC */ if (!metadc)
hPen = GetCurrentObject(hdc, OBJ_PEN);
hBrush = GetCurrentObject(hdc, OBJ_BRUSH);
hPal = GetCurrentObject(hdc, OBJ_PAL);
hRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
if (!GetClipRgn(hdc, hRgn))
{ {
DeleteObject(hRgn); /* save DC */
hRgn = 0; hPen = GetCurrentObject(hdc, OBJ_PEN);
hBrush = GetCurrentObject(hdc, OBJ_BRUSH);
hPal = GetCurrentObject(hdc, OBJ_PAL);
hRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
if (!GetClipRgn(hdc, hRgn))
{
DeleteObject(hRgn);
hRgn = 0;
}
} }
/* create the handle table */ /* create the handle table */
...@@ -414,12 +418,15 @@ BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf ) ...@@ -414,12 +418,15 @@ BOOL WINAPI PlayMetaFile( HDC hdc, HMETAFILE hmf )
PlayMetaFileRecord( hdc, ht, mr, mh->mtNoObjects ); PlayMetaFileRecord( hdc, ht, mr, mh->mtNoObjects );
} }
/* restore DC */ if (!metadc)
SelectObject(hdc, hPen); {
SelectObject(hdc, hBrush); /* restore DC */
SelectPalette(hdc, hPal, FALSE); SelectObject(hdc, hPen);
ExtSelectClipRgn(hdc, hRgn, RGN_COPY); SelectObject(hdc, hBrush);
DeleteObject(hRgn); SelectPalette(hdc, hPal, FALSE);
ExtSelectClipRgn(hdc, hRgn, RGN_COPY);
DeleteObject(hRgn);
}
/* free objects in handle table */ /* free objects in handle table */
for(i = 0; i < mh->mtNoObjects; i++) for(i = 0; i < mh->mtNoObjects; i++)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment