glimmer-dsl-libui 0.1.7 → 0.1.8
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 +13 -0
- data/README.md +209 -4
- data/VERSION +1 -1
- data/examples/area_gallery.rb +36 -0
- data/examples/area_gallery2.rb +36 -0
- data/examples/area_gallery3.rb +36 -0
- data/examples/area_gallery4.rb +36 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/control_proxy/area_proxy.rb +75 -26
- data/lib/glimmer/libui/control_proxy.rb +33 -1
- data/lib/glimmer-dsl-libui.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee3dcc2080c663175956845a975fb2bb0fb3a927f9b1b612f9d230d874fe8c86
|
4
|
+
data.tar.gz: 754ca74f6124c056209da9c8131cf1f3b527d67cf9a3c62a318d0c9d75f3c2ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d8f0591d1647409c2c0f5f443addabb06d668e7b3fcdfbceabb8d6cf545fd23ec8d1f87c42302a72375da1db72a2268a1c6e27deffbdd2d38399f0d038f011e
|
7
|
+
data.tar.gz: 3494b576ed3d9945e7f4675739cb5a303dcaeb8360a78ea233ae1b11dd6a6d56fda6d90458be1422af3ce3e6a453643dd6e99ce872b7410bd2f07bacab832ca4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.1.8
|
4
|
+
|
5
|
+
- Support `area` listener: `on_mouse_event`
|
6
|
+
- Support `area` listener: `on_mouse_down`
|
7
|
+
- Support `area` listener: `on_mouse_up`
|
8
|
+
- Support `area` listener: `on_mouse_drag_start`
|
9
|
+
- Support `area` listener: `on_mouse_drag`
|
10
|
+
- Support `area` listener: `on_mouse_drop`
|
11
|
+
- Support `area` listener: `on_mouse_crossed`
|
12
|
+
- Support `area` listener: `on_mouse_enter`
|
13
|
+
- Support `area` listener: `on_mouse_exit`
|
14
|
+
- Support `area` listener: `on_drag_broken`
|
15
|
+
|
3
16
|
## 0.1.7
|
4
17
|
|
5
18
|
- Support `stroke` `:dashes` and use in examples/area_gallery.rb
|
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.8
|
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)
|
@@ -123,6 +123,42 @@ window('Area Gallery', 400, 400) {
|
|
123
123
|
fill r: 202, g: 102, b: 204, a: 0.5
|
124
124
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
125
125
|
}
|
126
|
+
|
127
|
+
on_mouse_event do |area_mouse_event|
|
128
|
+
p area_mouse_event
|
129
|
+
end
|
130
|
+
|
131
|
+
on_mouse_moved do |area_mouse_event|
|
132
|
+
puts 'moved'
|
133
|
+
end
|
134
|
+
|
135
|
+
on_mouse_down do |area_mouse_event|
|
136
|
+
puts 'mouse down'
|
137
|
+
end
|
138
|
+
|
139
|
+
on_mouse_up do |area_mouse_event|
|
140
|
+
puts 'mouse up'
|
141
|
+
end
|
142
|
+
|
143
|
+
on_mouse_drag_started do |area_mouse_event|
|
144
|
+
puts 'drag started'
|
145
|
+
end
|
146
|
+
|
147
|
+
on_mouse_dragged do |area_mouse_event|
|
148
|
+
puts 'dragged'
|
149
|
+
end
|
150
|
+
|
151
|
+
on_mouse_dropped do |area_mouse_event|
|
152
|
+
puts 'dropped'
|
153
|
+
end
|
154
|
+
|
155
|
+
on_mouse_entered do
|
156
|
+
puts 'entered'
|
157
|
+
end
|
158
|
+
|
159
|
+
on_mouse_exited do
|
160
|
+
puts 'exited'
|
161
|
+
end
|
126
162
|
}
|
127
163
|
}.show
|
128
164
|
```
|
@@ -143,7 +179,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
143
179
|
|
144
180
|
## Table of Contents
|
145
181
|
|
146
|
-
- [Glimmer DSL for LibUI 0.1.
|
182
|
+
- [Glimmer DSL for LibUI 0.1.8](#-glimmer-dsl-for-libui-018)
|
147
183
|
- [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
|
148
184
|
- [Usage](#usage)
|
149
185
|
- [Girb (Glimmer IRB)](#girb-glimmer-irb)
|
@@ -273,7 +309,7 @@ gem install glimmer-dsl-libui
|
|
273
309
|
Or install via Bundler `Gemfile`:
|
274
310
|
|
275
311
|
```ruby
|
276
|
-
gem 'glimmer-dsl-libui', '~> 0.1.
|
312
|
+
gem 'glimmer-dsl-libui', '~> 0.1.8'
|
277
313
|
```
|
278
314
|
|
279
315
|
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.
|
@@ -347,7 +383,7 @@ w.libui # => #<Fiddle::Pointer:0x00007fde53997980 ptr=0x00007fde51352a60 size=0
|
|
347
383
|
Control(Args) | Properties | Listeners
|
348
384
|
------------- | ---------- | ---------
|
349
385
|
`about_menu_item` | None | `on_clicked`
|
350
|
-
`area` | None | `on_draw`
|
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`
|
351
387
|
`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
|
352
388
|
`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
|
353
389
|
`button(text as String)` | `text` (`String`) | `on_clicked`
|
@@ -608,6 +644,29 @@ The `area_draw_params` argument for `on_draw` block is a hash consisting of the
|
|
608
644
|
|
609
645
|
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.
|
610
646
|
|
647
|
+
`area` supported mouse listeners are:
|
648
|
+
- `on_mouse_event {|area_mouse_event| ...}`: general catch-all mouse event (recommend use fine-grained event below instead)
|
649
|
+
- `on_mouse_down {|area_mouse_event)`
|
650
|
+
- `on_mouse_up {|area_mouse_event)`
|
651
|
+
- `on_mouse_drag_started {|area_mouse_event)`
|
652
|
+
- `on_mouse_dragged {|area_mouse_event)`
|
653
|
+
- `on_mouse_dropped {|area_mouse_event)`
|
654
|
+
- `on_mouse_entered {...}`
|
655
|
+
- `on_mouse_exited {...}`
|
656
|
+
- `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
|
+
- `on_drag_broken {...}` (NOT RECOMMENDED; varies per platforms; use `on_mouse_dropped` instead)
|
658
|
+
|
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:
|
660
|
+
- `:x`: mouse x location in relation to area's top-left-corner
|
661
|
+
- `:y`: mouse y location in relation to area's top-left-corner
|
662
|
+
- `:area_width`: area current width
|
663
|
+
- `:area_height`: area current height
|
664
|
+
- `:down`: mouse pressed button (e.g. `1` is left button, `3` is right button)
|
665
|
+
- `:up`: mouse depressed button (e.g. `1` is left button, `3` is right button)
|
666
|
+
- `:count`: count of mouse clicks (e.g. `2` for double-click, `1` for single-click)
|
667
|
+
- `:modifers`: `Array` of `Symbol`s from one of the following: `[:command, :shift, :alt, :control]`
|
668
|
+
- `:held`: mouse held button during dragging (e.g. `1` is left button, `4` is right button)
|
669
|
+
|
611
670
|
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.
|
612
671
|
|
613
672
|
To redraw an `area`, you may call the `#queue_redraw_all` method, or simply `#redraw`.
|
@@ -746,6 +805,8 @@ The following examples include reimplementions of the examples in the [LibUI](ht
|
|
746
805
|
|
747
806
|
To browse all examples, simply launch the [Meta-Example](examples/meta_example.rb), which lists all examples and displays each example's code when selected. It also enables code editing to facilitate experimentation and learning.
|
748
807
|
|
808
|
+
(note that for examples that emit output to terminal/command-line via `p` or `puts`, you must run them directly to see output)
|
809
|
+
|
749
810
|
[examples/meta_example.rb](examples/meta_example.rb)
|
750
811
|
|
751
812
|
Run with this command from the root of the project if you cloned the project:
|
@@ -3377,6 +3438,42 @@ window('Area Gallery', 400, 400) {
|
|
3377
3438
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3378
3439
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
3379
3440
|
}
|
3441
|
+
|
3442
|
+
on_mouse_event do |area_mouse_event|
|
3443
|
+
p area_mouse_event
|
3444
|
+
end
|
3445
|
+
|
3446
|
+
on_mouse_moved do |area_mouse_event|
|
3447
|
+
puts 'moved'
|
3448
|
+
end
|
3449
|
+
|
3450
|
+
on_mouse_down do |area_mouse_event|
|
3451
|
+
puts 'mouse down'
|
3452
|
+
end
|
3453
|
+
|
3454
|
+
on_mouse_up do |area_mouse_event|
|
3455
|
+
puts 'mouse up'
|
3456
|
+
end
|
3457
|
+
|
3458
|
+
on_mouse_drag_started do |area_mouse_event|
|
3459
|
+
puts 'drag started'
|
3460
|
+
end
|
3461
|
+
|
3462
|
+
on_mouse_dragged do |area_mouse_event|
|
3463
|
+
puts 'dragged'
|
3464
|
+
end
|
3465
|
+
|
3466
|
+
on_mouse_dropped do |area_mouse_event|
|
3467
|
+
puts 'dropped'
|
3468
|
+
end
|
3469
|
+
|
3470
|
+
on_mouse_entered do
|
3471
|
+
puts 'entered'
|
3472
|
+
end
|
3473
|
+
|
3474
|
+
on_mouse_exited do
|
3475
|
+
puts 'exited'
|
3476
|
+
end
|
3380
3477
|
}
|
3381
3478
|
}.show
|
3382
3479
|
```
|
@@ -3493,6 +3590,42 @@ window('Area Gallery', 400, 400) {
|
|
3493
3590
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3494
3591
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
3495
3592
|
}
|
3593
|
+
|
3594
|
+
on_mouse_event do |area_mouse_event|
|
3595
|
+
p area_mouse_event
|
3596
|
+
end
|
3597
|
+
|
3598
|
+
on_mouse_moved do |area_mouse_event|
|
3599
|
+
puts 'moved'
|
3600
|
+
end
|
3601
|
+
|
3602
|
+
on_mouse_down do |area_mouse_event|
|
3603
|
+
puts 'mouse down'
|
3604
|
+
end
|
3605
|
+
|
3606
|
+
on_mouse_up do |area_mouse_event|
|
3607
|
+
puts 'mouse up'
|
3608
|
+
end
|
3609
|
+
|
3610
|
+
on_mouse_drag_started do |area_mouse_event|
|
3611
|
+
puts 'drag started'
|
3612
|
+
end
|
3613
|
+
|
3614
|
+
on_mouse_dragged do |area_mouse_event|
|
3615
|
+
puts 'dragged'
|
3616
|
+
end
|
3617
|
+
|
3618
|
+
on_mouse_dropped do |area_mouse_event|
|
3619
|
+
puts 'dropped'
|
3620
|
+
end
|
3621
|
+
|
3622
|
+
on_mouse_entered do
|
3623
|
+
puts 'entered'
|
3624
|
+
end
|
3625
|
+
|
3626
|
+
on_mouse_exited do
|
3627
|
+
puts 'exited'
|
3628
|
+
end
|
3496
3629
|
}
|
3497
3630
|
}.show
|
3498
3631
|
```
|
@@ -3550,6 +3683,42 @@ window('Area Gallery', 400, 400) {
|
|
3550
3683
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
3551
3684
|
}
|
3552
3685
|
end
|
3686
|
+
|
3687
|
+
on_mouse_event do |area_mouse_event|
|
3688
|
+
p area_mouse_event
|
3689
|
+
end
|
3690
|
+
|
3691
|
+
on_mouse_moved do |area_mouse_event|
|
3692
|
+
puts 'moved'
|
3693
|
+
end
|
3694
|
+
|
3695
|
+
on_mouse_down do |area_mouse_event|
|
3696
|
+
puts 'mouse down'
|
3697
|
+
end
|
3698
|
+
|
3699
|
+
on_mouse_up do |area_mouse_event|
|
3700
|
+
puts 'mouse up'
|
3701
|
+
end
|
3702
|
+
|
3703
|
+
on_mouse_drag_started do |area_mouse_event|
|
3704
|
+
puts 'drag started'
|
3705
|
+
end
|
3706
|
+
|
3707
|
+
on_mouse_dragged do |area_mouse_event|
|
3708
|
+
puts 'dragged'
|
3709
|
+
end
|
3710
|
+
|
3711
|
+
on_mouse_dropped do |area_mouse_event|
|
3712
|
+
puts 'dropped'
|
3713
|
+
end
|
3714
|
+
|
3715
|
+
on_mouse_entered do
|
3716
|
+
puts 'entered'
|
3717
|
+
end
|
3718
|
+
|
3719
|
+
on_mouse_exited do
|
3720
|
+
puts 'exited'
|
3721
|
+
end
|
3553
3722
|
}
|
3554
3723
|
}.show
|
3555
3724
|
```
|
@@ -3668,6 +3837,42 @@ window('Area Gallery', 400, 400) {
|
|
3668
3837
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
3669
3838
|
}
|
3670
3839
|
end
|
3840
|
+
|
3841
|
+
on_mouse_event do |area_mouse_event|
|
3842
|
+
p area_mouse_event
|
3843
|
+
end
|
3844
|
+
|
3845
|
+
on_mouse_moved do |area_mouse_event|
|
3846
|
+
puts 'moved'
|
3847
|
+
end
|
3848
|
+
|
3849
|
+
on_mouse_down do |area_mouse_event|
|
3850
|
+
puts 'mouse down'
|
3851
|
+
end
|
3852
|
+
|
3853
|
+
on_mouse_up do |area_mouse_event|
|
3854
|
+
puts 'mouse up'
|
3855
|
+
end
|
3856
|
+
|
3857
|
+
on_mouse_drag_started do |area_mouse_event|
|
3858
|
+
puts 'drag started'
|
3859
|
+
end
|
3860
|
+
|
3861
|
+
on_mouse_dragged do |area_mouse_event|
|
3862
|
+
puts 'dragged'
|
3863
|
+
end
|
3864
|
+
|
3865
|
+
on_mouse_dropped do |area_mouse_event|
|
3866
|
+
puts 'dropped'
|
3867
|
+
end
|
3868
|
+
|
3869
|
+
on_mouse_entered do
|
3870
|
+
puts 'entered'
|
3871
|
+
end
|
3872
|
+
|
3873
|
+
on_mouse_exited do
|
3874
|
+
puts 'exited'
|
3875
|
+
end
|
3671
3876
|
}
|
3672
3877
|
}.show
|
3673
3878
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8
|
data/examples/area_gallery.rb
CHANGED
@@ -46,5 +46,41 @@ window('Area Gallery', 400, 400) {
|
|
46
46
|
fill r: 202, g: 102, b: 204, a: 0.5
|
47
47
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
48
48
|
}
|
49
|
+
|
50
|
+
on_mouse_event do |area_mouse_event|
|
51
|
+
p area_mouse_event
|
52
|
+
end
|
53
|
+
|
54
|
+
on_mouse_moved do |area_mouse_event|
|
55
|
+
puts 'moved'
|
56
|
+
end
|
57
|
+
|
58
|
+
on_mouse_down do |area_mouse_event|
|
59
|
+
puts 'mouse down'
|
60
|
+
end
|
61
|
+
|
62
|
+
on_mouse_up do |area_mouse_event|
|
63
|
+
puts 'mouse up'
|
64
|
+
end
|
65
|
+
|
66
|
+
on_mouse_drag_started do |area_mouse_event|
|
67
|
+
puts 'drag started'
|
68
|
+
end
|
69
|
+
|
70
|
+
on_mouse_dragged do |area_mouse_event|
|
71
|
+
puts 'dragged'
|
72
|
+
end
|
73
|
+
|
74
|
+
on_mouse_dropped do |area_mouse_event|
|
75
|
+
puts 'dropped'
|
76
|
+
end
|
77
|
+
|
78
|
+
on_mouse_entered do
|
79
|
+
puts 'entered'
|
80
|
+
end
|
81
|
+
|
82
|
+
on_mouse_exited do
|
83
|
+
puts 'exited'
|
84
|
+
end
|
49
85
|
}
|
50
86
|
}.show
|
data/examples/area_gallery2.rb
CHANGED
@@ -107,5 +107,41 @@ window('Area Gallery', 400, 400) {
|
|
107
107
|
fill r: 202, g: 102, b: 204, a: 0.5
|
108
108
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
109
109
|
}
|
110
|
+
|
111
|
+
on_mouse_event do |area_mouse_event|
|
112
|
+
p area_mouse_event
|
113
|
+
end
|
114
|
+
|
115
|
+
on_mouse_moved do |area_mouse_event|
|
116
|
+
puts 'moved'
|
117
|
+
end
|
118
|
+
|
119
|
+
on_mouse_down do |area_mouse_event|
|
120
|
+
puts 'mouse down'
|
121
|
+
end
|
122
|
+
|
123
|
+
on_mouse_up do |area_mouse_event|
|
124
|
+
puts 'mouse up'
|
125
|
+
end
|
126
|
+
|
127
|
+
on_mouse_drag_started do |area_mouse_event|
|
128
|
+
puts 'drag started'
|
129
|
+
end
|
130
|
+
|
131
|
+
on_mouse_dragged do |area_mouse_event|
|
132
|
+
puts 'dragged'
|
133
|
+
end
|
134
|
+
|
135
|
+
on_mouse_dropped do |area_mouse_event|
|
136
|
+
puts 'dropped'
|
137
|
+
end
|
138
|
+
|
139
|
+
on_mouse_entered do
|
140
|
+
puts 'entered'
|
141
|
+
end
|
142
|
+
|
143
|
+
on_mouse_exited do
|
144
|
+
puts 'exited'
|
145
|
+
end
|
110
146
|
}
|
111
147
|
}.show
|
data/examples/area_gallery3.rb
CHANGED
@@ -48,5 +48,41 @@ window('Area Gallery', 400, 400) {
|
|
48
48
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
49
49
|
}
|
50
50
|
end
|
51
|
+
|
52
|
+
on_mouse_event do |area_mouse_event|
|
53
|
+
p area_mouse_event
|
54
|
+
end
|
55
|
+
|
56
|
+
on_mouse_moved do |area_mouse_event|
|
57
|
+
puts 'moved'
|
58
|
+
end
|
59
|
+
|
60
|
+
on_mouse_down do |area_mouse_event|
|
61
|
+
puts 'mouse down'
|
62
|
+
end
|
63
|
+
|
64
|
+
on_mouse_up do |area_mouse_event|
|
65
|
+
puts 'mouse up'
|
66
|
+
end
|
67
|
+
|
68
|
+
on_mouse_drag_started do |area_mouse_event|
|
69
|
+
puts 'drag started'
|
70
|
+
end
|
71
|
+
|
72
|
+
on_mouse_dragged do |area_mouse_event|
|
73
|
+
puts 'dragged'
|
74
|
+
end
|
75
|
+
|
76
|
+
on_mouse_dropped do |area_mouse_event|
|
77
|
+
puts 'dropped'
|
78
|
+
end
|
79
|
+
|
80
|
+
on_mouse_entered do
|
81
|
+
puts 'entered'
|
82
|
+
end
|
83
|
+
|
84
|
+
on_mouse_exited do
|
85
|
+
puts 'exited'
|
86
|
+
end
|
51
87
|
}
|
52
88
|
}.show
|
data/examples/area_gallery4.rb
CHANGED
@@ -109,5 +109,41 @@ window('Area Gallery', 400, 400) {
|
|
109
109
|
stroke r: 0, g: 0, b: 0, thickness: 2
|
110
110
|
}
|
111
111
|
end
|
112
|
+
|
113
|
+
on_mouse_event do |area_mouse_event|
|
114
|
+
p area_mouse_event
|
115
|
+
end
|
116
|
+
|
117
|
+
on_mouse_moved do |area_mouse_event|
|
118
|
+
puts 'moved'
|
119
|
+
end
|
120
|
+
|
121
|
+
on_mouse_down do |area_mouse_event|
|
122
|
+
puts 'mouse down'
|
123
|
+
end
|
124
|
+
|
125
|
+
on_mouse_up do |area_mouse_event|
|
126
|
+
puts 'mouse up'
|
127
|
+
end
|
128
|
+
|
129
|
+
on_mouse_drag_started do |area_mouse_event|
|
130
|
+
puts 'drag started'
|
131
|
+
end
|
132
|
+
|
133
|
+
on_mouse_dragged do |area_mouse_event|
|
134
|
+
puts 'dragged'
|
135
|
+
end
|
136
|
+
|
137
|
+
on_mouse_dropped do |area_mouse_event|
|
138
|
+
puts 'dropped'
|
139
|
+
end
|
140
|
+
|
141
|
+
on_mouse_entered do
|
142
|
+
puts 'entered'
|
143
|
+
end
|
144
|
+
|
145
|
+
on_mouse_exited do
|
146
|
+
puts 'exited'
|
147
|
+
end
|
112
148
|
}
|
113
149
|
}.show
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -36,6 +36,19 @@ module Glimmer
|
|
36
36
|
attr_accessor :current_area_draw_params
|
37
37
|
end
|
38
38
|
|
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']
|
40
|
+
LISTENER_ALIASES = {
|
41
|
+
on_drawn: 'on_draw',
|
42
|
+
on_mouse_moved: 'on_mouse_move',
|
43
|
+
on_mouse_drag_started: 'on_mouse_drag_start',
|
44
|
+
on_mouse_dragged: 'on_mouse_drag',
|
45
|
+
on_mouse_dropped: 'on_mouse_drop',
|
46
|
+
on_mouse_cross: 'on_mouse_crossed',
|
47
|
+
on_mouse_entered: 'on_mouse_enter',
|
48
|
+
on_mouse_exited: 'on_mouse_exit',
|
49
|
+
on_drag_break: 'on_drag_broken',
|
50
|
+
}
|
51
|
+
|
39
52
|
include Glimmer::FiddleConsumer
|
40
53
|
include Parent
|
41
54
|
prepend Transformable
|
@@ -47,29 +60,6 @@ module Glimmer
|
|
47
60
|
install_listeners
|
48
61
|
end
|
49
62
|
|
50
|
-
def on_draw(&block)
|
51
|
-
@on_draw_procs ||= []
|
52
|
-
if block.nil?
|
53
|
-
@on_draw_procs
|
54
|
-
else
|
55
|
-
@on_draw_procs << block
|
56
|
-
block
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def can_handle_listener?(listener_name)
|
61
|
-
listener_name == 'on_draw' || super
|
62
|
-
end
|
63
|
-
|
64
|
-
def handle_listener(listener_name, &listener)
|
65
|
-
case listener_name
|
66
|
-
when 'on_draw'
|
67
|
-
on_draw(&listener)
|
68
|
-
else
|
69
|
-
super
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
63
|
def draw(area_draw_params)
|
74
64
|
children.dup.each {|child| child.draw(area_draw_params)}
|
75
65
|
on_draw.each {|listener| listener.call(area_draw_params)}
|
@@ -94,9 +84,32 @@ module Glimmer
|
|
94
84
|
draw(area_draw_params)
|
95
85
|
AreaProxy.current_area_draw_params = nil
|
96
86
|
end
|
97
|
-
@area_handler.MouseEvent = fiddle_closure_block_caller(0, [
|
98
|
-
|
99
|
-
|
87
|
+
@area_handler.MouseEvent = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_mouse_event|
|
88
|
+
area_mouse_event = ::LibUI::FFI::AreaMouseEvent.new(area_mouse_event)
|
89
|
+
area_mouse_event = area_mouse_event_hash(area_mouse_event)
|
90
|
+
on_mouse_event.each { |listener| listener.call(area_mouse_event)}
|
91
|
+
on_mouse_move.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:x].between?(0, area_mouse_event[:area_width]) && area_mouse_event[:y].between?(0, area_mouse_event[:area_height])
|
92
|
+
unless @last_area_mouse_event.nil?
|
93
|
+
on_mouse_down.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:down] > 0 && @last_area_mouse_event[:down] == 0
|
94
|
+
on_mouse_up.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:up] > 0 && @last_area_mouse_event[:up] == 0
|
95
|
+
on_mouse_drag_start.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] > 0 && @last_area_mouse_event[:held] == 0
|
96
|
+
on_mouse_drag.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] > 0
|
97
|
+
on_mouse_drop.each { |listener| listener.call(area_mouse_event)} if area_mouse_event[:held] == 0 && @last_area_mouse_event[:held] > 0
|
98
|
+
end
|
99
|
+
@last_area_mouse_event = area_mouse_event
|
100
|
+
end
|
101
|
+
@area_handler.MouseCrossed = fiddle_closure_block_caller(0, [1, 1, 4]) do |_, _, left|
|
102
|
+
left = Glimmer::LibUI.integer_to_boolean(left)
|
103
|
+
on_mouse_crossed.each { |listener| listener.call(left) }
|
104
|
+
if left
|
105
|
+
on_mouse_exit.each { |listener| listener.call(left) }
|
106
|
+
else
|
107
|
+
on_mouse_enter.each { |listener| listener.call(left) }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
@area_handler.DragBroken = fiddle_closure_block_caller(0, [1, 1]) do |_, _|
|
111
|
+
on_drag_broken.each { |listener| listener.call }
|
112
|
+
end
|
100
113
|
@area_handler.KeyEvent = fiddle_closure_block_caller(0, [0]) {}
|
101
114
|
end
|
102
115
|
|
@@ -111,6 +124,42 @@ module Glimmer
|
|
111
124
|
clip_height: area_draw_params.ClipHeight,
|
112
125
|
}
|
113
126
|
end
|
127
|
+
|
128
|
+
def area_mouse_event_hash(area_mouse_event)
|
129
|
+
{
|
130
|
+
x: area_mouse_event.X,
|
131
|
+
y: area_mouse_event.Y,
|
132
|
+
area_width: area_mouse_event.AreaWidth,
|
133
|
+
area_height: area_mouse_event.AreaHeight,
|
134
|
+
down: area_mouse_event.Down,
|
135
|
+
up: area_mouse_event.Up,
|
136
|
+
count: area_mouse_event.Count,
|
137
|
+
modifers: modifiers_to_symbols(area_mouse_event.Modifiers),
|
138
|
+
held: area_mouse_event.Held1To64,
|
139
|
+
}
|
140
|
+
end
|
141
|
+
|
142
|
+
def modifiers_to_symbols(modifiers_value)
|
143
|
+
symbols = []
|
144
|
+
modifiers_value = extract_symbol_from_modifiers_value(modifiers_value, symbols: symbols) while modifiers_value > 0
|
145
|
+
symbols
|
146
|
+
end
|
147
|
+
|
148
|
+
def extract_symbol_from_modifiers_value(modifiers_value, symbols: )
|
149
|
+
if modifiers_value >= 8
|
150
|
+
symbols << :command
|
151
|
+
modifiers_value -= 8
|
152
|
+
elsif modifiers_value >= 4
|
153
|
+
symbols << :shift
|
154
|
+
modifiers_value -= 4
|
155
|
+
elsif modifiers_value >= 2
|
156
|
+
symbols << :alt
|
157
|
+
modifiers_value -= 2
|
158
|
+
elsif modifiers_value >= 1
|
159
|
+
symbols << :control
|
160
|
+
modifiers_value -= 1
|
161
|
+
end
|
162
|
+
end
|
114
163
|
end
|
115
164
|
end
|
116
165
|
end
|
@@ -141,7 +141,8 @@ module Glimmer
|
|
141
141
|
|
142
142
|
def can_handle_listener?(listener_name)
|
143
143
|
::LibUI.respond_to?("#{libui_api_keyword}_#{listener_name}") ||
|
144
|
-
::LibUI.respond_to?("control_#{listener_name}")
|
144
|
+
::LibUI.respond_to?("control_#{listener_name}") ||
|
145
|
+
has_custom_listener?(listener_name)
|
145
146
|
end
|
146
147
|
|
147
148
|
def handle_listener(listener_name, &listener)
|
@@ -150,6 +151,34 @@ module Glimmer
|
|
150
151
|
::LibUI.send("#{libui_api_keyword}_#{listener_name}", @libui, &safe_listener)
|
151
152
|
elsif ::LibUI.respond_to?("control_#{listener_name}")
|
152
153
|
::LibUI.send("control_#{listener_name}", @libui, &safe_listener)
|
154
|
+
elsif has_custom_listener?(listener_name)
|
155
|
+
handle_custom_listener(listener_name, &listener)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def has_custom_listener?(listener_name)
|
160
|
+
listener_name = listener_name.to_s
|
161
|
+
custom_listeners.include?(listener_name) || custom_listener_aliases.stringify_keys.keys.include?(listener_name)
|
162
|
+
end
|
163
|
+
|
164
|
+
def custom_listeners
|
165
|
+
self.class.constants.include?(:LISTENERS) ? self.class::LISTENERS : []
|
166
|
+
end
|
167
|
+
|
168
|
+
def custom_listener_aliases
|
169
|
+
self.class.constants.include?(:LISTENER_ALIASES) ? self.class::LISTENER_ALIASES : {}
|
170
|
+
end
|
171
|
+
|
172
|
+
def handle_custom_listener(listener_name, &listener)
|
173
|
+
listener_name = listener_name.to_s
|
174
|
+
listener_name = custom_listener_aliases.stringify_keys[listener_name] || listener_name
|
175
|
+
instance_variable_name = "@#{listener_name}_procs"
|
176
|
+
instance_variable_set(instance_variable_name, []) if instance_variable_get(instance_variable_name).nil?
|
177
|
+
if listener.nil?
|
178
|
+
instance_variable_get(instance_variable_name)
|
179
|
+
else
|
180
|
+
instance_variable_get(instance_variable_name) << listener
|
181
|
+
listener
|
153
182
|
end
|
154
183
|
end
|
155
184
|
|
@@ -160,6 +189,7 @@ module Glimmer
|
|
160
189
|
(append_properties.include?(method_name.to_s.sub(/\?$/, '')) && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, ''))) ||
|
161
190
|
append_properties.include?(method_name.to_s.sub(/=$/, ''))
|
162
191
|
) ||
|
192
|
+
can_handle_listener?(method_name.to_s) ||
|
163
193
|
super(method_name, true)
|
164
194
|
end
|
165
195
|
|
@@ -178,6 +208,8 @@ module Glimmer
|
|
178
208
|
elsif append_properties.include?(method_name.to_s) ||
|
179
209
|
append_properties.include?(method_name.to_s.sub(/(=|\?)$/, ''))
|
180
210
|
append_property(method_name, *args)
|
211
|
+
elsif can_handle_listener?(method_name.to_s)
|
212
|
+
handle_listener(method_name.to_s, &block)
|
181
213
|
else
|
182
214
|
super
|
183
215
|
end
|
data/lib/glimmer-dsl-libui.rb
CHANGED
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.8
|
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-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|