shoes-swt 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 (238) 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/lib/shoes/swt.rb +118 -0
  8. data/lib/shoes/swt/animation.rb +46 -0
  9. data/lib/shoes/swt/app.rb +314 -0
  10. data/lib/shoes/swt/arc.rb +71 -0
  11. data/lib/shoes/swt/background.rb +41 -0
  12. data/lib/shoes/swt/border.rb +41 -0
  13. data/lib/shoes/swt/button.rb +18 -0
  14. data/lib/shoes/swt/check.rb +14 -0
  15. data/lib/shoes/swt/check_button.rb +19 -0
  16. data/lib/shoes/swt/color.rb +49 -0
  17. data/lib/shoes/swt/color_factory.rb +32 -0
  18. data/lib/shoes/swt/common/child.rb +16 -0
  19. data/lib/shoes/swt/common/clickable.rb +68 -0
  20. data/lib/shoes/swt/common/container.rb +28 -0
  21. data/lib/shoes/swt/common/fill.rb +38 -0
  22. data/lib/shoes/swt/common/painter.rb +92 -0
  23. data/lib/shoes/swt/common/painter_updates_position.rb +12 -0
  24. data/lib/shoes/swt/common/remove.rb +30 -0
  25. data/lib/shoes/swt/common/resource.rb +29 -0
  26. data/lib/shoes/swt/common/selection_listener.rb +14 -0
  27. data/lib/shoes/swt/common/stroke.rb +42 -0
  28. data/lib/shoes/swt/common/update_position.rb +15 -0
  29. data/lib/shoes/swt/common/visibility.rb +13 -0
  30. data/lib/shoes/swt/dialog.rb +90 -0
  31. data/lib/shoes/swt/disposed_protection.rb +23 -0
  32. data/lib/shoes/swt/download.rb +24 -0
  33. data/lib/shoes/swt/font.rb +32 -0
  34. data/lib/shoes/swt/gradient.rb +92 -0
  35. data/lib/shoes/swt/image.rb +128 -0
  36. data/lib/shoes/swt/image_pattern.rb +31 -0
  37. data/lib/shoes/swt/input_box.rb +73 -0
  38. data/lib/shoes/swt/key_listener.rb +145 -0
  39. data/lib/shoes/swt/line.rb +60 -0
  40. data/lib/shoes/swt/link.rb +31 -0
  41. data/lib/shoes/swt/link_segment.rb +111 -0
  42. data/lib/shoes/swt/list_box.rb +48 -0
  43. data/lib/shoes/swt/mouse_move_listener.rb +67 -0
  44. data/lib/shoes/swt/oval.rb +52 -0
  45. data/lib/shoes/swt/progress.rb +35 -0
  46. data/lib/shoes/swt/radio.rb +29 -0
  47. data/lib/shoes/swt/radio_group.rb +54 -0
  48. data/lib/shoes/swt/rect.rb +30 -0
  49. data/lib/shoes/swt/rect_painter.rb +23 -0
  50. data/lib/shoes/swt/redrawing_aspect.rb +123 -0
  51. data/lib/shoes/swt/shape.rb +133 -0
  52. data/lib/shoes/swt/shoes_layout.rb +43 -0
  53. data/lib/shoes/swt/slot.rb +39 -0
  54. data/lib/shoes/swt/sound.rb +119 -0
  55. data/lib/shoes/swt/star.rb +50 -0
  56. data/lib/shoes/swt/support/jl1.0.1.jar +0 -0
  57. data/lib/shoes/swt/support/jogg-0.0.7.jar +0 -0
  58. data/lib/shoes/swt/support/jorbis-0.0.15.jar +0 -0
  59. data/lib/shoes/swt/support/log4j-1.2.16.jar +0 -0
  60. data/lib/shoes/swt/support/mp3spi1.9.5.jar +0 -0
  61. data/lib/shoes/swt/support/tritonus_share.jar +0 -0
  62. data/lib/shoes/swt/support/vorbisspi1.0.3.jar +0 -0
  63. data/lib/shoes/swt/swt_button.rb +56 -0
  64. data/lib/shoes/swt/text_block.rb +124 -0
  65. data/lib/shoes/swt/text_block/centered_text_segment.rb +22 -0
  66. data/lib/shoes/swt/text_block/cursor_painter.rb +53 -0
  67. data/lib/shoes/swt/text_block/fitter.rb +212 -0
  68. data/lib/shoes/swt/text_block/painter.rb +47 -0
  69. data/lib/shoes/swt/text_block/text_font_factory.rb +50 -0
  70. data/lib/shoes/swt/text_block/text_segment.rb +108 -0
  71. data/lib/shoes/swt/text_block/text_segment_collection.rb +160 -0
  72. data/lib/shoes/swt/text_block/text_style_factory.rb +88 -0
  73. data/lib/shoes/swt/timer.rb +19 -0
  74. data/lib/shoes/swt/tooling/leak_hunter.rb +35 -0
  75. data/lib/shoes/swt/version.rb +5 -0
  76. data/manifests/common.rb +34 -0
  77. data/manifests/shoes-swt.rb +29 -0
  78. data/shoes-swt.gemspec +24 -0
  79. data/spec/code_coverage.rb +14 -0
  80. data/spec/shoes/animation_spec.rb +65 -0
  81. data/spec/shoes/app_spec.rb +484 -0
  82. data/spec/shoes/arc_spec.rb +51 -0
  83. data/spec/shoes/background_spec.rb +53 -0
  84. data/spec/shoes/border_spec.rb +47 -0
  85. data/spec/shoes/builtin_methods_spec.rb +110 -0
  86. data/spec/shoes/button_spec.rb +44 -0
  87. data/spec/shoes/check_spec.rb +35 -0
  88. data/spec/shoes/cli_spec.rb +15 -0
  89. data/spec/shoes/color_spec.rb +408 -0
  90. data/spec/shoes/common/inspect_spec.rb +26 -0
  91. data/spec/shoes/common/remove_spec.rb +38 -0
  92. data/spec/shoes/common/style_normalizer_spec.rb +28 -0
  93. data/spec/shoes/common/style_spec.rb +147 -0
  94. data/spec/shoes/configuration_spec.rb +36 -0
  95. data/spec/shoes/constants_spec.rb +38 -0
  96. data/spec/shoes/dialog_spec.rb +163 -0
  97. data/spec/shoes/dimension_spec.rb +407 -0
  98. data/spec/shoes/dimensions_spec.rb +837 -0
  99. data/spec/shoes/download_spec.rb +142 -0
  100. data/spec/shoes/flow_spec.rb +133 -0
  101. data/spec/shoes/font_spec.rb +37 -0
  102. data/spec/shoes/framework_learning_spec.rb +30 -0
  103. data/spec/shoes/gradient_spec.rb +32 -0
  104. data/spec/shoes/helpers/fake_element.rb +17 -0
  105. data/spec/shoes/helpers/inspect_helpers.rb +5 -0
  106. data/spec/shoes/helpers/sample17_helper.rb +66 -0
  107. data/spec/shoes/image_spec.rb +49 -0
  108. data/spec/shoes/images/shoe.jpg +0 -0
  109. data/spec/shoes/input_box_spec.rb +80 -0
  110. data/spec/shoes/integration_spec.rb +20 -0
  111. data/spec/shoes/internal_app_spec.rb +141 -0
  112. data/spec/shoes/keypress_spec.rb +11 -0
  113. data/spec/shoes/keyrelease_spec.rb +12 -0
  114. data/spec/shoes/line_spec.rb +49 -0
  115. data/spec/shoes/link_spec.rb +105 -0
  116. data/spec/shoes/list_box_spec.rb +74 -0
  117. data/spec/shoes/logger/ruby_spec.rb +8 -0
  118. data/spec/shoes/logger_spec.rb +45 -0
  119. data/spec/shoes/oval_spec.rb +24 -0
  120. data/spec/shoes/point_spec.rb +71 -0
  121. data/spec/shoes/progress_spec.rb +54 -0
  122. data/spec/shoes/radio_spec.rb +32 -0
  123. data/spec/shoes/rect_spec.rb +39 -0
  124. data/spec/shoes/renamed_delegate_spec.rb +70 -0
  125. data/spec/shoes/shape_spec.rb +95 -0
  126. data/spec/shoes/shared_examples/button.rb +6 -0
  127. data/spec/shoes/shared_examples/changeable.rb +26 -0
  128. data/spec/shoes/shared_examples/clickable.rb +5 -0
  129. data/spec/shoes/shared_examples/common_methods.rb +35 -0
  130. data/spec/shoes/shared_examples/dimensions.rb +32 -0
  131. data/spec/shoes/shared_examples/dsl.rb +44 -0
  132. data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
  133. data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
  134. data/spec/shoes/shared_examples/dsl/background.rb +26 -0
  135. data/spec/shoes/shared_examples/dsl/border.rb +10 -0
  136. data/spec/shoes/shared_examples/dsl/button.rb +5 -0
  137. data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
  138. data/spec/shoes/shared_examples/dsl/check.rb +11 -0
  139. data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
  140. data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
  141. data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
  142. data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
  143. data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
  144. data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
  145. data/spec/shoes/shared_examples/dsl/image.rb +21 -0
  146. data/spec/shoes/shared_examples/dsl/line.rb +9 -0
  147. data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
  148. data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
  149. data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
  150. data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
  151. data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
  152. data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
  153. data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
  154. data/spec/shoes/shared_examples/dsl/shape.rb +21 -0
  155. data/spec/shoes/shared_examples/dsl/star.rb +48 -0
  156. data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
  157. data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
  158. data/spec/shoes/shared_examples/dsl/style.rb +32 -0
  159. data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
  160. data/spec/shoes/shared_examples/dsl/video.rb +5 -0
  161. data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
  162. data/spec/shoes/shared_examples/hover_leave.rb +11 -0
  163. data/spec/shoes/shared_examples/parent.rb +6 -0
  164. data/spec/shoes/shared_examples/scroll.rb +41 -0
  165. data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
  166. data/spec/shoes/shared_examples/slot.rb +331 -0
  167. data/spec/shoes/shared_examples/state.rb +19 -0
  168. data/spec/shoes/shared_examples/style.rb +82 -0
  169. data/spec/shoes/slot_spec.rb +130 -0
  170. data/spec/shoes/sound_spec.rb +15 -0
  171. data/spec/shoes/span_spec.rb +112 -0
  172. data/spec/shoes/spec_helper.rb +24 -0
  173. data/spec/shoes/stack_spec.rb +79 -0
  174. data/spec/shoes/star_spec.rb +31 -0
  175. data/spec/shoes/text_block_dimensions_spec.rb +75 -0
  176. data/spec/shoes/text_block_spec.rb +270 -0
  177. data/spec/shoes/url_spec.rb +68 -0
  178. data/spec/shoes/widget_spec.rb +70 -0
  179. data/spec/shoes_spec.rb +44 -0
  180. data/spec/spec_helper.rb +18 -0
  181. data/spec/swt_shoes/animation_spec.rb +86 -0
  182. data/spec/swt_shoes/app_spec.rb +84 -0
  183. data/spec/swt_shoes/arc_spec.rb +103 -0
  184. data/spec/swt_shoes/background_spec.rb +67 -0
  185. data/spec/swt_shoes/border_spec.rb +52 -0
  186. data/spec/swt_shoes/button_spec.rb +101 -0
  187. data/spec/swt_shoes/check_spec.rb +28 -0
  188. data/spec/swt_shoes/color_factory_spec.rb +49 -0
  189. data/spec/swt_shoes/color_spec.rb +67 -0
  190. data/spec/swt_shoes/common/painter_spec.rb +49 -0
  191. data/spec/swt_shoes/common/remove_spec.rb +53 -0
  192. data/spec/swt_shoes/configuration_spec.rb +12 -0
  193. data/spec/swt_shoes/dialog_spec.rb +106 -0
  194. data/spec/swt_shoes/disposed_protection_spec.rb +49 -0
  195. data/spec/swt_shoes/flow_spec.rb +36 -0
  196. data/spec/swt_shoes/font_spec.rb +33 -0
  197. data/spec/swt_shoes/gradient_spec.rb +31 -0
  198. data/spec/swt_shoes/image_pattern_spec.rb +35 -0
  199. data/spec/swt_shoes/image_spec.rb +100 -0
  200. data/spec/swt_shoes/input_box_spec.rb +116 -0
  201. data/spec/swt_shoes/integration_spec.rb +27 -0
  202. data/spec/swt_shoes/key_listener_spec.rb +325 -0
  203. data/spec/swt_shoes/line_spec.rb +49 -0
  204. data/spec/swt_shoes/link_segment_spec.rb +120 -0
  205. data/spec/swt_shoes/link_spec.rb +54 -0
  206. data/spec/swt_shoes/list_box_spec.rb +56 -0
  207. data/spec/swt_shoes/minimal.png +0 -0
  208. data/spec/swt_shoes/mouse_move_listener_spec.rb +123 -0
  209. data/spec/swt_shoes/oval_spec.rb +51 -0
  210. data/spec/swt_shoes/progress_spec.rb +44 -0
  211. data/spec/swt_shoes/radio_group_spec.rb +73 -0
  212. data/spec/swt_shoes/radio_spec.rb +56 -0
  213. data/spec/swt_shoes/rect_painter_spec.rb +45 -0
  214. data/spec/swt_shoes/rect_spec.rb +19 -0
  215. data/spec/swt_shoes/shape_spec.rb +84 -0
  216. data/spec/swt_shoes/shared_examples/button.rb +21 -0
  217. data/spec/swt_shoes/shared_examples/clickable.rb +85 -0
  218. data/spec/swt_shoes/shared_examples/movable.rb +36 -0
  219. data/spec/swt_shoes/shared_examples/paintable.rb +7 -0
  220. data/spec/swt_shoes/shared_examples/painter.rb +83 -0
  221. data/spec/swt_shoes/shared_examples/pattern.rb +32 -0
  222. data/spec/swt_shoes/shared_examples/removable.rb +41 -0
  223. data/spec/swt_shoes/shared_examples/swt_app_context.rb +23 -0
  224. data/spec/swt_shoes/shared_examples/visibility.rb +15 -0
  225. data/spec/swt_shoes/shell_control_listener_spec.rb +23 -0
  226. data/spec/swt_shoes/slot_spec.rb +24 -0
  227. data/spec/swt_shoes/sound.rb +10 -0
  228. data/spec/swt_shoes/spec_helper.rb +31 -0
  229. data/spec/swt_shoes/star_spec.rb +47 -0
  230. data/spec/swt_shoes/text_block/centered_text_segment_spec.rb +16 -0
  231. data/spec/swt_shoes/text_block/cursor_painter_spec.rb +120 -0
  232. data/spec/swt_shoes/text_block/fitter_spec.rb +213 -0
  233. data/spec/swt_shoes/text_block/painter_spec.rb +212 -0
  234. data/spec/swt_shoes/text_block/text_font_factory_spec.rb +40 -0
  235. data/spec/swt_shoes/text_block/text_segment_collection_spec.rb +256 -0
  236. data/spec/swt_shoes/text_block/text_segment_spec.rb +135 -0
  237. data/spec/swt_shoes/text_block_spec.rb +199 -0
  238. metadata +496 -0
