comparison 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
comparison
equal deleted inserted replaced
331:61f5b794d939 332:ead24192ed45
1 {
2 _visibleWindows <- []
3 _needsInit <- true
4 _initRes <- 0
5 _checkInitSDL <- {
6 if: _needsInit {
7 _initRes <- (sdl init: ((sdl subsystems) video)) = 0
8 _needsInit <- true
9 }
10 _initRes
11 }
12 #{
13 import: [
14 r:g:b
15 r:g:b:a
16 ] from: sdl
17 _styles <- []
18 window <- :properties {
19 _wind <- option none
20 _renderer <- option none
21 base <- #{
22 title <- "Window"
23 width <- 640
24 height <- 480
25 x <- 0
26 y <- 0
27 color <- (ui r: 255u8 g: 255u8 b: 255u8)
28 children <- #[]
29
30 show <- {
31 if: (_checkInitSDL: ) {
32 _wind <- sdl createWindow: title pos: x y size: width height flags: 0u32
33 _wind value: :window {
34 _renderer <- window createRenderer: -1 flags: ((window renderOpts) accelerated)
35 draw:
36 } none: {
37 false
38 }
39 }
40 }
41
42 draw <- {
43 print: "Draw!\n"
44 _renderer value: :renderer {
45 print: "Rendering!\n"
46 renderer drawColor!: color
47 renderer clear
48
49 foreach: children :_ child {
50 child draw: renderer
51 }
52 renderer present
53 true
54 } none: { false }
55 }
56
57 styles <- { _styles }
58
59 styles! <- :newstyles{
60 //TODO: apply styles
61 _styles <- newstyles
62 }
63 }
64 foreach: (object propertiesOf: base) :_ name {
65 if: (object does: properties understand?: name) {
66 object setProperty: name on: base to: (object sendMessage: name to: properties)
67 }
68 }
69 base
70 }
71
72 enterEventLoop <- {
73 continue? <- true
74
75 _handlers <- dict hash
76 _handlers set: ((sdl eventTypes) quit) :event {
77 continue? <- false
78 }
79 _handlers set: ((sdl eventTypes) window) :event {
80 if: (event event) = ((sdl windowEventTypes) exposed) {
81 foreach: _visibleWindows :_ wind {
82 print: "Redrawing window\n"
83 wind draw
84 }
85 }
86 }
87 while: { continue? } do: {
88 (sdl waitEvent) value: :event {
89 _handlers ifget: (event type) :handler {
90 handler: event
91 } else: {
92 print: "Unhandled event type: " . (event type) . "\n"
93 }
94 } none: {}
95 }
96 }
97 }
98 }