Start using gdi shared handle table.
[reactos.git] / reactos / dll / win32 / gdi32 / include / gdi32p.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS System Libraries
4 * FILE: lib/gdi32/include/gdi32p.h
5 * PURPOSE: User-Mode Win32 GDI Library Private Header
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9
10 /* DATA **********************************************************************/
11
12 extern PGDI_TABLE_ENTRY GdiHandleTable;
13 extern PGDI_SHARED_HANDLE_TABLE GdiSharedHandleTable;
14 extern HANDLE hProcessHeap;
15 extern HANDLE CurrentProcessId;
16 extern DWORD GDI_BatchLimit;
17 extern PDEVCAPS GdiDevCaps;
18
19 typedef INT
20 (CALLBACK* EMFPLAYPROC)(
21 HDC hdc,
22 INT iFunction,
23 HANDLE hPageQuery
24 );
25
26 /* DEFINES *******************************************************************/
27
28 #define HANDLE_LIST_INC 20
29
30 #define METAFILE_MEMORY 1
31 #define METAFILE_DISK 2
32
33 #define DEFAULT_BITMAP (STOCK_LAST+1)
34 #define NB_STOCK_OBJECTS (STOCK_LAST+2)
35
36 /* TYPES *********************************************************************/
37
38 // Based on wmfapi.h and Wine.
39 typedef struct tagMETAFILEDC {
40 PVOID pvMetaBuffer;
41 HANDLE hFile;
42 DWORD Size;
43 METAHEADER mh;
44 UINT handles_size, cur_handles;
45 HGDIOBJ *handles;
46
47 // more DC object stuff.
48 HGDIOBJ Pen;
49 HGDIOBJ Brush;
50 HGDIOBJ Palette;
51 HGDIOBJ Font;
52
53 WCHAR Filename[MAX_PATH+2];
54 // Add more later.
55 } METAFILEDC,*PMETAFILEDC;
56
57 // Metafile Entry handle
58 typedef struct tagMF_ENTRY {
59 LIST_ENTRY List;
60 HGDIOBJ hmDC; // Handle return from NtGdiCreateClientObj.
61 PMETAFILEDC pmfDC;
62 } MF_ENTRY, *PMF_ENTRY;
63
64 typedef struct tagENHMETAFILE {
65 PVOID pvMetaBuffer;
66 HANDLE hFile; /* Handle for disk based MetaFile */
67 DWORD Size;
68 INT iType;
69 PENHMETAHEADER emf;
70 UINT handles_size, cur_handles;
71 HGDIOBJ *handles;
72 INT horzres, vertres;
73 INT horzsize, vertsize;
74 INT logpixelsx, logpixelsy;
75 INT bitspixel;
76 INT textcaps;
77 INT rastercaps;
78 INT technology;
79 INT planes;
80 } ENHMETAFILE,*PENHMETAFILE;
81
82 /* FUNCTIONS *****************************************************************/
83
84 PVOID
85 HEAP_alloc(DWORD len);
86
87 NTSTATUS
88 HEAP_strdupA2W(
89 LPWSTR* ppszW,
90 LPCSTR lpszA
91 );
92
93 VOID
94 HEAP_free(LPVOID memory);
95
96 BOOL
97 FASTCALL
98 TextMetricW2A(
99 TEXTMETRICA *tma,
100 TEXTMETRICW *tmw
101 );
102
103 BOOL
104 FASTCALL
105 NewTextMetricW2A(
106 NEWTEXTMETRICA *tma,
107 NEWTEXTMETRICW *tmw
108 );
109
110 BOOL
111 FASTCALL
112 NewTextMetricExW2A(
113 NEWTEXTMETRICEXA *tma,
114 NEWTEXTMETRICEXW *tmw
115 );
116
117 BOOL
118 FASTCALL
119 DeleteRegion( HRGN );
120
121 BOOL
122 GdiIsHandleValid(HGDIOBJ hGdiObj);
123
124 BOOL
125 GdiGetHandleUserData(
126 HGDIOBJ hGdiObj,
127 DWORD ObjectType,
128 PVOID *UserData
129 );
130
131 PLDC
132 GdiGetLDC(HDC hDC);
133
134 HGDIOBJ
135 STDCALL
136 GdiFixUpHandle(HGDIOBJ hGO);
137
138 BOOL
139 WINAPI
140 CalculateColorTableSize(
141 CONST BITMAPINFOHEADER *BitmapInfoHeader,
142 UINT *ColorSpec,
143 UINT *ColorTableSize
144 );
145
146 LPBITMAPINFO
147 WINAPI
148 ConvertBitmapInfo(
149 CONST BITMAPINFO *BitmapInfo,
150 UINT ColorSpec,
151 UINT *BitmapInfoSize,
152 BOOL FollowedByData
153 );
154
155 DEVMODEW *
156 NTAPI
157 GdiConvertToDevmodeW(DEVMODEA *dm);
158
159 DWORD
160 STDCALL
161 GetAndSetDCDWord( HDC, INT, DWORD, DWORD, DWORD, DWORD );
162
163 DWORD
164 STDCALL
165 GetDCDWord( HDC, INT, DWORD);
166
167 HGDIOBJ
168 STDCALL
169 GetDCObject( HDC, INT);
170
171 VOID
172 NTAPI
173 LogFontA2W(
174 LPLOGFONTW pW,
175 CONST LOGFONTA *pA
176 );
177
178 VOID
179 NTAPI
180 LogFontW2A(
181 LPLOGFONTA pA,
182 CONST LOGFONTW *pW
183 );
184
185 VOID
186 STDCALL
187 EnumLogFontExW2A(
188 LPENUMLOGFONTEXA fontA,
189 CONST ENUMLOGFONTEXW *fontW );
190
191 /* FIXME: Put in some public header */
192 UINT
193 WINAPI
194 UserRealizePalette(HDC hDC);
195
196 int
197 STDCALL
198 GdiAddFontResourceW(LPCWSTR lpszFilename,FLONG fl,DESIGNVECTOR *pdv);
199
200 VOID
201 STDCALL
202 GdiSetLastError( DWORD dwErrCode );
203
204 /* EOF */
205