[INTRIN]
[reactos.git] / reactos / win32ss / core / gdi / eng / inteng.h
1 #pragma once
2
3 typedef ULONG HCLIP;
4
5 #define ENUM_RECT_LIMIT 32
6
7 typedef struct _RECT_ENUM
8 {
9 ULONG c;
10 RECTL arcl[ENUM_RECT_LIMIT];
11 } RECT_ENUM;
12
13 typedef struct tagSPAN
14 {
15 LONG Y;
16 LONG X;
17 ULONG Width;
18 } SPAN, *PSPAN;
19
20 enum _R3_ROPCODES
21 {
22 R3_OPINDEX_NOOP = 0xAA,
23 R3_OPINDEX_BLACKNESS = 0x00,
24 R3_OPINDEX_NOTSRCERASE = 0x11,
25 R3_OPINDEX_NOTSRCCOPY = 0x33,
26 R3_OPINDEX_SRCERASE = 0x44,
27 R3_OPINDEX_DSTINVERT = 0x55,
28 R3_OPINDEX_PATINVERT = 0x5A,
29 R3_OPINDEX_SRCINVERT = 0x66,
30 R3_OPINDEX_SRCAND = 0x88,
31 R3_OPINDEX_MERGEPAINT = 0xBB,
32 R3_OPINDEX_MERGECOPY = 0xC0,
33 R3_OPINDEX_SRCCOPY = 0xCC,
34 R3_OPINDEX_SRCPAINT = 0xEE,
35 R3_OPINDEX_PATCOPY = 0xF0,
36 R3_OPINDEX_PATPAINT = 0xFB,
37 R3_OPINDEX_WHITENESS = 0xFF
38 };
39
40 #define ROP2_TO_MIX(Rop2) (((Rop2) << 8) | (Rop2))
41
42 #define ROP4_FROM_INDEX(index) ((index) | ((index) << 8))
43
44 #define ROP4_USES_DEST(Rop4) ((((Rop4) & 0xAAAA) >> 1) != ((Rop4) & 0x5555))
45 #define ROP4_USES_SOURCE(Rop4) ((((Rop4) & 0xCCCC) >> 2) != ((Rop4) & 0x3333))
46 #define ROP4_USES_PATTERN(Rop4) ((((Rop4) & 0xF0F0) >> 4) != ((Rop4) & 0x0F0F))
47 #define ROP4_USES_MASK(Rop4) ((((Rop4) & 0xFF00) >> 8) != ((Rop4) & 0x00ff))
48
49 #define IS_VALID_ROP4(rop) (((rop) & 0xFFFF0000) == 0)
50
51 #define ROP4_FGND(Rop4) ((Rop4) & 0x00FF)
52 #define ROP4_BKGND(Rop4) (((Rop4) & 0xFF00) >> 8)
53
54 #define ROP4_NOOP (R3_OPINDEX_NOOP | (R3_OPINDEX_NOOP << 8))
55 #define ROP4_MASK (R3_OPINDEX_SRCCOPY | (R3_OPINDEX_NOOP << 8))
56 #define ROP4_MASKPAINT (R3_OPINDEX_PATCOPY | (R3_OPINDEX_NOOP << 8))
57
58 /* Definitions of IntEngXxx functions */
59
60 BOOL APIENTRY
61 IntEngLineTo(SURFOBJ *Surface,
62 CLIPOBJ *Clip,
63 BRUSHOBJ *Brush,
64 LONG x1,
65 LONG y1,
66 LONG x2,
67 LONG y2,
68 RECTL *RectBounds,
69 MIX mix);
70
71 BOOL APIENTRY
72 IntEngBitBlt(SURFOBJ *DestObj,
73 SURFOBJ *SourceObj,
74 SURFOBJ *Mask,
75 CLIPOBJ *ClipRegion,
76 XLATEOBJ *ColorTranslation,
77 RECTL *DestRect,
78 POINTL *SourcePoint,
79 POINTL *MaskOrigin,
80 BRUSHOBJ *Brush,
81 POINTL *BrushOrigin,
82 ROP4 Rop4);
83
84 BOOL APIENTRY
85 IntEngStretchBlt(SURFOBJ *DestObj,
86 SURFOBJ *SourceObj,
87 SURFOBJ *Mask,
88 CLIPOBJ *ClipRegion,
89 XLATEOBJ *ColorTranslation,
90 COLORADJUSTMENT *pca,
91 RECTL *DestRect,
92 RECTL *SourceRect,
93 POINTL *pMaskOrigin,
94 BRUSHOBJ *Brush,
95 POINTL *BrushOrigin,
96 ULONG Mode);
97
98 BOOL APIENTRY
99 IntEngGradientFill(SURFOBJ *psoDest,
100 CLIPOBJ *pco,
101 XLATEOBJ *pxlo,
102 TRIVERTEX *pVertex,
103 ULONG nVertex,
104 PVOID pMesh,
105 ULONG nMesh,
106 RECTL *prclExtents,
107 POINTL *pptlDitherOrg,
108 ULONG ulMode);
109
110 BOOL APIENTRY
111 IntEngPolyline(SURFOBJ *DestSurf,
112 CLIPOBJ *Clip,
113 BRUSHOBJ *Brush,
114 CONST LPPOINT pt,
115 LONG dCount,
116 MIX mix);
117
118 VOID FASTCALL
119 IntEngUpdateClipRegion(XCLIPOBJ* Clip,
120 ULONG count,
121 const RECTL* pRect,
122 const RECTL* rcBounds);
123
124 VOID FASTCALL
125 IntEngInitClipObj(XCLIPOBJ *Clip);
126
127 VOID FASTCALL
128 IntEngFreeClipResources(XCLIPOBJ *Clip);
129
130
131 BOOL FASTCALL
132 IntEngTransparentBlt(SURFOBJ *Dest,
133 SURFOBJ *Source,
134 CLIPOBJ *Clip,
135 XLATEOBJ *ColorTranslation,
136 PRECTL DestRect,
137 PRECTL SourceRect,
138 ULONG iTransColor,
139 ULONG Reserved);
140
141 BOOL APIENTRY
142 IntEngPaint(IN SURFOBJ *Surface,
143 IN CLIPOBJ *ClipRegion,
144 IN BRUSHOBJ *Brush,
145 IN POINTL *BrushOrigin,
146 IN MIX Mix);
147
148 ULONG APIENTRY
149 IntEngSetPointerShape(
150 IN SURFOBJ *pso,
151 IN SURFOBJ *psoMask,
152 IN SURFOBJ *psoColor,
153 IN XLATEOBJ *pxlo,
154 IN LONG xHot,
155 IN LONG yHot,
156 IN LONG x,
157 IN LONG y,
158 IN RECTL *prcl,
159 IN FLONG fl);
160
161 BOOL
162 APIENTRY
163 IntEngAlphaBlend(
164 _Inout_ SURFOBJ *psoDest,
165 _In_ SURFOBJ *psoSource,
166 _In_opt_ CLIPOBJ *pco,
167 _In_opt_ XLATEOBJ *pxlo,
168 _In_ RECTL *prclDest,
169 _In_ RECTL *prclSrc,
170 _In_ BLENDOBJ *pBlendObj);
171
172 BOOL APIENTRY
173 IntEngCopyBits(SURFOBJ *psoDest,
174 SURFOBJ *psoSource,
175 CLIPOBJ *pco,
176 XLATEOBJ *pxlo,
177 RECTL *prclDest,
178 POINTL *ptlSource);