- 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
oldstable
Peter Hunnisett 2000-01-15 22:17:49 +00:00 committed by Alexandre Julliard
parent 40d5f4cddc
commit f2b8492285
3 changed files with 173 additions and 16 deletions

View File

@ -1966,9 +1966,15 @@ typedef struct {
DWORD nPalEntries; DWORD nPalEntries;
SIZEL szlDevice; SIZEL szlDevice;
SIZEL szlMillimeters; SIZEL szlMillimeters;
/* Fields for winver >= win95 */
DWORD cbPixelFormat; DWORD cbPixelFormat;
DWORD offPixelFormat; DWORD offPixelFormat;
DWORD bOpenGL; DWORD bOpenGL;
/* Fields for winver >= win98 */
SIZEL szlMicrometers;
} ENHMETAHEADER, *LPENHMETAHEADER; } ENHMETAHEADER, *LPENHMETAHEADER;
typedef struct { typedef struct {
@ -2049,9 +2055,18 @@ typedef struct {
typedef struct { typedef struct {
EMR emr; EMR emr;
DWORD ihCS; DWORD ihCS;
LOGCOLORSPACEW lcs; LOGCOLORSPACEA lcs;
} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE; } EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
typedef struct {
EMR emr;
DWORD ihCS;
LOGCOLORSPACEW lcs;
DWORD dwFlags;
DWORD cbData;
BYTE Data[1];
} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
typedef struct { typedef struct {
EMR emr; EMR emr;
DWORD ihBrush; DWORD ihBrush;
@ -2508,6 +2523,24 @@ typedef struct {
LONG cyDst; LONG cyDst;
} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS; } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
typedef struct {
EMR emr;
PIXELFORMATDESCRIPTOR pfd;
} EMRPIXELFORMAT, *PEMRPIXELFORMAT;
typedef struct tagEMRGLSRECORD {
EMR emr;
DWORD cbData;
BYTE Data[1];
} EMRGLSRECORD, *PEMRGLSRECORD;
typedef struct {
EMR emr;
RECTL rclBounds;
DWORD cbData;
BYTE Data[1];
} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, LPHANDLETABLE, typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, LPHANDLETABLE,
LPENHMETARECORD, INT, LPVOID); LPENHMETARECORD, INT, LPVOID);
@ -3046,6 +3079,9 @@ HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
HBITMAP WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID); HBITMAP WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);
HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*); HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*); HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*);
HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
#define CreateColorSpace WINELIB_NAME_AW(CreateColorSpace)
HBITMAP WINAPI CreateCompatibleBitmap(HDC,INT,INT); HBITMAP WINAPI CreateCompatibleBitmap(HDC,INT,INT);
HDC WINAPI CreateCompatibleDC(HDC); HDC WINAPI CreateCompatibleDC(HDC);
HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
@ -3093,6 +3129,7 @@ BOOL WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
#define CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource) #define CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource)
HBRUSH WINAPI CreateSolidBrush(COLORREF); HBRUSH WINAPI CreateSolidBrush(COLORREF);
BOOL WINAPI DPtoLP(HDC,LPPOINT,INT); BOOL WINAPI DPtoLP(HDC,LPPOINT,INT);
BOOL WINAPI DeleteColorSpace(HCOLORSPACE);
BOOL WINAPI DeleteDC(HDC); BOOL WINAPI DeleteDC(HDC);
BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE); BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE);
BOOL WINAPI DeleteMetaFile(HMETAFILE); BOOL WINAPI DeleteMetaFile(HMETAFILE);
@ -3308,12 +3345,14 @@ INT WINAPI SetBkMode(HDC,INT);
UINT WINAPI SetBoundsRect(HDC,const RECT*,UINT); UINT WINAPI SetBoundsRect(HDC,const RECT*,UINT);
BOOL WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT); BOOL WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);
BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*); BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);
UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,RGBQUAD*); UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
INT WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT); INT WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
INT WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT, INT WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,
INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT); INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *); HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);
INT WINAPI SetGraphicsMode(HDC,INT); INT WINAPI SetGraphicsMode(HDC,INT);
INT WINAPI SetICMMode(HDC,INT);
DWORD WINAPI SetLayout(HDC,DWORD); DWORD WINAPI SetLayout(HDC,DWORD);
INT WINAPI SetMapMode(HDC,INT); INT WINAPI SetMapMode(HDC,INT);
DWORD WINAPI SetMapperFlags(HDC,DWORD); DWORD WINAPI SetMapperFlags(HDC,DWORD);

View File

@ -352,7 +352,39 @@ BOOL WINAPI PlayEnhMetaFileRecord(
{ {
case EMR_HEADER: 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; break;
} }
case EMR_EOF: case EMR_EOF:
@ -1048,6 +1080,100 @@ BOOL WINAPI PlayEnhMetaFileRecord(
break; 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_BITBLT:
case EMR_STRETCHBLT: case EMR_STRETCHBLT:
@ -1062,22 +1188,14 @@ BOOL WINAPI PlayEnhMetaFileRecord(
case EMR_POLYPOLYGON16: case EMR_POLYPOLYGON16:
case EMR_POLYDRAW16: case EMR_POLYDRAW16:
case EMR_CREATEMONOBRUSH: case EMR_CREATEMONOBRUSH:
case EMR_CREATEDIBPATTERNBRUSHPT:
case EMR_POLYTEXTOUTA: case EMR_POLYTEXTOUTA:
case EMR_POLYTEXTOUTW: 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_FILLRGN:
case EMR_FRAMERGN: case EMR_FRAMERGN:
case EMR_INVERTRGN: case EMR_INVERTRGN:
case EMR_PAINTRGN: case EMR_PAINTRGN:
case EMR_GLSRECORD:
case EMR_GLSBOUNDEDRECORD:
default: default:
/* From docs: If PlayEnhMetaFileRecord doesn't recognize a /* From docs: If PlayEnhMetaFileRecord doesn't recognize a
record then ignore and return TRUE. */ record then ignore and return TRUE. */

View File

@ -39,8 +39,8 @@ init MAIN_GdiInit
@ stdcall CreateBitmap(long long long long ptr) CreateBitmap @ stdcall CreateBitmap(long long long long ptr) CreateBitmap
@ stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect @ stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect
@ stdcall CreateBrushIndirect(ptr) CreateBrushIndirect @ stdcall CreateBrushIndirect(ptr) CreateBrushIndirect
@ stub CreateColorSpaceA @ stdcall CreateColorSpaceA(ptr) CreateColorSpaceA
@ stub CreateColorSpaceW @ stdcall CreateColorSpaceW(ptr) CreateColorSpaceW
@ stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap @ stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap
@ stdcall CreateCompatibleDC(long) CreateCompatibleDC @ stdcall CreateCompatibleDC(long) CreateCompatibleDC
@ stdcall CreateDCA(str str str ptr) CreateDCA @ stdcall CreateDCA(str str str ptr) CreateDCA
@ -77,7 +77,7 @@ init MAIN_GdiInit
@ stdcall CreateScalableFontResourceW(long wstr wstr wstr) CreateScalableFontResourceW @ stdcall CreateScalableFontResourceW(long wstr wstr wstr) CreateScalableFontResourceW
@ stdcall CreateSolidBrush(long) CreateSolidBrush @ stdcall CreateSolidBrush(long) CreateSolidBrush
@ stdcall DPtoLP(long ptr long) DPtoLP @ stdcall DPtoLP(long ptr long) DPtoLP
@ stub DeleteColorSpace @ stdcall DeleteColorSpace(long) DeleteColorSpace
@ stdcall DeleteDC(long) DeleteDC @ stdcall DeleteDC(long) DeleteDC
@ stdcall DeleteEnhMetaFile(long) DeleteEnhMetaFile @ stdcall DeleteEnhMetaFile(long) DeleteEnhMetaFile
@ stdcall DeleteMetaFile(long) DeleteMetaFile @ stdcall DeleteMetaFile(long) DeleteMetaFile
@ -343,7 +343,7 @@ init MAIN_GdiInit
@ stdcall SetBoundsRect(long ptr long) SetBoundsRect @ stdcall SetBoundsRect(long ptr long) SetBoundsRect
@ stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx @ stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx
@ stdcall SetColorAdjustment(long ptr) SetColorAdjustment @ stdcall SetColorAdjustment(long ptr) SetColorAdjustment
@ stub SetColorSpace @ stdcall SetColorSpace(long long) SetColorSpace
@ stdcall SetDIBColorTable(long long long ptr) SetDIBColorTable @ stdcall SetDIBColorTable(long long long ptr) SetDIBColorTable
@ stdcall SetDIBits(long long long long ptr ptr long) SetDIBits @ stdcall SetDIBits(long long long long ptr ptr long) SetDIBits
@ stdcall SetDIBitsToDevice(long long long long long long long long long ptr ptr long) SetDIBitsToDevice @ stdcall SetDIBitsToDevice(long long long long long long long long long ptr ptr long) SetDIBitsToDevice