diff --git a/.gitignore b/.gitignore index e98565f..7016fa2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ nimcache/ boomer -x11ex *.ppm diff --git a/boomer.nimble b/boomer.nimble index 27dc4c8..55d080c 100644 --- a/boomer.nimble +++ b/boomer.nimble @@ -3,6 +3,6 @@ author = "me" description = "Zoomer application for boomers" license = "MIT" srcDir = "src" -bin = @["boomer", "x11ex"] +bin = @["boomer"] requires "nim >= 0.18.0", "x11 >= 1.1", "opengl >= 1.2.3" diff --git a/src/x11ex.nim b/src/x11ex.nim deleted file mode 100644 index 30839a4..0000000 --- a/src/x11ex.nim +++ /dev/null @@ -1,94 +0,0 @@ -import x11/xlib, x11/xutil, x11/x, x11/keysym - -type - Hello* = object - running*: bool - display: PDisplay - screen: cint - win: TWindow - wmDeleteMessage: TAtom - message: cstring - -proc create_hello*(width, height: int, - message: string): Hello = - result.message = message - result.display = XOpenDisplay(nil) - if result.display == nil: - quit "Failed to open display" - - result.screen = XDefaultScreen(result.display) - var rootwin = XRootWindow(result.display, result.screen) - result.win = - XCreateSimpleWindow(result.display, rootwin, - 100, 10, - width.cuint, height.cuint, 5, - XBlackPixel(result.display, - result.screen), - XWhitePixel(result.display, - result.screen)) - - var size_hints = TXSizeHints( - flags: PSize or PMinSize or PMaxSize, - min_width: width.cint, - max_width: width.cint, - min_height: height.cint, - max_height: height.cint) - - discard XSetStandardProperties(result.display, - result.win, - "Simple Window", - "window", - 0, nil, 0, - addr(size_hints)) - discard XSelectInput(result.display, result.win, - ButtonPressMask or KeyPressMask or - PointerMotionMask or ExposureMask) - discard XMapWindow(result.display, result.win) - - result.wmDeleteMessage = - XInternAtom(result.display, - "WM_DELETE_WINDOW", - false.TBool) - - discard XSetWMProtocols(result.display, - result.win, - result.wmDeleteMessage.addr, 1) - result.running = true - -proc close* (hello: Hello) = - discard XDestroyWindow(hello.display, hello.win) - discard XCloseDisplay(hello.display) - -proc draw* (hello: Hello) = - discard XDrawString(hello.display, - hello.win, - DefaultGC(hello.display, hello.screen), - 10, 50, - hello.message, - hello.message.len.cint) - -proc handle_event* (hello: var Hello) = - var xev: TXEvent - discard XNextEvent(hello.display, xev.addr) - case xev.theType - of Expose: - hello.draw() - of ClientMessage: - if cast[TAtom](xev.xclient.data.l[0]) == hello.wmDeleteMessage: - hello.running = false - of KeyPress: - var key = XLookupKeysym(cast[PXKeyEvent](xev.addr), 0) - if key != 0: - echo "Keyboard event" - of ButtonPressMask, PointerMotionMask: - echo "Mouse event" - else: - discard - -proc main = - var hello = createHello(800, 600, "Hello!") - defer: hello.close() - while hello.running: - hello.handle_event() - -main()