@@ -0,0 +1,46 @@
1
+ class Shoes
2
+ module Swt
3
+ class Animation
4
+
5
+ attr_reader :task
6
+
7
+ # An Swt animation implementation
8
+ #
9
+ # @param [Shoes::Animation] dsl The Shoes DSL Animation this represents
10
+ # @param [Shoes::Swt::App] app The Swt representation of the current app
11
+ # @param [Proc] blk The block of code to execute for each animation frame
12
+ def initialize(dsl, app)
13
+ @dsl = dsl
14
+ @app = app
15
+
16
+ # Wrap the animation block so we can count frames.
17
+ # Note that the task re-calls itself on each run.
18
+ @task = Proc.new do
19
+ unless animation_removed?
20
+ run_animation unless @dsl.stopped?
21
+ schedule_next_animation
22
+ end
23
+ end
24
+ schedule_next_animation
25
+ end
26
+
27
+ def eval_block
28
+ @dsl.blk.call(@dsl.current_frame)
29
+ end
30
+
31
+ private
32
+ def animation_removed?
33
+ @app.real.disposed? || @dsl.removed?
34
+ end
35
+
36
+ def schedule_next_animation
37
+ ::Swt.display.timer_exec(1000 / @dsl.framerate, @task)
38
+ end
39
+
40
+ def run_animation
41
+ eval_block
42
+ @dsl.increment_frame
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,314 @@
1
+ class Shoes
2
+ module Swt
3
+ shoes_icon = ::Shoes::ICON
4
+ if shoes_icon.include? '.jar!'
5
+ ICON = File.join(Dir.tmpdir, 'shoes-icon.png').freeze
6
+ open ICON, 'wb' do |fw|
7
+ open shoes_icon, 'rb' do |fr|
8
+ fw.write fr.read
9
+ end
10
+ end
11
+ else
12
+ ICON = shoes_icon
13
+ end
14
+
15
+ # Shoes::App.new creates a new Shoes application window!
16
+ # The default window is a [flow]
17
+ #
18
+ class App
19
+ include Common::Container
20
+ include Common::Clickable
21
+
22
+ attr_reader :dsl, :real, :shell, :clickable_elements
23
+
24
+ def initialize dsl
25
+ @clickable_elements = []
26
+ @dsl = dsl
27
+ ::Swt::Widgets::Display.app_name = @dsl.app_title
28
+ @background = Color.new(@dsl.opts[:background])
29
+ @started = false
30
+ initialize_shell
31
+ initialize_real
32
+ ::Shoes::Swt.register self
33
+ attach_event_listeners
34
+ initialize_scroll_bar
35
+ @redrawing_aspect = RedrawingAspect.new self, Shoes.display
36
+ end
37
+
38
+ def open
39
+ @shell.pack
40
+ force_shell_size
41
+ @shell.open
42
+ @dsl.top_slot.contents_alignment
43
+ @started = true
44
+ self.fullscreen = true if dsl.start_as_fullscreen?
45
+ flush
46
+ ::Swt.event_loop { ::Shoes::Swt.main_app.disposed? } if main_app?
47
+ end
48
+
49
+ def quit
50
+ @image.dispose
51
+ @background.dispose
52
+ @shell.dispose
53
+ end
54
+
55
+ # @return [Shoes::Swt::App] Self
56
+ def app
57
+ self
58
+ end
59
+
60
+ def width
61
+ if overlay_scrollbars?
62
+ @shell.client_area.width
63
+ else
64
+ width_adjusted_for_scrollbars
65
+ end
66
+ end
67
+
68
+ def height
69
+ @shell.client_area.height
70
+ end
71
+
72
+ def disposed?
73
+ @shell.disposed? || @real.disposed?
74
+ end
75
+
76
+ def redraw(left=nil, top=nil, width=nil, height=nil, all=true)
77
+ unless @real.disposed?
78
+ if (left == nil or top == nil or width == nil or height == nil)
79
+ @real.redraw
80
+ else
81
+ @real.redraw(left, top, width, height, all)
82
+ end
83
+ end
84
+ end
85
+
86
+ def main_app?
87
+ ::Shoes::Swt.main_app.equal? self
88
+ end
89
+
90
+ def flush
91
+ if @dsl.top_slot
92
+ @real.layout
93
+ end
94
+ end
95
+
96
+ def scroll_top
97
+ @real.getLocation.y
98
+ end
99
+
100
+ def scroll_top=(n)
101
+ @real.setLocation 0, -n
102
+ @shell.getVerticalBar.setSelection n
103
+ end
104
+
105
+ def clipboard
106
+ ::Swt::Clipboard.new(Shoes.display).getContents ::Swt::TextTransfer.getInstance
107
+ end
108
+
109
+ def clipboard=(str)
110
+ ::Swt::Clipboard.new(Shoes.display).setContents(
111
+ [str].to_java,
112
+ [::Swt::TextTransfer.getInstance].to_java(::Swt::TextTransfer)
113
+ )
114
+ end
115
+
116
+ def fullscreen=(state)
117
+ @shell.full_screen = state
118
+ end
119
+
120
+ def fullscreen
121
+ @shell.full_screen
122
+ end
123
+
124
+ def add_clickable_element(element)
125
+ @clickable_elements << element
126
+ end
127
+
128
+ def started?
129
+ @started
130
+ end
131
+
132
+ # This represents the space (potentially) occupied by a vertical
133
+ # scrollbar. Since the scrollbar may not be visible at the time this
134
+ # method is called, we don't rely on its reported value.
135
+ def gutter
136
+ # 16
137
+ @shell.getVerticalBar.getSize.x
138
+ end
139
+
140
+ def add_key_listener(listener)
141
+ @key_listeners[listener.class] << listener
142
+ end
143
+
144
+ def remove_key_listener(listener)
145
+ @key_listeners[listener.class].delete(listener)
146
+ end
147
+
148
+ private
149
+ def initialize_scroll_bar
150
+ scroll_bar = @shell.getVerticalBar
151
+ scroll_bar.setIncrement 10
152
+ selection_listener = SelectionListener.new(scroll_bar) do |vertical_bar, event|
153
+ if self.shell.getVerticalBar.getVisible and event.detail != ::Swt::SWT::DRAG
154
+ vertically_scroll_window(vertical_bar)
155
+ end
156
+ end
157
+ scroll_bar.addSelectionListener selection_listener
158
+ end
159
+
160
+ def vertically_scroll_window(vertical_bar)
161
+ location = self.real.getLocation
162
+ location.y = -vertical_bar.getSelection
163
+ self.real.setLocation location
164
+ end
165
+
166
+ def force_shell_size
167
+ frame_x_decorations = @shell.size.x - @shell.client_area.width
168
+ frame_y_decorations = @shell.size.y - @shell.client_area.height
169
+ new_width = @dsl.width + frame_x_decorations
170
+ new_height = @dsl.height + frame_y_decorations
171
+ @shell.setSize(new_width, new_height)
172
+ end
173
+
174
+ def main_window_on_close
175
+ lambda { |event|
176
+ ::Swt.display.dispose
177
+ Dir[File.join(Dir.tmpdir, "__shoes4_*.png")].each{|f| File.delete f}
178
+ }
179
+ end
180
+
181
+ def main_window_style
182
+ style = ::Swt::SWT::CLOSE | ::Swt::SWT::MIN | ::Swt::SWT::V_SCROLL
183
+ style |= ::Swt::SWT::RESIZE | ::Swt::SWT::MAX if @dsl.opts[:resizable]
184
+ style
185
+ end
186
+
187
+ def initialize_shell
188
+ @image = ::Swt::Graphics::Image.new(::Swt.display, ICON)
189
+
190
+ @shell = ::Swt::Widgets::Shell.new(::Swt.display, main_window_style)
191
+ @shell.image = @image
192
+ @shell.text = (@dsl.app_title)
193
+ @shell.background_mode = ::Swt::SWT::INHERIT_DEFAULT
194
+ @shell.background = @background.real
195
+ end
196
+
197
+ def initialize_real
198
+ @real = ::Swt::Widgets::Composite.new(@shell,
199
+ ::Swt::SWT::TRANSPARENT | ::Swt::SWT::NO_RADIO_GROUP)
200
+ @real.setSize(@dsl.width - @shell.getVerticalBar.getSize.x, @dsl.height)
201
+ @real.setLayout init_shoes_layout
202
+ end
203
+
204
+ # it seems like the class can not not have a constructor with an argument
205
+ # due to its java super class
206
+ def init_shoes_layout
207
+ layout = ShoesLayout.new
208
+ layout.gui_app = self
209
+ layout
210
+ end
211
+
212
+ def attach_event_listeners
213
+ attach_shell_event_listeners
214
+ attach_real_event_listeners
215
+ attach_key_event_listeners
216
+ end
217
+
218
+ def attach_shell_event_listeners
219
+ @shell.addControlListener ShellControlListener.new(self)
220
+ @shell.addListener(::Swt::SWT::Close, main_window_on_close) if main_app?
221
+ @shell.addListener(::Swt::SWT::Close, unregister_app)
222
+ end
223
+
224
+ def unregister_app
225
+ proc do |event|
226
+ ::Shoes::Swt.unregister(self)
227
+ end
228
+ end
229
+
230
+ def attach_real_event_listeners
231
+ @real.addMouseMoveListener MouseMoveListener.new(self)
232
+ @real.addMouseListener MouseListener.new(self)
233
+ end
234
+
235
+ def attach_key_event_listeners
236
+ @key_listeners = {
237
+ Keypress => [],
238
+ Keyrelease => [],
239
+ }
240
+ attach_key_event_listener(::Swt::SWT::KeyDown, Keypress)
241
+ attach_key_event_listener(::Swt::SWT::KeyUp, Keyrelease)
242
+ end
243
+
244
+ def attach_key_event_listener(listen_for, listener_class)
245
+ ::Swt.display.add_filter(listen_for) do |evt|
246
+ if for_this_shell?(evt)
247
+ @key_listeners[listener_class].each do |listener|
248
+ break if listener.ignore_event?(evt)
249
+ listener.handle_key_event(evt)
250
+ end
251
+ end
252
+ end
253
+ end
254
+
255
+ def for_this_shell?(evt)
256
+ evt.widget.shell == @shell unless evt.widget.disposed?
257
+ end
258
+
259
+ def overlay_scrollbars?
260
+ @shell.scrollbars_mode == ::Swt::SWT::SCROLLBAR_OVERLAY
261
+ end
262
+
263
+ def width_adjusted_for_scrollbars
264
+ if @shell.getVerticalBar.getVisible
265
+ @shell.client_area.width + @shell.getVerticalBar.getSize.x
266
+ else
267
+ @shell.client_area.width
268
+ end
269
+ end
270
+
271
+ end
272
+
273
+ class ShellControlListener
274
+ def initialize(app)
275
+ @app = app
276
+ end
277
+
278
+ def controlResized(event)
279
+ shell = event.widget
280
+ width = shell.client_area.width
281
+ height = shell.client_area.height
282
+ @app.dsl.top_slot.width = width
283
+ @app.dsl.top_slot.height = height
284
+ @app.real.setSize width, height
285
+ @app.real.layout
286
+ @app.dsl.resize_callbacks.each{|blk| blk.call}
287
+ end
288
+
289
+ def controlMoved(e)
290
+ end
291
+ end
292
+
293
+ class MouseListener
294
+ def initialize app
295
+ @app = app
296
+ end
297
+
298
+ def mouseDown(e)
299
+ @app.dsl.mouse_button = e.button
300
+ @app.dsl.mouse_pos = [e.x, e.y]
301
+ end
302
+
303
+ def mouseUp(e)
304
+ @app.dsl.mouse_button = 0
305
+ @app.dsl.mouse_pos = [e.x, e.y]
306
+ end
307
+
308
+ def mouseDoubleClick(e)
309
+ # do nothing
310
+ end
311
+ end
312
+
313
+ end
314
+ end
@@ -0,0 +1,71 @@
1
+ class Shoes
2
+ module Swt
3
+ class Arc
4
+ include Common::Clickable
5
+ include Common::Fill
6
+ include Common::Stroke
7
+ include Common::PainterUpdatesPosition
8
+ include Common::Visibility
9
+ include Common::Remove
10
+ include ::Shoes::BackendDimensionsDelegations
11
+
12
+ attr_reader :dsl, :app, :transform
13
+
14
+ # Creates a new Shoes::Swt::Arc
15
+ #
16
+ # @param [Shoes::Arc] dsl The DSL object represented by this implementation
17
+ # @param [Shoes::Swt::App] app The implementation object of the Shoes app
18
+ def initialize(dsl, app)
19
+ @dsl = dsl
20
+ @app = app
21
+ @painter = Painter.new(self)
22
+ @app.add_paint_listener @painter
23
+ end
24
+
25
+ def angle1
26
+ radians_to_degrees dsl.angle1
27
+ end
28
+
29
+ def angle2
30
+ radians_to_degrees dsl.angle2
31
+ end
32
+
33
+ def wedge?
34
+ dsl.wedge?
35
+ end
36
+
37
+ private
38
+ def radians_to_degrees(radians)
39
+ radians * 180 / ::Shoes::PI
40
+ end
41
+
42
+ public
43
+ class Painter < Common::Painter
44
+ def fill(graphics_context)
45
+ if (@obj.wedge?)
46
+ graphics_context.fill_arc(@obj.element_left, @obj.element_top,
47
+ @obj.element_width, @obj.element_height,
48
+ @obj.angle1, @obj.angle2 * -1)
49
+ else
50
+ path = ::Swt::Path.new(::Swt.display)
51
+ path.add_arc(@obj.element_left, @obj.element_top,
52
+ @obj.element_width, @obj.element_height,
53
+ @obj.angle1, @obj.angle2 * -1)
54
+ graphics_context.fill_path(path)
55
+ end
56
+ end
57
+
58
+ def draw(graphics_context)
59
+ sw = graphics_context.get_line_width
60
+ if (@obj.element_left and @obj.element_top and @obj.element_width and @obj.element_height)
61
+ graphics_context.draw_arc(@obj.element_left+sw/2,
62
+ @obj.element_top+sw/2,
63
+ @obj.element_width-sw,
64
+ @obj.element_height-sw,
65
+ @obj.angle1, @obj.angle2 * -1)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,41 @@
1
+ class Shoes
2
+ module Swt
3
+ class Background
4
+ extend Forwardable
5
+ include Common::Fill
6
+ include Common::Stroke
7
+ include Common::Remove
8
+ include Common::Visibility
9
+ include BackendDimensionsDelegations
10
+
11
+ def_delegators :dsl, :angle
12
+
13
+ attr_reader :dsl, :app, :transform, :painter
14
+
15
+ def initialize(dsl, app)
16
+ @dsl = dsl
17
+ @app = app
18
+
19
+ # fill is potentially a pattern that needs disposing, so hold onto it
20
+ @fill = dsl.fill
21
+
22
+ @painter = Painter.new(self)
23
+ @app.add_paint_listener @painter
24
+ end
25
+
26
+ def corners
27
+ dsl.curve
28
+ end
29
+
30
+ def dispose
31
+ @fill.gui.dispose if @fill && @fill.respond_to?(:gui)
32
+ end
33
+
34
+ class Painter < RectPainter
35
+ def draw_setup(gc)
36
+ # don't draw
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end