glimmer-dsl-swt 4.20.6.0 → 4.20.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d7ca988f6d990ae7520a2b6319c538a793f7499a23713e97ce02f32e3db2bec
4
- data.tar.gz: a50dfa303380c6415d6a286f351a55931a4b1e09d73d7cc3e4602b52a00c179d
3
+ metadata.gz: 9a17e44008cc8425de7d3789c82e9bbaa11e0406e3f38ec71cee7f9427f07686
4
+ data.tar.gz: abfaa95510ebb353849d8659f55f5336aa1fd9b2653e4baf44fa156ba4524174
5
5
  SHA512:
6
- metadata.gz: a8739fded7624fc8a007850dfa84fabeba144ffd3830fb83284e6abd733be75d8500da1be339d4827f30e14d702a4472f271198d90101d30573696f6a6dfdb14
7
- data.tar.gz: c95d53ca9b574ec413b1630c2b415deb2fa3e65a091bc3d5d40b391b3c6083db5e74158c3f9d3572523682c4a02e75afee465ffef2e83f96cbc3bbc7e671698a
6
+ metadata.gz: 2c9c41491e55320002c349ae791073ec386237d63d07dc8737bbc8ecee37e29fbebef3ed8b4b333577ac8627e128fc54ff7da96720ca7db1fbad7ae4f49d7a96
7
+ data.tar.gz: 8a327ae96049e238fc36b40531e7bc9ae0d12303adae5183a4428de8cd3d39f49ef7ede3162b1b44a57102769f469200c556e394154eb65aba148679976ee12f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ### 4.20.7.0
4
+
5
+ - Add Canvas Animation DSL #finished, #finished?, #finished= properties
6
+ - Update Hello, Canvas Animation! (formerly had Data Binding suffix)
7
+ - Update Hello, Canvas Animation Multi! (formerly did not have Multi suffix)
8
+
3
9
  ### 4.20.6.0
4
10
 
5
11
  - Canvas Animation DSL: support parallel animations per canvas (running along canvas static shapes too)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.20.6.0
1
+ 4.20.7.0
@@ -2247,7 +2247,7 @@ Glimmer provides built-in support for animations via a declarative Animation DSL
2247
2247
 
2248
2248
  Animations take advantage of multi-threading, with Glimmer DSL for SWT automatically running each animation in its own independent thread of execution while updating the GUI asynchronously.
2249
2249
 
2250
- Multiple simultaneous animations are supported per `canvas` (or widget) parent (they do not compete or starve each other).
2250
+ Multiple simultaneous animations are supported per `canvas` (or widget) parent.
2251
2251
 
2252
2252
  `canvas` has the `:double_buffered` SWT style by default on platforms other than the Mac to ensure flicker-free rendering (Mac does not need it). If you need to disable it for whatever reason, just pass the `:none` SWT style instead (e.g. `canvas(:none)`)
2253
2253
 
@@ -2282,8 +2282,8 @@ Screenshot:
2282
2282
  Keywords:
2283
2283
  - `animation` declares an animation under a canvas, which renders frames using a frame block indefinitely or finitely depending on (cycle_count/frame_count) properties
2284
2284
  - `every` specifies delay in seconds between every two frame renders
2285
- - `frame` a block that can contain Shape DSL syntax that is rendered dynamically with variables calculated on the fly
2286
- - `cycle` a property that takes an array to cycle into a second variable for the `frame` block
2285
+ - `frame {|index, cycle_var| }` a block that can contain Shape DSL syntax that is rendered dynamically with variables calculated on the fly
2286
+ - `cycle` an optional property that takes an array to cycle into a second variable for the `frame` block
2287
2287
  - `cycle_count` an optional cycle count limit after which the animation stops
2288
2288
  - `frame_count` an optional frame count limit after which the animation stops
2289
2289
  - `started` a boolean indicating if the animation is started right away or stopped waiting for manual startup via `#start` method
