0
|
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))
|