Mercurial > games > semicongine
comparison src/xlib_helpers.nim @ 0:5daf3f236d87
add: initial version
author | Sam <sam@basx.dev> |
---|---|
date | Wed, 14 Dec 2022 00:49:35 +0700 |
parents | |
children | 213fdf8d31dd |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:5daf3f236d87 |
---|---|
1 import | |
2 x11/xlib, | |
3 x11/xutil, | |
4 x11/x | |
5 | |
6 var deleteMessage*: Atom | |
7 | |
8 template checkXlibResult*(call: untyped) = | |
9 let value = call | |
10 if value == 0: | |
11 raise newException(Exception, "Xlib error: " & astToStr(call) & " returned " & $value) | |
12 | |
13 proc xlibInit*(): (PDisplay, Window) = | |
14 let display = XOpenDisplay(nil) | |
15 if display == nil: | |
16 quit "Failed to open display" | |
17 | |
18 let | |
19 screen = XDefaultScreen(display) | |
20 rootWindow = XRootWindow(display, screen) | |
21 foregroundColor = XBlackPixel(display, screen) | |
22 backgroundColor = XWhitePixel(display, screen) | |
23 | |
24 let window = XCreateSimpleWindow(display, rootWindow, -1, -1, 800, 600, 0, foregroundColor, backgroundColor) | |
25 checkXlibResult XSetStandardProperties(display, window, "Nim X11", "window", 0, nil, 0, nil) | |
26 checkXlibResult XSelectInput(display, window, ButtonPressMask or KeyPressMask or ExposureMask) | |
27 checkXlibResult XMapWindow(display, window) | |
28 | |
29 deleteMessage = XInternAtom(display, "WM_DELETE_WINDOW", false.XBool) | |
30 checkXlibResult XSetWMProtocols(display, window, addr(deleteMessage), 1) | |
31 | |
32 return (display, window) | |
33 | |
34 proc xlibFramebufferSize*(display: PDisplay, window: Window): (int, int) = | |
35 var attribs: XWindowAttributes | |
36 checkXlibResult XGetWindowAttributes(display, window, addr(attribs)) | |
37 return (int(attribs.width), int(attribs.height)) |