glimmer-dsl-libui 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
4
|
[![Maintainability](https://api.codeclimate.com/v1/badges/ce2853efdbecf6ebdc73/maintainability)](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
|