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