glimmer-dsl-libui 0.5.10 → 0.5.11

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: a21485d1722dad246e40058c46dc14b63103e93b1243db1c0ae49bc3b96f96ab
4
- data.tar.gz: 390bac7628f29d016bfac073d926011d5fd91d10e7c23a95cae8b59c0bb4a55f
3
+ metadata.gz: edec94cbcdfb5f8766a7b04c6c19719a8525d971349db5c3f2989b762cee2c56
4
+ data.tar.gz: 60706b17b64dd6660a14dc46e31ec16039daa3074e4f3e3561061d20898271ff
5
5
  SHA512:
6
- metadata.gz: 43aa1f65c47353b9ce340ff18264edaf6d9e6c09ee700919e3661b56d2bc8db00f1b31dd365b0a62ae7e39323dc07ba247bb0d06da24f51b01e477ceefa99a34
7
- data.tar.gz: c58efb32bc59359ec84cc804eec113004191fa0031676f0af7224c91b8271fb4851939ea761ddbecbc9ca912065bd4616869c76c05c95306991e5e0c68c73bf3
6
+ metadata.gz: e08e7c05b971f6ff16213dbdf14f8809fe45aa8f8d8b2ba563468eaf2eb14867a6cce4552fe4ae897e2a475b19b59f8179eb18864f15981db3c55bbe2dddd724
7
+ data.tar.gz: a96f5e238962f5998385046af93b2b5f101612e3626be7261de9373f7e106dd03fab044afe9bb2b5a7130f2b6e90ce900551a9ad209cddeb1fd2df59065edfca
data/CHANGELOG.md CHANGED
@@ -1,8 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.5.11
4
+
5
+ - Upgrade to perfect-shape 1.0.4
6
+ - Update examples/shape_coloring.rb with basic drag and drop support
7
+ - Support `#move_by(x_delta, y_delta)` (alias `translate`) method on all shapes and `path` (e.g. useful in drag and drop)
8
+ - Support `#move(x, y)` method on all shapes and `path` to move to x,y coordinate directly
9
+ - Support `#min_x` minimum x coordinate of shape/`path` (of top-left corner)
10
+ - Support `#min_y` minimum y coordinate of shape/`path` (of top-left corner)
11
+ - Support `#max_x` maximum x coordinate of shape/`path` (of bottom-right corner)
12
+ - Support `#max_y` maximum y coordinate of shape/`path` (of bottom-right corner)
13
+ - Support `#center_point` (`Array` of x,y) center point of shape/`path`
14
+ - Support `#center_x` center x coordinate of shape/`path`
15
+ - Support `#center_y` center y coordinate of shape/`path`
16
+
3
17
  ## 0.5.10
4
18
 
5
- - Support nesting area mouse and keyboard listeners underneath shapes directly given the newly added support for the `include?(x, y)` method, which can be used to detect if a mouse or keyboard event fired for a specific shape
19
+ - Support nesting area mouse listeners underneath shapes directly given the newly added support for the `include?(x, y)` method, which can be used to detect if a mouse event fired for a specific shape
6
20
  - examples/shape_coloring.rb
7
21
 
8
22
  ## 0.5.9
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.5.10
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.5.11
2
2
  ## Prerequisite-Free Ruby Desktop Development GUI Library
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
4
4
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@@ -579,7 +579,7 @@ gem install glimmer-dsl-libui
579
579
  Or install via Bundler `Gemfile`:
580
580
 
581
581
  ```ruby
582
- gem 'glimmer-dsl-libui', '~> 0.5.10'
582
+ gem 'glimmer-dsl-libui', '~> 0.5.11'
583
583
  ```
584
584
 
