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.
- checksums.yaml +7 -0
- data/CHANGELOG +84 -0
- data/Gemfile +24 -0
- data/Guardfile +11 -0
- data/LICENSE +31 -0
- data/README.md +201 -0
- data/lib/shoes/swt.rb +118 -0
- data/lib/shoes/swt/animation.rb +46 -0
- data/lib/shoes/swt/app.rb +314 -0
- data/lib/shoes/swt/arc.rb +71 -0
- data/lib/shoes/swt/background.rb +41 -0
- data/lib/shoes/swt/border.rb +41 -0
- data/lib/shoes/swt/button.rb +18 -0
- data/lib/shoes/swt/check.rb +14 -0
- data/lib/shoes/swt/check_button.rb +19 -0
- data/lib/shoes/swt/color.rb +49 -0
- data/lib/shoes/swt/color_factory.rb +32 -0
- data/lib/shoes/swt/common/child.rb +16 -0
- data/lib/shoes/swt/common/clickable.rb +68 -0
- data/lib/shoes/swt/common/container.rb +28 -0
- data/lib/shoes/swt/common/fill.rb +38 -0
- data/lib/shoes/swt/common/painter.rb +92 -0
- data/lib/shoes/swt/common/painter_updates_position.rb +12 -0
- data/lib/shoes/swt/common/remove.rb +30 -0
- data/lib/shoes/swt/common/resource.rb +29 -0
- data/lib/shoes/swt/common/selection_listener.rb +14 -0
- data/lib/shoes/swt/common/stroke.rb +42 -0
- data/lib/shoes/swt/common/update_position.rb +15 -0
- data/lib/shoes/swt/common/visibility.rb +13 -0
- data/lib/shoes/swt/dialog.rb +90 -0
- data/lib/shoes/swt/disposed_protection.rb +23 -0
- data/lib/shoes/swt/download.rb +24 -0
- data/lib/shoes/swt/font.rb +32 -0
- data/lib/shoes/swt/gradient.rb +92 -0
- data/lib/shoes/swt/image.rb +128 -0
- data/lib/shoes/swt/image_pattern.rb +31 -0
- data/lib/shoes/swt/input_box.rb +73 -0
- data/lib/shoes/swt/key_listener.rb +145 -0
- data/lib/shoes/swt/line.rb +60 -0
- data/lib/shoes/swt/link.rb +31 -0
- data/lib/shoes/swt/link_segment.rb +111 -0
- data/lib/shoes/swt/list_box.rb +48 -0
- data/lib/shoes/swt/mouse_move_listener.rb +67 -0
- data/lib/shoes/swt/oval.rb +52 -0
- data/lib/shoes/swt/progress.rb +35 -0
- data/lib/shoes/swt/radio.rb +29 -0
- data/lib/shoes/swt/radio_group.rb +54 -0
- data/lib/shoes/swt/rect.rb +30 -0
- data/lib/shoes/swt/rect_painter.rb +23 -0
- data/lib/shoes/swt/redrawing_aspect.rb +123 -0
- data/lib/shoes/swt/shape.rb +133 -0
- data/lib/shoes/swt/shoes_layout.rb +43 -0
- data/lib/shoes/swt/slot.rb +39 -0
- data/lib/shoes/swt/sound.rb +119 -0
- data/lib/shoes/swt/star.rb +50 -0
- data/lib/shoes/swt/support/jl1.0.1.jar +0 -0
- data/lib/shoes/swt/support/jogg-0.0.7.jar +0 -0
- data/lib/shoes/swt/support/jorbis-0.0.15.jar +0 -0
- data/lib/shoes/swt/support/log4j-1.2.16.jar +0 -0
- data/lib/shoes/swt/support/mp3spi1.9.5.jar +0 -0
- data/lib/shoes/swt/support/tritonus_share.jar +0 -0
- data/lib/shoes/swt/support/vorbisspi1.0.3.jar +0 -0
- data/lib/shoes/swt/swt_button.rb +56 -0
- data/lib/shoes/swt/text_block.rb +124 -0
- data/lib/shoes/swt/text_block/centered_text_segment.rb +22 -0
- data/lib/shoes/swt/text_block/cursor_painter.rb +53 -0
- data/lib/shoes/swt/text_block/fitter.rb +212 -0
- data/lib/shoes/swt/text_block/painter.rb +47 -0
- data/lib/shoes/swt/text_block/text_font_factory.rb +50 -0
- data/lib/shoes/swt/text_block/text_segment.rb +108 -0
- data/lib/shoes/swt/text_block/text_segment_collection.rb +160 -0
- data/lib/shoes/swt/text_block/text_style_factory.rb +88 -0
- data/lib/shoes/swt/timer.rb +19 -0
- data/lib/shoes/swt/tooling/leak_hunter.rb +35 -0
- data/lib/shoes/swt/version.rb +5 -0
- data/manifests/common.rb +34 -0
- data/manifests/shoes-swt.rb +29 -0
- data/shoes-swt.gemspec +24 -0
- data/spec/code_coverage.rb +14 -0
- data/spec/shoes/animation_spec.rb +65 -0
- data/spec/shoes/app_spec.rb +484 -0
- data/spec/shoes/arc_spec.rb +51 -0
- data/spec/shoes/background_spec.rb +53 -0
- data/spec/shoes/border_spec.rb +47 -0
- data/spec/shoes/builtin_methods_spec.rb +110 -0
- data/spec/shoes/button_spec.rb +44 -0
- data/spec/shoes/check_spec.rb +35 -0
- data/spec/shoes/cli_spec.rb +15 -0
- data/spec/shoes/color_spec.rb +408 -0
- data/spec/shoes/common/inspect_spec.rb +26 -0
- data/spec/shoes/common/remove_spec.rb +38 -0
- data/spec/shoes/common/style_normalizer_spec.rb +28 -0
- data/spec/shoes/common/style_spec.rb +147 -0
- data/spec/shoes/configuration_spec.rb +36 -0
- data/spec/shoes/constants_spec.rb +38 -0
- data/spec/shoes/dialog_spec.rb +163 -0
- data/spec/shoes/dimension_spec.rb +407 -0
- data/spec/shoes/dimensions_spec.rb +837 -0
- data/spec/shoes/download_spec.rb +142 -0
- data/spec/shoes/flow_spec.rb +133 -0
- data/spec/shoes/font_spec.rb +37 -0
- data/spec/shoes/framework_learning_spec.rb +30 -0
- data/spec/shoes/gradient_spec.rb +32 -0
- data/spec/shoes/helpers/fake_element.rb +17 -0
- data/spec/shoes/helpers/inspect_helpers.rb +5 -0
- data/spec/shoes/helpers/sample17_helper.rb +66 -0
- data/spec/shoes/image_spec.rb +49 -0
- data/spec/shoes/images/shoe.jpg +0 -0
- data/spec/shoes/input_box_spec.rb +80 -0
- data/spec/shoes/integration_spec.rb +20 -0
- data/spec/shoes/internal_app_spec.rb +141 -0
- data/spec/shoes/keypress_spec.rb +11 -0
- data/spec/shoes/keyrelease_spec.rb +12 -0
- data/spec/shoes/line_spec.rb +49 -0
- data/spec/shoes/link_spec.rb +105 -0
- data/spec/shoes/list_box_spec.rb +74 -0
- data/spec/shoes/logger/ruby_spec.rb +8 -0
- data/spec/shoes/logger_spec.rb +45 -0
- data/spec/shoes/oval_spec.rb +24 -0
- data/spec/shoes/point_spec.rb +71 -0
- data/spec/shoes/progress_spec.rb +54 -0
- data/spec/shoes/radio_spec.rb +32 -0
- data/spec/shoes/rect_spec.rb +39 -0
- data/spec/shoes/renamed_delegate_spec.rb +70 -0
- data/spec/shoes/shape_spec.rb +95 -0
- data/spec/shoes/shared_examples/button.rb +6 -0
- data/spec/shoes/shared_examples/changeable.rb +26 -0
- data/spec/shoes/shared_examples/clickable.rb +5 -0
- data/spec/shoes/shared_examples/common_methods.rb +35 -0
- data/spec/shoes/shared_examples/dimensions.rb +32 -0
- data/spec/shoes/shared_examples/dsl.rb +44 -0
- data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
- data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
- data/spec/shoes/shared_examples/dsl/background.rb +26 -0
- data/spec/shoes/shared_examples/dsl/border.rb +10 -0
- data/spec/shoes/shared_examples/dsl/button.rb +5 -0
- data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
- data/spec/shoes/shared_examples/dsl/check.rb +11 -0
- data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
- data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
- data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
- data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
- data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
- data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
- data/spec/shoes/shared_examples/dsl/image.rb +21 -0
- data/spec/shoes/shared_examples/dsl/line.rb +9 -0
- data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
- data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
- data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
- data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
- data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
- data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
- data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
- data/spec/shoes/shared_examples/dsl/shape.rb +21 -0
- data/spec/shoes/shared_examples/dsl/star.rb +48 -0
- data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
- data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
- data/spec/shoes/shared_examples/dsl/style.rb +32 -0
- data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
- data/spec/shoes/shared_examples/dsl/video.rb +5 -0
- data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
- data/spec/shoes/shared_examples/hover_leave.rb +11 -0
- data/spec/shoes/shared_examples/parent.rb +6 -0
- data/spec/shoes/shared_examples/scroll.rb +41 -0
- data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
- data/spec/shoes/shared_examples/slot.rb +331 -0
- data/spec/shoes/shared_examples/state.rb +19 -0
- data/spec/shoes/shared_examples/style.rb +82 -0
- data/spec/shoes/slot_spec.rb +130 -0
- data/spec/shoes/sound_spec.rb +15 -0
- data/spec/shoes/span_spec.rb +112 -0
- data/spec/shoes/spec_helper.rb +24 -0
- data/spec/shoes/stack_spec.rb +79 -0
- data/spec/shoes/star_spec.rb +31 -0
- data/spec/shoes/text_block_dimensions_spec.rb +75 -0
- data/spec/shoes/text_block_spec.rb +270 -0
- data/spec/shoes/url_spec.rb +68 -0
- data/spec/shoes/widget_spec.rb +70 -0
- data/spec/shoes_spec.rb +44 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/swt_shoes/animation_spec.rb +86 -0
- data/spec/swt_shoes/app_spec.rb +84 -0
- data/spec/swt_shoes/arc_spec.rb +103 -0
- data/spec/swt_shoes/background_spec.rb +67 -0
- data/spec/swt_shoes/border_spec.rb +52 -0
- data/spec/swt_shoes/button_spec.rb +101 -0
- data/spec/swt_shoes/check_spec.rb +28 -0
- data/spec/swt_shoes/color_factory_spec.rb +49 -0
- data/spec/swt_shoes/color_spec.rb +67 -0
- data/spec/swt_shoes/common/painter_spec.rb +49 -0
- data/spec/swt_shoes/common/remove_spec.rb +53 -0
- data/spec/swt_shoes/configuration_spec.rb +12 -0
- data/spec/swt_shoes/dialog_spec.rb +106 -0
- data/spec/swt_shoes/disposed_protection_spec.rb +49 -0
- data/spec/swt_shoes/flow_spec.rb +36 -0
- data/spec/swt_shoes/font_spec.rb +33 -0
- data/spec/swt_shoes/gradient_spec.rb +31 -0
- data/spec/swt_shoes/image_pattern_spec.rb +35 -0
- data/spec/swt_shoes/image_spec.rb +100 -0
- data/spec/swt_shoes/input_box_spec.rb +116 -0
- data/spec/swt_shoes/integration_spec.rb +27 -0
- data/spec/swt_shoes/key_listener_spec.rb +325 -0
- data/spec/swt_shoes/line_spec.rb +49 -0
- data/spec/swt_shoes/link_segment_spec.rb +120 -0
- data/spec/swt_shoes/link_spec.rb +54 -0
- data/spec/swt_shoes/list_box_spec.rb +56 -0
- data/spec/swt_shoes/minimal.png +0 -0
- data/spec/swt_shoes/mouse_move_listener_spec.rb +123 -0
- data/spec/swt_shoes/oval_spec.rb +51 -0
- data/spec/swt_shoes/progress_spec.rb +44 -0
- data/spec/swt_shoes/radio_group_spec.rb +73 -0
- data/spec/swt_shoes/radio_spec.rb +56 -0
- data/spec/swt_shoes/rect_painter_spec.rb +45 -0
- data/spec/swt_shoes/rect_spec.rb +19 -0
- data/spec/swt_shoes/shape_spec.rb +84 -0
- data/spec/swt_shoes/shared_examples/button.rb +21 -0
- data/spec/swt_shoes/shared_examples/clickable.rb +85 -0
- data/spec/swt_shoes/shared_examples/movable.rb +36 -0
- data/spec/swt_shoes/shared_examples/paintable.rb +7 -0
- data/spec/swt_shoes/shared_examples/painter.rb +83 -0
- data/spec/swt_shoes/shared_examples/pattern.rb +32 -0
- data/spec/swt_shoes/shared_examples/removable.rb +41 -0
- data/spec/swt_shoes/shared_examples/swt_app_context.rb +23 -0
- data/spec/swt_shoes/shared_examples/visibility.rb +15 -0
- data/spec/swt_shoes/shell_control_listener_spec.rb +23 -0
- data/spec/swt_shoes/slot_spec.rb +24 -0
- data/spec/swt_shoes/sound.rb +10 -0
- data/spec/swt_shoes/spec_helper.rb +31 -0
- data/spec/swt_shoes/star_spec.rb +47 -0
- data/spec/swt_shoes/text_block/centered_text_segment_spec.rb +16 -0
- data/spec/swt_shoes/text_block/cursor_painter_spec.rb +120 -0
- data/spec/swt_shoes/text_block/fitter_spec.rb +213 -0
- data/spec/swt_shoes/text_block/painter_spec.rb +212 -0
- data/spec/swt_shoes/text_block/text_font_factory_spec.rb +40 -0
- data/spec/swt_shoes/text_block/text_segment_collection_spec.rb +256 -0
- data/spec/swt_shoes/text_block/text_segment_spec.rb +135 -0
- data/spec/swt_shoes/text_block_spec.rb +199 -0
- 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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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
|