Anonymous user
Window creation: Difference between revisions
Updated to work with X11 binding 1.1 and Nim<version 1.4: changed import statement; changed name of deprecated types, etc. Eliminated global vars.
(Updated to work with Nim 1.4 and Nim-Gtk2-1.3. Corrected wrong and inconsistent case of identifiers. Added a context to avoid access to global var in callback.) |
(Updated to work with X11 binding 1.1 and Nim<version 1.4: changed import statement; changed name of deprecated types, etc. Eliminated global vars.) |
||
Line 1,288:
=== X11 ===
<lang nim>import x11/[xlib, xutil, x
const
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 300
width, height: cuint▼
sizeHints: TXSizeHints▼
type WindowData = tuple[display: PDisplay; window: Window]
width = WINDOW_WIDTH▼
proc createWindow: WindowData =
display = XOpenDisplay(nil)▼
▲ let width: cuint = WINDOW_WIDTH
▲ let display = XOpenDisplay(nil)
if display == nil:
echo
quit
let screen = XDefaultScreen(display)
var rootwin = XRootWindow(display, screen)
let win = XCreateSimpleWindow(display, rootwin, 100, 10, width, height, 5,
sizeHints.min_width = width.cint
sizeHints.max_width = width.cint
▲ size_hints.flags = PSize or PMinSize or PMaxSize
discard XSetStandardProperties(
discard
▲ 0, nil, 0, addr(size_hints))
discard XMapWindow(display, win)
result = (display, win)
proc closeWindow(data: WindowData) =
discard XDestroyWindow(data.display,
discard XCloseDisplay(data.display)
proc processEvent(xev: var XEvent) =
var key:
case
of KeyPress:
key = XLookupKeysym(cast[ptr
if key.int != 0:
echo
if key.int == 65307: # <Esc>
quit
of ButtonPressMask, PointerMotionMask:
else:
discard
proc eventloop(data: WindowData) =
var xev: XEvent
discard XFlush(display)▼
var numEvents = XPending(data.display).int
while
dec numEvents
processEvent(xev)
let windata = createWindow()
while true:
eventloop(windata)
windata.closeWindow()</lang>
=== glut ===
|