Mercurial > repos > tabletprog
diff modules/ui.tp @ 332:ead24192ed45
Initial work on a UI module
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 28 Mar 2015 14:21:22 -0700 |
parents | |
children | 79a14e41b79a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/ui.tp Sat Mar 28 14:21:22 2015 -0700 @@ -0,0 +1,98 @@ +{ + _visibleWindows <- [] + _needsInit <- true + _initRes <- 0 + _checkInitSDL <- { + if: _needsInit { + _initRes <- (sdl init: ((sdl subsystems) video)) = 0 + _needsInit <- true + } + _initRes + } + #{ + import: [ + r:g:b + r:g:b:a + ] from: sdl + _styles <- [] + window <- :properties { + _wind <- option none + _renderer <- option none + base <- #{ + title <- "Window" + width <- 640 + height <- 480 + x <- 0 + y <- 0 + color <- (ui r: 255u8 g: 255u8 b: 255u8) + children <- #[] + + show <- { + if: (_checkInitSDL: ) { + _wind <- sdl createWindow: title pos: x y size: width height flags: 0u32 + _wind value: :window { + _renderer <- window createRenderer: -1 flags: ((window renderOpts) accelerated) + draw: + } none: { + false + } + } + } + + draw <- { + print: "Draw!\n" + _renderer value: :renderer { + print: "Rendering!\n" + renderer drawColor!: color + renderer clear + + foreach: children :_ child { + child draw: renderer + } + renderer present + true + } none: { false } + } + + styles <- { _styles } + + styles! <- :newstyles{ + //TODO: apply styles + _styles <- newstyles + } + } + foreach: (object propertiesOf: base) :_ name { + if: (object does: properties understand?: name) { + object setProperty: name on: base to: (object sendMessage: name to: properties) + } + } + base + } + + enterEventLoop <- { + continue? <- true + + _handlers <- dict hash + _handlers set: ((sdl eventTypes) quit) :event { + continue? <- false + } + _handlers set: ((sdl eventTypes) window) :event { + if: (event event) = ((sdl windowEventTypes) exposed) { + foreach: _visibleWindows :_ wind { + print: "Redrawing window\n" + wind draw + } + } + } + while: { continue? } do: { + (sdl waitEvent) value: :event { + _handlers ifget: (event type) :handler { + handler: event + } else: { + print: "Unhandled event type: " . (event type) . "\n" + } + } none: {} + } + } + } +} \ No newline at end of file