585
585
  Test that installation worked by running the [Meta-Example](#examples):
@@ -1088,13 +1088,22 @@ Mac | Windows | Linux
1088
1088
  ----|---------|------
1089
1089
  ![glimmer-dsl-libui-mac-area-gallery.png](images/glimmer-dsl-libui-mac-area-gallery.png) | ![glimmer-dsl-libui-windows-area-gallery.png](images/glimmer-dsl-libui-windows-area-gallery.png) | ![glimmer-dsl-libui-linux-area-gallery.png](images/glimmer-dsl-libui-linux-area-gallery.png)
1090
1090
 
1091
- ##### Shape Methods
1091
+ ##### Area Path Shape Methods
1092
1092
 
1093
1093
  - `::parameters`: returns parameters of a shape class
1094
1094
  - `#bounding_box`: returns `Array` containing `[min_x, min_y, width, height]`
1095
1095
  - `#contain?(*point, outline: false, distance_tolerance: 0)`: Returns if point (`[x, y]` `Array` or args) is inside the shape when `outline` is `false` or on the outline when `outline` is `true`. `distance_tolerance` is used when `outline` is `true` as a fuzz factor for declaring a point on the outline of the shape (e.g. helps users select a shape from its outline more easily).
1096
1096
  - `#include?(*point)`: Returns if point (`[x, y]` `Array` or args) is inside the shape when filled (having `fill` value) or on the outline when stroked (not having `fill` value yet `stroke` value only)
1097
1097
  - `#perfect_shape`: returns [PerfectShape](https://github.com/AndyObtiva/perfect-shape) object matching the [libui](https://github.com/andlabs/libui) shape.
1098
+ - `#move_by(x_delta, y_delta)` (alias: `translate`): moves (translates) shape by x,y delta
1099
+ - `#move(x, y)`: moves (translates) shape to x,y coordinates (in the top-left x,y corner of the shape)
1100
+ - `#min_x`: minimum x coordinate of shape (of top-left corner)
1101
+ - `#min_y`: minimum y coordinate of shape (of top-left corner)
1102
+ - `#max_x`: maximum x coordinate of shape (of bottom-right corner)
1103
+ - `#max_y`: maximum y coordinate of shape (of bottom-right corner)
1104
+ - `#center_point` (`Array` of x,y): center point of shape
1105
+ - `#center_x`: center x coordinate of shape
1106
+ - `#center_y`: center y coordinate of shape
1098
1107
 
1099
1108
  #### Area Text
1100
1109
 
@@ -11023,7 +11032,9 @@ Timer.new
11023
11032
 
11024
11033
  #### Shape Coloring
11025
11034
 
11026
- This example demonstrates being able to nest a listener within shapes directly, and [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) will automatically detect when the mouse lands inside a shape to notify listener.
11035
+ This example demonstrates being able to nest listeners within shapes directly, and [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) will automatically detect when the mouse lands inside the shapes to notify listeners.
11036
+
11037
+ This example also demonstrates very basic drag and drop support, implemented manually with shape listeners.
11027
11038
 
11028
11039
  [examples/shape_coloring.rb](examples/shape_coloring.rb)
11029
11040
 
@@ -11039,7 +11050,12 @@ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/
11039
11050
  ruby -r glimmer-dsl-libui -e "require 'examples/shape_coloring'"
11040
11051
  ```
11041
11052
 
11053
+ Shape Coloring Example
11054
+
11042
11055
  ![glimmer-dsl-libui-mac-shape-coloring.png](images/glimmer-dsl-libui-mac-shape-coloring.png)
11056
+
11057
+ ![glimmer-dsl-libui-mac-shape-coloring-drag-and-drop.png](images/glimmer-dsl-libui-mac-shape-coloring-drag-and-drop.png)
11058
+
11043
11059
  ![glimmer-dsl-libui-mac-shape-coloring-color-dialog.png](images/glimmer-dsl-libui-mac-shape-coloring-color-dialog.png)
11044
11060
 
11045
11061
  New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
@@ -11057,11 +11073,11 @@ class ShapeColoring
11057
11073
  }
11058
11074
 
11059
11075
  body {
11060
- window('Shape Coloring', 200, 200) {
11076
+ window('Shape Coloring', 200, 220) {
11061
11077
  margined false
11062
11078
 
11063
11079
  grid {
11064
- label("Click a shape to select and\nchange color via color button") {
11080
+ label("Drag & drop shapes to move or\nclick a shape to select and\nchange color via color button") {
11065
11081
  left 0
11066
11082
  top 0
11067
11083
  hexpand true
@@ -11090,19 +11106,19 @@ class ShapeColoring
11090
11106
  fill :white
11091
11107
  }
11092
11108
 
11093
- @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
11109
+ @shapes << colorable(:rectangle, 20, 20, 40, 20) {
11094
11110
  fill :lime
11095
11111
  }
11096
11112
 
11097
- @shapes << colorable(:square, 80, 20, 20) { |shape|
11113
+ @shapes << colorable(:square, 80, 20, 20) {
11098
11114
  fill :blue
11099
11115
  }
11100
11116
 
11101
- @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
11117
+ @shapes << colorable(:circle, 75, 70, 20) {
11102
11118
  fill :green
11103
11119
  }
11104
11120
 
11105
- @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
11121
+ @shapes << colorable(:arc, 120, 70, 40, 0, 145) {
11106
11122
  fill :orange
11107
11123
  }
11108
11124
 
@@ -11115,6 +11131,14 @@ class ShapeColoring
11115
11131
  40, 120, 20, 120, 30, 91) {
11116
11132
  fill :pink
11117
11133
  }
11134
+
11135
+ on_mouse_dragged do |area_mouse_event|
11136
+ mouse_dragged(area_mouse_event)
11137
+ end
11138
+
11139
+ on_mouse_dropped do |area_mouse_event|
11140
+ mouse_dropped(area_mouse_event)
11141
+ end
11118
11142
  }
11119
11143
  }
11120
11144
  }
@@ -11123,18 +11147,54 @@ class ShapeColoring
11123
11147
  def colorable(shape_symbol, *args, &content)
11124
11148
  send(shape_symbol, *args) do |shape|
11125
11149
  on_mouse_up do |area_mouse_event|
11126
- old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
11127
- @shapes.each {|sh| sh.stroke = nil}
11128
- @selected_shape = nil
11129
- unless old_stroke == COLOR_SELECTION
11130
- shape.stroke = COLOR_SELECTION.merge(thickness: 2)
11131
- @selected_shape = shape
11150
+ unless @dragged_shape
11151
+ old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
11152
+ @shapes.each {|sh| sh.stroke = nil}
11153
+ @selected_shape = nil
11154
+ unless old_stroke == COLOR_SELECTION
11155
+ shape.stroke = COLOR_SELECTION.merge(thickness: 2)
11156
+ @selected_shape = shape
11157
+ end
11132
11158
  end
11133
11159
  end
11134
11160
 
11161
+ on_mouse_drag_started do |area_mouse_event|
11162
+ mouse_drag_started(shape, area_mouse_event)
11163
+ end
11164
+
11165
+ on_mouse_dragged do |area_mouse_event|
11166
+ mouse_dragged(area_mouse_event)
11167
+ end
11168
+
11169
+ on_mouse_dropped do |area_mouse_event|
11170
+ mouse_dropped(area_mouse_event)
11171
+ end
11172
+
11135
11173
  content.call(shape)
11136
11174
  end
11137
11175
  end
11176
+
11177
+ def mouse_drag_started(dragged_shape, area_mouse_event)
11178
+ @dragged_shape = dragged_shape
11179
+ @dragged_shape_x = area_mouse_event[:x]
11180
+ @dragged_shape_y = area_mouse_event[:y]
11181
+ end
11182
+
11183
+ def mouse_dragged(area_mouse_event)
11184
+ if @dragged_shape && @dragged_shape_x && @dragged_shape_y
11185
+ x_delta = area_mouse_event[:x] - @dragged_shape_x
11186
+ y_delta = area_mouse_event[:y] - @dragged_shape_y
11187
+ @dragged_shape.move_by(x_delta, y_delta)
11188
+ @dragged_shape_x = area_mouse_event[:x]
11189
+ @dragged_shape_y = area_mouse_event[:y]
11190
+ end
11191
+ end
11192
+
11193
+ def mouse_dropped(area_mouse_event)
11194
+ @dragged_shape = nil
11195
+ @dragged_shape_x = nil
11196
+ @dragged_shape_y = nil
11197
+ end
11138
11198
  end
11139
11199
 
11140
11200
  ShapeColoring.launch
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.10
1
+ 0.5.11
@@ -10,11 +10,11 @@ class ShapeColoring
10
10
  }
11
11
 
12
12
  body {
13
- window('Shape Coloring', 200, 200) {
13
+ window('Shape Coloring', 200, 220) {
14
14
  margined false
15
15
 
16
16
  grid {
17
- label("Click a shape to select and\nchange color via color button") {
17
+ label("Drag & drop shapes to move or\nclick a shape to select and\nchange color via color button") {
18
18
  left 0
19
19
  top 0
20
20
  hexpand true
@@ -43,19 +43,19 @@ class ShapeColoring
43
43
  fill :white
44
44
  }
45
45
 
46
- @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
46
+ @shapes << colorable(:rectangle, 20, 20, 40, 20) {
47
47
  fill :lime
48
48
  }
49
49
 
50
- @shapes << colorable(:square, 80, 20, 20) { |shape|
50
+ @shapes << colorable(:square, 80, 20, 20) {
51
51
  fill :blue
52
52
  }
53
53
 
54
- @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
54
+ @shapes << colorable(:circle, 75, 70, 20) {
55
55
  fill :green
56
56
  }
57
57
 
58
- @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
58
+ @shapes << colorable(:arc, 120, 70, 40, 0, 145) {
59
59
  fill :orange
60
60
  }
61
61
 
@@ -68,6 +68,14 @@ class ShapeColoring
68
68
  40, 120, 20, 120, 30, 91) {
69
69
  fill :pink
70
70
  }
71
+
72
+ on_mouse_dragged do |area_mouse_event|
73
+ mouse_dragged(area_mouse_event)
74
+ end
75
+
76
+ on_mouse_dropped do |area_mouse_event|
77
+ mouse_dropped(area_mouse_event)
78
+ end
71
79
  }
72
80
  }
73
81
  }
@@ -76,18 +84,54 @@ class ShapeColoring
76
84
  def colorable(shape_symbol, *args, &content)
77
85
  send(shape_symbol, *args) do |shape|
78
86
  on_mouse_up do |area_mouse_event|
79
- old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
80
- @shapes.each {|sh| sh.stroke = nil}
81
- @selected_shape = nil
82
- unless old_stroke == COLOR_SELECTION
83
- shape.stroke = COLOR_SELECTION.merge(thickness: 2)
84
- @selected_shape = shape
87
+ unless @dragged_shape
88
+ old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
89
+ @shapes.each {|sh| sh.stroke = nil}
90
+ @selected_shape = nil
91
+ unless old_stroke == COLOR_SELECTION
92
+ shape.stroke = COLOR_SELECTION.merge(thickness: 2)
93
+ @selected_shape = shape
94
+ end
85
95
  end
86
96
  end
87
97
 
98
+ on_mouse_drag_started do |area_mouse_event|
99
+ mouse_drag_started(shape, area_mouse_event)
100
+ end
101
+
102
+ on_mouse_dragged do |area_mouse_event|
103
+ mouse_dragged(area_mouse_event)
104
+ end
105
+
106
+ on_mouse_dropped do |area_mouse_event|
107
+ mouse_dropped(area_mouse_event)
108
+ end
109
+
88
110
  content.call(shape)
89
111
  end
90
112
  end
113
+
114
+ def mouse_drag_started(dragged_shape, area_mouse_event)
115
+ @dragged_shape = dragged_shape
116
+ @dragged_shape_x = area_mouse_event[:x]
117
+ @dragged_shape_y = area_mouse_event[:y]
118
+ end
119
+
120
+ def mouse_dragged(area_mouse_event)
121
+ if @dragged_shape && @dragged_shape_x && @dragged_shape_y
122
+ x_delta = area_mouse_event[:x] - @dragged_shape_x
123
+ y_delta = area_mouse_event[:y] - @dragged_shape_y
124
+ @dragged_shape.move_by(x_delta, y_delta)
125
+ @dragged_shape_x = area_mouse_event[:x]
126
+ @dragged_shape_y = area_mouse_event[:y]
127
+ end
128
+ end
129
+
130
+ def mouse_dropped(area_mouse_event)
131
+ @dragged_shape = nil
132
+ @dragged_shape_x = nil
133
+ @dragged_shape_y = nil
134
+ end
91
135
  end
92
136
 
93
137
  ShapeColoring.launch
Binary file
@@ -162,6 +162,10 @@ module Glimmer
162
162
  @parent_proxy&.request_auto_redraw
163
163
  end
164
164
 
165
+ def move_by(x_delta, y_delta)
166
+ children.each {|child| child.move_by(x_delta, y_delta)}
167
+ end
168
+
165
169
  def perfect_shape
166
170
  perfect_shape_dependencies = [draw_fill_mode, children]
167
171
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -1,7 +1,14 @@
1
+ require 'forwardable'
2
+
1
3
  module Glimmer
2
4
  module LibUI
3
5
  # GUI View objects that can be represented by PerfectShape objects
4
6
  module PerfectShaped
7
+ extend Forwardable
8
+
9
+ def_delegators :perfect_shape,
10
+ :min_x, :min_y, :max_x, :max_y, :center_point, :center_x, :center_y
11
+
5
12
  # Returns if shape contains point on the inside when outline is false (default)
6
13
  # or if point is on the outline when outline is true
7
14
  # distance_tolerance is used when outline is true to enable a fuzz factor in
@@ -34,6 +41,18 @@ module Glimmer
34
41
  ]
35
42
  end
36
43
 
44
+ # moves by x delta and y delta. Classes must implement
45
+ def move_by(x_delta, y_delta)
46
+ # No Op
47
+ end
48
+ alias translate move_by
49
+
50
+ def move(x, y)
51
+ x_delta = x - perfect_shape.min_x
52
+ y_delta = y - perfect_shape.min_y
53
+ move_by(x_delta, y_delta)
54
+ end
55
+
37
56
  # Returns PerfectShape object matching this shape to enable
38
57
  # executing computational geometry algorithms
39
58
  #
@@ -45,6 +45,11 @@ module Glimmer
45
45
  super
46
46
  end
47
47
 
48
+ def move_by(x_delta, y_delta)
49
+ self.x_center += x_delta
50
+ self.y_center += y_delta
51
+ end
52
+
48
53
  def perfect_shape
49
54
  perfect_shape_dependencies = [x_center, y_center, radius, start_angle, sweep, is_negative]
50
55
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -50,6 +50,17 @@ module Glimmer
50
50
  x && y
51
51
  end
52
52
 
53
+ def move_by(x_delta, y_delta)
54
+ self.x += x_delta
55
+ self.y += y_delta
56
+ self.c1_x += x_delta
57
+ self.c1_y += y_delta
58
+ self.c2_x += x_delta
59
+ self.c2_y += y_delta
60
+ self.end_x += x_delta
61
+ self.end_y += y_delta
62
+ end
63
+
53
64
  def perfect_shape
54
65
  perfect_shape_dependencies = [x, y, c1_x, c1_y, c2_x, c2_y, end_x, end_y]
55
66
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -45,6 +45,11 @@ module Glimmer
45
45
  super
46
46
  end
47
47
 
48
+ def move_by(x_delta, y_delta)
49
+ self.x_center += x_delta
50
+ self.y_center += y_delta
51
+ end
52
+
48
53
  def perfect_shape
49
54
  perfect_shape_dependencies = [x_center, y_center, radius]
50
55
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -51,6 +51,12 @@ module Glimmer
51
51
  alias set_closed closed
52
52
  alias closed? closed
53
53
 
54
+ def move_by(x_delta, y_delta)
55
+ self.x += x_delta
56
+ self.y += y_delta
57
+ children.each {|child| child.move_by(x_delta, y_delta)}
58
+ end
59
+
54
60
  def perfect_shape
55
61
  perfect_shape_dependencies = [x, y, closed, parent.draw_fill_mode, children]
56
62
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -53,6 +53,13 @@ module Glimmer
53
53
  !parent.is_a?(Figure) && end_x && end_y
54
54
  end
55
55
 
56
+ def move_by(x_delta, y_delta)
57
+ self.x += x_delta
58
+ self.y += y_delta
59
+ self.end_x += x_delta
60
+ self.end_y += y_delta
61
+ end
62
+
56
63
  def perfect_shape
57
64
  perfect_shape_dependencies = [x, y, end_x, end_y]
58
65
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -40,6 +40,10 @@ module Glimmer
40
40
  super
41
41
  end
42
42
 
43
+ def move_by(x_delta, y_delta)
44
+ self.point_array = point_array.each_with_index.map {|coordinate, i| i.even? ? coordinate + x_delta : coordinate + y_delta}
45
+ end
46
+
43
47
  def perfect_shape
44
48
  perfect_shape_dependencies = PerfectShape::MultiPoint.normalize_point_array(point_array)
45
49
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -41,6 +41,10 @@ module Glimmer
41
41
  super
42
42
  end
43
43
 
44
+ def move_by(x_delta, y_delta)
45
+ self.point_array = point_array.each_with_index.map {|coordinate, i| i.even? ? coordinate + x_delta : coordinate + y_delta}
46
+ end
47
+
44
48
  def perfect_shape
45
49
  perfect_shape_dependencies = PerfectShape::MultiPoint.normalize_point_array(point_array)
46
50
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -40,6 +40,10 @@ module Glimmer
40
40
  super
41
41
  end
42
42
 
43
+ def move_by(x_delta, y_delta)
44
+ self.point_array = point_array.each_with_index.map {|coordinate, i| i.even? ? coordinate + x_delta : coordinate + y_delta}
45
+ end
46
+
43
47
  def perfect_shape
44
48
  perfect_shape_dependencies = PerfectShape::MultiPoint.normalize_point_array(point_array)
45
49
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -33,6 +33,11 @@ module Glimmer
33
33
  super
34
34
  end
35
35
 
36
+ def move_by(x_delta, y_delta)
37
+ self.x += x_delta
38
+ self.y += y_delta
39
+ end
40
+
36
41
  def perfect_shape
37
42
  perfect_shape_dependencies = [x, y, width, height]
38
43
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -35,6 +35,11 @@ module Glimmer
35
35
 
36
36
  # TODO look into refactoring/unifying code with Rectangle
37
37
 
38
+ def move_by(x_delta, y_delta)
39
+ self.x += x_delta
40
+ self.y += y_delta
41
+ end
42
+
38
43
  def perfect_shape
39
44
  perfect_shape_dependencies = [x, y, length]
40
45
  if perfect_shape_dependencies != @perfect_shape_dependencies
@@ -181,7 +181,7 @@ module Glimmer
181
181
  super
182
182
  end
183
183
  end
184
-
184
+
185
185
  private
186
186
 
187
187
  def build_control
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-libui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.10
4
+ version: 0.5.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-14 00:00:00.000000000 Z
11
+ date: 2022-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.3
33
+ version: 1.0.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.3
40
+ version: 1.0.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: super_module
43
43
  requirement: !ruby/object:Gem::Requirement