glimmer-dsl-libui 0.5.10 → 0.5.13

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: 3ec966c5f1dcd6315fe94455e2a8257df7ed6274ada0d74419e53b9abeab99bb
4
+ data.tar.gz: 5f1f410e8a239735c1188d4a7bdad00f9fed6e34ba71ba5c2ac65f01b8f49037
5
5
  SHA512:
6
- metadata.gz: 43aa1f65c47353b9ce340ff18264edaf6d9e6c09ee700919e3661b56d2bc8db00f1b31dd365b0a62ae7e39323dc07ba247bb0d06da24f51b01e477ceefa99a34
7
- data.tar.gz: c58efb32bc59359ec84cc804eec113004191fa0031676f0af7224c91b8271fb4851939ea761ddbecbc9ca912065bd4616869c76c05c95306991e5e0c68c73bf3
6
+ metadata.gz: 574718284c8933f27d088777e9ffd77a37922f3f51ec90e85026f1d86f572c84bea4d86141fc3b67bb5192769ac03e13dca791b3ce6b8d2ae88235008ba4cbcf
7
+ data.tar.gz: 87656800ed048be0ffc15520e5988b911fac60bcdb73db16fd962e5820d2d2c948a08a14c1c22aaef4543623d8f2c803c7d10e0c106bc40c13942bddaf83cfda
data/CHANGELOG.md CHANGED
@@ -1,8 +1,30 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.5.13
4
+
5
+ - Fix issue with rendering table content changes when having many rows
6
+
7
+ ## 0.5.12
8
+
9
+ - Upgrade `perfect-shape` gem to 1.0.5 to address Ruby 3.1 issue with `matrix` gem getting extracted from Ruby into a bundled gem
10
+
11
+ ## 0.5.11
12
+
13
+ - Upgrade to perfect-shape 1.0.4
14
+ - Update examples/shape_coloring.rb with basic drag and drop support
15
+ - Support `#move_by(x_delta, y_delta)` (alias `translate`) method on all shapes and `path` (e.g. useful in drag and drop)
16
+ - Support `#move(x, y)` method on all shapes and `path` to move to x,y coordinate directly
17
+ - Support `#min_x` minimum x coordinate of shape/`path` (of top-left corner)
18
+ - Support `#min_y` minimum y coordinate of shape/`path` (of top-left corner)
19
+ - Support `#max_x` maximum x coordinate of shape/`path` (of bottom-right corner)
20
+ - Support `#max_y` maximum y coordinate of shape/`path` (of bottom-right corner)
21
+ - Support `#center_point` (`Array` of x,y) center point of shape/`path`
22
+ - Support `#center_x` center x coordinate of shape/`path`
23
+ - Support `#center_y` center y coordinate of shape/`path`
24
+
3
25
  ## 0.5.10
4
26
 
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
27
+ - 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
28
  - examples/shape_coloring.rb
7
29
 
