mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-01 07:37:02 +00:00
- 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
This commit is contained in:
parent
40d5f4cddc
commit
f2b8492285
3 changed files with 173 additions and 16 deletions
|
@ -1966,9 +1966,15 @@ typedef struct {
|
|||
DWORD nPalEntries;
|
||||
SIZEL szlDevice;
|
||||
SIZEL szlMillimeters;
|
||||
|
||||
/* Fields for winver >= win95 */
|
||||
DWORD cbPixelFormat;
|
||||
DWORD offPixelFormat;
|
||||
DWORD bOpenGL;
|
||||
|
||||
/* Fields for winver >= win98 */
|
||||
SIZEL szlMicrometers;
|
||||
|
||||
} ENHMETAHEADER, *LPENHMETAHEADER;
|
||||
|
||||
typedef struct {
|
||||
|
@ -2049,9 +2055,18 @@ typedef struct {
|
|||
typedef struct {
|
||||
EMR emr;
|
||||
DWORD ihCS;
|
||||
LOGCOLORSPACEW lcs;
|
||||
LOGCOLORSPACEA lcs;
|
||||
} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
|
||||
|
||||
typedef struct {
|
||||
EMR emr;
|
||||
DWORD ihCS;
|
||||
LOGCOLORSPACEW lcs;
|
||||
DWORD dwFlags;
|
||||
DWORD cbData;
|
||||
BYTE Data[1];
|
||||
} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
|
||||
|
||||
typedef struct {
|
||||
EMR emr;
|
||||
DWORD ihBrush;
|
||||
|
@ -2508,6 +2523,24 @@ typedef struct {
|
|||
LONG cyDst;
|
||||
} 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,
|
||||
LPENHMETARECORD, INT, LPVOID);
|
||||
|
||||
|
@ -3046,6 +3079,9 @@ HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
|
|||
HBITMAP WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);
|
||||
HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
|
||||
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);
|
||||
HDC WINAPI CreateCompatibleDC(HDC);
|
||||
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)
|
||||
HBRUSH WINAPI CreateSolidBrush(COLORREF);
|
||||
BOOL WINAPI DPtoLP(HDC,LPPOINT,INT);
|
||||
BOOL WINAPI DeleteColorSpace(HCOLORSPACE);
|
||||
BOOL WINAPI DeleteDC(HDC);
|
||||
BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE);
|
||||
BOOL WINAPI DeleteMetaFile(HMETAFILE);
|
||||
|
@ -3308,12 +3345,14 @@ INT WINAPI SetBkMode(HDC,INT);
|
|||
UINT WINAPI SetBoundsRect(HDC,const RECT*,UINT);
|
||||
BOOL WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);
|
||||
BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
|
||||
HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);
|
||||
UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
|
||||
INT WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
|
||||
INT WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,
|
||||
INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
|
||||
HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);
|
||||
INT WINAPI SetGraphicsMode(HDC,INT);
|
||||
INT WINAPI SetICMMode(HDC,INT);
|
||||
DWORD WINAPI SetLayout(HDC,DWORD);
|
||||
INT WINAPI SetMapMode(HDC,INT);
|
||||
DWORD WINAPI SetMapperFlags(HDC,DWORD);
|
||||
|
|
|
@ -352,7 +352,39 @@ BOOL WINAPI PlayEnhMetaFileRecord(
|
|||
{
|
||||
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 @@ BOOL WINAPI PlayEnhMetaFileRecord(
|
|||
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 @@ BOOL WINAPI PlayEnhMetaFileRecord(
|
|||
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. */
|
||||
|
|
|
@ -39,8 +39,8 @@ init MAIN_GdiInit
|
|||
@ stdcall CreateBitmap(long long long long ptr) CreateBitmap
|
||||
@ stdcall CreateBitmapIndirect(ptr) CreateBitmapIndirect
|
||||
@ stdcall CreateBrushIndirect(ptr) CreateBrushIndirect
|
||||
@ stub CreateColorSpaceA
|
||||
@ stub CreateColorSpaceW
|
||||
@ stdcall CreateColorSpaceA(ptr) CreateColorSpaceA
|
||||
@ stdcall CreateColorSpaceW(ptr) CreateColorSpaceW
|
||||
@ stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap
|
||||
@ stdcall CreateCompatibleDC(long) CreateCompatibleDC
|
||||
@ stdcall CreateDCA(str str str ptr) CreateDCA
|
||||
|
@ -77,7 +77,7 @@ init MAIN_GdiInit
|
|||
@ stdcall CreateScalableFontResourceW(long wstr wstr wstr) CreateScalableFontResourceW
|
||||
@ stdcall CreateSolidBrush(long) CreateSolidBrush
|
||||
@ stdcall DPtoLP(long ptr long) DPtoLP
|
||||
@ stub DeleteColorSpace
|
||||
@ stdcall DeleteColorSpace(long) DeleteColorSpace
|
||||
@ stdcall DeleteDC(long) DeleteDC
|
||||
@ stdcall DeleteEnhMetaFile(long) DeleteEnhMetaFile
|
||||
@ stdcall DeleteMetaFile(long) DeleteMetaFile
|
||||
|
@ -343,7 +343,7 @@ init MAIN_GdiInit
|
|||
@ stdcall SetBoundsRect(long ptr long) SetBoundsRect
|
||||
@ stdcall SetBrushOrgEx(long long long ptr) SetBrushOrgEx
|
||||
@ stdcall SetColorAdjustment(long ptr) SetColorAdjustment
|
||||
@ stub SetColorSpace
|
||||
@ stdcall SetColorSpace(long long) SetColorSpace
|
||||
@ stdcall SetDIBColorTable(long long long ptr) SetDIBColorTable
|
||||
@ 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
|
||||
|
|
Loading…
Reference in a new issue