annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }