2000-03-18 18:39:44 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* PURPOSE: GDI Internal Objects
|
|
|
|
* FILE: subsys/win32k/eng/objects.h
|
|
|
|
* PROGRAMER: Jason Filby
|
|
|
|
* REVISION HISTORY:
|
|
|
|
* 21/8/1999: Created
|
|
|
|
*/
|
2002-08-04 09:55:11 +00:00
|
|
|
#ifndef __ENG_OBJECTS_H
|
|
|
|
#define __ENG_OBJECTS_H
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2001-05-02 12:33:42 +00:00
|
|
|
#include <freetype/freetype.h>
|
|
|
|
|
2002-08-04 09:55:11 +00:00
|
|
|
/* Structure of internal gdi objects that win32k manages for ddi engine:
|
|
|
|
|---------------------------------|
|
|
|
|
| EngObj |
|
|
|
|
|---------------------------------|
|
|
|
|
| Public part |
|
|
|
|
| accessed from engine |
|
|
|
|
|---------------------------------|
|
|
|
|
| Private part |
|
|
|
|
| managed by gdi |
|
|
|
|
|_________________________________|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
typedef struct _ENGOBJ {
|
|
|
|
ULONG hObj;
|
|
|
|
ULONG InternalSize;
|
|
|
|
ULONG UserSize;
|
|
|
|
}ENGOBJ, *PENGOBJ;
|
|
|
|
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-08-04 09:55:11 +00:00
|
|
|
|
|
|
|
typedef struct _BRUSHGDI {
|
|
|
|
ENGOBJ Header;
|
|
|
|
BRUSHOBJ BrushObj;
|
2000-03-18 18:39:44 +00:00
|
|
|
} BRUSHGDI;
|
|
|
|
|
|
|
|
typedef struct _CLIPGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
CLIPOBJ ClipObj;
|
2002-08-18 07:02:57 +00:00
|
|
|
/* ei what were these for?
|
2001-03-31 15:35:08 +00:00
|
|
|
ULONG NumRegionRects;
|
|
|
|
ULONG NumIntersectRects;
|
|
|
|
RECTL *RegionRects;
|
|
|
|
RECTL *IntersectRects;
|
2002-08-18 07:02:57 +00:00
|
|
|
*/
|
2001-03-31 15:35:08 +00:00
|
|
|
ULONG EnumPos;
|
2002-08-18 07:02:57 +00:00
|
|
|
ULONG EnumOrder;
|
|
|
|
ULONG EnumMax;
|
2001-03-31 15:35:08 +00:00
|
|
|
ENUMRECTS EnumRects;
|
2000-06-16 07:25:41 +00:00
|
|
|
} CLIPGDI, *PCLIPGDI;
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-08-04 09:55:11 +00:00
|
|
|
/*ei What is this for? */
|
2000-03-18 18:39:44 +00:00
|
|
|
typedef struct _DRVFUNCTIONSGDI {
|
2001-03-31 15:35:08 +00:00
|
|
|
HDEV hdev;
|
|
|
|
DRVFN Functions[INDEX_LAST];
|
2000-03-18 18:39:44 +00:00
|
|
|
} DRVFUNCTIONSGDI;
|
|
|
|
|
|
|
|
typedef struct _FLOATGDI {
|
|
|
|
|
|
|
|
} FLOATGDI;
|
|
|
|
|
|
|
|
typedef struct _FONTGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
FONTOBJ FontObj;
|
|
|
|
|
2001-05-02 12:33:42 +00:00
|
|
|
LPCWSTR Filename;
|
|
|
|
FT_Face face;
|
2003-03-25 22:35:19 +00:00
|
|
|
TEXTMETRICW TextMetric;
|
2001-05-02 12:33:42 +00:00
|
|
|
} FONTGDI, *PFONTGDI;
|
2000-03-18 18:39:44 +00:00
|
|
|
|
|
|
|
typedef struct _PALGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
PALOBJ PalObj;
|
|
|
|
|
2001-03-31 15:35:08 +00:00
|
|
|
ULONG Mode; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR
|
|
|
|
ULONG NumColors;
|
|
|
|
ULONG *IndexedColors;
|
|
|
|
ULONG RedMask;
|
|
|
|
ULONG GreenMask;
|
|
|
|
ULONG BlueMask;
|
2000-06-16 07:25:41 +00:00
|
|
|
} PALGDI, *PPALGDI;
|
2000-03-18 18:39:44 +00:00
|
|
|
|
|
|
|
typedef struct _PATHGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
PATHOBJ PathObj;
|
2000-03-18 18:39:44 +00:00
|
|
|
} PATHGDI;
|
|
|
|
|
2002-08-04 09:55:11 +00:00
|
|
|
/*ei Fixme! Fix STROBJ */
|
2000-03-18 18:39:44 +00:00
|
|
|
typedef struct _STRGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
//STROBJ StrObj;
|
2000-03-18 18:39:44 +00:00
|
|
|
} STRGDI;
|
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_BitBlt)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PCLIPOBJ,
|
|
|
|
PXLATEOBJ, PRECTL, PPOINTL, PPOINTL,
|
|
|
|
PBRUSHOBJ, PPOINTL, ROP4);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_TransparentBlt)(PSURFOBJ, PSURFOBJ, PCLIPOBJ, PXLATEOBJ, PRECTL, PRECTL, ULONG, ULONG);
|
2001-05-02 12:33:42 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_StretchBlt)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PCLIPOBJ,
|
|
|
|
PXLATEOBJ, PCOLORADJUSTMENT, PPOINTL,
|
|
|
|
PRECTL, PRECTL, PPOINT, ULONG);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_TextOut)(PSURFOBJ, PSTROBJ, PFONTOBJ, PCLIPOBJ,
|
|
|
|
PRECTL, PRECTL, PBRUSHOBJ, PBRUSHOBJ,
|
|
|
|
PPOINTL, MIX);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_Paint)(PSURFOBJ, PCLIPOBJ, PBRUSHOBJ, PPOINTL, MIX);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_StrokePath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ, PXFORMOBJ,
|
|
|
|
PBRUSHOBJ, PPOINTL, PLINEATTRS, MIX);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_FillPath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ, PBRUSHOBJ,
|
|
|
|
PPOINTL, MIX, ULONG);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_StrokeAndFillPath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ,
|
|
|
|
PXFORMOBJ, PBRUSHOBJ, PLINEATTRS, PBRUSHOBJ,
|
|
|
|
PPOINTL, MIX, ULONG);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_LineTo)(PSURFOBJ, PCLIPOBJ, PBRUSHOBJ,
|
|
|
|
LONG, LONG, LONG, LONG, PRECTL, MIX);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_CopyBits)(PSURFOBJ, PSURFOBJ, PCLIPOBJ,
|
|
|
|
PXLATEOBJ, PRECTL, PPOINTL);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef VOID STDCALL (*PFN_Synchronize)(DHPDEV, PRECTL);
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
typedef VOID STDCALL (*PFN_MovePointer)(PSURFOBJ, LONG, LONG, PRECTL);
|
2000-10-14 22:42:11 +00:00
|
|
|
|
2003-02-15 19:16:34 +00:00
|
|
|
typedef ULONG STDCALL (*PFN_SetPointerShape)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PXLATEOBJ,
|
2002-09-08 10:23:54 +00:00
|
|
|
LONG, LONG, LONG, LONG, PRECTL, ULONG);
|
2001-05-26 08:15:40 +00:00
|
|
|
|
2002-06-15 21:44:08 +00:00
|
|
|
typedef HBITMAP STDCALL (*PFN_CreateDeviceBitmap)(DHPDEV, SIZEL, ULONG);
|
2000-10-14 22:42:11 +00:00
|
|
|
|
2002-06-15 21:44:08 +00:00
|
|
|
typedef BOOL STDCALL (*PFN_SetPalette)(DHPDEV, PALOBJ*, ULONG, ULONG, ULONG);
|
2001-03-31 15:35:08 +00:00
|
|
|
|
2003-03-04 10:09:01 +00:00
|
|
|
/* Forward declare (circular reference) */
|
|
|
|
typedef struct _SURFGDI *PSURFGDI;
|
|
|
|
|
|
|
|
typedef VOID (*PFN_DIB_PutPixel)(PSURFOBJ, LONG, LONG, ULONG);
|
|
|
|
typedef ULONG (*PFN_DIB_GetPixel)(PSURFOBJ, LONG, LONG);
|
|
|
|
typedef VOID (*PFN_DIB_HLine) (PSURFOBJ, LONG, LONG, LONG, ULONG);
|
|
|
|
typedef VOID (*PFN_DIB_VLine) (PSURFOBJ, LONG, LONG, LONG, ULONG);
|
|
|
|
typedef BOOLEAN (*PFN_DIB_BitBlt) (PSURFOBJ DestSurf, PSURFOBJ SourceSurf,
|
|
|
|
PSURFGDI DestGDI, PSURFGDI SourceGDI,
|
|
|
|
PRECTL DestRect, PPOINTL SourcePoint,
|
|
|
|
XLATEOBJ *ColorTranslation);
|
|
|
|
|
2000-03-18 18:39:44 +00:00
|
|
|
typedef struct _SURFGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
SURFOBJ SurfObj;
|
|
|
|
|
2001-03-31 15:35:08 +00:00
|
|
|
INT BitsPerPixel;
|
|
|
|
|
2003-03-04 10:09:01 +00:00
|
|
|
/* Driver functions */
|
2001-03-31 15:35:08 +00:00
|
|
|
PFN_BitBlt BitBlt;
|
2001-05-02 12:33:42 +00:00
|
|
|
PFN_TransparentBlt TransparentBlt;
|
2001-03-31 15:35:08 +00:00
|
|
|
PFN_StretchBlt StretchBlt;
|
|
|
|
PFN_TextOut TextOut;
|
|
|
|
PFN_Paint Paint;
|
|
|
|
PFN_StrokePath StrokePath;
|
|
|
|
PFN_FillPath FillPath;
|
|
|
|
PFN_StrokeAndFillPath StrokeAndFillPath;
|
|
|
|
PFN_LineTo LineTo;
|
|
|
|
PFN_CopyBits CopyBits;
|
|
|
|
PFN_Synchronize Synchronize;
|
|
|
|
BOOL SynchronizeAccess;
|
|
|
|
PFN_CreateDeviceBitmap CreateDeviceBitmap;
|
|
|
|
PFN_SetPalette SetPalette;
|
2001-05-26 08:15:40 +00:00
|
|
|
PFN_MovePointer MovePointer;
|
|
|
|
PFN_SetPointerShape SetPointerShape;
|
2003-03-04 10:09:01 +00:00
|
|
|
|
|
|
|
/* DIB functions */
|
|
|
|
PFN_DIB_PutPixel DIB_PutPixel;
|
|
|
|
PFN_DIB_HLine DIB_HLine;
|
|
|
|
PFN_DIB_VLine DIB_VLine;
|
|
|
|
PFN_DIB_BitBlt DIB_BitBlt;
|
|
|
|
} SURFGDI;
|
2000-03-18 18:39:44 +00:00
|
|
|
|
|
|
|
typedef struct _XFORMGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
/* XFORMOBJ has no public members */
|
2000-03-18 18:39:44 +00:00
|
|
|
} XFORMGDI;
|
|
|
|
|
|
|
|
typedef struct _XLATEGDI {
|
2002-08-04 09:55:11 +00:00
|
|
|
ENGOBJ Header;
|
|
|
|
XLATEOBJ XlateObj;
|
2001-03-31 15:35:08 +00:00
|
|
|
HPALETTE DestPal;
|
|
|
|
HPALETTE SourcePal;
|
2000-03-18 18:39:44 +00:00
|
|
|
|
2001-03-31 15:35:08 +00:00
|
|
|
ULONG *translationTable;
|
2003-02-15 19:16:34 +00:00
|
|
|
|
|
|
|
ULONG RedMask;
|
|
|
|
ULONG GreenMask;
|
|
|
|
ULONG BlueMask;
|
|
|
|
INT RedShift;
|
|
|
|
INT GreenShift;
|
|
|
|
INT BlueShift;
|
|
|
|
BOOL UseShiftAndMask;
|
2000-03-18 18:39:44 +00:00
|
|
|
} XLATEGDI;
|
|
|
|
|
|
|
|
// List of GDI objects
|
|
|
|
// FIXME: Make more dynamic
|
|
|
|
|
|
|
|
#define MAX_GDI_BRUSHES 255
|
|
|
|
#define MAX_GDI_CLIPS 255
|
|
|
|
#define MAX_GDI_DRVFUNCTIONS 16
|
|
|
|
#define MAX_GDI_FLOATS 255
|
|
|
|
#define MAX_GDI_FONTS 255
|
|
|
|
#define MAX_GDI_PALS 255
|
|
|
|
#define MAX_GDI_PATHS 255
|
|
|
|
#define MAX_GDI_STRS 255
|
|
|
|
#define MAX_GDI_SURFS 255
|
|
|
|
#define MAX_GDI_XFORMS 255
|
|
|
|
#define MAX_GDI_XLATES 255
|
2002-08-04 09:55:11 +00:00
|
|
|
|
|
|
|
#endif //__ENG_OBJECTS_H
|