glimmer-dsl-libui 0.5.9 → 0.5.10

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: 6a198df8af13246ffee6aa56434bfa89740e9211e19da28fb0dddb1705000eec
4
- data.tar.gz: cb4c0b685980983fb17cc3f501165d8fa788a56ce4da9ced03630a78329045af
3
+ metadata.gz: a21485d1722dad246e40058c46dc14b63103e93b1243db1c0ae49bc3b96f96ab
4
+ data.tar.gz: 390bac7628f29d016bfac073d926011d5fd91d10e7c23a95cae8b59c0bb4a55f
5
5
  SHA512:
6
- metadata.gz: 3809a094cb6cd607d94c0d37c10f67213c3bab4cc3d74d7d8d3c4d49514da75e3ae2b99328d09291f4905b7d3c85aea14f6935f22d3cac249edf533eff5e575d
7
- data.tar.gz: 3efefe3c53b4520b077165df099f9427f112c7cc1acafed0d878fe187d65657264b6317de470e6330a12c63bde1edd4694455bc675be87f8e374ee0113235ae0
6
+ metadata.gz: 43aa1f65c47353b9ce340ff18264edaf6d9e6c09ee700919e3661b56d2bc8db00f1b31dd365b0a62ae7e39323dc07ba247bb0d06da24f51b01e477ceefa99a34
7
+ data.tar.gz: c58efb32bc59359ec84cc804eec113004191fa0031676f0af7224c91b8271fb4851939ea761ddbecbc9ca912065bd4616869c76c05c95306991e5e0c68c73bf3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.5.10
4
+
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
6
+ - examples/shape_coloring.rb
7
+
3
8
  ## 0.5.9
4
9
 