@@ -39,7 +39,7 @@
39
39
  - [Hello, Code Text!](#hello-code-text)
40
40
  - [Hello, Canvas!](#hello-canvas)
41
41
  - [Hello, Canvas Animation!](#hello-canvas-animation)
42
- - [Hello, Canvas Animation Data Binding!](#hello-canvas-animation-data-binding)
42
+ - [Hello, Canvas Animation Multi!](#hello-canvas-animation-multi)
43
43
  - [Hello, Canvas Transform!](#hello-canvas-transform)
44
44
  - [Hello, Canvas Path!](#hello-canvas-path)
45
45
  - [Hello, Canvas Data Binding!](#hello-canvas-data-binding)
@@ -743,31 +743,27 @@ Hello, Canvas! Data-Binding (changing a `text` shape `string` via data-binding c
743
743
 
744
744
  #### Hello, Canvas Animation!
745
745
 
746
- This sample demonstrates the use of the `canvas` widget and [Animation DSL](#canvas-animation-dsl) in Glimmer.
746
+ This sample demonstrates the use of the [Canvas Animation DSL](#canvas-animation-dsl) with data-binding.
747
747
 
748
748
  Code:
749
749
 
750
- [samples/hello/hello_canvas_animation.rb](/samples/hello/hello_canvas_animation.rb)
750
+ [samples/hello/hello_canvas_animation_data_binding.rb](/samples/hello/hello_canvas_animation_data_binding.rb)
751
751
 
752
752
  Hello, Canvas Animation!
753
753
 
754
- ![Hello Canvas Animation](/images/glimmer-hello-canvas-animation.png)
755
-
756
- Hello, Canvas Animation Another Frame!
754
+ ![Hello Canvas Animation Data Binding](/images/glimmer-hello-canvas-animation.gif)
757
755
 
758
- ![Hello Canvas Animation Frame 2](/images/glimmer-hello-canvas-animation-frame2.png)
756
+ #### Hello, Canvas Animation Multi!
759
757
 
760
- #### Hello, Canvas Animation Data Binding!
761
-
762
- This sample demonstrates the use of the [Canvas Animation DSL](#canvas-animation-dsl) with data-binding.
758
+ This sample demonstrates parallel animations in the [Canvas Animation DSL](/docs/reference/GLIMMER_GUI_DSL_SYNTAX#canvas-animation-dsl).
763
759
 
764
760
  Code:
765
761
 
766
- [samples/hello/hello_canvas_animation_data_binding.rb](/samples/hello/hello_canvas_animation_data_binding.rb)
762
+ [samples/hello/hello_canvas_animation_multi.rb](/samples/hello/hello_canvas_animation_multi.rb)
767
763
 
768
- Hello, Canvas Animation Data Binding!
764
+ Hello, Canvas Animation Multi!
769
765
 
770
- ![Hello Canvas Animation Data Binding](/images/glimmer-hello-canvas-animation-data-binding.gif)
766
+ ![Hello Canvas Animation Multi](/images/glimmer-hello-canvas-animation-multi.gif)
771
767
 
772
768
  #### Hello, Canvas Transform!
773
769
 
Binary file
@@ -28,6 +28,7 @@ module Glimmer
28
28
  # Represents an animation declaratively
29
29
  class Animation
30
30
  include Properties
31
+ include Glimmer::DataBinding::ObservableModel
31
32
 
32
33
  class << self
33
34
  def schedule_frame_animation(animation, &frame_animation_block)
@@ -77,18 +78,19 @@ module Glimmer
77
78
  end
78
79
  end
79
80
 
80
- attr_reader :parent, :options, :frame_index, :cycle
81
+ attr_reader :parent, :options
82
+ attr_accessor :frame_index, :cycle, :frame_block, :every, :cycle_count, :frame_count, :started, :duration_limit, :duration, :finished, :cycle_count_index
81
83
  alias current_frame_index frame_index
82
- attr_accessor :frame_block, :every, :cycle_count, :frame_count, :started, :duration_limit
83
84
  alias started? started
85
+ alias finished? finished
84
86
  # TODO consider supporting an async: false option
85
87
 
86
88
  def initialize(parent)
87
89
  @parent = parent
88
90
  @parent.requires_shape_disposal = true
89
- @started = true
90
- @frame_index = 0
91
- @cycle_count_index = 0
91
+ self.started = true
92
+ self.frame_index = 0
93
+ self.cycle_count_index = 0
92
94
  @start_number = 0 # denotes the number of starts (increments on every start)
93
95
  self.class.swt_display # ensures initializing variable to set from GUI thread
94
96
  end
@@ -111,9 +113,10 @@ module Glimmer
111
113
  def start
112
114
  return if @start_number > 0 && started?
113
115
  @start_number += 1
114
- @started = true
115
116
  @start_time = Time.now
116
117
  @original_start_time = @start_time if @duration.nil?
118
+ self.finished = false if finished?
119
+ self.started = true
117
120
  # TODO track when finished in a variable for finite animations (whether by frame count, cycle count, or duration limit)
118
121
  Thread.new do
119
122
  start_number = @start_number
@@ -132,16 +135,16 @@ module Glimmer
132
135
 
133
136
  def stop
134
137
  return if stopped?
135
- @started = false
136
- @duration = (Time.now - @start_time) + @duration.to_f if duration_limited? && !@start_time.nil?
138
+ self.started = false
139
+ self.duration = (Time.now - @start_time) + @duration.to_f if duration_limited? && !@start_time.nil?
137
140
  end
138
141
 
139
142
  # Restarts an animation (whether indefinite or not and whether stopped or not)
140
143
  def restart
141
144
  @original_start_time = @start_time = nil
142
- @duration = nil
143
- @frame_index = 0
144
- @cycle_count_index = 0
145
+ self.duration = nil
146
+ self.frame_index = 0
147
+ self.cycle_count_index = 0
145
148
  stop
146
149
  start
147
150
  end
@@ -183,6 +186,21 @@ module Glimmer
183
186
  end
184
187
  end
185
188
 
189
+ def cycle_count_index=(value)
190
+ @cycle_count_index = value
191
+ self.finished = true if cycle_limited? && @cycle_count_index == @cycle_count
192
+ end
193
+
194
+ def frame_index=(value)
195
+ @frame_index = value
196
+ self.finished = true if frame_count_limited? && @frame_index == @frame_count
197
+ end
198
+
199
+ def duration=(value)
200
+ @duration = value
201
+ self.finished = true if surpassed_duration_limit?
202
+ end
203
+
186
204
  def cycle_enabled?
187
205
  @cycle.is_a?(Array)
188
206
  end
@@ -196,7 +214,7 @@ module Glimmer
196
214
  end
197
215
 
198
216
  def frame_count_limited?
199
- @frame_count.is_a?(Integer)
217
+ @frame_count.is_a?(Integer) && @frame_count > 0
200
218
  end
201
219
 
202
220
  def surpassed_duration_limit?
@@ -211,11 +229,13 @@ module Glimmer
211
229
 
212
230
  # Returns true on success of painting a frame and false otherwise
213
231
  def draw_frame(start_number)
214
- return false if stopped? ||
215
- start_number != @start_number ||
216
- (frame_count_limited? && @frame_index == @frame_count) ||
217
- (cycle_limited? && @cycle_count_index == @cycle_count) ||
218
- surpassed_duration_limit?
232
+ if stopped? or
233
+ (start_number != @start_number) or
234
+ (frame_count_limited? && @frame_index == @frame_count) or
235
+ (cycle_limited? && @cycle_count_index == @cycle_count) or
236
+ surpassed_duration_limit?
237
+ return false
238
+ end
219
239
  block_args = [@frame_index]
220
240
  block_args << @cycle[@frame_index % @cycle.length] if cycle_enabled?
221
241
  current_frame_index = @frame_index
@@ -231,16 +251,16 @@ module Glimmer
231
251
  @shapes = @parent.shapes - parent_shapes_before
232
252
  end
233
253
  else
254
+ self.finished = true if surpassed_duration_limit?
234
255
  if stopped? && @frame_index > current_frame_index
235
- @started = false
236
- @frame_index = current_frame_index
237
- @cycle_count_index = current_cycle_count_index
256
+ self.frame_index = current_frame_index
257
+ self.cycle_count_index = current_cycle_count_index
238
258
  end
239
259
  end
240
260
  end
241
- @frame_index += 1
242
- @cycle_count_index += 1 if cycle_limited? && (@frame_index % @cycle&.length&.to_i) == 0
243
- sleep(every) if every.is_a?(Numeric)
261
+ self.frame_index += 1
262
+ self.cycle_count_index += 1 if cycle_limited? && (@frame_index % @cycle&.length&.to_i) == 0
263
+ sleep(every) if every.is_a?(Numeric) # TODO consider using timer_exec as a more reliable alternative
244
264
  true
245
265
  rescue => e
246
266
  Glimmer::Config.logger.error {e}
@@ -207,6 +207,8 @@ class MetaSampleApplication
207
207
  image File.expand_path('../../icons/scaffold_app.png', __dir__)
208
208
 
209
209
  sash_form {
210
+ weights 4, 14
211
+
210
212
  composite {
211
213
  grid_layout(1, false) {
212
214
  margin_width 0
@@ -282,8 +284,6 @@ class MetaSampleApplication
282
284
  left_margin 7
283
285
  right_margin 7
284
286
  }
285
-
286
- weights 4, 11
287
287
  }
288
288
  }
289
289
  }
@@ -20,90 +20,89 @@
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
22
  require 'glimmer-dsl-swt'
23
+ require 'bigdecimal'
23
24
 
24
- include Glimmer
25
-
26
- shell {
27
- text 'Hello, Canvas Animation!'
28
- minimum_size 1200, 420
29
-
30
- canvas {
31
- background :white
32
-
33
- animation {
34
- every 0.01 # in seconds (one hundredth)
35
-
36
- frame { |index| # frame block loops indefinitely (unless frame_count is set to an integer)
37
- oval(0, 0, 400, 400) { # x, y, width, height
38
- foreground :black # sets oval background color
39
- }
40
- arc(0, 0, 400, 400, -1.4*index%360, 10) { # x, y, width, height, start angle, arc angle
41
- background rgb(50, 200, 50) # sets arc background color
42
- }
43
- }
44
- }
25
+ class HelloCanvasAnimation
26
+ include Glimmer::UI::CustomShell
27
+
28
+ # data-bindable attributes (names must vary from attribute names on animation)
29
+ attr_accessor :animation_every, :animation_frame_count, :animation_started, :animation_finished
30
+
31
+ before_body {
32
+ @animation_every = 0.050
33
+ @animation_frame_count = 100
34
+ @animation_started = true
35
+ @animation_finished = false
45
36
  }
46
-
47
- canvas {
48
- background :white
49
-
50
- colors = [:yellow, :red]
51
-
52
- animation {
53
- every 0.25 # in seconds (one quarter)
54
- cycle colors # cycles array of colors into the second variable of the frame block below
55
-
56
- frame { |index, color| # frame block loops indefinitely (unless frame_count or cycle_count is set to an integer)
57
- outside_color = colors[index % 2]
58
- inside_color = colors[(index + 1) % 2]
59
-
60
- background outside_color # sets canvas background color
61
-
62
- rectangle(0, 0, 200, 200) {
63
- background inside_color # sets rectangle background color
64
- }
65
- rectangle(200, 200, 200, 200) {
66
- background inside_color # sets rectangle background color
67
- }
37
+
38
+ body {
39
+ shell {
40
+ grid_layout(2, true)
41
+ text 'Hello, Canvas Animation!'
42
+
43
+ button {
44
+ layout_data(:fill, :center, true, false)
45
+ text <= [self, :animation_started, on_read: ->(value) { value ? 'Stop' : 'Resume' }]
46
+ enabled <= [self, :animation_finished, on_read: :!]
47
+
48
+ on_widget_selected do
49
+ if @animation.started?
50
+ @animation.stop
51
+ else
52
+ @animation.start
53
+ end
54
+ end
68
55
  }
69
- }
70
- }
71
-
72
- canvas {
73
- background :white
74
-
75
- colors = [:yellow, :red]
76
-
77
- animation {
78
- every 0.25 # in seconds (one quarter)
79
- cycle colors # cycles array of colors into the second variable of the frame block below
80
-
81
- frame { |index, color| # frame block loops indefinitely (unless frame_count or cycle_count is set to an integer)
82
- outside_color = colors[index % 2]
83
- inside_color = colors[(index + 1) % 2]
84
-
85
- background outside_color # sets canvas background color
86
-
87
- rectangle(0, 0, 200, 200) {
88
- background inside_color # sets rectangle background color
89
- }
90
- rectangle(200, 200, 200, 200) {
91
- background inside_color # sets rectangle background color
92
- }
56
+ button {
57
+ layout_data(:fill, :center, true, false)
58
+ text 'Restart'
59
+
60
+ on_widget_selected do
61
+ @animation.restart
62
+ end
93
63
  }
94
- }
95
-
96
- animation {
97
- every 0.01 # in seconds (one hundredth)
98
-
99
- frame { |index| # frame block loops indefinitely (unless frame_count is set to an integer)
100
- oval(0, 0, 400, 400) { # x, y, width, height
101
- foreground :black # sets oval background color
64
+ label {
65
+ text 'every (milliseconds)'
66
+ }
67
+ label {
68
+ text 'frame count (0 is unlimited)'
69
+ }
70
+ spinner {
71
+ layout_data(:fill, :center, true, false)
72
+ digits 3
73
+ minimum 1
74
+ maximum 100
75
+ selection <=> [self, :animation_every, on_read: ->(v) {(BigDecimal(v.to_s)*1000).to_f}, on_write: ->(v) {(BigDecimal(v.to_s)/1000).to_f}]
76
+ }
77
+ spinner {
78
+ layout_data(:fill, :center, true, false)
79
+ minimum 0
80
+ maximum 100
81
+ selection <=> [self, :animation_frame_count]
82
+ }
83
+
84
+ canvas {
85
+ layout_data(:fill, :fill, true, true) {
86
+ horizontal_span 2
87
+ width_hint 320
88
+ height_hint 320
102
89
  }
103
- arc(0, 0, 400, 400, -1.4*index%360, 10) { # x, y, width, height, start angle, arc angle
104
- background rgb(50, 200, 50) # sets arc background color
90
+ @animation = animation {
91
+ every <= [self, :animation_every]
92
+ frame_count <= [self, :animation_frame_count]
93
+ started <=> [self, :animation_started]
94
+ finished <=> [self, :animation_finished]
95
+
96
+ frame { |index|
97
+ background rgb(index%100, index%100 + 100, index%55 + 200)
98
+ oval(index*3%300, index*3%300, 20, 20) {
99
+ background :yellow
100
+ }
101
+ }
105
102
  }
106
103
  }
107
104
  }
108
105
  }
109
- }.open
106
+ end
107
+
108
+ HelloCanvasAnimation.launch
@@ -0,0 +1,109 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer-dsl-swt'
23
+
24
+ include Glimmer
25
+
26
+ shell {
27
+ text 'Hello, Canvas Animation Multi!'
28
+ minimum_size 1200, 420
29
+
30
+ canvas {
31
+ background :white
32
+
33
+ animation {
34
+ every 0.01 # in seconds (one hundredth)
35
+
36
+ frame { |index| # frame block loops indefinitely (unless frame_count is set to an integer)
37
+ oval(0, 0, 400, 400) { # x, y, width, height
38
+ foreground :black # sets oval background color
39
+ }
40
+ arc(0, 0, 400, 400, -1.4*index%360, 10) { # x, y, width, height, start angle, arc angle
41
+ background rgb(50, 200, 50) # sets arc background color
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ canvas {
48
+ background :white
49
+
50
+ colors = [:yellow, :red]
51
+
52
+ animation {
53
+ every 0.25 # in seconds (one quarter)
54
+ cycle colors # cycles array of colors into the second variable of the frame block below
55
+
56
+ frame { |index, color| # frame block loops indefinitely (unless frame_count or cycle_count is set to an integer)
57
+ outside_color = colors[index % 2]
58
+ inside_color = colors[(index + 1) % 2]
59
+
60
+ background outside_color # sets canvas background color
61
+
62
+ rectangle(0, 0, 200, 200) {
63
+ background inside_color # sets rectangle background color
64
+ }
65
+ rectangle(200, 200, 200, 200) {
66
+ background inside_color # sets rectangle background color
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ canvas {
73
+ background :white
74
+
75
+ colors = [:yellow, :red]
76
+
77
+ animation {
78
+ every 0.25 # in seconds (one quarter)
79
+ cycle colors # cycles array of colors into the second variable of the frame block below
80
+
81
+ frame { |index, color| # frame block loops indefinitely (unless frame_count or cycle_count is set to an integer)
82
+ outside_color = colors[index % 2]
83
+ inside_color = colors[(index + 1) % 2]
84
+
85
+ background outside_color # sets canvas background color
86
+
87
+ rectangle(0, 0, 200, 200) {
88
+ background inside_color # sets rectangle background color
89
+ }
90
+ rectangle(200, 200, 200, 200) {
91
+ background inside_color # sets rectangle background color
92
+ }
93
+ }
94
+ }
95
+
96
+ animation {
97
+ every 0.01 # in seconds (one hundredth)
98
+
99
+ frame { |index| # frame block loops indefinitely (unless frame_count is set to an integer)
100
+ oval(0, 0, 400, 400) { # x, y, width, height
101
+ foreground :black # sets oval background color
102
+ }
103
+ arc(0, 0, 400, 400, -1.4*index%360, 10) { # x, y, width, height, start angle, arc angle
104
+ background rgb(50, 200, 50) # sets arc background color
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }.open
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.20.6.0
4
+ version: 4.20.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-17 00:00:00.000000000 Z
11
+ date: 2021-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -574,7 +574,7 @@ files:
574
574
  - samples/hello/hello_c_tab.rb
575
575
  - samples/hello/hello_canvas.rb
576
576
  - samples/hello/hello_canvas_animation.rb
577
- - samples/hello/hello_canvas_animation_data_binding.rb
577
+ - samples/hello/hello_canvas_animation_multi.rb
578
578
  - samples/hello/hello_canvas_data_binding.rb
579
579
  - samples/hello/hello_canvas_path.rb
580
580
  - samples/hello/hello_canvas_transform.rb
@@ -1,66 +0,0 @@
1
- # Copyright (c) 2007-2021 Andy Maleh
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- require 'glimmer-dsl-swt'
23
- require 'bigdecimal'
24
-
25
- class HelloAnimationDataBinding
26
- include Glimmer::UI::CustomShell
27
-
28
- attr_accessor :delay_time
29
-
30
- before_body {
31
- @delay_time = 0.050
32
- }
33
-
34
- body {
35
- shell {
36
- text 'Hello, Canvas Animation Data Binding!'
37
- minimum_size 320, 320
38
-
39
- canvas {
40
- grid_layout
41
-
42
- spinner {
43
- layout_data(:center, :center, true, true) {
44
- minimum_width 75
45
- }
46
- digits 3
47
- minimum 1
48
- maximum 100
49
- selection <=> [self, :delay_time, on_read: ->(v) {(BigDecimal(v.to_s)*1000).to_f}, on_write: ->(v) {(BigDecimal(v.to_s)/1000).to_f}]
50
- }
51
- animation {
52
- every <= [self, :delay_time]
53
-
54
- frame { |index|
55
- background rgb(index%100, index%100 + 100, index%55 + 200)
56
- oval(index*3%300, index*3%300, 20, 20) {
57
- background :yellow
58
- }
59
- }
60
- }
61
- }
62
- }
63
- }
64
- end
65
-
66
- HelloAnimationDataBinding.launch