Mercurial > games > semicongine
comparison src/platform/windows/win32.nim @ 466:1dd9e2393a9e
add: structure code for crossplatform, add some input handling + bugfixes
author | Sam <sam@basx.dev> |
---|---|
date | Thu, 22 Dec 2022 00:06:40 +0700 |
parents | |
children | 0660ba9d1930 |
comparison
equal
deleted
inserted
replaced
465:2fcb9268072b | 466:1dd9e2393a9e |
---|---|
1 import winim | |
2 | |
3 import ../../events | |
4 | |
5 type | |
6 NativeWindow* = object | |
7 hinstance*: HINSTANCE | |
8 hwnd*: HWND | |
9 | |
10 template checkWin32Result*(call: untyped) = | |
11 let value = call | |
12 if value != 0: | |
13 raise newException(Exception, "Win32 error: " & astToStr(call) & " returned " & $value) | |
14 | |
15 proc WindowHandler(hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT {.stdcall.} = | |
16 case uMsg | |
17 of WM_DESTROY: | |
18 discard | |
19 else: | |
20 return DefWindowProc(hwnd, uMsg, wParam, lParam) | |
21 | |
22 | |
23 proc createWindow*(title: string): NativeWindow = | |
24 result.hInstance = HINSTANCE(GetModuleHandle(nil)) | |
25 var | |
26 windowClassName = T"EngineWindowClass" | |
27 windowName = T(title) | |
28 windowClass = WNDCLASS( | |
29 lpfnWndProc: WindowHandler, | |
30 hInstance: result.hInstance, | |
31 lpszClassName: windowClassName, | |
32 ) | |
33 RegisterClass(addr(windowClass)) | |
34 | |
35 result.hwnd = CreateWindowEx( | |
36 DWORD(0), | |
37 windowClassName, | |
38 windowName, | |
39 DWORD(WS_OVERLAPPEDWINDOW), | |
40 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, | |
41 HMENU(0), | |
42 HINSTANCE(0), | |
43 result.hInstance, | |
44 nil | |
45 ) | |
46 | |
47 discard ShowWindow(result.hwnd, 0) | |
48 | |
49 proc trash*(window: NativeWindow) = | |
50 PostQuitMessage(0) | |
51 | |
52 proc size*(window: NativeWindow): (int, int) = | |
53 var rect: RECT | |
54 checkWin32Result GetWindowRect(window.hwnd, addr(rect)) | |
55 (int(rect.right - rect.left), int(rect.bottom - rect.top)) | |
56 | |
57 proc pendingEvents*(window: NativeWindow): seq[Event] = | |
58 result |