5
10
  - Upgrade to glimmer v2.7.3
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.9
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
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)
@@ -428,6 +428,7 @@ DSL | Platforms | Native? | Vector Graphics? | Pros | Cons | Prereqs
428
428
  - [Tetris](#tetris)
429
429
  - [Tic Tac Toe](#tic-tac-toe)
430
430
  - [Timer](#timer)
431
+ - [Shape Coloring](#shape-coloring)
431
432
  - [Applications](#applications)
432
433
  - [Manga2PDF](#manga2pdf)
433
434
  - [Befunge98 GUI](#befunge98-gui)
@@ -578,7 +579,7 @@ gem install glimmer-dsl-libui
578
579
  Or install via Bundler `Gemfile`:
579
580
 
580
581
  ```ruby
581
- gem 'glimmer-dsl-libui', '~> 0.5.9'
582
+ gem 'glimmer-dsl-libui', '~> 0.5.10'
582
583
  ```
583
584
 
584
585
  Test that installation worked by running the [Meta-Example](#examples):
@@ -1392,6 +1393,10 @@ In general, it is recommended to use declarative stable paths whenever feasible
1392
1393
 
1393
1394
  #### Area Listeners
1394
1395
 
1396
+ `area` supports a number of keyboard and mouse listeners to enable observing the control for user interaction to execute some logic.
1397
+
1398
+ The same listeners can be nested directly under `area` shapes like `rectangle` and `circle`, and [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) will automatically detect when the mouse lands within those shapes to constrain triggering the listeners by the shape regions.
1399
+
1395
1400
  `area` supported listeners are:
1396
1401
  - `on_key_event {|area_key_event| ...}`: general catch-all key event (recommend using fine-grained key events below instead)
1397
1402
  - `on_key_down {|area_key_event| ...}`
@@ -11016,6 +11021,125 @@ end
11016
11021
  Timer.new
11017
11022
  ```
11018
11023
 
11024
+ #### Shape Coloring
11025
+
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.
11027
+
11028
+ [examples/shape_coloring.rb](examples/shape_coloring.rb)
11029
+
11030
+ Run with this command from the root of the project if you cloned the project:
11031
+
11032
+ ```
11033
+ ruby -r './lib/glimmer-dsl-libui' examples/shape_coloring.rb
11034
+ ```
11035
+
11036
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
11037
+
11038
+ ```
11039
+ ruby -r glimmer-dsl-libui -e "require 'examples/shape_coloring'"
11040
+ ```
11041
+
11042
+ ![glimmer-dsl-libui-mac-shape-coloring.png](images/glimmer-dsl-libui-mac-shape-coloring.png)
11043
+ ![glimmer-dsl-libui-mac-shape-coloring-color-dialog.png](images/glimmer-dsl-libui-mac-shape-coloring-color-dialog.png)
11044
+
11045
+ New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
11046
+
11047
+ ```ruby
11048
+ require 'glimmer-dsl-libui'
11049
+
11050
+ class ShapeColoring
11051
+ include Glimmer::LibUI::Application
11052
+
11053
+ COLOR_SELECTION = Glimmer::LibUI.interpret_color(:red)
11054
+
11055
+ before_body {
11056
+ @shapes = []
11057
+ }
11058
+
11059
+ body {
11060
+ window('Shape Coloring', 200, 200) {
11061
+ margined false
11062
+
11063
+ grid {
11064
+ label("Click a shape to select and\nchange color via color button") {
11065
+ left 0
11066
+ top 0
11067
+ hexpand true
11068
+ halign :center
11069
+ vexpand false
11070
+ }
11071
+
11072
+ color_button { |cb|
11073
+ left 0
11074
+ top 1
11075
+ hexpand true
11076
+ vexpand false
11077
+
11078
+ on_changed do
11079
+ @selected_shape&.fill = cb.color
11080
+ end
11081
+ }
11082
+
11083
+ area {
11084
+ left 0
11085
+ top 2
11086
+ hexpand true
11087
+ vexpand true
11088
+
11089
+ rectangle(0, 0, 600, 400) { # background shape
11090
+ fill :white
11091
+ }
11092
+
11093
+ @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
11094
+ fill :lime
11095
+ }
11096
+
11097
+ @shapes << colorable(:square, 80, 20, 20) { |shape|
11098
+ fill :blue
11099
+ }
11100
+
11101
+ @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
11102
+ fill :green
11103
+ }
11104
+
11105
+ @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
11106
+ fill :orange
11107
+ }
11108
+
11109
+ @shapes << colorable(:polygon, 120, 10, 120, 50, 150, 10, 150, 50) {
11110
+ fill :cyan
11111
+ }
11112
+
11113
+ @shapes << colorable(:polybezier, 20, 40,
11114
+ 30, 100, 50, 80, 80, 110,
11115
+ 40, 120, 20, 120, 30, 91) {
11116
+ fill :pink
11117
+ }
11118
+ }
11119
+ }
11120
+ }
11121
+ }
11122
+
11123
+ def colorable(shape_symbol, *args, &content)
11124
+ send(shape_symbol, *args) do |shape|
11125
+ 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
11132
+ end
11133
+ end
11134
+
11135
+ content.call(shape)
11136
+ end
11137
+ end
11138
+ end
11139
+
11140
+ ShapeColoring.launch
11141
+ ```
11142
+
11019
11143
  ## Applications
11020
11144
 
11021
11145
  Here are some applications built with [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.9
1
+ 0.5.10
@@ -0,0 +1,93 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ class ShapeColoring
4
+ include Glimmer::LibUI::Application
5
+
6
+ COLOR_SELECTION = Glimmer::LibUI.interpret_color(:red)
7
+
8
+ before_body {
9
+ @shapes = []
10
+ }
11
+
12
+ body {
13
+ window('Shape Coloring', 200, 200) {
14
+ margined false
15
+
16
+ grid {
17
+ label("Click a shape to select and\nchange color via color button") {
18
+ left 0
19
+ top 0
20
+ hexpand true
21
+ halign :center
22
+ vexpand false
23
+ }
24
+
25
+ color_button { |cb|
26
+ left 0
27
+ top 1
28
+ hexpand true
29
+ vexpand false
30
+
31
+ on_changed do
32
+ @selected_shape&.fill = cb.color
33
+ end
34
+ }
35
+
36
+ area {
37
+ left 0
38
+ top 2
39
+ hexpand true
40
+ vexpand true
41
+
42
+ rectangle(0, 0, 600, 400) { # background shape
43
+ fill :white
44
+ }
45
+
46
+ @shapes << colorable(:rectangle, 20, 20, 40, 20) { |shape|
47
+ fill :lime
48
+ }
49
+
50
+ @shapes << colorable(:square, 80, 20, 20) { |shape|
51
+ fill :blue
52
+ }
53
+
54
+ @shapes << colorable(:circle, 75, 70, 20, 20) { |shape|
55
+ fill :green
56
+ }
57
+
58
+ @shapes << colorable(:arc, 120, 70, 40, 0, 145) { |shape|
59
+ fill :orange
60
+ }
61
+
62
+ @shapes << colorable(:polygon, 120, 10, 120, 50, 150, 10, 150, 50) {
63
+ fill :cyan
64
+ }
65
+
66
+ @shapes << colorable(:polybezier, 20, 40,
67
+ 30, 100, 50, 80, 80, 110,
68
+ 40, 120, 20, 120, 30, 91) {
69
+ fill :pink
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ def colorable(shape_symbol, *args, &content)
77
+ send(shape_symbol, *args) do |shape|
78
+ 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
85
+ end
86
+ end
87
+
88
+ content.call(shape)
89
+ end
90
+ end
91
+ end
92
+
93
+ ShapeColoring.launch
Binary file
@@ -27,7 +27,7 @@ module Glimmer
27
27
  module Libui
28
28
  class ListenerExpression < Expression
29
29
  def can_interpret?(parent, keyword, *args, &block)
30
- parent.is_a?(Glimmer::LibUI::ControlProxy) and
30
+ (parent.is_a?(Glimmer::LibUI::ControlProxy) or parent.is_a?(Glimmer::LibUI::Shape)) and
31
31
  block_given? and
32
32
  parent.can_handle_listener?(keyword)
33
33
  end
@@ -147,6 +147,16 @@ module Glimmer
147
147
  end
148
148
  alias transform= transform
149
149
  alias set_transform transform
150
+
151
+ def can_handle_listener?(listener_name)
152
+ area_proxy.can_handle_listener?(listener_name)
153
+ end
154
+
155
+ def handle_listener(listener_name, &listener)
156
+ area_proxy.handle_listener(listener_name) do |event|
157
+ listener.call(event) if include?(event[:x], event[:y])
158
+ end
159
+ end
150
160
 
151
161
  def respond_to?(method_name, *args, &block)
152
162
  self.class.parameters.include?(method_name.to_s.sub(/=$/, '').sub(/^set_/, '').to_sym) or
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.9
4
+ version: 0.5.10
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-04-26 00:00:00.000000000 Z
11
+ date: 2022-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -355,6 +355,7 @@ files:
355
355
  - examples/midi_player.rb
356
356
  - examples/midi_player2.rb
357
357
  - examples/midi_player3.rb
358
+ - examples/shape_coloring.rb
358
359
  - examples/simple_notepad.rb
359
360
  - examples/snake.rb
360
361
  - examples/snake/model/apple.rb