summary refs log blame commit diff stats
path: root/examples/x11ex.nim
blob: db51df2e01de62b401da8b2e4b95ce264c8e27c4 (plain) (tree)






























































                                                                         


                                          




               
import xlib, xutil, x, keysym

const
  WINDOW_WIDTH = 400
  WINDOW_HEIGHT = 300
  
var
  width, height: int
  display: PDisplay
  screen: cint
  depth: int
  win: TWindow
  sizeHints: TXSizeHints

proc create_window = 
  width = WINDOW_WIDTH
  height = WINDOW_HEIGHT

  display = XOpenDisplay(nil)
  if display == nil:
    echo("Verbindung zum X-Server fehlgeschlagen")
    quit(1)

  screen = XDefaultScreen(display)
  depth = XDefaultDepth(display, screen)
  var rootwin = XRootWindow(display, screen)
  win = XCreateSimpleWindow(display, rootwin, 100, 10,
                            width, height, 5,
                            XBlackPixel(display, screen),
                            XWhitePixel(display, screen))
  size_hints.flags = PSize or PMinSize or PMaxSize
  size_hints.min_width =  width
  size_hints.max_width =  width
  size_hints.min_height = height
  size_hints.max_height = height
  discard XSetStandardProperties(display, win, "Simple Window", "window",
                         0, nil, 0, addr(size_hints))
  discard XSelectInput(display, win, ButtonPressMask or KeyPressMask or 
                                     PointerMotionMask)
  discard XMapWindow(display, win)

proc close_window =
  discard XDestroyWindow(display, win)
  discard XCloseDisplay(display)
    
var
  xev: TXEvent

proc process_event =
  var key: TKeySym
  case int(xev.theType)
  of KeyPress:
    key = XLookupKeysym(cast[ptr TXKeyEvent](addr(xev)), 0)
    if key != 0:
      echo("keyboard event")
  of ButtonPressMask, PointerMotionMask:
    Echo("Mouse event")
  else: nil

proc eventloop =
  discard XFlush(display)
  var num_events = int(XPending(display))
  while num_events != 0:
    dec(num_events)
    discard XNextEvent(display, addr(xev))
    process_event()

create_window()
while true:
  eventloop()
close_window()