Window creation/X11: Difference between revisions
Content added Content deleted
(code.google.com/xgb hasn't had an update in 9 years.) |
|||
Line 1,480: | Line 1,480: | ||
]] |
]] |
||
</lang> |
</lang> |
||
=={{header|Nim}}== |
|||
<lang nim>import x11/[xlib,xutil,x] |
|||
const |
|||
windowWidth = 1000 |
|||
windowHeight = 600 |
|||
borderWidth = 5 |
|||
eventMask = ButtonPressMask or KeyPressMask or ExposureMask |
|||
var |
|||
display: PDisplay |
|||
window: Window |
|||
deleteMessage: Atom |
|||
graphicsContext: GC |
|||
proc init() = |
|||
display = XOpenDisplay(nil) |
|||
if display == nil: |
|||
quit "Failed to open display" |
|||
let |
|||
screen = XDefaultScreen(display) |
|||
rootWindow = XRootWindow(display, screen) |
|||
foregroundColor = XBlackPixel(display, screen) |
|||
backgroundColor = XWhitePixel(display, screen) |
|||
window = XCreateSimpleWindow(display, rootWindow, -1, -1, windowWidth, |
|||
windowHeight, borderWidth, foregroundColor, backgroundColor) |
|||
discard XSetStandardProperties(display, window, "X11 Example", "window", 0, |
|||
nil, 0, nil) |
|||
discard XSelectInput(display, window, eventMask) |
|||
discard XMapWindow(display, window) |
|||
deleteMessage = XInternAtom(display, "WM_DELETE_WINDOW", false.XBool) |
|||
discard XSetWMProtocols(display, window, deleteMessage.addr, 1) |
|||
graphicsContext = XDefaultGC(display, screen) |
|||
proc drawWindow() = |
|||
const text = "Hello, Nim programmers." |
|||
discard XDrawString(display, window, graphicsContext, 10, 50, text, text.len) |
|||
discard XFillRectangle(display, window, graphicsContext, 20, 20, 10, 10) |
|||
proc mainLoop() = |
|||
## Process events until the quit event is received |
|||
var event: XEvent |
|||
while true: |
|||
discard XNextEvent(display, event.addr) |
|||
case event.theType |
|||
of Expose: |
|||
drawWindow() |
|||
of ClientMessage: |
|||
if cast[Atom](event.xclient.data.l[0]) == deleteMessage: |
|||
break |
|||
of KeyPress: |
|||
let key = XLookupKeysym(cast[PXKeyEvent](event.addr), 0) |
|||
if key != 0: |
|||
echo "Key ", key, " pressed" |
|||
of ButtonPressMask: |
|||
echo "Mouse button ", event.xbutton.button, " pressed at ", |
|||
event.xbutton.x, ",", event.xbutton.y |
|||
else: |
|||
discard |
|||
proc main() = |
|||
init() |
|||
mainLoop() |
|||
discard XDestroyWindow(display, window) |
|||
discard XCloseDisplay(display) |
|||
main()</lang> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |