Enhanced enhmetafile from CW

Duane Clark dclark at akamail.com
Sat Jan 26 22:25:32 CST 2002


Modified files:
	objects			: enhmetafile.c

Log message:
	Codeweavers
	Implement additional fields in SetWinMetaFileBits.




-------------- next part --------------
Index: objects/enhmetafile.c
===================================================================
RCS file: /home/wine/wine/objects/enhmetafile.c,v
retrieving revision 1.51
diff -u -r1.51 enhmetafile.c
--- objects/enhmetafile.c	2001/08/23 23:37:00	1.51
+++ objects/enhmetafile.c	2002/01/27 02:25:34
@@ -1811,19 +1811,33 @@
        lpNewEnhMetaFileHeader->rclFrame.top    = 0;
        lpNewEnhMetaFileHeader->rclFrame.bottom = 0;
 
-       lpNewEnhMetaFileHeader->nHandles = 0; /* No handles yet */
+       lpNewEnhMetaFileHeader->dSignature=ENHMETA_SIGNATURE;
+       lpNewEnhMetaFileHeader->nVersion=0x10000;
+       lpNewEnhMetaFileHeader->nBytes = lpNewEnhMetaFileHeader->nSize;
+       lpNewEnhMetaFileHeader->sReserved=0;
+
+        /* FIXME: if there is a description add it */
+        lpNewEnhMetaFileHeader->nDescription=0;
+        lpNewEnhMetaFileHeader->offDescription=0;
+
+        lpNewEnhMetaFileHeader->nHandles = 0; /* No handles yet */
+        lpNewEnhMetaFileHeader->nRecords = 0;
+        
+        /* I am pretty sure this starts at 0 and grows as entries are added */
+        lpNewEnhMetaFileHeader->nPalEntries = 0;
+
+        /* Size in Pixels */
+        lpNewEnhMetaFileHeader->szlDevice.cx = GetDeviceCaps(hdcRef,HORZRES);
+        lpNewEnhMetaFileHeader->szlDevice.cy = GetDeviceCaps(hdcRef,VERTRES);
+
+        /* Size in mm */
+        lpNewEnhMetaFileHeader->szlMillimeters.cx =
+                                        GetDeviceCaps(hdcRef,HORZSIZE);
+        lpNewEnhMetaFileHeader->szlMillimeters.cy =
+                                        GetDeviceCaps(hdcRef,VERTSIZE);
 
        /* FIXME: Add in the rest of the fields to the header */
-       /* dSignature
-          nVersion
-          nRecords
-          sReserved
-          nDescription
-          offDescription
-          nPalEntries
-          szlDevice
-          szlMillimeters
-          cbPixelFormat
+       /* cbPixelFormat
           offPixelFormat,
           bOpenGL */
      } 
@@ -2009,21 +2023,66 @@
              break;
           }
 
+          case META_LINETO:
+          case META_MOVETO:
+          {
+             PEMRLINETO lpRecord;
+             size_t uRecord = sizeof(*lpRecord);
 
-          /* These are all unimplemented and as such are intended to fall through to the default case */
+             EMF_ReAllocAndAdjustPointers(PEMRLINETO,uRecord);
+
+             if ( lpMetaRecord->rdFunction == META_LINETO )
+             {
+               lpRecord->emr.iType = EMR_LINETO;
+             }
+             else
+             {
+               lpRecord->emr.iType = EMR_MOVETOEX;
+             }
+             lpRecord->emr.nSize = sizeof( *lpRecord );
+
+             lpRecord->ptl.x = lpMetaRecord->rdParm[1];
+             lpRecord->ptl.y = lpMetaRecord->rdParm[0];
+
+             break;
+            }
+
+          case META_SETTEXTCOLOR:
           case META_SETBKCOLOR:
+          {
+             PEMRSETBKCOLOR lpRecord;
+             size_t uRecord = sizeof(*lpRecord);
+
+             EMF_ReAllocAndAdjustPointers(PEMRSETBKCOLOR,uRecord);
+
+             if ( lpMetaRecord->rdFunction == META_SETTEXTCOLOR )
+             {
+               lpRecord->emr.iType = EMR_SETTEXTCOLOR;
+             }
+             else
+             {
+               lpRecord->emr.iType = EMR_SETBKCOLOR;
+             }
+             lpRecord->emr.nSize = sizeof( *lpRecord );
+
+             lpRecord->crColor = MAKELONG(lpMetaRecord->rdParm[0],
+                                    lpMetaRecord->rdParm[1]);
+
+             break;
+          }
+
+
+
+          /* These are all unimplemented and as such are intended to fall through to the default case */
           case META_SETBKMODE:
           case META_SETROP2:
           case META_SETRELABS:
           case META_SETSTRETCHBLTMODE:
-          case META_SETTEXTCOLOR:
           case META_SETVIEWPORTORG:
           case META_OFFSETWINDOWORG:
           case META_SCALEWINDOWEXT:
           case META_OFFSETVIEWPORTORG:
           case META_SCALEVIEWPORTEXT:
-          case META_LINETO:
-          case META_MOVETO:
           case META_EXCLUDECLIPRECT:
           case META_INTERSECTCLIPRECT:
           case META_ARC:


More information about the wine-patches mailing list