- Added some missing EMR record types and updated and fixed others
- Added stubs and headers for CreateColorSpace,DeleteColorSpace and SetColorSpace
- Added header for SetICMMode
- Added ability to play more enhanced metafile records

diff --git a/objects/enhmetafile.c b/objects/enhmetafile.c
index 1976949..db5df94 100644
--- a/objects/enhmetafile.c
+++ b/objects/enhmetafile.c
@@ -352,7 +352,39 @@
     {
     case EMR_HEADER:
       {
-	/* ENHMETAHEADER *h = (LPENHMETAHEADER) mr; */
+#if 0
+	ENHMETAHEADER* h = (LPENHMETAHEADER)mr;
+        XFORM dcTransform;
+
+        /* Scale the enhanced metafile according to the reference hdc
+           it was created with */
+        if( h->szlDevice.cx )
+        {
+          dcTransform.eM11 = (FLOAT)( (DOUBLE)GetDeviceCaps( hdc, HORZRES ) /  
+                                      (DOUBLE)h->szlDevice.cx );
+        }
+        else 
+        {
+          ERR( "Invalid szlDevice.cx in header\n" ); 
+          dcTransform.eM11 = (FLOAT)1.0;
+        }
+
+        if( h->szlDevice.cy )
+        { 
+          dcTransform.eM22 = (FLOAT)( (DOUBLE)GetDeviceCaps( hdc, VERTRES ) /
+                                      (DOUBLE)h->szlDevice.cy );
+        }
+        else 
+        {
+          ERR( "Invalid szlDevice.cy in header\n" ); 
+          dcTransform.eM22 = (FLOAT)1.0;
+        }
+
+        dcTransform.eM12 = dcTransform.eM21 = (FLOAT)0;
+        dcTransform.eDx = dcTransform.eDy = (FLOAT)0;
+
+        ModifyWorldTransform( hdc, &dcTransform, MWT_RIGHTMULTIPLY ); 
+#endif
 	break;
       }
     case EMR_EOF:
@@ -1048,6 +1080,100 @@
         break;
       }
 
+    case EMR_CREATECOLORSPACE:
+      {
+        PEMRCREATECOLORSPACE lpCreateColorSpace = (PEMRCREATECOLORSPACE)mr;
+
+        (handletable->objectHandle)[lpCreateColorSpace->ihCS] = 
+           CreateColorSpaceA( &lpCreateColorSpace->lcs ); 
+
+        break;
+      }
+
+    case EMR_SETCOLORSPACE:
+      {
+        PEMRSETCOLORSPACE lpSetColorSpace = (PEMRSETCOLORSPACE)mr; 
+
+        SetColorSpace( hdc, 
+                       (handletable->objectHandle)[lpSetColorSpace->ihCS] );
+
+        break;
+      }
+
+    case EMR_DELETECOLORSPACE:
+      {
+        PEMRDELETECOLORSPACE lpDeleteColorSpace = (PEMRDELETECOLORSPACE)mr;
+
+        DeleteColorSpace( (handletable->objectHandle)[lpDeleteColorSpace->ihCS] );
+   
+        break; 
+      }
+
+    case EMR_SETICMMODE:
+      {
+        PERMSETICMMODE lpSetICMMode = (PERMSETICMMODE)mr;
+
+        SetICMMode( hdc,
+                    (INT)lpSetICMMode->iMode );
+
+        break;
+      }
+
+    case EMR_PIXELFORMAT: 
+      {
+        INT iPixelFormat;
+        PEMRPIXELFORMAT lpPixelFormat = (PEMRPIXELFORMAT)mr;
+
+        iPixelFormat = ChoosePixelFormat( hdc, &lpPixelFormat->pfd );
+        SetPixelFormat( hdc, iPixelFormat, &lpPixelFormat->pfd ); 
+         
+        break;
+      }
+
+    case EMR_SETPALETTEENTRIES:  
+      {
+        PEMRSETPALETTEENTRIES lpSetPaletteEntries = (PEMRSETPALETTEENTRIES)mr;
+
+        SetPaletteEntries( (handletable->objectHandle)[lpSetPaletteEntries->ihPal],
+                           (UINT)lpSetPaletteEntries->iStart,
+                           (UINT)lpSetPaletteEntries->cEntries,
+                           lpSetPaletteEntries->aPalEntries ); 
+                           
+        break;
+      }
+
+    case EMR_RESIZEPALETTE:
+      {
+        PEMRRESIZEPALETTE lpResizePalette = (PEMRRESIZEPALETTE)mr;
+
+        ResizePalette( (handletable->objectHandle)[lpResizePalette->ihPal],
+                       (UINT)lpResizePalette->cEntries );
+
+        break;
+      }
+
+    case EMR_CREATEDIBPATTERNBRUSHPT:
+      {
+        PEMRCREATEDIBPATTERNBRUSHPT lpCreate = (PEMRCREATEDIBPATTERNBRUSHPT)mr;
+
+        /* This is a BITMAPINFO struct followed directly by bitmap bits */
+        LPVOID lpPackedStruct = HeapAlloc( GetProcessHeap(), 
+                                           0, 
+                                           lpCreate->cbBmi + lpCreate->cbBits );
+        /* Now pack this structure */
+        memcpy( lpPackedStruct, 
+                ((BYTE*)lpCreate) + lpCreate->offBmi,
+                lpCreate->cbBmi ); 
+        memcpy( ((BYTE*)lpPackedStruct) + lpCreate->cbBmi,
+                ((BYTE*)lpCreate) + lpCreate->offBits,
+                lpCreate->cbBits );
+
+        (handletable->objectHandle)[lpCreate->ihBrush] = 
+           CreateDIBPatternBrushPt( lpPackedStruct,
+                                    (UINT)lpCreate->iUsage ); 
+
+        break; 
+      }
 
     case EMR_BITBLT:
     case EMR_STRETCHBLT:
@@ -1062,22 +1188,14 @@
     case EMR_POLYPOLYGON16:
     case EMR_POLYDRAW16:
     case EMR_CREATEMONOBRUSH:
-    case EMR_CREATEDIBPATTERNBRUSHPT:
     case EMR_POLYTEXTOUTA:
     case EMR_POLYTEXTOUTW:
-    case EMR_SETICMMODE:
-    case EMR_CREATECOLORSPACE:
-    case EMR_SETCOLORSPACE:
-    case EMR_DELETECOLORSPACE:
-    case EMR_GLSRECORD:
-    case EMR_GLSBOUNDEDRECORD:
-    case EMR_PIXELFORMAT: 
-    case EMR_SETPALETTEENTRIES:  
-    case EMR_RESIZEPALETTE:
     case EMR_FILLRGN:
     case EMR_FRAMERGN:
     case EMR_INVERTRGN:
     case EMR_PAINTRGN:
+    case EMR_GLSRECORD:
+    case EMR_GLSBOUNDEDRECORD:
     default:
       /* From docs: If PlayEnhMetaFileRecord doesn't recognize a 
                     record then ignore and return TRUE. */