shoes-dsl 4.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +84 -0
  3. data/Gemfile +24 -0
  4. data/Guardfile +11 -0
  5. data/LICENSE +31 -0
  6. data/README.md +201 -0
  7. data/ext/install/Rakefile +29 -0
  8. data/ext/install/shoes.bat +9 -0
  9. data/fonts/Coolvetica.ttf +0 -0
  10. data/fonts/Lacuna.ttf +0 -0
  11. data/lib/shoes/animation.rb +56 -0
  12. data/lib/shoes/app.rb +131 -0
  13. data/lib/shoes/arc.rb +25 -0
  14. data/lib/shoes/background.rb +24 -0
  15. data/lib/shoes/border.rb +24 -0
  16. data/lib/shoes/builtin_methods.rb +77 -0
  17. data/lib/shoes/button.rb +30 -0
  18. data/lib/shoes/check_button.rb +44 -0
  19. data/lib/shoes/color.rb +385 -0
  20. data/lib/shoes/common/background_element.rb +9 -0
  21. data/lib/shoes/common/changeable.rb +34 -0
  22. data/lib/shoes/common/clickable.rb +24 -0
  23. data/lib/shoes/common/inspect.rb +14 -0
  24. data/lib/shoes/common/positioning.rb +30 -0
  25. data/lib/shoes/common/registration.rb +33 -0
  26. data/lib/shoes/common/remove.rb +10 -0
  27. data/lib/shoes/common/state.rb +18 -0
  28. data/lib/shoes/common/style.rb +152 -0
  29. data/lib/shoes/common/style_normalizer.rb +16 -0
  30. data/lib/shoes/common/ui_element.rb +11 -0
  31. data/lib/shoes/common/visibility.rb +40 -0
  32. data/lib/shoes/configuration.rb +96 -0
  33. data/lib/shoes/dialog.rb +27 -0
  34. data/lib/shoes/dimension.rb +239 -0
  35. data/lib/shoes/dimensions.rb +209 -0
  36. data/lib/shoes/download.rb +121 -0
  37. data/lib/shoes/dsl.rb +591 -0
  38. data/lib/shoes/font.rb +49 -0
  39. data/lib/shoes/gradient.rb +31 -0
  40. data/lib/shoes/image.rb +29 -0
  41. data/lib/shoes/image_pattern.rb +12 -0
  42. data/lib/shoes/input_box.rb +60 -0
  43. data/lib/shoes/internal_app.rb +219 -0
  44. data/lib/shoes/key_event.rb +17 -0
  45. data/lib/shoes/line.rb +87 -0
  46. data/lib/shoes/link.rb +59 -0
  47. data/lib/shoes/link_hover.rb +5 -0
  48. data/lib/shoes/list_box.rb +50 -0
  49. data/lib/shoes/logger.rb +66 -0
  50. data/lib/shoes/logger/ruby.rb +18 -0
  51. data/lib/shoes/mock.rb +31 -0
  52. data/lib/shoes/mock/animation.rb +8 -0
  53. data/lib/shoes/mock/app.rb +47 -0
  54. data/lib/shoes/mock/arc.rb +9 -0
  55. data/lib/shoes/mock/background.rb +10 -0
  56. data/lib/shoes/mock/border.rb +7 -0
  57. data/lib/shoes/mock/button.rb +10 -0
  58. data/lib/shoes/mock/check.rb +25 -0
  59. data/lib/shoes/mock/clickable.rb +8 -0
  60. data/lib/shoes/mock/common_methods.rb +12 -0
  61. data/lib/shoes/mock/dialog.rb +13 -0
  62. data/lib/shoes/mock/download.rb +18 -0
  63. data/lib/shoes/mock/font.rb +17 -0
  64. data/lib/shoes/mock/image.rb +13 -0
  65. data/lib/shoes/mock/image_pattern.rb +9 -0
  66. data/lib/shoes/mock/input_box.rb +30 -0
  67. data/lib/shoes/mock/keypress.rb +10 -0
  68. data/lib/shoes/mock/keyrelease.rb +10 -0
  69. data/lib/shoes/mock/line.rb +14 -0
  70. data/lib/shoes/mock/link.rb +12 -0
  71. data/lib/shoes/mock/list_box.rb +19 -0
  72. data/lib/shoes/mock/oval.rb +12 -0
  73. data/lib/shoes/mock/progress.rb +10 -0
  74. data/lib/shoes/mock/radio.rb +27 -0
  75. data/lib/shoes/mock/rect.rb +14 -0
  76. data/lib/shoes/mock/shape.rb +20 -0
  77. data/lib/shoes/mock/slot.rb +16 -0
  78. data/lib/shoes/mock/sound.rb +8 -0
  79. data/lib/shoes/mock/star.rb +14 -0
  80. data/lib/shoes/mock/text_block.rb +36 -0
  81. data/lib/shoes/mock/timer.rb +8 -0
  82. data/lib/shoes/not_implemented_error.rb +4 -0
  83. data/lib/shoes/oval.rb +20 -0
  84. data/lib/shoes/point.rb +54 -0
  85. data/lib/shoes/progress.rb +25 -0
  86. data/lib/shoes/radio.rb +16 -0
  87. data/lib/shoes/rect.rb +21 -0
  88. data/lib/shoes/renamed_delegate.rb +15 -0
  89. data/lib/shoes/shape.rb +158 -0
  90. data/lib/shoes/slot.rb +271 -0
  91. data/lib/shoes/slot_contents.rb +50 -0
  92. data/lib/shoes/sound.rb +18 -0
  93. data/lib/shoes/span.rb +16 -0
  94. data/lib/shoes/star.rb +45 -0
  95. data/lib/shoes/text.rb +24 -0
  96. data/lib/shoes/text_block.rb +143 -0
  97. data/lib/shoes/text_block_dimensions.rb +52 -0
  98. data/lib/shoes/timer.rb +12 -0
  99. data/lib/shoes/url.rb +44 -0
  100. data/lib/shoes/version.rb +3 -0
  101. data/lib/shoes/widget.rb +69 -0
  102. data/manifests/common.rb +34 -0
  103. data/manifests/shoes-dsl.rb +34 -0
  104. data/shoes-dsl.gemspec +19 -0
  105. data/spec/code_coverage.rb +14 -0
  106. data/spec/shoes/animation_spec.rb +65 -0
  107. data/spec/shoes/app_spec.rb +484 -0
  108. data/spec/shoes/arc_spec.rb +51 -0
  109. data/spec/shoes/background_spec.rb +53 -0
  110. data/spec/shoes/border_spec.rb +47 -0
  111. data/spec/shoes/builtin_methods_spec.rb +110 -0
  112. data/spec/shoes/button_spec.rb +44 -0
  113. data/spec/shoes/check_spec.rb +35 -0
  114. data/spec/shoes/cli_spec.rb +15 -0
  115. data/spec/shoes/color_spec.rb +408 -0
  116. data/spec/shoes/common/inspect_spec.rb +26 -0
  117. data/spec/shoes/common/remove_spec.rb +38 -0
  118. data/spec/shoes/common/style_normalizer_spec.rb +28 -0
  119. data/spec/shoes/common/style_spec.rb +147 -0
  120. data/spec/shoes/configuration_spec.rb +36 -0
  121. data/spec/shoes/constants_spec.rb +38 -0
  122. data/spec/shoes/dialog_spec.rb +163 -0
  123. data/spec/shoes/dimension_spec.rb +407 -0
  124. data/spec/shoes/dimensions_spec.rb +837 -0
  125. data/spec/shoes/download_spec.rb +142 -0
  126. data/spec/shoes/flow_spec.rb +133 -0
  127. data/spec/shoes/font_spec.rb +37 -0
  128. data/spec/shoes/framework_learning_spec.rb +30 -0
  129. data/spec/shoes/gradient_spec.rb +32 -0
  130. data/spec/shoes/helpers/fake_element.rb +17 -0
  131. data/spec/shoes/helpers/inspect_helpers.rb +5 -0
  132. data/spec/shoes/helpers/sample17_helper.rb +66 -0
  133. data/spec/shoes/image_spec.rb +49 -0
  134. data/spec/shoes/images/shoe.jpg +0 -0
  135. data/spec/shoes/input_box_spec.rb +80 -0
  136. data/spec/shoes/integration_spec.rb +20 -0
  137. data/spec/shoes/internal_app_spec.rb +141 -0
  138. data/spec/shoes/keypress_spec.rb +11 -0
  139. data/spec/shoes/keyrelease_spec.rb +12 -0
  140. data/spec/shoes/line_spec.rb +49 -0
  141. data/spec/shoes/link_spec.rb +105 -0
  142. data/spec/shoes/list_box_spec.rb +74 -0
  143. data/spec/shoes/logger/ruby_spec.rb +8 -0
  144. data/spec/shoes/logger_spec.rb +45 -0
  145. data/spec/shoes/oval_spec.rb +24 -0
  146. data/spec/shoes/point_spec.rb +71 -0
  147. data/spec/shoes/progress_spec.rb +54 -0
  148. data/spec/shoes/radio_spec.rb +32 -0
  149. data/spec/shoes/rect_spec.rb +39 -0
  150. data/spec/shoes/renamed_delegate_spec.rb +70 -0
  151. data/spec/shoes/shape_spec.rb +95 -0
  152. data/spec/shoes/shared_examples/button.rb +6 -0
  153. data/spec/shoes/shared_examples/changeable.rb +26 -0
  154. data/spec/shoes/shared_examples/clickable.rb +5 -0
  155. data/spec/shoes/shared_examples/common_methods.rb +35 -0
  156. data/spec/shoes/shared_examples/dimensions.rb +32 -0
  157. data/spec/shoes/shared_examples/dsl.rb +44 -0
  158. data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
  159. data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
  160. data/spec/shoes/shared_examples/dsl/background.rb +26 -0
  161. data/spec/shoes/shared_examples/dsl/border.rb +10 -0
  162. data/spec/shoes/shared_examples/dsl/button.rb +5 -0
  163. data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
  164. data/spec/shoes/shared_examples/dsl/check.rb +11 -0
  165. data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
  166. data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
  167. data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
  168. data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
  169. data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
  170. data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
  171. data/spec/shoes/shared_examples/dsl/image.rb +21 -0
  172. data/spec/shoes/shared_examples/dsl/line.rb +9 -0
  173. data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
  174. data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
  175. data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
  176. data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
  177. data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
  178. data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
  179. data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
  180. data/spec/shoes/shared_examples/dsl/shape.rb +21 -0
  181. data/spec/shoes/shared_examples/dsl/star.rb +48 -0
  182. data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
  183. data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
  184. data/spec/shoes/shared_examples/dsl/style.rb +32 -0
  185. data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
  186. data/spec/shoes/shared_examples/dsl/video.rb +5 -0
  187. data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
  188. data/spec/shoes/shared_examples/hover_leave.rb +11 -0
  189. data/spec/shoes/shared_examples/parent.rb +6 -0
  190. data/spec/shoes/shared_examples/scroll.rb +41 -0
  191. data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
  192. data/spec/shoes/shared_examples/slot.rb +331 -0
  193. data/spec/shoes/shared_examples/state.rb +19 -0
  194. data/spec/shoes/shared_examples/style.rb +82 -0
  195. data/spec/shoes/slot_spec.rb +130 -0
  196. data/spec/shoes/sound_spec.rb +15 -0
  197. data/spec/shoes/span_spec.rb +112 -0
  198. data/spec/shoes/spec_helper.rb +24 -0
  199. data/spec/shoes/stack_spec.rb +79 -0
  200. data/spec/shoes/star_spec.rb +31 -0
  201. data/spec/shoes/text_block_dimensions_spec.rb +75 -0
  202. data/spec/shoes/text_block_spec.rb +270 -0
  203. data/spec/shoes/url_spec.rb +68 -0
  204. data/spec/shoes/widget_spec.rb +70 -0
  205. data/spec/shoes_spec.rb +44 -0
  206. data/spec/spec_helper.rb +18 -0
  207. data/static/Shoes.icns +0 -0
  208. data/static/shoes-icon.png +0 -0
  209. metadata +354 -0
