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,133 @@
1
+ class Shoes
2
+ module Swt
3
+ class Shape
4
+ include Common::Remove
5
+ include Common::Fill
6
+ include Common::Stroke
7
+ include Common::PainterUpdatesPosition
8
+
9
+
10
+ # Creates a new Shoes::Swt::Shape
11
+ #
12
+ # @param [Shoes::Shape] dsl The dsl object to provide gui for
13
+ # @param [Hash] opts Initialization options
14
+ # If this shape is part of another shape (i.e. it is not responsible
15
+ # for drawing itself), `opts` should be omitted
16
+ def initialize(dsl, app)
17
+ @dsl = dsl
18
+ @app = app
19
+ @element = ::Swt::Path.new(::Swt.display)
20
+ @painter = Painter.new(self)
21
+ @app.add_paint_listener @painter
22
+ end
23
+
24
+ def dispose
25
+ @transform.dispose unless @transform.nil? || @transform.disposed?
26
+ @element.dispose unless @element.nil? || @element.disposed?
27
+ end
28
+
29
+ attr_reader :dsl, :app
30
+ attr_reader :element, :transform
31
+ attr_reader :painter
32
+
33
+ def line_to(x, y)
34
+ @element.line_to(x, y)
35
+ end
36
+
37
+ def move_to(x, y)
38
+ @element.move_to(x, y)
39
+ end
40
+
41
+ def curve_to(cx1, cy1, cx2, cy2, x, y)
42
+ @element.cubic_to(cx1, cy1, cx2, cy2, x, y)
43
+ end
44
+
45
+ def arc(x, y, width, height, start_angle, arc_angle)
46
+ @element.add_arc(x - (width / 2), y - (height / 2), width, height,
47
+ -start_angle * 180 / ::Shoes::PI,
48
+ (start_angle - arc_angle) * 180 / ::Shoes::PI)
49
+ end
50
+
51
+ def update_position
52
+ transform.translate(dsl.element_left, dsl.element_top)
53
+ end
54
+
55
+ def left
56
+ native_left
57
+ end
58
+
59
+ def top
60
+ native_top
61
+ end
62
+
63
+ alias_method :absolute_left, :left
64
+ alias_method :absolute_top, :top
65
+ alias_method :element_left, :left
66
+ alias_method :element_top, :top
67
+
68
+ def width
69
+ native_width
70
+ end
71
+
72
+ def height
73
+ native_height
74
+ end
75
+
76
+ alias_method :element_width, :width
77
+ alias_method :element_height, :height
78
+
79
+ def transform
80
+ @transform ||= ::Swt::Transform.new(::Swt.display)
81
+ end
82
+
83
+ private
84
+ def new_java_float_array(length)
85
+ Java::float[length].new
86
+ end
87
+
88
+ def native_bounds_measurement(element, index)
89
+ bounds_array_size = 4
90
+ bounds = new_java_float_array(bounds_array_size)
91
+ element.get_bounds bounds
92
+ bounds[index]
93
+ end
94
+
95
+ def position_from_transform(index)
96
+ transform_elements_size = 6
97
+ elements = new_java_float_array(transform_elements_size)
98
+ transform.get_elements(elements)
99
+ elements[index]
100
+ end
101
+
102
+ def native_left
103
+ transform_elements_index_for_left = 4
104
+ position_from_transform transform_elements_index_for_left
105
+ end
106
+
107
+ def native_top
108
+ transform_elements_index_for_top = 5
109
+ position_from_transform transform_elements_index_for_top
110
+ end
111
+
112
+ def native_height
113
+ bounds_index_for_height = 3
114
+ native_bounds_measurement(@element, bounds_index_for_height)
115
+ end
116
+
117
+ def native_width
118
+ bounds_index_for_width = 2
119
+ native_bounds_measurement(@element, bounds_index_for_width)
120
+ end
121
+
122
+ class Painter < Common::Painter
123
+ def fill(gc)
124
+ gc.fill_path(@obj.element)
125
+ end
126
+
127
+ def draw(gc)
128
+ gc.draw_path(@obj.element)
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,43 @@
1
+ class Shoes
2
+ module Swt
3
+ class ShoesLayout < ::Swt::Widgets::Layout
4
+
5
+ attr_accessor :gui_app
6
+
7
+ def layout(*dontcare)
8
+ dsl_app = @gui_app.dsl
9
+ height = dsl_app.height
10
+ scrollable_height = dsl_app.top_slot.contents_alignment
11
+ set_gui_size(height, scrollable_height)
12
+
13
+ vertical_bar = @gui_app.shell.getVerticalBar
14
+ vertical_bar.setVisible(scrollable_height > height)
15
+ if scrollable_height > height
16
+ handle_scroll_bar(vertical_bar, height, scrollable_height)
17
+ else
18
+ set_gui_location
19
+ end
20
+ end
21
+
22
+ private
23
+ def set_gui_size(height, scrollable_height)
24
+ width = @gui_app.dsl.width
25
+ maximum_height = [scrollable_height, height].max
26
+ size = @gui_app.real.compute_trim 0, 0, width, maximum_height
27
+ @gui_app.real.set_size(size.width, size.height)
28
+ end
29
+
30
+ def handle_scroll_bar(vertical_bar, height, scrollable_height)
31
+ vertical_bar.setThumb height * height / scrollable_height
32
+ vertical_bar.setMaximum scrollable_height - height + vertical_bar.getThumb
33
+ vertical_bar.increment = 10
34
+ end
35
+
36
+ def set_gui_location
37
+ location = @gui_app.real.getLocation
38
+ location.y = 0
39
+ @gui_app.real.setLocation location
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ class Shoes
2
+ module Swt
3
+ class Slot
4
+ include Common::Container
5
+ include Common::Clickable
6
+ include Common::Visibility
7
+
8
+ attr_reader :real, :dsl, :parent, :app
9
+
10
+ def initialize(dsl, parent)
11
+ @dsl = dsl
12
+ @parent = parent
13
+ @real = parent.real
14
+
15
+ @app = @parent.app
16
+ end
17
+
18
+ # needed by Layouter code, but slots are no physical elements so they
19
+ def update_position
20
+ end
21
+
22
+ # This is more like a temporary work around until slots have a real
23
+ # backend representations that can just hide their contents all together
24
+ # I decided to put this logic in the backend since the hiding is a backend
25
+ # responsibility, although this is more DSL code
26
+ # #904 #905
27
+ def update_visibility
28
+ if dsl.hidden?
29
+ dsl.contents.each &:hide
30
+ else
31
+ dsl.contents.each &:show
32
+ end
33
+ end
34
+
35
+ end
36
+ class Flow < Slot; end
37
+ class Stack < Slot; end
38
+ end
39
+ end
@@ -0,0 +1,119 @@
1
+ # JavaZOOM Sound-API Projects
2
+ # - Shared lib
3
+ require 'shoes/swt/support/tritonus_share.jar'
4
+ # - MP3 lib
5
+ require 'shoes/swt/support/mp3spi1.9.5.jar'
6
+ require 'shoes/swt/support/jl1.0.1.jar'
7
+ # - Ogg/Vorbis lib
8
+ require 'shoes/swt/support/jogg-0.0.7.jar'
9
+ require 'shoes/swt/support/jorbis-0.0.15.jar'
10
+ require 'shoes/swt/support/vorbisspi1.0.3.jar'
11
+
12
+ class Shoes
13
+ module Swt
14
+ class Sound
15
+ JFile = java.io.File
16
+ import java.io.BufferedInputStream
17
+ import javax.sound.sampled
18
+ import java.io.IOException
19
+
20
+ BufferSize = 4096
21
+
22
+ def initialize(dsl)
23
+ @dsl = dsl
24
+ end
25
+
26
+ def filepath
27
+ @dsl.filepath
28
+ end
29
+
30
+ attr_accessor :mixer_channel, :audio_input_stream, :audio_format
31
+
32
+ def play
33
+ Thread.new do
34
+ begin
35
+ sound_file = JFile.new(self.filepath)
36
+
37
+ audio_input_stream = AudioSystem.getAudioInputStream(sound_file)
38
+ audio_format = audio_input_stream.getFormat
39
+
40
+ decoded_audio_format, decoded_audio_input_stream = decode_input_stream(audio_format, audio_input_stream)
41
+
42
+ # Play now.
43
+ rawplay(decoded_audio_format, decoded_audio_input_stream)
44
+ audio_input_stream.close
45
+
46
+ rescue UnsupportedAudioFileException => uafex
47
+ puts uafex.inspect, uafex.backtrace
48
+ rescue IOException => ioex
49
+ puts ioex.inspect, ioex.backtrace
50
+ #rescue JIOException => jioex
51
+ # jioex.stacktrace
52
+ rescue LineUnavailableException => luex
53
+ puts luex.inspect, luex.backtrace
54
+ rescue Exception => e
55
+ puts e.inspect, e.backtrace
56
+ end
57
+ end
58
+ end
59
+
60
+ def decode_input_stream(audio_format, audio_input_stream)
61
+ case audio_format.encoding
62
+ when Java::JavazoomSpiVorbisSampledFile::VorbisEncoding, Java::JavazoomSpiMpegSampledFile::MpegEncoding
63
+ decoded_format = AudioFormat.new(AudioFormat::Encoding::PCM_SIGNED,
64
+ audio_format.getSampleRate(),
65
+ 16,
66
+ audio_format.getChannels(),
67
+ audio_format.getChannels() * 2,
68
+ audio_format.getSampleRate(),
69
+ false)
70
+ decoded_audio_input_stream = AudioSystem.getAudioInputStream(decoded_format, audio_input_stream)
71
+
72
+ return decoded_format, decoded_audio_input_stream
73
+
74
+ else
75
+ return audio_format, audio_input_stream
76
+ end
77
+ end
78
+
79
+ def rawplay(decoded_audio_format, decoded_audio_input_stream)
80
+
81
+ #throws IOException, LineUnavailableException
82
+
83
+ sampled_data = Java::byte[BufferSize].new
84
+
85
+ line = getLine(decoded_audio_format)
86
+ if line != nil
87
+
88
+ # Start
89
+ line.start()
90
+ bytes_read = 0, bytes_written = 0
91
+ while bytes_read != -1
92
+
93
+ bytes_read = decoded_audio_input_stream.read(sampled_data, 0, sampled_data.length)
94
+ if bytes_read != -1
95
+
96
+ bytes_written = line.write(sampled_data, 0, bytes_read)
97
+ end
98
+ end
99
+ # Stop
100
+ line.drain()
101
+ line.stop()
102
+ line.close()
103
+ decoded_audio_input_stream.close()
104
+ end
105
+ end
106
+
107
+ def getLine(audioFormat)
108
+
109
+ #throws LineUnavailableException
110
+
111
+ res = nil
112
+ info = DataLine::Info.new(SourceDataLine.java_class, audioFormat)
113
+ res = AudioSystem.getLine(info)
114
+ res.open(audioFormat)
115
+ res
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,50 @@
1
+ class Shoes
2
+ module Swt
3
+ class Star
4
+ extend Forwardable
5
+ include Common::Fill
6
+ include Common::Stroke
7
+ include Common::Clickable
8
+ include Common::PainterUpdatesPosition
9
+ include Common::Visibility
10
+ include Common::Remove
11
+ include ::Shoes::BackendDimensionsDelegations
12
+
13
+ def_delegators :dsl, :angle, :outer, :inner, :points
14
+
15
+ attr_reader :dsl, :app, :transform, :container
16
+
17
+ def initialize(dsl, app)
18
+ @dsl = dsl
19
+ @app = app
20
+ @container = @app.real
21
+
22
+ @painter = Painter.new(self)
23
+ @app.add_paint_listener @painter
24
+ end
25
+
26
+ class Painter < Common::Painter
27
+ def fill(gc)
28
+ gc.fillPolygon make_polygon(@obj)
29
+ end
30
+
31
+ def draw(gc)
32
+ gc.drawPolygon make_polygon(@obj)
33
+ end
34
+
35
+ def make_polygon(obj)
36
+ outer, inner, points, left, top = obj.outer, obj.inner, obj.points,
37
+ obj.element_left, obj.element_top
38
+ polygon = []
39
+ polygon << left << (top + outer)
40
+ (1..points*2).each do |i|
41
+ angle = i * ::Math::PI / points
42
+ r = (i % 2 == 0) ? outer : inner
43
+ polygon << (left + r * ::Math.sin(angle)) << (top + r * ::Math.cos(angle))
44
+ end
45
+ polygon
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
Binary file
@@ -0,0 +1,56 @@
1
+ class Shoes
2
+ module Swt
3
+ class SwtButton
4
+ include Common::Remove
5
+ include Common::Visibility
6
+ include Common::UpdatePosition
7
+ include ::Shoes::BackendDimensionsDelegations
8
+
9
+ attr_reader :parent, :real, :dsl
10
+
11
+ def initialize(dsl, parent, type)
12
+ @dsl = dsl
13
+ @parent = parent
14
+
15
+ @type = type
16
+ @real = ::Swt::Widgets::Button.new(@parent.real, @type)
17
+
18
+ yield(@real) if block_given?
19
+
20
+ set_size
21
+ end
22
+
23
+ def eval_block blk
24
+ blk.call @dsl
25
+ end
26
+
27
+ def focus
28
+ @real.set_focus
29
+ end
30
+
31
+ def click blk
32
+ remove_listeners
33
+ @real.addSelectionListener { eval_block blk }
34
+ end
35
+
36
+ def remove_listeners
37
+ listener_array = @real.getListeners ::Swt::SWT::Selection
38
+ listener_array.each do |listener|
39
+ @real.removeListener ::Swt::SWT::Selection, listener
40
+ end
41
+ end
42
+
43
+ def enabled(value)
44
+ @real.enable_widget value
45
+ end
46
+
47
+ private
48
+ def set_size
49
+ @real.pack
50
+ @dsl.element_width ||= @real.size.x
51
+ @dsl.element_height ||= @real.size.y
52
+ @real.setSize @dsl.element_width, @dsl.element_height
53
+ end
54
+ end
55
+ end
56
+ end