Skip to content

Commit 623c15d

Browse files
add bindings creating windows and opengl contexts (#6)
1 parent e2c049f commit 623c15d

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

src/bindings/windows.zig

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const HWND = std.os.windows.HWND;
4747
const HDC = std.os.windows.HDC;
4848
const HGLRC = std.os.windows.HGLRC;
4949
const FARPROC = std.os.windows.FARPROC;
50+
const PROC = std.os.windows.PROC;
5051
const INT = std.os.windows.INT;
5152
const SIZE_T = std.os.windows.SIZE_T;
5253
const UINT = std.os.windows.UINT;
@@ -139,6 +140,10 @@ pub const MINMAXINFO = extern struct {
139140
ptMaxTrackSize: POINT,
140141
};
141142

143+
pub extern "user32" fn GetDC(hWnd: HWND) callconv(WINAPI) HDC;
144+
145+
pub extern "user32" fn ReleaseDC(hWnd: HWND, hdc: HDC) callconv(WINAPI) c_int;
146+
142147
pub extern "user32" fn SetProcessDPIAware() callconv(WINAPI) BOOL;
143148

144149
pub extern "user32" fn GetClientRect(HWND, *RECT) callconv(WINAPI) BOOL;
@@ -203,6 +208,23 @@ pub extern "user32" fn CreateWindowExA(
203208
lpParam: ?LPVOID,
204209
) callconv(WINAPI) ?HWND;
205210

211+
pub extern "user32" fn ShowWindow(
212+
hwnd: HWND,
213+
nCmdShow: i32,
214+
) callconv(WINAPI) bool;
215+
216+
pub extern "user32" fn IsWindow(hwnd: ?HWND) callconv(WINAPI) bool;
217+
218+
pub extern "user32" fn SetWindowPos(
219+
hWnd: HWND,
220+
hWndInsertAfter: ?HWND,
221+
X: i32,
222+
Y: i32,
223+
cx: i32,
224+
cY: i32,
225+
uFlags: UINT,
226+
) callconv(WINAPI) bool;
227+
206228
pub extern "user32" fn DestroyWindow(hWnd: HWND) BOOL;
207229

208230
pub extern "user32" fn PostQuitMessage(nExitCode: i32) callconv(WINAPI) void;
@@ -267,15 +289,33 @@ pub extern "shell32" fn SHGetKnownFolderPath(
267289

268290
pub const WS_BORDER = 0x00800000;
269291
pub const WS_OVERLAPPED = 0x00000000;
292+
pub const WS_CHILD = 0x40000000;
293+
pub const WS_CHILDWINDOW = WS_CHILD;
294+
pub const WS_CLIPCHILDREN = 0x02000000;
295+
pub const WS_CLIPSIBLINGS = 0x04000000;
296+
pub const WS_DISABLED = 0x08000000;
297+
pub const WS_GROUP = 0x00020000;
270298
pub const WS_SYSMENU = 0x00080000;
271299
pub const WS_DLGFRAME = 0x00400000;
300+
pub const WS_HSCROLL = 0x00100000;
301+
pub const WS_ICONIC = 0x20000000;
272302
pub const WS_CAPTION = WS_BORDER | WS_DLGFRAME;
303+
pub const WS_MINIMIZE = 0x20000000;
273304
pub const WS_MINIMIZEBOX = 0x00020000;
305+
pub const WS_MAXIMIZE = 0x01000000;
274306
pub const WS_MAXIMIZEBOX = 0x00010000;
275307
pub const WS_THICKFRAME = 0x00040000;
276308
pub const WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |
277309
WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
310+
pub const WS_POPUP = 0x80000000;
311+
pub const WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU;
312+
pub const WS_SIZEBOX = 0x00040000;
313+
pub const WS_TABSTOP = 0x00010000;
314+
pub const WS_TILED = 0x00000000;
315+
pub const WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |
316+
WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
278317
pub const WS_VISIBLE = 0x10000000;
318+
pub const WS_VSCROLL = 0x00200000;
279319

280320
pub const WM_MOUSEMOVE = 0x0200;
281321
pub const WM_LBUTTONDOWN = 0x0201;
@@ -373,6 +413,19 @@ pub const WNDCLASSEXA = extern struct {
373413
hIconSm: ?HICON,
374414
};
375415

416+
pub const CS_BYTEALIGNCLIENT: comptime_int = 0x1000;
417+
pub const CS_BYTEALIGNWINDOW: comptime_int = 0x2000;
418+
pub const CS_CLASSDC: comptime_int = 0x0040;
419+
pub const CS_DBLCLKS: comptime_int = 0x0008;
420+
pub const CS_DROPSHADOW: comptime_int = 0x00020000;
421+
pub const CS_GLOBALCLASS: comptime_int = 0x4000;
422+
pub const CS_HREDRAW: comptime_int = 0x0002;
423+
pub const CS_NOCLOSE: comptime_int = 0x0200;
424+
pub const CS_OWNDC: comptime_int = 0x0020;
425+
pub const CS_PARENTDC: comptime_int = 0x0080;
426+
pub const CS_SAVEBITS: comptime_int = 0x0800;
427+
pub const CS_VREDRAW: comptime_int = 0x0001;
428+
376429
pub const OSVERSIONINFOW = extern struct {
377430
dwOSVersionInfoSize: ULONG,
378431
dwMajorVersion: ULONG,
@@ -560,3 +613,85 @@ pub const IM_VK_KEYPAD_ENTER = VK_RETURN + 256;
560613
pub const KF_EXTENDED = 0x0100;
561614

562615
pub const GUID_NULL = GUID.parse("{00000000-0000-0000-0000-000000000000}");
616+
617+
pub const PIXELFORMATDESCRIPTOR = extern struct {
618+
nSize: WORD,
619+
nVersion: WORD,
620+
dwFlags: DWORD,
621+
iPixelType: BYTE,
622+
cColorBits: BYTE,
623+
cRedBits: BYTE,
624+
cRedShift: BYTE,
625+
cGreenBits: BYTE,
626+
cGreenShift: BYTE,
627+
cBlueBits: BYTE,
628+
cBlueShift: BYTE,
629+
cAlphaBits: BYTE,
630+
cAlphaShift: BYTE,
631+
cAccumBits: BYTE,
632+
cAccumRedBits: BYTE,
633+
cAccumGreenBits: BYTE,
634+
cAccumBlueBits: BYTE,
635+
cAccumAlphaBits: BYTE,
636+
cDepthBits: BYTE,
637+
cStencilBits: BYTE,
638+
cAuxBuffers: BYTE,
639+
iLayerType: BYTE,
640+
bReserved: BYTE,
641+
dwLayerMask: DWORD,
642+
dwVisibleMask: DWORD,
643+
dwDamageMask: DWORD,
644+
};
645+
646+
pub const PFD_DRAW_TO_WINDOW: comptime_int = 0x00000004;
647+
pub const PFD_DRAW_TO_BITMAP: comptime_int = 0x00000008;
648+
pub const PFD_SUPPORT_GDI: comptime_int = 0x00000010;
649+
pub const PFD_SUPPORT_OPENGL: comptime_int = 0x00000020;
650+
pub const PFD_GENERIC_ACCELERATED: comptime_int = 0x00001000;
651+
pub const PFD_GENERIC_FORMAT: comptime_int = 0x00000040;
652+
pub const PFD_NEED_PALETTE: comptime_int = 0x00000080;
653+
pub const PFD_NEED_SYSTEM_PALETTE: comptime_int = 0x00000100;
654+
pub const PFD_DOUBLEBUFFER: comptime_int = 0x00000002;
655+
pub const PFD_STEREO: comptime_int = 0x00000001;
656+
pub const PFD_SWAP_LAYER_BUFFERS: comptime_int = 0x00000800;
657+
658+
pub const PFD_DEPTH_DONTCARE: comptime_int = 0x20000000;
659+
pub const PFD_DOUBLEBUFFER_DONTCARE: comptime_int = 0x40000000;
660+
pub const PFD_STEREO_DONTCARE: comptime_int = 0x80000000;
661+
662+
pub const PFD_SWAP_COPY: comptime_int = 0x00000400;
663+
pub const PFD_SWAP_EXCHANGE: comptime_int = 0x00000200;
664+
665+
pub const PFD_TYPE_RGBA: comptime_int = 0;
666+
pub const PFD_TYPE_COLORINDEX: comptime_int = 1;
667+
668+
pub extern "Gdi32" fn DescribePixelFormat(
669+
hdc: HDC,
670+
iPixelFormat: c_int,
671+
nBytes: UINT,
672+
ppfd: *const PIXELFORMATDESCRIPTOR,
673+
) callconv(WINAPI) c_int;
674+
675+
pub extern "Gdi32" fn ChoosePixelFormat(
676+
hdc: HDC,
677+
ppfd: *const PIXELFORMATDESCRIPTOR,
678+
) callconv(WINAPI) c_int;
679+
680+
pub extern "Gdi32" fn SetPixelFormat(
681+
hdc: HDC,
682+
format: c_int,
683+
ppfd: *const PIXELFORMATDESCRIPTOR,
684+
) callconv(WINAPI) bool;
685+
686+
pub extern "Gdi32" fn SwapBuffers(hdc: HDC) callconv(WINAPI) BOOL;
687+
688+
pub extern "Opengl32" fn wglCreateContext(hdc: HDC) callconv(WINAPI) HGLRC;
689+
690+
pub extern "Opengl32" fn wglDeleteContext(unnamedParam1: HGLRC) callconv(WINAPI) BOOL;
691+
692+
pub extern "Opengl32" fn wglMakeCurrent(
693+
hdc: HDC,
694+
glContext: HGLRC,
695+
) callconv(WINAPI) BOOL;
696+
697+
pub extern "Opengl32" fn wglGetProcAddress(unnamedParam1: LPCSTR) callconv(WINAPI) ?PROC;

0 commit comments

Comments
 (0)