glimmer-dsl-libui 0.1.8 → 0.1.9
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +81 -11
- data/VERSION +1 -1
- data/examples/area_gallery.rb +12 -0
- data/examples/area_gallery2.rb +12 -0
- data/examples/area_gallery3.rb +12 -0
- data/examples/area_gallery4.rb +12 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/control_proxy/area_proxy.rb +33 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6159cc2323ab4b53114187df37e888c3f070102ce1b8a98dbaad724912b999b9
|
4
|
+
data.tar.gz: b0368395d3175a5528732c665f43902f84187a4f62ab23e4f47ebb8d729ac304
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ede14899e28cc5030f2d49653c51b931e1438934b26f7486843ed518d74fbe33107fa6db7c53a46991895835d9989e275a41474fbf4d2d692ae33d0c6cbf2bfd
|
7
|
+
data.tar.gz: e0964cfde750af8ebe2f14ab326eb477ebf0ed7cea56b7145828af909615a534acd67ec0169ceb41ed3d876bb229fb552dd62cc79ed4f9a552d7e72750d8a108
|
data/CHANGELOG.md
CHANGED
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.1.
|
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.1.9
|
2
2
|
## Prerequisite-Free Ruby Desktop Development GUI Library
|
3
3
|
[](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
4
|
[](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
|
@@ -159,6 +159,18 @@ window('Area Gallery', 400, 400) {
|
|
159
159
|
on_mouse_exited do
|
160
160
|
puts 'exited'
|
161
161
|
end
|
162
|
+
|
163
|
+
on_key_event do |area_key_event|
|
164
|
+
p area_key_event
|
165
|
+
end
|
166
|
+
|
167
|
+
on_key_up do |area_key_event|
|
168
|
+
puts 'key up'
|
169
|
+
end
|
170
|
+
|
171
|
+
on_key_down do |area_key_event|
|
172
|
+
puts 'key down'
|
173
|
+
end
|
162
174
|
}
|
163
175
|
}.show
|
164
176
|
```
|
@@ -179,7 +191,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
179
191
|
|
180
192
|
## Table of Contents
|
181
193
|
|
182
|
-
- [Glimmer DSL for LibUI 0.1.
|
194
|
+
- [Glimmer DSL for LibUI 0.1.9](#-glimmer-dsl-for-libui-019)
|
183
195
|
- [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
|
184
196
|
- [Usage](#usage)
|
185
197
|
- [Girb (Glimmer IRB)](#girb-glimmer-irb)
|
@@ -309,7 +321,7 @@ gem install glimmer-dsl-libui
|
|
309
321
|
Or install via Bundler `Gemfile`:
|
310
322
|
|
311
323
|
```ruby
|
312
|
-
gem 'glimmer-dsl-libui', '~> 0.1.
|
324
|
+
gem 'glimmer-dsl-libui', '~> 0.1.9'
|
313
325
|
```
|
314
326
|
|
315
327
|
Add `require 'glimmer-dsl-libui'` at the top, and then `include Glimmer` into the top-level main object for testing or into an actual class for serious usage.
|
@@ -383,7 +395,7 @@ w.libui # => #<Fiddle::Pointer:0x00007fde53997980 ptr=0x00007fde51352a60 size=0
|
|
383
395
|
Control(Args) | Properties | Listeners
|
384
396
|
------------- | ---------- | ---------
|
385
397
|
`about_menu_item` | None | `on_clicked`
|
386
|
-
`area` | None | `on_draw(area_draw_params)`, `on_mouse_event(area_mouse_event)`, `on_mouse_down(area_mouse_event)`, `on_mouse_up(area_mouse_event)`, `on_mouse_drag_started(area_mouse_event)`, `on_mouse_dragged(area_mouse_event)`, `on_mouse_dropped(area_mouse_event)`, `on_mouse_entered`, `on_mouse_exited`
|
398
|
+
`area` | None | `on_draw(area_draw_params)`, `on_mouse_event(area_mouse_event)`, `on_mouse_down(area_mouse_event)`, `on_mouse_up(area_mouse_event)`, `on_mouse_drag_started(area_mouse_event)`, `on_mouse_dragged(area_mouse_event)`, `on_mouse_dropped(area_mouse_event)`, `on_mouse_entered`, `on_mouse_exited`, `on_key_event(area_key_event)`, `on_key_down(area_key_event)`, `on_key_up(area_key_event)`
|
387
399
|
`arc(x_center as Numeric, y_center as Numeric, radius as Numeric, start_angle as Numeric, sweep as Numeric, is_negative as Boolean)` | `x_center` (`Numeric`), `y_center` (`Numeric`), `radius` (`Numeric`), `start_angle` (`Numeric`), `sweep` (`Numeric`), `is_negative` (Boolean) | None
|
388
400
|
`bezier(c1_x as Numeric, c1_y as Numeric, c2_x as Numeric, c2_y as Numeric, end_x as Numeric, end_y as Numeric)` | `c1_x` (`Numeric`), `c1_y` (`Numeric`), `c2_x` (`Numeric`), `c2_y` (`Numeric`), `end_x` (`Numeric`), `end_y` (`Numeric`) | None
|
389
401
|
`button(text as String)` | `text` (`String`) | `on_clicked`
|
@@ -645,18 +657,21 @@ The `area_draw_params` argument for `on_draw` block is a hash consisting of the
|
|
645
657
|
In general, it is recommended to use declarative stable paths whenever feasible since they require less code and simpler maintenance. But, in more advanced cases, semi-declarative dynamic paths could be used instead, especially if there are thousands of dynamic paths that need maximum performance and low memory footprint.
|
646
658
|
|
647
659
|
`area` supported mouse listeners are:
|
648
|
-
- `
|
649
|
-
- `
|
650
|
-
- `
|
651
|
-
- `
|
652
|
-
- `
|
653
|
-
- `
|
660
|
+
- `on_key_event {|area_key_event| ...}`: general catch-all key event (recommend using fine-grained key events below instead)
|
661
|
+
- `on_key_down {|area_key_event| ...}`
|
662
|
+
- `on_key_up {|area_key_event| ...}`
|
663
|
+
- `on_mouse_event {|area_mouse_event| ...}`: general catch-all mouse event (recommend using fine-grained mouse events below instead)
|
664
|
+
- `on_mouse_down {|area_mouse_event| ...}`
|
665
|
+
- `on_mouse_up {|area_mouse_event| ...}`
|
666
|
+
- `on_mouse_drag_started {|area_mouse_event| ...}`
|
667
|
+
- `on_mouse_dragged {|area_mouse_event| ...}`
|
668
|
+
- `on_mouse_dropped {|area_mouse_event| ...}`
|
654
669
|
- `on_mouse_entered {...}`
|
655
670
|
- `on_mouse_exited {...}`
|
656
671
|
- `on_mouse_crossed {|left| ...}` (NOT RECOMMENDED; it does what `on_mouse_entered` and `on_mouse_exited` do by returning a `left` argument indicating if mouse left `area`)
|
657
672
|
- `on_drag_broken {...}` (NOT RECOMMENDED; varies per platforms; use `on_mouse_dropped` instead)
|
658
673
|
|
659
|
-
The `area_mouse_event` argument for mouse events that receive it (e.g. `on_mouse_up`, `on_mouse_dragged`) consist of the following keys:
|
674
|
+
The `area_mouse_event` `Hash` argument for mouse events that receive it (e.g. `on_mouse_up`, `on_mouse_dragged`) consist of the following hash keys:
|
660
675
|
- `:x`: mouse x location in relation to area's top-left-corner
|
661
676
|
- `:y`: mouse y location in relation to area's top-left-corner
|
662
677
|
- `:area_width`: area current width
|
@@ -667,6 +682,13 @@ The `area_mouse_event` argument for mouse events that receive it (e.g. `on_mouse
|
|
667
682
|
- `:modifers`: `Array` of `Symbol`s from one of the following: `[:command, :shift, :alt, :control]`
|
668
683
|
- `:held`: mouse held button during dragging (e.g. `1` is left button, `4` is right button)
|
669
684
|
|
685
|
+
The `area_key_event` `Hash` argument for keyboard events that receive it (e.g. `on_key_up`, `on_key_down`) consist of the following hash keys:
|
686
|
+
- `:key`: key character (`String`)
|
687
|
+
- `:ext_key`: non-character extra key (`Symbol`) such as `:left`, `:right`, `:escape`, `:insert`
|
688
|
+
- `:modifier`: modifier key pressed alone (e.g. `:shift` or `:control`)
|
689
|
+
- `:modifiers`: modifier keys pressed simultaneously with `:key`, `:ext_key`, or `:modifier`
|
690
|
+
- `:up`: indicates if key has been released or not (Boolean)
|
691
|
+
|
670
692
|
Note that when nesting an `area` directly underneath `window` (without a layout control like `vertical_box`), it is automatically reparented with `vertical_box` in between the `window` and `area` since it would not show up on Linux otherwise.
|
671
693
|
|
672
694
|
To redraw an `area`, you may call the `#queue_redraw_all` method, or simply `#redraw`.
|
@@ -3474,6 +3496,18 @@ window('Area Gallery', 400, 400) {
|
|
3474
3496
|
on_mouse_exited do
|
3475
3497
|
puts 'exited'
|
3476
3498
|
end
|
3499
|
+
|
3500
|
+
on_key_event do |area_key_event|
|
3501
|
+
p area_key_event
|
3502
|
+
end
|
3503
|
+
|
3504
|
+
on_key_up do |area_key_event|
|
3505
|
+
puts 'key up'
|
3506
|
+
end
|
3507
|
+
|
3508
|
+
on_key_down do |area_key_event|
|
3509
|
+
puts 'key down'
|
3510
|
+
end
|
3477
3511
|
}
|
3478
3512
|
}.show
|
3479
3513
|
```
|
@@ -3626,6 +3660,18 @@ window('Area Gallery', 400, 400) {
|
|
3626
3660
|
on_mouse_exited do
|
3627
3661
|
puts 'exited'
|
3628
3662
|
end
|
3663
|
+
|
3664
|
+
on_key_event do |area_key_event|
|
3665
|
+
p area_key_event
|
3666
|
+
end
|
3667
|
+
|
3668
|
+
on_key_up do |area_key_event|
|
3669
|
+
puts 'key up'
|
3670
|
+
end
|
3671
|
+
|
3672
|
+
on_key_down do |area_key_event|
|
3673
|
+
puts 'key down'
|
3674
|
+
end
|
3629
3675
|
}
|
3630
3676
|
}.show
|
3631
3677
|
```
|
@@ -3719,6 +3765,18 @@ window('Area Gallery', 400, 400) {
|
|
3719
3765
|
on_mouse_exited do
|
3720
3766
|
puts 'exited'
|
3721
3767
|
end
|
3768
|
+
|
3769
|
+
on_key_event do |area_key_event|
|
3770
|
+
p area_key_event
|
3771
|
+
end
|
3772
|
+
|
3773
|
+
on_key_up do |area_key_event|
|
3774
|
+
puts 'key up'
|
3775
|
+
end
|
3776
|
+
|
3777
|
+
on_key_down do |area_key_event|
|
3778
|
+
puts 'key down'
|
3779
|
+
end
|
3722
3780
|
}
|
3723
3781
|
}.show
|
3724
3782
|
```
|
@@ -3873,6 +3931,18 @@ window('Area Gallery', 400, 400) {
|
|
3873
3931
|
on_mouse_exited do
|
3874
3932
|
puts 'exited'
|
3875
3933
|
end
|
3934
|
+
|
3935
|
+
on_key_event do |area_key_event|
|
3936
|
+
p area_key_event
|
3937
|
+
end
|
3938
|
+
|
3939
|
+
on_key_up do |area_key_event|
|
3940
|
+
puts 'key up'
|
3941
|
+
end
|
3942
|
+
|
3943
|
+
on_key_down do |area_key_event|
|
3944
|
+
puts 'key down'
|
3945
|
+
end
|
3876
3946
|
}
|
3877
3947
|
}.show
|
3878
3948
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.9
|
data/examples/area_gallery.rb
CHANGED
@@ -82,5 +82,17 @@ window('Area Gallery', 400, 400) {
|
|
82
82
|
on_mouse_exited do
|
83
83
|
puts 'exited'
|
84
84
|
end
|
85
|
+
|
86
|
+
on_key_event do |area_key_event|
|
87
|
+
p area_key_event
|
88
|
+
end
|
89
|
+
|
90
|
+
on_key_up do |area_key_event|
|
91
|
+
puts 'key up'
|
92
|
+
end
|
93
|
+
|
94
|
+
on_key_down do |area_key_event|
|
95
|
+
puts 'key down'
|
96
|
+
end
|
85
97
|
}
|
86
98
|
}.show
|
data/examples/area_gallery2.rb
CHANGED
@@ -143,5 +143,17 @@ window('Area Gallery', 400, 400) {
|
|
143
143
|
on_mouse_exited do
|
144
144
|
puts 'exited'
|
145
145
|
end
|
146
|
+
|
147
|
+
on_key_event do |area_key_event|
|
148
|
+
p area_key_event
|
149
|
+
end
|
150
|
+
|
151
|
+
on_key_up do |area_key_event|
|
152
|
+
puts 'key up'
|
153
|
+
end
|
154
|
+
|
155
|
+
on_key_down do |area_key_event|
|
156
|
+
puts 'key down'
|
157
|
+
end
|
146
158
|
}
|
147
159
|
}.show
|
data/examples/area_gallery3.rb
CHANGED
@@ -84,5 +84,17 @@ window('Area Gallery', 400, 400) {
|
|
84
84
|
on_mouse_exited do
|
85
85
|
puts 'exited'
|
86
86
|
end
|
87
|
+
|
88
|
+
on_key_event do |area_key_event|
|
89
|
+
p area_key_event
|
90
|
+
end
|
91
|
+
|
92
|
+
on_key_up do |area_key_event|
|
93
|
+
puts 'key up'
|
94
|
+
end
|
95
|
+
|
96
|
+
on_key_down do |area_key_event|
|
97
|
+
puts 'key down'
|
98
|
+
end
|
87
99
|
}
|
88
100
|
}.show
|
data/examples/area_gallery4.rb
CHANGED
@@ -145,5 +145,17 @@ window('Area Gallery', 400, 400) {
|
|
145
145
|
on_mouse_exited do
|
146
146
|
puts 'exited'
|
147
147
|
end
|
148
|
+
|
149
|
+
on_key_event do |area_key_event|
|
150
|
+
p area_key_event
|
151
|
+
end
|
152
|
+
|
153
|
+
on_key_up do |area_key_event|
|
154
|
+
puts 'key up'
|
155
|
+
end
|
156
|
+
|
157
|
+
on_key_down do |area_key_event|
|
158
|
+
puts 'key down'
|
159
|
+
end
|
148
160
|
}
|
149
161
|
}.show
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -34,9 +34,13 @@ module Glimmer
|
|
34
34
|
class << self
|
35
35
|
# this attribute is only populated during on_draw call
|
36
36
|
attr_accessor :current_area_draw_params
|
37
|
+
|
38
|
+
def ext_key_symbols
|
39
|
+
@ext_key_symbols ||= ::LibUI.constants.select { |c| c.to_s.start_with?('ExtKey') }.map { |c| c.to_s.underscore.sub('ext_key_', '') }
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
|
-
LISTENERS = ['on_draw', 'on_mouse_event', 'on_mouse_move', 'on_mouse_down', 'on_mouse_up', 'on_mouse_drag_start', 'on_mouse_drag', 'on_mouse_drop', 'on_mouse_crossed', 'on_mouse_enter', 'on_mouse_exit', 'on_drag_broken']
|
43
|
+
LISTENERS = ['on_draw', 'on_mouse_event', 'on_mouse_move', 'on_mouse_down', 'on_mouse_up', 'on_mouse_drag_start', 'on_mouse_drag', 'on_mouse_drop', 'on_mouse_crossed', 'on_mouse_enter', 'on_mouse_exit', 'on_drag_broken', 'on_key_event', 'on_key_down', 'on_key_up']
|
40
44
|
LISTENER_ALIASES = {
|
41
45
|
on_drawn: 'on_draw',
|
42
46
|
on_mouse_moved: 'on_mouse_move',
|
@@ -110,7 +114,16 @@ module Glimmer
|
|
110
114
|
@area_handler.DragBroken = fiddle_closure_block_caller(0, [1, 1]) do |_, _|
|
111
115
|
on_drag_broken.each { |listener| listener.call }
|
112
116
|
end
|
113
|
-
@area_handler.KeyEvent = fiddle_closure_block_caller(0, [
|
117
|
+
@area_handler.KeyEvent = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_key_event|
|
118
|
+
area_key_event = ::LibUI::FFI::AreaKeyEvent.new(area_key_event)
|
119
|
+
area_key_event = area_key_event_hash(area_key_event)
|
120
|
+
on_key_event.each { |listener| listener.call(area_key_event) }
|
121
|
+
if area_key_event[:up]
|
122
|
+
on_key_up.each { |listener| listener.call(area_key_event) }
|
123
|
+
else
|
124
|
+
on_key_down.each { |listener| listener.call(area_key_event) }
|
125
|
+
end
|
126
|
+
end
|
114
127
|
end
|
115
128
|
|
116
129
|
def area_draw_params_hash(area_draw_params)
|
@@ -139,6 +152,24 @@ module Glimmer
|
|
139
152
|
}
|
140
153
|
end
|
141
154
|
|
155
|
+
def area_key_event_hash(area_key_event)
|
156
|
+
{
|
157
|
+
key: key_to_char(area_key_event.Key),
|
158
|
+
ext_key: ext_key_to_symbol(area_key_event.ExtKey),
|
159
|
+
modifier: modifiers_to_symbols(area_key_event.Modifier).first,
|
160
|
+
modifiers: modifiers_to_symbols(area_key_event.Modifiers),
|
161
|
+
up: Glimmer::LibUI.integer_to_boolean(area_key_event.Up),
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
def key_to_char(key)
|
166
|
+
key.chr if key > 0
|
167
|
+
end
|
168
|
+
|
169
|
+
def ext_key_to_symbol(ext_key_value)
|
170
|
+
AreaProxy.ext_key_symbols[ext_key_value - 1].to_s.to_sym if ext_key_value > 0
|
171
|
+
end
|
172
|
+
|
142
173
|
def modifiers_to_symbols(modifiers_value)
|
143
174
|
symbols = []
|
144
175
|
modifiers_value = extract_symbol_from_modifiers_value(modifiers_value, symbols: symbols) while modifiers_value > 0
|
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.1.
|
4
|
+
version: 0.1.9
|
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-10-
|
11
|
+
date: 2021-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.0.
|
67
|
+
version: 0.0.11
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.0.
|
74
|
+
version: 0.0.11
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: juwelier
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|