1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */
28 module derelict.util.wintypes;
29 
30 private
31 {
32     import derelict.util.compat;
33 }
34 
35 /*
36 This module is used internally to avoid any dependence upon external Win32 modules.
37 Considering that there are modules in Phobos, Tango, and the Bindings project at
38 DSource, we want to avoid any conflicts with whichever implementation Derelict users choose.
39 */
40 version(Windows)
41 {
42     alias uint DWORD;
43     alias ushort WORD;
44     alias ushort USHORT;
45     alias uint UINT;
46     alias int INT;
47     alias int LONG;
48     alias ubyte BYTE;
49     alias float FLOAT;
50     alias int BOOL;
51     alias DWORD COLORREF;
52 
53     alias CCPTR LPCSTR;
54     alias void* LPVOID;
55 
56     alias void* HANDLE;
57     alias HANDLE HDC;
58     alias HANDLE HGLRC;
59     alias HANDLE HINSTANCE;
60     alias HANDLE HMODULE;
61     alias HANDLE HWND;
62     alias HANDLE HLOCAL;
63     alias HANDLE HPALETTE;
64     alias HANDLE HBITMAP;
65 
66     alias UINT WPARAM;
67     alias LONG LPARAM;
68 
69     alias int function() FARPROC;
70 
71     struct LAYERPLANEDESCRIPTOR
72     {
73         WORD nSize;
74         WORD nVersion;
75         DWORD dwFlags;
76         BYTE iPixelType;
77         BYTE cColorBits;
78         BYTE cRedBits;
79         BYTE cRedShift;
80         BYTE cGreenBits;
81         BYTE cGreenShift;
82         BYTE cBlueBits;
83         BYTE cBlueShift;
84         BYTE cAlphaBits;
85         BYTE cAlphaShift;
86         BYTE cAccumBits;
87         BYTE cAccumRedBits;
88         BYTE cAccumGreenBits;
89         BYTE cAccumBlueBits;
90         BYTE cAccumAlphaBits;
91         BYTE cDepthBits;
92         BYTE cStencilBits;
93         BYTE cAuxBuffers;
94         BYTE iLayerPlane;
95         BYTE bReserved;
96         COLORREF crTransparent;
97     }
98 
99     struct POINTFLOAT
100     {
101         FLOAT x;
102         FLOAT y;
103     }
104 
105     struct GLYPHMETRICSFLOAT
106     {
107         FLOAT gmfBlackBoxX;
108         FLOAT gmfBlackBoxY;
109         POINTFLOAT gmfptGlyphOrigin;
110         FLOAT gmfCellIncX;
111         FLOAT gmfCellIncY;
112     }
113 
114     struct PIXELFORMATDESCRIPTOR
115     {
116         WORD  nSize;
117         WORD  nVersion;
118         DWORD dwFlags;
119         BYTE  iPixelType;
120         BYTE  cColorBits;
121         BYTE  cRedBits;
122         BYTE  cRedShift;
123         BYTE  cGreenBits;
124         BYTE  cGreenShift;
125         BYTE  cBlueBits;
126         BYTE  cBlueShift;
127         BYTE  cAlphaBits;
128         BYTE  cAlphaShift;
129         BYTE  cAccumBits;
130         BYTE  cAccumRedBits;
131         BYTE  cAccumGreenBits;
132         BYTE  cAccumBlueBits;
133         BYTE  cAccumAlphaBits;
134         BYTE  cDepthBits;
135         BYTE  cStencilBits;
136         BYTE  cAuxBuffers;
137         BYTE  iLayerType;
138         BYTE  bReserved;
139         DWORD dwLayerMask;
140         DWORD dwVisibleMask;
141         DWORD dwDamageMask;
142     }
143 
144     struct VA_LIST {}
145 
146     enum : BYTE
147     {
148         PFD_TYPE_RGBA                   = 0,
149         PFD_TYPE_COLORINDEX             = 1
150     }
151 
152     enum
153     {
154         PFD_MAIN_PLANE                  = 0,
155         PFD_OVERLAY_PLANE               = 1,
156         PFD_UNDERLAY_PLANE              = -1
157     }
158 
159     enum
160     {
161         PFD_DOUBLEBUFFER                = 0x00000001,
162         PFD_STEREO                      = 0x00000002,
163         PFD_DRAW_TO_WINDOW              = 0x00000004,
164         PFD_DRAW_TO_BITMAP              = 0x00000008,
165         PFD_SUPPORT_GDI                 = 0x00000010,
166         PFD_SUPPORT_OPENGL              = 0x00000020,
167         PFD_GENERIC_FORMAT              = 0x00000040,
168         PFD_NEED_PALETTE                = 0x00000080,
169         PFD_NEED_SYSTEM_PALETTE         = 0x00000100,
170         PFD_SWAP_EXCHANGE               = 0x00000200,
171         PFD_SWAP_COPY                   = 0x00000400,
172         PFD_SWAP_LAYER_BUFFERS          = 0x00000800,
173         PFD_GENERIC_ACCELERATED         = 0x00001000,
174         PFD_SUPPORT_DIRECTDRAW          = 0x00002000,
175         PFD_DEPTH_DONTCARE              = 0x20000000,
176         PFD_DOUBLBUFFER_DONTCARE        = 0x40000000,
177         PFD_STEREO_DONTCARE             = 0x80000000,
178     }
179 
180     enum
181     {
182         LANG_NEUTRAL                    = 0,
183         SUBLANG_DEFAULT                 = 1,
184         FORMAT_MESSAGE_ALLOCATE_BUFFER  = 256,
185         FORMAT_MESSAGE_IGNORE_INSERTS   = 512,
186         FORMAT_MESSAGE_FROM_SYSTEM      = 4096
187     }
188 
189     struct RGBQUAD {
190         BYTE    rgbBlue;
191         BYTE    rgbGreen;
192         BYTE    rgbRed;
193         BYTE    rgbReserved;
194     }
195 
196     struct BITMAPINFOHEADER
197     {
198         DWORD      biSize;
199         LONG       biWidth;
200         LONG       biHeight;
201         WORD       biPlanes;
202         WORD       biBitCount;
203         DWORD      biCompression;
204         DWORD      biSizeImage;
205         LONG       biXPelsPerMeter;
206         LONG       biYPelsPerMeter;
207         DWORD      biClrUsed;
208         DWORD      biClrImportant;
209     }
210 
211     struct BITMAPINFO {
212         BITMAPINFOHEADER    bmiHeader;
213         RGBQUAD             bmiColors[1];
214     }
215 
216     struct RECT
217     {
218         LONG    left;
219         LONG    top;
220         LONG    right;
221         LONG    bottom;
222     }
223 
224     extern(Windows)
225     {
226         int ChoosePixelFormat(HDC,PIXELFORMATDESCRIPTOR*);
227         int GetPixelFormat(HDC);
228         int DescribePixelFormat(HDC,int,UINT,PIXELFORMATDESCRIPTOR*);
229         BOOL SwapBuffers(HDC);
230 
231         HMODULE LoadLibraryA(LPCSTR);
232         FARPROC GetProcAddress(HMODULE, LPCSTR);
233         void FreeLibrary(HMODULE);
234         DWORD GetLastError();
235         DWORD FormatMessageA(DWORD, in void*, DWORD, DWORD, LPCSTR, DWORD, VA_LIST*);
236         HLOCAL LocalFree(HLOCAL);
237     }
238 
239     DWORD MAKELANGID(WORD p, WORD s)
240     {
241          return (((cast(WORD)s) << 10) | cast(WORD)p);
242     }
243 }