From 9bc5946cdedda3925f958667683d092f2ed4ea2e Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 24 Feb 2011 18:19:56 +0800 Subject: [PATCH] gdi32: Use graphics mode specified at the EMF creation time when playing EMR_EXTTEXTOUT record. --- dlls/gdi32/enhmetafile.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c index 15f7c1b6074..b8863fda930 100644 --- a/dlls/gdi32/enhmetafile.c +++ b/dlls/gdi32/enhmetafile.c @@ -1133,6 +1133,7 @@ BOOL WINAPI PlayEnhMetaFileRecord( const EMREXTTEXTOUTA *pExtTextOutA = (const EMREXTTEXTOUTA *)mr; RECT rc; const INT *dx = NULL; + int old_mode; rc.left = pExtTextOutA->emrtext.rcl.left; rc.top = pExtTextOutA->emrtext.rcl.top; @@ -1142,6 +1143,11 @@ BOOL WINAPI PlayEnhMetaFileRecord( pExtTextOutA->emrtext.ptlReference.x, pExtTextOutA->emrtext.ptlReference.y, rc.left, rc.top, rc.right, rc.bottom, pExtTextOutA->emrtext.fOptions); + old_mode = SetGraphicsMode(hdc, pExtTextOutA->iGraphicsMode); + /* Reselect the font back into the dc so that the transformation + gets updated. */ + SelectObject(hdc, GetCurrentObject(hdc, OBJ_FONT)); + /* Linux version of pstoedit produces EMFs with offDx set to 0. * These files can be enumerated and played under Win98 just * fine, but at least Win2k chokes on them. @@ -1153,6 +1159,8 @@ BOOL WINAPI PlayEnhMetaFileRecord( pExtTextOutA->emrtext.fOptions, &rc, (LPCSTR)((const BYTE *)mr + pExtTextOutA->emrtext.offString), pExtTextOutA->emrtext.nChars, dx); + + SetGraphicsMode(hdc, old_mode); break; } @@ -1161,6 +1169,7 @@ BOOL WINAPI PlayEnhMetaFileRecord( const EMREXTTEXTOUTW *pExtTextOutW = (const EMREXTTEXTOUTW *)mr; RECT rc; const INT *dx = NULL; + int old_mode; rc.left = pExtTextOutW->emrtext.rcl.left; rc.top = pExtTextOutW->emrtext.rcl.top; @@ -1170,6 +1179,11 @@ BOOL WINAPI PlayEnhMetaFileRecord( pExtTextOutW->emrtext.ptlReference.x, pExtTextOutW->emrtext.ptlReference.y, rc.left, rc.top, rc.right, rc.bottom, pExtTextOutW->emrtext.fOptions); + old_mode = SetGraphicsMode(hdc, pExtTextOutW->iGraphicsMode); + /* Reselect the font back into the dc so that the transformation + gets updated. */ + SelectObject(hdc, GetCurrentObject(hdc, OBJ_FONT)); + /* Linux version of pstoedit produces EMFs with offDx set to 0. * These files can be enumerated and played under Win98 just * fine, but at least Win2k chokes on them. @@ -1181,6 +1195,8 @@ BOOL WINAPI PlayEnhMetaFileRecord( pExtTextOutW->emrtext.fOptions, &rc, (LPCWSTR)((const BYTE *)mr + pExtTextOutW->emrtext.offString), pExtTextOutW->emrtext.nChars, dx); + + SetGraphicsMode(hdc, old_mode); break; } -- 2.11.4.GIT