Dmitry Timoshkov : gdi32: Use graphics mode specified at the EMF creation time when playing EMR_EXTTEXTOUT record .

Alexandre Julliard julliard at winehq.org
Thu Apr 7 07:36:53 CDT 2011


Module: wine
Branch: stable
Commit: c229ad767b250475abaa4311b1749eab8e5df940
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c229ad767b250475abaa4311b1749eab8e5df940

Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date:   Thu Feb 24 18:19:56 2011 +0800

gdi32: Use graphics mode specified at the EMF creation time when playing EMR_EXTTEXTOUT record.
(cherry picked from commit 9bc5946cdedda3925f958667683d092f2ed4ea2e)

---

 dlls/gdi32/enhmetafile.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c
index 15f7c1b..b8863fd 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;
     }
 




More information about the wine-cvs mailing list