Mercurial > repos > tabletprog
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 } |