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,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
|