8
30
  ## 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.13
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)
@@ -433,6 +433,8 @@ DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs
433
433
  - [Manga2PDF](#manga2pdf)
434
434
  - [Befunge98 GUI](#befunge98-gui)
435
435
  - [i3off Gtk Ruby](#i3off-gtk-ruby)
436
+ - [Chess](#chess)
437
+ - [RubyCrumbler](#rubycrumbler)
436
438
  - [Process](#process)
437
439
  - [Resources](#resources)
438
440
  - [Help](#help)
@@ -579,7 +581,7 @@ gem install glimmer-dsl-libui
579
581
  Or install via Bundler `Gemfile`:
580
582
 
581
583
  ```ruby
582
- gem 'glimmer-dsl-libui', '~> 0.5.10'
584
+ gem 'glimmer-dsl-libui', '~> 0.5.13'
583
585
  ```
584
586
 
585
587
  Test that installation worked by running the [Meta-Example](#examples):
@@ -1088,13 +1090,22 @@ Mac | Windows | Linux
1088
1090
  ----|---------|------
1089
1091
  ![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
1092
 
1091
- ##### Shape Methods
1093
+ ##### Area Path Shape Methods
1092
1094
 
1093
1095
  - `::parameters`: returns parameters of a shape class
1094
1096
  - `#bounding_box`: returns `Array` containing `[min_x, min_y, width, height]`
1095
1097
  - `#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
1098
  - `#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
1099
  - `#perfect_shape`: returns [PerfectShape](https://github.com/AndyObtiva/perfect-shape) object matching the [libui](https://github.com/andlabs/libui) shape.
1100
+ - `#move_by(x_delta, y_delta)` (alias: `translate`): moves (translates) shape by x,y delta
1101
+ - `#move(x, y)`: moves (translates) shape to x,y coordinates (in the top-left x,y corner of the shape)
1102
+ - `#min_x`: minimum x coordinate of shape (of top-left corner)
1103
+ - `#min_y`: minimum y coordinate of shape (of top-left corner)
1104
+ - `#max_x`: maximum x coordinate of shape (of bottom-right corner)
1105
+ - `#max_y`: maximum y coordinate of shape (of bottom-right corner)
1106
+ - `#center_point` (`Array` of x,y): center point of shape
1107
+ - `#center_x`: center x coordinate of shape
1108
+ - `#center_y`: center y coordinate of shape
1098
1109
 
1099
1110
  #### Area Text
1100
1111
 
@@ -1604,7 +1615,8 @@ SpinnerExample.new.launch
1604
1615
  - All controls nested under a `horizontal_box`, `vertical_box`, and `form` have `stretchy` property (fill maximum space) as `true` by default (passed to `box_append`/`form_append` method)
1605
1616
  - If an event listener is repeated under a control (e.g. two `on_clicked {}` listeners under `button`), it does not overwrite the previous listener, yet it is added to an `Array` of listeners for the event. [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) provides multiple-event-listener support unlike [LibUI](https://github.com/kojix2/LibUI)
1606
1617
  - `window` instatiation args can be left off, having the following defaults when unspecified: `title` as `''`, `width` as `190`, `height` as `150`, and `has_menubar` as `true`)
1607
- - `window` has an `on_closing` listener by default that quits application upon hitting the close button (can be overridden with a manual `on_closing` implementation that returns integer `0` for success)
1618
+ - `window` has an `on_closing` listener by default that quits application upon hitting the close button (can be overridden with a manual `on_closing` implementation that returns integer `1` for closing and `0` for remaining open). When creating/showing a child window other than the main window and then closing it, the entire app closes by default unless you implement an `on_closing` listener on the secondary child window that returns `1` at the end.
1619
+
1608
1620
  - `group` has `title` property default to `''` if not specified in instantiation args, so it can be instantiated without args with `title` property specified in nested block (e.g. `group {title 'Address'; ...}`)
1609
1621
  - `button`, `checkbox`, and `label` have `text` default to `''` if not specified in instantiation args, so they can be instantiated without args with `text` property specified in nested block (e.g. `button {text 'Greet'; on_clicked {puts 'Hello'}}`)
1610
1622
  - `quit_menu_item` has an `on_clicked` listener by default that quits application upon selecting the quit menu item (can be overridden with a manual `on_clicked` implementation that returns integer `0` for success)
@@ -2192,7 +2204,6 @@ Learn more from data-binding usage in [Login](#login) (4 data-binding versions),
2192
2204
  - There is no proper way to destroy `grid` children due to [libui](https://github.com/andlabs/libui) not offering any API for deleting them from `grid` (no `grid_delete` similar to `box_delete` for `horizontal_box` and `vertical_box`).
2193
2205
  - `table` `checkbox_column` checkbox editing only works on Linux and Windows (not Mac) due to a current limitation in [libui](https://github.com/andlabs/ui/issues/357).
2194
2206
  - `table` `checkbox_text_column` checkbox editing only works on Linux (not Mac or Windows) due to a current limitation in [libui](https://github.com/andlabs/ui/issues/357).
2195
- - `checkbox` only supports obtaining the `checked` property, but not updating it due to a current limitation in [libui](https://github.com/andlabs/libui).
2196
2207
  - `text` `align` property seems not to work on the Mac ([libui](https://github.com/andlabs/libui) has an [issue](https://github.com/andlabs/libui/pull/407) about it)
2197
2208
  - `text` `string` `background` does not work on Windows due to an [issue in libui](https://github.com/andlabs/libui/issues/347).
2198
2209
  - `table` `progress_bar` column on Windows cannot be updated with a positive value if it started initially with `-1` (it ignores update to avoid crashing due to an issue in [libui](https://github.com/andlabs/libui) on Windows.
@@ -2200,7 +2211,6 @@ Learn more from data-binding usage in [Login](#login) (4 data-binding versions),
2200
2211
  - It seems that [libui](https://github.com/andlabs/libui) does not support nesting multiple `area` controls under a `grid` as only the first one shows up in that scenario. To workaround that limitation, use a `vertical_box` with nested `horizontal_box`s instead to include multiple `area`s in a GUI.
2201
2212
  - As per the code of [examples/basic_transform.rb](#basic-transform), Windows requires different ordering of transforms than Mac and Linux.
2202
2213
  - `scrolling_area#scroll_to` does not seem to work on Windows and Linux, but works fine on Mac
2203
- - When creating/showing a window other than the main window and then closing the secondary window, the entire app closes. This is a current limitation to the windowing system that should be fixed with [child window support](https://github.com/andlabs/libui/issues/137) in [libui](https://github.com/andlabs/libui)
2204
2214
 
2205
2215
  ### Original API
2206
2216
 
@@ -11023,7 +11033,9 @@ Timer.new
11023
11033
 
11024
11034
  #### Shape Coloring
11025
11035
 
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.
11036
+ 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.
11037
+
11038
+ This example also demonstrates very basic drag and drop support, implemented manually with shape listeners.
11027
11039
 
11028
11040
  [examples/shape_coloring.rb](examples/shape_coloring.rb)
11029
11041
 
@@ -11039,7 +11051,12 @@ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/
11039
11051
  ruby -r glimmer-dsl-libui -e "require 'examples/shape_coloring'"
11040
11052
  ```
11041
11053
 
11054
+ Shape Coloring Example
11055
+
11042
11056
  ![glimmer-dsl-libui-mac-shape-coloring.png](images/glimmer-dsl-libui-mac-shape-coloring.png)
11057
+
11058
+ ![glimmer-dsl-libui-mac-shape-coloring-drag-and-drop.png](images/glimmer-dsl-libui-mac-shape-coloring-drag-and-drop.png)
11059
+
11043
11060
  ![glimmer-dsl-libui-mac-shape-coloring-color-dialog.png](images/glimmer-dsl-libui-mac-shape-coloring-color-dialog.png)
11044
11061
 
11045
11062
  New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
@@ -11057,11 +11074,11 @@ class ShapeColoring
11057
11074
  }
11058
11075
 
11059
11076
  body {
11060
- window('Shape Coloring', 200, 200) {
11077
+ window('Shape Coloring', 200, 220) {
11061
11078
  margined false
11062
11079
 
11063
11080
  grid {
11064
- label("Click a shape to select and\nchange color via color button") {
11081
+ label("Drag & drop shapes to move or\nclick a shape to select and\nchange color via color button") {
11065
11082
  left 0
11066
11083
  top 0
11067
11084
  hexpand true
@@ -11090,19 +11107,19 @@ class ShapeColoring
11090
11107
  fill :white
11091
11108
  }
11092
11109
 
11093
- @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
11110
+ @shapes << colorable(:rectangle, 20, 20, 40, 20) {
11094
11111
  fill :lime
11095
11112
  }
11096
11113
 
11097
- @shapes << colorable(:square, 80, 20, 20) { |shape|
11114
+ @shapes << colorable(:square, 80, 20, 20) {
11098
11115
  fill :blue
11099
11116
  }
11100
11117
 
11101
- @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
11118
+ @shapes << colorable(:circle, 75, 70, 20) {
11102
11119
  fill :green
11103
11120
  }
11104
11121
 
11105
- @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
11122
+ @shapes << colorable(:arc, 120, 70, 40, 0, 145) {
11106
11123
  fill :orange
11107
11124
  }
11108
11125
 
@@ -11115,6 +11132,14 @@ class ShapeColoring
11115
11132
  40, 120, 20, 120, 30, 91) {
11116
11133
  fill :pink
11117
11134
  }
11135
+
11136
+ on_mouse_dragged do |area_mouse_event|
11137
+ mouse_dragged(area_mouse_event)
11138
+ end
11139
+
11140
+ on_mouse_dropped do |area_mouse_event|
11141
+ mouse_dropped(area_mouse_event)
11142
+ end
11118
11143
  }
11119
11144
  }
11120
11145
  }
@@ -11123,18 +11148,54 @@ class ShapeColoring
11123
11148
  def colorable(shape_symbol, *args, &content)
11124
11149
  send(shape_symbol, *args) do |shape|
11125
11150
  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
11151
+ unless @dragged_shape
11152
+ old_stroke = Glimmer::LibUI.interpret_color(shape.stroke).slice(:r, :g, :b)
11153
+ @shapes.each {|sh| sh.stroke = nil}
11154
+ @selected_shape = nil
11155
+ unless old_stroke == COLOR_SELECTION
11156
+ shape.stroke = COLOR_SELECTION.merge(thickness: 2)
11157
+ @selected_shape = shape
11158
+ end
11132
11159
  end
11133
11160
  end
11134
11161
 
11162
+ on_mouse_drag_started do |area_mouse_event|
11163
+ mouse_drag_started(shape, area_mouse_event)
11164
+ end
11165
+
11166
+ on_mouse_dragged do |area_mouse_event|
11167
+ mouse_dragged(area_mouse_event)
11168
+ end
11169
+
11170
+ on_mouse_dropped do |area_mouse_event|
11171
+ mouse_dropped(area_mouse_event)
11172
+ end
11173
+
11135
11174
  content.call(shape)
11136
11175
  end
11137
11176
  end
11177
+
11178
+ def mouse_drag_started(dragged_shape, area_mouse_event)
11179
+ @dragged_shape = dragged_shape
11180
+ @dragged_shape_x = area_mouse_event[:x]
11181
+ @dragged_shape_y = area_mouse_event[:y]
11182
+ end
11183
+
11184
+ def mouse_dragged(area_mouse_event)
11185
+ if @dragged_shape && @dragged_shape_x && @dragged_shape_y
11186
+ x_delta = area_mouse_event[:x] - @dragged_shape_x
11187
+ y_delta = area_mouse_event[:y] - @dragged_shape_y
11188
+ @dragged_shape.move_by(x_delta, y_delta)
11189
+ @dragged_shape_x = area_mouse_event[:x]
11190
+ @dragged_shape_y = area_mouse_event[:y]
11191
+ end
11192
+ end
11193
+
11194
+ def mouse_dropped(area_mouse_event)
11195
+ @dragged_shape = nil
11196
+ @dragged_shape_x = nil
11197
+ @dragged_shape_y = nil
11198
+ end
11138
11199
  end
11139
11200
 
11140
11201
  ShapeColoring.launch
@@ -11168,6 +11229,16 @@ https://github.com/iraamaro/i3off-gtk-ruby
11168
11229
 
11169
11230
  https://github.com/mikeweber/chess
11170
11231
 
11232
+ ### RubyCrumbler
11233
+
11234
+ NLP (Natural Language Processing) App
11235
+
11236
+ https://github.com/joh-ga/RubyCrumbler
11237
+
11238
+ MacOS | Windows | Linux
11239
+ | :---: | :---: | :---:
11240
+ ![mac_31](https://user-images.githubusercontent.com/72874215/159339948-b7ae1bf2-60c1-4dae-ac1a-4e13a6048ef0.gif)|![windows_4](https://user-images.githubusercontent.com/72874215/160242473-c38439be-0955-4e89-9f3f-b3d0567531fd.gif)|![rubycrumbler_linux](https://user-images.githubusercontent.com/72874215/160242460-99af1c8c-b43f-458d-bd69-1274a0bd9814.gif)
11241
+
11171
11242
  ## Process
11172
11243
 
11173
11244
  [Glimmer Process](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md)
@@ -11201,6 +11272,8 @@ These features have been planned or suggested. You might see them in a future ve
11201
11272
 
11202
11273
  ## Contributing
11203
11274
 
11275
+ If you would like to contribute to the project, please adhere to the [Open-Source Etiquette](https://github.com/AndyObtiva/open-source-etiquette) to ensure the best results.
11276
+
11204
11277
  - Check out the latest master to make sure the feature hasn't been
11205
11278
  implemented or the bug hasn't been fixed yet.
11206
11279
  - Check out the issue tracker to make sure someone already hasn't
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.10
1
+ 0.5.13
@@ -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
@@ -303,16 +303,30 @@ module Glimmer
303
303
  def register_cell_rows_observer
304
304
  @cell_rows_observer = Glimmer::DataBinding::Observer.proc do |new_cell_rows|
305
305
  if @cell_rows.size < @last_cell_rows.size && @last_cell_rows.include_all?(*@cell_rows)
306
- @last_cell_rows.array_diff_indexes(@cell_rows).reverse.each do |row|
306
+ @last_cell_rows.each_with_index do |old_row_data, row|
307
+ if old_row_data != @cell_rows[row]
308
+ ::LibUI.table_model_row_changed(model, row) if model && row
309
+ notify_custom_listeners('on_changed', row, :changed, @cell_rows[row])
310
+ end
311
+ end
312
+ (@last_cell_rows.size - @cell_rows.size).times do |n|
313
+ row = @last_cell_rows.size - n - 1
307
314
  ::LibUI.table_model_row_deleted(model, row) if model && row
308
315
  notify_custom_listeners('on_changed', row, :deleted, @last_cell_rows[row])
309
316
  end
310
317
  elsif @cell_rows.size > @last_cell_rows.size && @cell_rows.include_all?(*@last_cell_rows)
311
- @cell_rows.array_diff_indexes(@last_cell_rows).each do |row|
318
+ (@cell_rows.size - @last_cell_rows.size).times do |n|
319
+ row = @last_cell_rows.size + n
312
320
  ::LibUI.table_model_row_inserted(model, row) if model && row
313
321
  notify_custom_listeners('on_changed', row, :inserted, @cell_rows[row])
314
322
  end
315
- else
323
+ @cell_rows.each_with_index do |new_row_data, row|
324
+ if new_row_data != @last_cell_rows[row]
325
+ ::LibUI.table_model_row_changed(model, row) if model && row
326
+ notify_custom_listeners('on_changed', row, :changed, @cell_rows[row])
327
+ end
328
+ end
329
+ elsif @cell_rows != @last_cell_rows
316
330
  @cell_rows.each_with_index do |new_row_data, row|
317
331
  if new_row_data != @last_cell_rows[row]
318
332
  ::LibUI.table_model_row_changed(model, row) if model && row
@@ -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.13
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-06-17 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.5
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.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: super_module
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -511,7 +511,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
511
511
  - !ruby/object:Gem::Version
512
512
  version: '0'
513
513
  requirements: []
514
- rubygems_version: 3.3.1
514
+ rubygems_version: 3.3.3
515
515
  signing_key:
516
516
  specification_version: 4
517
517
  summary: Glimmer DSL for LibUI