@@ -0,0 +1,9 @@
1
+ class Shoes
2
+ module Mock
3
+ class ImagePattern
4
+ def initialize(path)
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ class Shoes
2
+ module Mock
3
+ class InputBox
4
+ include Shoes::Mock::CommonMethods
5
+ attr_accessor :left, :top
6
+
7
+ def enabled(value)
8
+ end
9
+
10
+ def highlight_text(start_index, finish_index)
11
+ end
12
+
13
+ def caret_to(index)
14
+ end
15
+
16
+ def text
17
+ @dsl.style[:text]
18
+ end
19
+
20
+ def text=(value)
21
+ end
22
+ end
23
+
24
+ class EditBox < InputBox
25
+ end
26
+
27
+ class EditLine < InputBox
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ class Shoes
2
+ module Mock
3
+ class Keypress
4
+ def initialize(*opts)
5
+ end
6
+ def remove
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class Shoes
2
+ module Mock
3
+ class Keyrelease
4
+ def initialize(*opts)
5
+ end
6
+ def remove
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ class Shoes
2
+ module Mock
3
+ class Line
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, app, opts = {})
8
+ end
9
+
10
+ def move(x, y)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class Shoes
2
+ module Mock
3
+ class Link
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, app, opts = {})
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ class Shoes
2
+ module Mock
3
+ class ListBox
4
+ include Shoes::Mock::CommonMethods
5
+
6
+ def update_items(v)
7
+ end
8
+
9
+ def enabled(value)
10
+ end
11
+
12
+ def choose(string)
13
+ end
14
+
15
+ def text
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ class Shoes
2
+ module Mock
3
+ class Oval
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, app)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ class Shoes
2
+ module Mock
3
+ class Progress
4
+ include Shoes::Mock::CommonMethods
5
+
6
+ def fraction=(fraction)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ class Shoes
2
+ module Mock
3
+ class Radio
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(*opts)
8
+ end
9
+
10
+ def checked?
11
+ false
12
+ end
13
+
14
+ def checked=(*opts)
15
+ end
16
+
17
+ def focus
18
+ end
19
+
20
+ def enabled(value)
21
+ end
22
+
23
+ def group=(value)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ class Shoes
2
+ module Mock
3
+ class Rect
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, app, opts = {})
8
+ @dsl, @app = dsl, app
9
+ end
10
+
11
+ attr_reader :dsl, :app
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ class Shoes
2
+ module Mock
3
+ class Shape
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def line_to(x, y)
8
+ end
9
+
10
+ def move_to(x, y)
11
+ end
12
+
13
+ def curve_to(*args)
14
+ end
15
+
16
+ def arc(*args)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ class Shoes
2
+ module Mock
3
+ class Slot
4
+ include Shoes::Mock::Clickable
5
+
6
+ def initialize dsl, parent
7
+ @dsl, @parent = dsl, parent
8
+ end
9
+
10
+ attr_reader :dsl
11
+ end
12
+
13
+ class Stack < Slot; end
14
+ class Flow < Slot; end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ class Shoes
2
+ module Mock
3
+ class Sound
4
+ def initialize(dsl)
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ class Shoes
2
+ module Mock
3
+ class Star
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, app)
8
+ @dsl, @app = dsl, app
9
+ end
10
+
11
+ attr_reader :dsl, :app
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ class Shoes
2
+ module Mock
3
+ class TextBlock
4
+ include Shoes::Mock::CommonMethods
5
+ include Shoes::Mock::Clickable
6
+
7
+ def initialize(dsl, opts = nil)
8
+ @dsl = dsl
9
+ @opts = opts
10
+ end
11
+
12
+ def redraw(*opts); end
13
+
14
+ def replace(*opts)
15
+ end
16
+
17
+ def remove;end
18
+
19
+ # A very imperfect implementation, but at least it takes up about a line.
20
+ # Needed to spec scrolling behavior
21
+ def contents_alignment(current_position)
22
+ @dsl.absolute_top = current_position.y + (@dsl.size || 12)
23
+ end
24
+
25
+ def adjust_current_position(*args);end
26
+ end
27
+
28
+ class Banner < TextBlock; end
29
+ class Title < TextBlock; end
30
+ class Subtitle < TextBlock; end
31
+ class Tagline < TextBlock; end
32
+ class Caption < TextBlock; end
33
+ class Para < TextBlock; end
34
+ class Inscription < TextBlock; end
35
+ end
36
+ end
@@ -0,0 +1,8 @@
1
+ class Shoes
2
+ module Mock
3
+ class Timer
4
+ def initialize(*args)
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ class Shoes
2
+ class NotImplementedError < StandardError
3
+ end
4
+ end
@@ -0,0 +1,20 @@
1
+ class Shoes
2
+ class Oval
3
+ include Common::UIElement
4
+ include Common::Style
5
+ include Common::Clickable
6
+
7
+ attr_reader :app, :parent, :dimensions, :gui
8
+ style_with :art_styles, :center, :common_styles, :dimensions, :radius
9
+
10
+ def initialize(app, parent, left, top, width, height, styles = {}, blk = nil)
11
+ @app = app
12
+ @parent = parent
13
+ style_init styles
14
+ @dimensions = AbsoluteDimensions.new left, top, width, height, @style
15
+ @parent.add_child self
16
+ @gui = Shoes.backend_for self
17
+ register_click blk
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,54 @@
1
+ class Shoes
2
+ class Point
3
+ include Common::Inspect
4
+
5
+ def initialize(x, y)
6
+ @x, @y = x, y
7
+ end
8
+
9
+ attr_accessor :x, :y
10
+
11
+ # @param [Shoes::Point] other the other point
12
+ # @return [Integer] if this is further left, this.x; otherwise other.x
13
+ def left(other = self)
14
+ [self.x, other.x].min
15
+ end
16
+
17
+ # @param [Shoes::Point] other the other point
18
+ # @return [Integer] if this is higher, this.y; otherwise other.y
19
+ def top(other = self)
20
+ [self.y, other.y].min
21
+ end
22
+
23
+ # Creates a new point at an offset of (x,y) from this point. Positive
24
+ # offsets move right and down; negative offsets move left and up.
25
+ #
26
+ # @param [Integer] x the x-component of the offset
27
+ # @param [Integer] y the y-component of the offset
28
+ # @return [Shoes::Point] a new point at offset (x,y) from this point
29
+ def to(x, y)
30
+ Shoes::Point.new(@x + x, @y + y)
31
+ end
32
+
33
+ def width(other = self)
34
+ (@x - other.x).abs
35
+ end
36
+
37
+ def height(other = self)
38
+ (@y - other.y).abs
39
+ end
40
+
41
+ def ==(other)
42
+ return other.respond_to?(:x) && @x == other.x && other.respond_to?(:y) && @y == other.y
43
+ end
44
+
45
+ def to_s
46
+ nothing = '_'
47
+ "(#{@x || nothing},#{@y || nothing})"
48
+ end
49
+
50
+ def inspect
51
+ super.insert(-2, " #{to_s}")
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,25 @@
1
+ class Shoes
2
+ class Progress
3
+ include Common::UIElement
4
+ include Common::Style
5
+
6
+ attr_reader :app, :parent, :dimensions, :gui
7
+ style_with :common_styles, :dimensions, :fraction
8
+ STYLES = {fraction: 0.0}
9
+
10
+ def initialize(app, parent, styles = {}, blk = nil)
11
+ @app = app
12
+ @parent = parent
13
+ style_init styles
14
+ @dimensions = Dimensions.new parent, @style
15
+ @parent.add_child self
16
+ @gui = Shoes.configuration.backend_for self, @parent.gui
17
+ @gui.fraction = @style[:fraction]
18
+ end
19
+
20
+ def fraction=(value)
21
+ style(fraction: value)
22
+ @gui.fraction = value
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ class Shoes
2
+ class Radio < CheckButton
3
+
4
+ style_with :checked, :click, :common_styles, :dimensions, :group, :state
5
+
6
+ def initialize(app, parent, group, styles = {}, blk = nil)
7
+ styles[:group] = group
8
+ super(app, parent, styles, blk)
9
+ end
10
+
11
+ def group=(value)
12
+ style(group: value)
13
+ gui.group = value
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ class Shoes
2
+ class Rect
3
+ include Common::UIElement
4
+ include Common::Style
5
+ include Common::Clickable
6
+
7
+ attr_reader :app, :parent, :dimensions, :gui
8
+ style_with :angle, :art_styles, :curve, :common_styles, :dimensions
9
+ STYLES = {angle: 0}
10
+
11
+ def initialize(app, parent, left, top, width, height, styles = {}, blk = nil)
12
+ @app = app
13
+ @parent = parent
14
+ style_init styles
15
+ @dimensions = AbsoluteDimensions.new left, top, width, height, @style
16
+ @parent.add_child self
17
+ @gui = Shoes.backend_for self
18
+ register_click blk
19
+ end
20
+ end
21
+ end