1c1a17dfda0720d8abd7d89b1d4af87cc88af28e
[reactos.git] / reactos / subsystems / win32 / win32k / include / inteng.h
1 #ifndef _WIN32K_INTENG_H
2 #define _WIN32K_INTENG_H
3
4 typedef ULONG HCLIP;
5
6 #define ENUM_RECT_LIMIT 50
7
8 typedef struct _RECT_ENUM
9 {
10 ULONG c;
11 RECTL arcl[ENUM_RECT_LIMIT];
12 } RECT_ENUM;
13
14 typedef struct tagSPAN
15 {
16 LONG Y;
17 LONG X;
18 ULONG Width;
19 } SPAN, *PSPAN;
20
21 #define R3_OPINDEX_SRCCOPY 0xcc
22 #define R3_OPINDEX_NOOP 0xaa
23 #define R4_NOOP ((R3_OPINDEX_NOOP << 8) | R3_OPINDEX_NOOP)
24 #define R4_MASK ((R3_OPINDEX_NOOP << 8) | R3_OPINDEX_SRCCOPY)
25
26 #define ROP2_TO_MIX(Rop2) (((Rop2) << 8) | (Rop2))
27 #define ROP3_USES_DEST(Rop3) ((((Rop3) & 0xAA0000) >> 1) != ((Rop3) & 0x550000))
28 #define ROP4_USES_DEST(Rop4) (((((Rop4) & 0xAA) >> 1) != ((Rop4) & 0x55)) || ((((Rop4) & 0xAA00) >> 1) != ((Rop4) & 0x5500)))
29 #define ROP3_USES_SOURCE(Rop3) ((((Rop3) & 0xCC0000) >> 2) != ((Rop3) & 0x330000))
30 #define ROP4_USES_SOURCE(Rop4) (((((Rop4) & 0xCC) >> 2) != ((Rop4) & 0x33)) || ((((Rop4) & 0xCC00) >> 2) != ((Rop4) & 0x3300)))
31 #define ROP3_USES_PATTERN(Rop3) ((((Rop3) & 0xF00000) >> 4) != ((Rop3) & 0x0F0000))
32 #define ROP4_USES_PATTERN(Rop4) (((((Rop4) & 0xF0) >> 4) != ((Rop4) & 0x0F)) || ((((Rop4) & 0xF000) >> 4) != ((Rop4) & 0x0F00)))
33 #define ROP3_TO_ROP4(Rop3) ((((Rop3) >> 8) & 0xff00) | (((Rop3) >> 16) & 0x00ff))
34
35 /* Definitions of IntEngXxx functions */
36
37 #define IntEngLockProcessDriverObjs(W32Process) \
38 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&(W32Process)->DriverObjListLock)
39
40 #define IntEngUnLockProcessDriverObjs(W32Process) \
41 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&(W32Process)->DriverObjListLock)
42
43 VOID FASTCALL
44 IntEngCleanupDriverObjs(struct _EPROCESS *Process,
45 PW32PROCESS Win32Process);
46
47 BOOL STDCALL
48 IntEngLineTo(SURFOBJ *Surface,
49 CLIPOBJ *Clip,
50 BRUSHOBJ *Brush,
51 LONG x1,
52 LONG y1,
53 LONG x2,
54 LONG y2,
55 RECTL *RectBounds,
56 MIX mix);
57
58 BOOL STDCALL
59 IntEngBitBltEx(SURFOBJ *DestObj,
60 SURFOBJ *SourceObj,
61 SURFOBJ *Mask,
62 CLIPOBJ *ClipRegion,
63 XLATEOBJ *ColorTranslation,
64 RECTL *DestRect,
65 POINTL *SourcePoint,
66 POINTL *MaskOrigin,
67 BRUSHOBJ *Brush,
68 POINTL *BrushOrigin,
69 ROP4 Rop4,
70 BOOL RemoveMouse);
71 #define IntEngBitBlt(DestObj, SourceObj, Mask, ClipRegion, ColorTranslation, \
72 DestRect, SourcePoint, MaskOrigin, Brush, BrushOrigin, \
73 Rop4) \
74 IntEngBitBltEx((DestObj), (SourceObj), (Mask), (ClipRegion), \
75 (ColorTranslation), (DestRect), (SourcePoint), \
76 (MaskOrigin), (Brush), (BrushOrigin), (Rop4), TRUE)
77
78 BOOL STDCALL
79 IntEngStretchBlt(SURFOBJ *DestObj,
80 SURFOBJ *SourceObj,
81 SURFOBJ *Mask,
82 CLIPOBJ *ClipRegion,
83 XLATEOBJ *ColorTranslation,
84 RECTL *DestRect,
85 RECTL *SourceRect,
86 POINTL *pMaskOrigin,
87 BRUSHOBJ *Brush,
88 POINTL *BrushOrigin,
89 ULONG Mode);
90
91 BOOL STDCALL
92 IntEngGradientFill(SURFOBJ *psoDest,
93 CLIPOBJ *pco,
94 XLATEOBJ *pxlo,
95 TRIVERTEX *pVertex,
96 ULONG nVertex,
97 PVOID pMesh,
98 ULONG nMesh,
99 RECTL *prclExtents,
100 POINTL *pptlDitherOrg,
101 ULONG ulMode);
102
103 XLATEOBJ* FASTCALL
104 IntEngCreateXlate(USHORT DestPalType,
105 USHORT SourcePalType,
106 HPALETTE PaletteDest,
107 HPALETTE PaletteSource);
108
109 XLATEOBJ* FASTCALL
110 IntEngCreateMonoXlate(USHORT SourcePalType,
111 HPALETTE PaletteDest,
112 HPALETTE PaletteSource,
113 ULONG BackgroundColor);
114
115 XLATEOBJ* FASTCALL
116 IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
117 ULONG ForegroundColor,
118 ULONG BackgroundColor);
119
120 HPALETTE FASTCALL
121 IntEngGetXlatePalette(XLATEOBJ *XlateObj,
122 ULONG Palette);
123
124 BOOL STDCALL
125 IntEngPolyline(SURFOBJ *DestSurf,
126 CLIPOBJ *Clip,
127 BRUSHOBJ *Brush,
128 CONST LPPOINT pt,
129 LONG dCount,
130 MIX mix);
131
132 CLIPOBJ* FASTCALL
133 IntEngCreateClipRegion(ULONG count,
134 PRECTL pRect,
135 PRECTL rcBounds);
136
137 VOID FASTCALL
138 IntEngDeleteClipRegion(CLIPOBJ *ClipObj);
139
140 BOOLEAN FASTCALL
141 ClipobjToSpans(PSPAN *Spans,
142 UINT *Count,
143 CLIPOBJ *ClipRegion,
144 PRECTL Boundary);
145
146 BOOL FASTCALL
147 IntEngTransparentBlt(SURFOBJ *Dest,
148 SURFOBJ *Source,
149 CLIPOBJ *Clip,
150 XLATEOBJ *ColorTranslation,
151 PRECTL DestRect,
152 PRECTL SourceRect,
153 ULONG iTransColor,
154 ULONG Reserved);
155
156 BOOL STDCALL
157 IntEngPaint(IN SURFOBJ *Surface,
158 IN CLIPOBJ *ClipRegion,
159 IN BRUSHOBJ *Brush,
160 IN POINTL *BrushOrigin,
161 IN MIX Mix);
162
163 VOID STDCALL
164 IntEngMovePointer(IN SURFOBJ *pso,
165 IN LONG x,
166 IN LONG y,
167 IN RECTL *prcl);
168
169 BOOL STDCALL
170 IntEngAlphaBlend(IN SURFOBJ *Dest,
171 IN SURFOBJ *Source,
172 IN CLIPOBJ *ClipRegion,
173 IN XLATEOBJ *ColorTranslation,
174 IN PRECTL DestRect,
175 IN PRECTL SourceRect,
176 IN BLENDOBJ *BlendObj);
177
178
179 #endif /* _WIN32K_INTENG_H */