glimmer-dsl-libui 0.1.6 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/README.md +341 -24
- data/VERSION +1 -1
- data/examples/area_gallery.rb +50 -2
- data/examples/area_gallery2.rb +50 -2
- data/examples/area_gallery3.rb +50 -2
- data/examples/area_gallery4.rb +50 -2
- data/examples/grid.rb +38 -2
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/libui/control_proxy/area_proxy.rb +105 -27
- data/lib/glimmer/libui/control_proxy/grid_proxy.rb +12 -1
- data/lib/glimmer/libui/control_proxy/path_proxy.rb +13 -19
- data/lib/glimmer/libui/control_proxy.rb +33 -1
- data/lib/glimmer/libui.rb +17 -0
- data/lib/glimmer-dsl-libui.rb +1 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 748bd2b706f088ec5e69da3567dac4b59085b374507f9e3dd5e4a2b0432895a0
|
4
|
+
data.tar.gz: 8ff551d013d3d7524698c3ceaf7c5176e190e5ff6ca3bb8189de56a90fc2b3a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2cff96b2dfe600c675feb491e9f396fb436b67430fa72dafd2ae88b69f06027a5cef250d18aa9872ed4329782e6ce7da14d78506e9786b8fc62426c9f985455
|
7
|
+
data.tar.gz: c6b565cf1aba0f603c1233a8411a4ad25f78821f832f0576cf97cad7ebf9b06a0b8f1b3d83200a79da5d998fa5849d10e47b2e9257069dc0fdfe6a1cfdb6b57f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,37 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.1.10
|
4
|
+
|
5
|
+
- Upgrade to glimmer 2.2.1
|
6
|
+
- Add a 3rd tab to examples/grid.rb showcasing the halign and valign properties
|
7
|
+
- Support `grid` `halign`/`valign` symbol values of `:fill` (default), `:start`, `:center`, `:end`
|
8
|
+
- Add `key_value` to `area_key_event` `Hash`
|
9
|
+
- Add `ext_key_value` to `area_key_event` `Hash`
|
10
|
+
|
11
|
+
## 0.1.9
|
12
|
+
|
13
|
+
- Support `area` listener: `on_key_event`
|
14
|
+
- Support `area` listener: `on_key_down`
|
15
|
+
- Support `area` listener: `on_key_up`
|
16
|
+
|
17
|
+
## 0.1.8
|
18
|
+
|
19
|
+
- Support `area` listener: `on_mouse_event`
|
20
|
+
- Support `area` listener: `on_mouse_down`
|
21
|
+
- Support `area` listener: `on_mouse_up`
|
22
|
+
- Support `area` listener: `on_mouse_drag_start`
|
23
|
+
- Support `area` listener: `on_mouse_drag`
|
24
|
+
- Support `area` listener: `on_mouse_drop`
|
25
|
+
- Support `area` listener: `on_mouse_crossed`
|
26
|
+
- Support `area` listener: `on_mouse_enter`
|
27
|
+
- Support `area` listener: `on_mouse_exit`
|
28
|
+
- Support `area` listener: `on_drag_broken`
|
29
|
+
|
30
|
+
## 0.1.7
|
31
|
+
|
32
|
+
- Support `stroke` `:dashes` and use in examples/area_gallery.rb
|
33
|
+
- Support symbol values for draw_line_cap (`:round`, `:square`, `:flat`) and draw_line_join (`:miter`, `:round`, `:bevel`) and draw_fill_mode (`:winding` and `:alternate`)
|
34
|
+
|
3
35
|
## 0.1.6
|
4
36
|
|
5
37
|
- Update default `window` `width` to `190`
|
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.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
|
[![Maintainability](https://api.codeclimate.com/v1/badges/ce2853efdbecf6ebdc73/maintainability)](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
|
@@ -115,14 +115,62 @@ window('Area Gallery', 400, 400) {
|
|
115
115
|
}
|
116
116
|
|
117
117
|
fill r: 202, g: 102, b: 204, a: 0.5
|
118
|
-
stroke
|
118
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
119
119
|
}
|
120
120
|
path { # declarative stable path
|
121
121
|
arc(200, 200, 90, 0, 360, false)
|
122
122
|
|
123
123
|
fill r: 202, g: 102, b: 204, a: 0.5
|
124
|
-
stroke
|
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
|
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
|
126
174
|
}
|
127
175
|
}.show
|
128
176
|
```
|
@@ -143,7 +191,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
|
|
143
191
|
|
144
192
|
## Table of Contents
|
145
193
|
|
146
|
-
- [Glimmer DSL for LibUI 0.1.
|
194
|
+
- [Glimmer DSL for LibUI 0.1.10](#-glimmer-dsl-for-libui-0110)
|
147
195
|
- [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
|
148
196
|
- [Usage](#usage)
|
149
197
|
- [Girb (Glimmer IRB)](#girb-glimmer-irb)
|
@@ -273,7 +321,7 @@ gem install glimmer-dsl-libui
|
|
273
321
|
Or install via Bundler `Gemfile`:
|
274
322
|
|
275
323
|
```ruby
|
276
|
-
gem 'glimmer-dsl-libui', '~> 0.1.
|
324
|
+
gem 'glimmer-dsl-libui', '~> 0.1.10'
|
277
325
|
```
|
278
326
|
|
279
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.
|
@@ -347,7 +395,7 @@ w.libui # => #<Fiddle::Pointer:0x00007fde53997980 ptr=0x00007fde51352a60 size=0
|
|
347
395
|
Control(Args) | Properties | Listeners
|
348
396
|
------------- | ---------- | ---------
|
349
397
|
`about_menu_item` | None | `on_clicked`
|
350
|
-
`area` | None | `on_draw`
|
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)`
|
351
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
|
352
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
|
353
401
|
`button(text as String)` | `text` (`String`) | `on_clicked`
|
@@ -381,7 +429,7 @@ Control(Args) | Properties | Listeners
|
|
381
429
|
`msg_box(window = main_window as Glimmer::LibUI::WindowProxy, title as String, description as String)` | None | None
|
382
430
|
`msg_box_error(window = main_window as Glimmer::LibUI::WindowProxy, title as String, description as String)` | None | None
|
383
431
|
`non_wrapping_multiline_entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
|
384
|
-
`path` | `fill` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`), `stroke` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, `:cap` as
|
432
|
+
`path(draw_fill_mode = :winding)` | `fill` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`), `stroke` (`Hash` of `:r` as `0`-`255`, `:g` as `0`-`255`, `:b` as `0`-`255`, `:a` as `0.0`-`1.0`, `:cap` as (`:round`, `:square`, `:flat`), `:join` as (`:miter`, `:round`, `:bevel`), `:thickness` as `Numeric`, `:miter_limit` as `Numeric`, `:dashes` as `Array` of `Numeric` ) | None
|
385
433
|
`preferences_menu_item` | None | `on_clicked`
|
386
434
|
`progress_bar` | `value` (`Numeric`) | None
|
387
435
|
`progress_bar_column(name as String)` | None | None
|
@@ -412,9 +460,9 @@ Control(Args) | Properties | Listeners
|
|
412
460
|
- `xspan` [dsl-only] (`Integer`) [default=`1`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
413
461
|
- `yspan` [dsl-only] (`Integer`) [default=`1`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
414
462
|
- `hexpand` [dsl-only] (Boolean) [default=`false`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
415
|
-
- `halign` [dsl-only] (`
|
463
|
+
- `halign` [dsl-only] (`:fill`, `:start`, `:center`, or `:end`) [default=`:fill`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
416
464
|
- `vexpand` [dsl-only] (Boolean) [default=`false`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
417
|
-
- `valign` [dsl-only] (`
|
465
|
+
- `valign` [dsl-only] (`:fill`, `:start`, `:center`, or `:end`) [default=`:fill`]: available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `grid`
|
418
466
|
|
419
467
|
### Common Control Operations
|
420
468
|
- `destroy`
|
@@ -585,6 +633,8 @@ window('Basic Area', 400, 400) {
|
|
585
633
|
|
586
634
|
Check [examples/dynamic_area.rb](#dynamic-area) for a more detailed semi-declarative example.
|
587
635
|
|
636
|
+
`path` can receive a `draw_fill_mode` argument that can accept values `:winding` or `:alternate` and defaults to `:winding`.
|
637
|
+
|
588
638
|
Available nested `path` shapes:
|
589
639
|
- `rectangle(x as Numeric, y as Numeric, width as Numeric, height as Numeric)`
|
590
640
|
- `square(x as Numeric, y as Numeric, length as Numeric)`
|
@@ -606,6 +656,41 @@ The `area_draw_params` argument for `on_draw` block is a hash consisting of the
|
|
606
656
|
|
607
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.
|
608
658
|
|
659
|
+
`area` supported mouse listeners are:
|
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| ...}`
|
669
|
+
- `on_mouse_entered {...}`
|
670
|
+
- `on_mouse_exited {...}`
|
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`)
|
672
|
+
- `on_drag_broken {...}` (NOT RECOMMENDED; varies per platforms; use `on_mouse_dropped` instead)
|
673
|
+
|
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:
|
675
|
+
- `:x`: mouse x location in relation to area's top-left-corner
|
676
|
+
- `:y`: mouse y location in relation to area's top-left-corner
|
677
|
+
- `:area_width`: area current width
|
678
|
+
- `:area_height`: area current height
|
679
|
+
- `:down`: mouse pressed button (e.g. `1` is left button, `3` is right button)
|
680
|
+
- `:up`: mouse depressed button (e.g. `1` is left button, `3` is right button)
|
681
|
+
- `:count`: count of mouse clicks (e.g. `2` for double-click, `1` for single-click)
|
682
|
+
- `:modifers`: `Array` of `Symbol`s from one of the following: `[:command, :shift, :alt, :control]`
|
683
|
+
- `:held`: mouse held button during dragging (e.g. `1` is left button, `4` is right button)
|
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
|
+
- `:key_value`: key value (`Integer`). Useful in rare cases for numeric processing of keys instead of dealing with as `:key` character `String`
|
688
|
+
- `:ext_key`: non-character extra key (`Symbol`) from `Glimmer::LibUI.enum_symbols(:ext_key)` such as `:left`, `:right`, `:escape`, `:insert`
|
689
|
+
- `:ext_key_value`: non-character extra key value (`Integer`). Useful in rare cases for numeric processing of extra keys instead of dealing with as `:ext_key` `Symbol`
|
690
|
+
- `:modifier`: modifier key pressed alone (e.g. `:shift` or `:control`)
|
691
|
+
- `:modifiers`: modifier keys pressed simultaneously with `:key`, `:ext_key`, or `:modifier`
|
692
|
+
- `:up`: indicates if key has been released or not (Boolean)
|
693
|
+
|
609
694
|
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.
|
610
695
|
|
611
696
|
To redraw an `area`, you may call the `#queue_redraw_all` method, or simply `#redraw`.
|
@@ -703,7 +788,7 @@ Check [Histogram](#histogram) example for use of hex colors.
|
|
703
788
|
- When destroying a control nested under a `form`, it is automatically deleted from the form's children
|
704
789
|
- When destroying a control nested under a `window` or `group`, it is automatically unset as their child to allow successful destruction
|
705
790
|
- For `date_time_picker`, `date_picker`, and `time_picker`, make sure `time` hash values for `mon`, `wday`, and `yday` are 1-based instead of [libui](https://github.com/andlabs/libui) original 0-based values, and return `dst` as Boolean instead of `isdst` as `1`/`0`
|
706
|
-
- Smart defaults for `grid` child attributes are `left` (`0`), `top` (`0`), `xspan` (`1`), `yspan` (`1`), `hexpand` (`false`), `halign` (`
|
791
|
+
- Smart defaults for `grid` child attributes are `left` (`0`), `top` (`0`), `xspan` (`1`), `yspan` (`1`), `hexpand` (`false`), `halign` (`:fill`), `vexpand` (`false`), and `valign` (`:fill`)
|
707
792
|
- The `table` control automatically constructs required `TableModelHandler`, `TableModel`, and `TableParams`, calculating all their arguments from `cell_rows` and `editable` properties (e.g. `NumRows`) as well as nested columns (e.g. `text_column`)
|
708
793
|
- Table model instances are automatically freed from memory after `window` is destroyed.
|
709
794
|
- Table `cell_rows` data has implicit data-binding to table cell values for deletion, insertion, and change (done by diffing `cell_rows` value before and after change and auto-informing `table` of deletions [`LibUI.table_model_row_deleted`], insertions [`LibUI.table_model_row_deleted`], and changes [`LibUI.table_model_row_changed`]). When deleting data rows from `cell_rows` array, then actual rows from the `table` are automatically deleted. When inserting data rows into `cell_rows` array, then actual `table` rows are automatically inserted. When updating data rows in `cell_rows` array, then actual `table` rows are automatically updated.
|
@@ -744,6 +829,8 @@ The following examples include reimplementions of the examples in the [LibUI](ht
|
|
744
829
|
|
745
830
|
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.
|
746
831
|
|
832
|
+
(note that for examples that emit output to terminal/command-line via `p` or `puts`, you must run them directly to see output)
|
833
|
+
|
747
834
|
[examples/meta_example.rb](examples/meta_example.rb)
|
748
835
|
|
749
836
|
Run with this command from the root of the project if you cloned the project:
|
@@ -2012,13 +2099,15 @@ ruby -r glimmer-dsl-libui -e "require 'examples/grid'"
|
|
2012
2099
|
|
2013
2100
|
Mac
|
2014
2101
|
|
2015
|
-
![glimmer-dsl-libui-mac-grid-
|
2016
|
-
![glimmer-dsl-libui-mac-grid-
|
2102
|
+
![glimmer-dsl-libui-mac-grid-span.png](images/glimmer-dsl-libui-mac-grid-span.png)
|
2103
|
+
![glimmer-dsl-libui-mac-grid-expand.png](images/glimmer-dsl-libui-mac-grid-expand.png)
|
2104
|
+
![glimmer-dsl-libui-mac-grid-align.png](images/glimmer-dsl-libui-mac-grid-align.png)
|
2017
2105
|
|
2018
2106
|
Linux
|
2019
2107
|
|
2020
|
-
![glimmer-dsl-libui-linux-grid-
|
2021
|
-
![glimmer-dsl-libui-linux-grid-
|
2108
|
+
![glimmer-dsl-libui-linux-grid-span.png](images/glimmer-dsl-libui-linux-grid-span.png)
|
2109
|
+
![glimmer-dsl-libui-linux-grid-expand.png](images/glimmer-dsl-libui-linux-grid-expand.png)
|
2110
|
+
![glimmer-dsl-libui-linux-grid-align.png](images/glimmer-dsl-libui-linux-grid-align.png)
|
2022
2111
|
|
2023
2112
|
New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
|
2024
2113
|
|
@@ -2029,7 +2118,7 @@ include Glimmer
|
|
2029
2118
|
|
2030
2119
|
window('Grid') {
|
2031
2120
|
tab {
|
2032
|
-
tab_item('
|
2121
|
+
tab_item('Span') {
|
2033
2122
|
grid {
|
2034
2123
|
4.times { |top_value|
|
2035
2124
|
4.times { |left_value|
|
@@ -2069,7 +2158,7 @@ window('Grid') {
|
|
2069
2158
|
}
|
2070
2159
|
}
|
2071
2160
|
}
|
2072
|
-
tab_item('
|
2161
|
+
tab_item('Expand') {
|
2073
2162
|
grid {
|
2074
2163
|
label("(0, 0) hexpand/vexpand\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
|
2075
2164
|
left 0
|
@@ -2091,6 +2180,42 @@ window('Grid') {
|
|
2091
2180
|
}
|
2092
2181
|
}
|
2093
2182
|
}
|
2183
|
+
tab_item('Align') {
|
2184
|
+
grid {
|
2185
|
+
label("(0, 0) halign/valign fill\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
|
2186
|
+
left 0
|
2187
|
+
top 0
|
2188
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2189
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2190
|
+
halign :fill
|
2191
|
+
valign :fill
|
2192
|
+
}
|
2193
|
+
label("(1, 0) halign/valign start") {
|
2194
|
+
left 1
|
2195
|
+
top 0
|
2196
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2197
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2198
|
+
halign :start
|
2199
|
+
valign :start
|
2200
|
+
}
|
2201
|
+
label("(0, 1) halign/valign center") {
|
2202
|
+
left 0
|
2203
|
+
top 1
|
2204
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2205
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2206
|
+
halign :center
|
2207
|
+
valign :center
|
2208
|
+
}
|
2209
|
+
label("(1, 1) halign/valign end") {
|
2210
|
+
left 1
|
2211
|
+
top 1
|
2212
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2213
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
2214
|
+
halign :end
|
2215
|
+
valign :end
|
2216
|
+
}
|
2217
|
+
}
|
2218
|
+
}
|
2094
2219
|
}
|
2095
2220
|
}.show
|
2096
2221
|
```
|
@@ -3367,14 +3492,62 @@ window('Area Gallery', 400, 400) {
|
|
3367
3492
|
}
|
3368
3493
|
|
3369
3494
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3370
|
-
stroke
|
3495
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
3371
3496
|
}
|
3372
3497
|
path { # declarative stable path
|
3373
3498
|
arc(200, 200, 90, 0, 360, false)
|
3374
3499
|
|
3375
3500
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3376
|
-
stroke
|
3501
|
+
stroke r: 0, g: 0, b: 0, thickness: 2
|
3377
3502
|
}
|
3503
|
+
|
3504
|
+
on_mouse_event do |area_mouse_event|
|
3505
|
+
p area_mouse_event
|
3506
|
+
end
|
3507
|
+
|
3508
|
+
on_mouse_moved do |area_mouse_event|
|
3509
|
+
puts 'moved'
|
3510
|
+
end
|
3511
|
+
|
3512
|
+
on_mouse_down do |area_mouse_event|
|
3513
|
+
puts 'mouse down'
|
3514
|
+
end
|
3515
|
+
|
3516
|
+
on_mouse_up do |area_mouse_event|
|
3517
|
+
puts 'mouse up'
|
3518
|
+
end
|
3519
|
+
|
3520
|
+
on_mouse_drag_started do |area_mouse_event|
|
3521
|
+
puts 'drag started'
|
3522
|
+
end
|
3523
|
+
|
3524
|
+
on_mouse_dragged do |area_mouse_event|
|
3525
|
+
puts 'dragged'
|
3526
|
+
end
|
3527
|
+
|
3528
|
+
on_mouse_dropped do |area_mouse_event|
|
3529
|
+
puts 'dropped'
|
3530
|
+
end
|
3531
|
+
|
3532
|
+
on_mouse_entered do
|
3533
|
+
puts 'entered'
|
3534
|
+
end
|
3535
|
+
|
3536
|
+
on_mouse_exited do
|
3537
|
+
puts 'exited'
|
3538
|
+
end
|
3539
|
+
|
3540
|
+
on_key_event do |area_key_event|
|
3541
|
+
p area_key_event
|
3542
|
+
end
|
3543
|
+
|
3544
|
+
on_key_up do |area_key_event|
|
3545
|
+
puts 'key up'
|
3546
|
+
end
|
3547
|
+
|
3548
|
+
on_key_down do |area_key_event|
|
3549
|
+
puts 'key down'
|
3550
|
+
end
|
3378
3551
|
}
|
3379
3552
|
}.show
|
3380
3553
|
```
|
@@ -3476,7 +3649,7 @@ window('Area Gallery', 400, 400) {
|
|
3476
3649
|
}
|
3477
3650
|
|
3478
3651
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3479
|
-
stroke
|
3652
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
3480
3653
|
}
|
3481
3654
|
path { # declarative stable path
|
3482
3655
|
arc {
|
@@ -3489,8 +3662,56 @@ window('Area Gallery', 400, 400) {
|
|
3489
3662
|
}
|
3490
3663
|
|
3491
3664
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3492
|
-
stroke
|
3665
|
+
stroke r: 0, g: 0, b: 0, thickness: 2
|
3493
3666
|
}
|
3667
|
+
|
3668
|
+
on_mouse_event do |area_mouse_event|
|
3669
|
+
p area_mouse_event
|
3670
|
+
end
|
3671
|
+
|
3672
|
+
on_mouse_moved do |area_mouse_event|
|
3673
|
+
puts 'moved'
|
3674
|
+
end
|
3675
|
+
|
3676
|
+
on_mouse_down do |area_mouse_event|
|
3677
|
+
puts 'mouse down'
|
3678
|
+
end
|
3679
|
+
|
3680
|
+
on_mouse_up do |area_mouse_event|
|
3681
|
+
puts 'mouse up'
|
3682
|
+
end
|
3683
|
+
|
3684
|
+
on_mouse_drag_started do |area_mouse_event|
|
3685
|
+
puts 'drag started'
|
3686
|
+
end
|
3687
|
+
|
3688
|
+
on_mouse_dragged do |area_mouse_event|
|
3689
|
+
puts 'dragged'
|
3690
|
+
end
|
3691
|
+
|
3692
|
+
on_mouse_dropped do |area_mouse_event|
|
3693
|
+
puts 'dropped'
|
3694
|
+
end
|
3695
|
+
|
3696
|
+
on_mouse_entered do
|
3697
|
+
puts 'entered'
|
3698
|
+
end
|
3699
|
+
|
3700
|
+
on_mouse_exited do
|
3701
|
+
puts 'exited'
|
3702
|
+
end
|
3703
|
+
|
3704
|
+
on_key_event do |area_key_event|
|
3705
|
+
p area_key_event
|
3706
|
+
end
|
3707
|
+
|
3708
|
+
on_key_up do |area_key_event|
|
3709
|
+
puts 'key up'
|
3710
|
+
end
|
3711
|
+
|
3712
|
+
on_key_down do |area_key_event|
|
3713
|
+
puts 'key down'
|
3714
|
+
end
|
3494
3715
|
}
|
3495
3716
|
}.show
|
3496
3717
|
```
|
@@ -3539,15 +3760,63 @@ window('Area Gallery', 400, 400) {
|
|
3539
3760
|
}
|
3540
3761
|
|
3541
3762
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3542
|
-
stroke
|
3763
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
3543
3764
|
}
|
3544
3765
|
path { # a dynamic path is added semi-declaratively inside on_draw block
|
3545
3766
|
arc(200, 200, 90, 0, 360, false)
|
3546
3767
|
|
3547
3768
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3548
|
-
stroke
|
3769
|
+
stroke r: 0, g: 0, b: 0, thickness: 2
|
3549
3770
|
}
|
3550
3771
|
end
|
3772
|
+
|
3773
|
+
on_mouse_event do |area_mouse_event|
|
3774
|
+
p area_mouse_event
|
3775
|
+
end
|
3776
|
+
|
3777
|
+
on_mouse_moved do |area_mouse_event|
|
3778
|
+
puts 'moved'
|
3779
|
+
end
|
3780
|
+
|
3781
|
+
on_mouse_down do |area_mouse_event|
|
3782
|
+
puts 'mouse down'
|
3783
|
+
end
|
3784
|
+
|
3785
|
+
on_mouse_up do |area_mouse_event|
|
3786
|
+
puts 'mouse up'
|
3787
|
+
end
|
3788
|
+
|
3789
|
+
on_mouse_drag_started do |area_mouse_event|
|
3790
|
+
puts 'drag started'
|
3791
|
+
end
|
3792
|
+
|
3793
|
+
on_mouse_dragged do |area_mouse_event|
|
3794
|
+
puts 'dragged'
|
3795
|
+
end
|
3796
|
+
|
3797
|
+
on_mouse_dropped do |area_mouse_event|
|
3798
|
+
puts 'dropped'
|
3799
|
+
end
|
3800
|
+
|
3801
|
+
on_mouse_entered do
|
3802
|
+
puts 'entered'
|
3803
|
+
end
|
3804
|
+
|
3805
|
+
on_mouse_exited do
|
3806
|
+
puts 'exited'
|
3807
|
+
end
|
3808
|
+
|
3809
|
+
on_key_event do |area_key_event|
|
3810
|
+
p area_key_event
|
3811
|
+
end
|
3812
|
+
|
3813
|
+
on_key_up do |area_key_event|
|
3814
|
+
puts 'key up'
|
3815
|
+
end
|
3816
|
+
|
3817
|
+
on_key_down do |area_key_event|
|
3818
|
+
puts 'key down'
|
3819
|
+
end
|
3551
3820
|
}
|
3552
3821
|
}.show
|
3553
3822
|
```
|
@@ -3650,7 +3919,7 @@ window('Area Gallery', 400, 400) {
|
|
3650
3919
|
}
|
3651
3920
|
|
3652
3921
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3653
|
-
stroke
|
3922
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
3654
3923
|
}
|
3655
3924
|
path { # a dynamic path is added semi-declaratively inside on_draw block
|
3656
3925
|
arc {
|
@@ -3663,9 +3932,57 @@ window('Area Gallery', 400, 400) {
|
|
3663
3932
|
}
|
3664
3933
|
|
3665
3934
|
fill r: 202, g: 102, b: 204, a: 0.5
|
3666
|
-
stroke
|
3935
|
+
stroke r: 0, g: 0, b: 0, thickness: 2
|
3667
3936
|
}
|
3668
3937
|
end
|
3938
|
+
|
3939
|
+
on_mouse_event do |area_mouse_event|
|
3940
|
+
p area_mouse_event
|
3941
|
+
end
|
3942
|
+
|
3943
|
+
on_mouse_moved do |area_mouse_event|
|
3944
|
+
puts 'moved'
|
3945
|
+
end
|
3946
|
+
|
3947
|
+
on_mouse_down do |area_mouse_event|
|
3948
|
+
puts 'mouse down'
|
3949
|
+
end
|
3950
|
+
|
3951
|
+
on_mouse_up do |area_mouse_event|
|
3952
|
+
puts 'mouse up'
|
3953
|
+
end
|
3954
|
+
|
3955
|
+
on_mouse_drag_started do |area_mouse_event|
|
3956
|
+
puts 'drag started'
|
3957
|
+
end
|
3958
|
+
|
3959
|
+
on_mouse_dragged do |area_mouse_event|
|
3960
|
+
puts 'dragged'
|
3961
|
+
end
|
3962
|
+
|
3963
|
+
on_mouse_dropped do |area_mouse_event|
|
3964
|
+
puts 'dropped'
|
3965
|
+
end
|
3966
|
+
|
3967
|
+
on_mouse_entered do
|
3968
|
+
puts 'entered'
|
3969
|
+
end
|
3970
|
+
|
3971
|
+
on_mouse_exited do
|
3972
|
+
puts 'exited'
|
3973
|
+
end
|
3974
|
+
|
3975
|
+
on_key_event do |area_key_event|
|
3976
|
+
p area_key_event
|
3977
|
+
end
|
3978
|
+
|
3979
|
+
on_key_up do |area_key_event|
|
3980
|
+
puts 'key up'
|
3981
|
+
end
|
3982
|
+
|
3983
|
+
on_key_down do |area_key_event|
|
3984
|
+
puts 'key down'
|
3985
|
+
end
|
3669
3986
|
}
|
3670
3987
|
}.show
|
3671
3988
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.10
|
data/examples/area_gallery.rb
CHANGED
@@ -38,13 +38,61 @@ window('Area Gallery', 400, 400) {
|
|
38
38
|
}
|
39
39
|
|
40
40
|
fill r: 202, g: 102, b: 204, a: 0.5
|
41
|
-
stroke
|
41
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
42
42
|
}
|
43
43
|
path { # declarative stable path
|
44
44
|
arc(200, 200, 90, 0, 360, false)
|
45
45
|
|
46
46
|
fill r: 202, g: 102, b: 204, a: 0.5
|
47
|
-
stroke
|
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
|
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
|
49
97
|
}
|
50
98
|
}.show
|
data/examples/area_gallery2.rb
CHANGED
@@ -92,7 +92,7 @@ window('Area Gallery', 400, 400) {
|
|
92
92
|
}
|
93
93
|
|
94
94
|
fill r: 202, g: 102, b: 204, a: 0.5
|
95
|
-
stroke
|
95
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
96
96
|
}
|
97
97
|
path { # declarative stable path
|
98
98
|
arc {
|
@@ -105,7 +105,55 @@ window('Area Gallery', 400, 400) {
|
|
105
105
|
}
|
106
106
|
|
107
107
|
fill r: 202, g: 102, b: 204, a: 0.5
|
108
|
-
stroke
|
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
|
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
|
110
158
|
}
|
111
159
|
}.show
|
data/examples/area_gallery3.rb
CHANGED
@@ -39,14 +39,62 @@ window('Area Gallery', 400, 400) {
|
|
39
39
|
}
|
40
40
|
|
41
41
|
fill r: 202, g: 102, b: 204, a: 0.5
|
42
|
-
stroke
|
42
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
43
43
|
}
|
44
44
|
path { # a dynamic path is added semi-declaratively inside on_draw block
|
45
45
|
arc(200, 200, 90, 0, 360, false)
|
46
46
|
|
47
47
|
fill r: 202, g: 102, b: 204, a: 0.5
|
48
|
-
stroke
|
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
|
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
|
51
99
|
}
|
52
100
|
}.show
|
data/examples/area_gallery4.rb
CHANGED
@@ -93,7 +93,7 @@ window('Area Gallery', 400, 400) {
|
|
93
93
|
}
|
94
94
|
|
95
95
|
fill r: 202, g: 102, b: 204, a: 0.5
|
96
|
-
stroke
|
96
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
97
97
|
}
|
98
98
|
path { # a dynamic path is added semi-declaratively inside on_draw block
|
99
99
|
arc {
|
@@ -106,8 +106,56 @@ window('Area Gallery', 400, 400) {
|
|
106
106
|
}
|
107
107
|
|
108
108
|
fill r: 202, g: 102, b: 204, a: 0.5
|
109
|
-
stroke
|
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
|
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
|
112
160
|
}
|
113
161
|
}.show
|
data/examples/grid.rb
CHANGED
@@ -6,7 +6,7 @@ include Glimmer
|
|
6
6
|
|
7
7
|
window('Grid') {
|
8
8
|
tab {
|
9
|
-
tab_item('
|
9
|
+
tab_item('Span') {
|
10
10
|
grid {
|
11
11
|
4.times { |top_value|
|
12
12
|
4.times { |left_value|
|
@@ -46,7 +46,7 @@ window('Grid') {
|
|
46
46
|
}
|
47
47
|
}
|
48
48
|
}
|
49
|
-
tab_item('
|
49
|
+
tab_item('Expand') {
|
50
50
|
grid {
|
51
51
|
label("(0, 0) hexpand/vexpand\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
|
52
52
|
left 0
|
@@ -68,5 +68,41 @@ window('Grid') {
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
}
|
71
|
+
tab_item('Align') {
|
72
|
+
grid {
|
73
|
+
label("(0, 0) halign/valign fill\nall available horizontal space is taken\nand\nall\navailable\nvertical\nspace\nis\ntaken") {
|
74
|
+
left 0
|
75
|
+
top 0
|
76
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
77
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
78
|
+
halign :fill
|
79
|
+
valign :fill
|
80
|
+
}
|
81
|
+
label("(1, 0) halign/valign start") {
|
82
|
+
left 1
|
83
|
+
top 0
|
84
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
85
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
86
|
+
halign :start
|
87
|
+
valign :start
|
88
|
+
}
|
89
|
+
label("(0, 1) halign/valign center") {
|
90
|
+
left 0
|
91
|
+
top 1
|
92
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
93
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
94
|
+
halign :center
|
95
|
+
valign :center
|
96
|
+
}
|
97
|
+
label("(1, 1) halign/valign end") {
|
98
|
+
left 1
|
99
|
+
top 1
|
100
|
+
hexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
101
|
+
vexpand true unless OS.mac? # on Mac, only the first label is given all space, so avoid expanding
|
102
|
+
halign :end
|
103
|
+
valign :end
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
71
107
|
}
|
72
108
|
}.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', 'on_key_event', 'on_key_down', 'on_key_up']
|
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,10 +84,42 @@ 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
|
-
|
100
|
-
|
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
|
113
|
+
@area_handler.KeyEvent = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_key_event|
|
114
|
+
area_key_event = ::LibUI::FFI::AreaKeyEvent.new(area_key_event)
|
115
|
+
area_key_event = area_key_event_hash(area_key_event)
|
116
|
+
on_key_event.each { |listener| listener.call(area_key_event) }
|
117
|
+
if area_key_event[:up]
|
118
|
+
on_key_up.each { |listener| listener.call(area_key_event) }
|
119
|
+
else
|
120
|
+
on_key_down.each { |listener| listener.call(area_key_event) }
|
121
|
+
end
|
122
|
+
end
|
101
123
|
end
|
102
124
|
|
103
125
|
def area_draw_params_hash(area_draw_params)
|
@@ -111,6 +133,62 @@ module Glimmer
|
|
111
133
|
clip_height: area_draw_params.ClipHeight,
|
112
134
|
}
|
113
135
|
end
|
136
|
+
|
137
|
+
def area_mouse_event_hash(area_mouse_event)
|
138
|
+
{
|
139
|
+
x: area_mouse_event.X,
|
140
|
+
y: area_mouse_event.Y,
|
141
|
+
area_width: area_mouse_event.AreaWidth,
|
142
|
+
area_height: area_mouse_event.AreaHeight,
|
143
|
+
down: area_mouse_event.Down,
|
144
|
+
up: area_mouse_event.Up,
|
145
|
+
count: area_mouse_event.Count,
|
146
|
+
modifers: modifiers_to_symbols(area_mouse_event.Modifiers),
|
147
|
+
held: area_mouse_event.Held1To64,
|
148
|
+
}
|
149
|
+
end
|
150
|
+
|
151
|
+
def area_key_event_hash(area_key_event)
|
152
|
+
{
|
153
|
+
key: key_to_char(area_key_event.Key),
|
154
|
+
key_value: area_key_event.Key,
|
155
|
+
ext_key: ext_key_to_symbol(area_key_event.ExtKey),
|
156
|
+
ext_key_value: area_key_event.ExtKey,
|
157
|
+
modifier: modifiers_to_symbols(area_key_event.Modifier).first,
|
158
|
+
modifiers: modifiers_to_symbols(area_key_event.Modifiers),
|
159
|
+
up: Glimmer::LibUI.integer_to_boolean(area_key_event.Up),
|
160
|
+
}
|
161
|
+
end
|
162
|
+
|
163
|
+
def key_to_char(key)
|
164
|
+
key.chr if key > 0
|
165
|
+
end
|
166
|
+
|
167
|
+
def ext_key_to_symbol(ext_key_value)
|
168
|
+
Glimmer::LibUI.enum_symbols(:ext_key)[ext_key_value - 1].to_s.to_sym if ext_key_value > 0
|
169
|
+
end
|
170
|
+
|
171
|
+
def modifiers_to_symbols(modifiers_value)
|
172
|
+
symbols = []
|
173
|
+
modifiers_value = extract_symbol_from_modifiers_value(modifiers_value, symbols: symbols) while modifiers_value > 0
|
174
|
+
symbols
|
175
|
+
end
|
176
|
+
|
177
|
+
def extract_symbol_from_modifiers_value(modifiers_value, symbols: )
|
178
|
+
if modifiers_value >= 8
|
179
|
+
symbols << :command
|
180
|
+
modifiers_value -= 8
|
181
|
+
elsif modifiers_value >= 4
|
182
|
+
symbols << :shift
|
183
|
+
modifiers_value -= 4
|
184
|
+
elsif modifiers_value >= 2
|
185
|
+
symbols << :alt
|
186
|
+
modifiers_value -= 2
|
187
|
+
elsif modifiers_value >= 1
|
188
|
+
symbols << :control
|
189
|
+
modifiers_value -= 1
|
190
|
+
end
|
191
|
+
end
|
114
192
|
end
|
115
193
|
end
|
116
194
|
end
|
@@ -36,7 +36,18 @@ module Glimmer
|
|
36
36
|
child.halign = 0 if child.halign.nil?
|
37
37
|
child.vexpand = false if child.vexpand.nil?
|
38
38
|
child.valign = 0 if child.valign.nil?
|
39
|
-
::LibUI.grid_append(
|
39
|
+
::LibUI.grid_append(
|
40
|
+
@libui,
|
41
|
+
child.libui,
|
42
|
+
child.left,
|
43
|
+
child.top,
|
44
|
+
child.xspan,
|
45
|
+
child.yspan,
|
46
|
+
Glimmer::LibUI.boolean_to_integer(child.hexpand),
|
47
|
+
Glimmer::LibUI.enum_symbol_to_value(:align, child.halign),
|
48
|
+
Glimmer::LibUI.boolean_to_integer(child.vexpand),
|
49
|
+
Glimmer::LibUI.enum_symbol_to_value(:align, child.valign)
|
50
|
+
)
|
40
51
|
children << child
|
41
52
|
end
|
42
53
|
|
@@ -117,17 +117,24 @@ module Glimmer
|
|
117
117
|
|
118
118
|
def draw_stroke_params
|
119
119
|
@draw_stroke_params ||= ::LibUI::FFI::DrawStrokeParams.malloc
|
120
|
-
@draw_stroke_params.Cap =
|
121
|
-
@draw_stroke_params.Join =
|
120
|
+
@draw_stroke_params.Cap = draw_line_cap # flat
|
121
|
+
@draw_stroke_params.Join = draw_line_join # miter
|
122
122
|
@draw_stroke_params.Thickness = @stroke[:thickness] || 1
|
123
123
|
@draw_stroke_params.MiterLimit = @stroke[:miter_limit] || 10 # DEFAULT_MITER_LIMIT
|
124
|
-
@
|
125
|
-
@draw_stroke_params.
|
126
|
-
@draw_stroke_params.NumDashes = @stroke[:num_dashes] || 0 # TODO reimplement this line correctly (perhaps no need to pass num dashes, yet dashes themselves and use their count here)
|
124
|
+
@draw_stroke_params.Dashes = @stroke[:dashes].to_a.pack('d*')
|
125
|
+
@draw_stroke_params.NumDashes = @stroke[:dashes].to_a.count
|
127
126
|
@draw_stroke_params.DashPhase = @stroke[:dash_phase] || 0
|
128
127
|
@draw_stroke_params
|
129
128
|
end
|
130
129
|
|
130
|
+
def draw_line_cap
|
131
|
+
Glimmer::LibUI.enum_symbol_to_value(:draw_line_cap, @stroke && @stroke[:cap])
|
132
|
+
end
|
133
|
+
|
134
|
+
def draw_line_join
|
135
|
+
Glimmer::LibUI.enum_symbol_to_value(:draw_line_join, @stroke && @stroke[:join])
|
136
|
+
end
|
137
|
+
|
131
138
|
def destroy
|
132
139
|
@parent_proxy&.children&.delete(self)
|
133
140
|
ControlProxy.control_proxies.delete(self)
|
@@ -144,20 +151,7 @@ module Glimmer
|
|
144
151
|
end
|
145
152
|
|
146
153
|
def init_draw_brush(draw_brush, draw_brush_args)
|
147
|
-
|
148
|
-
when Integer
|
149
|
-
draw_brush.Type = draw_brush_args[:type]
|
150
|
-
when :solid, 'solid'
|
151
|
-
draw_brush.Type = 0
|
152
|
-
when :linear_gradient, 'linear_gradient'
|
153
|
-
draw_brush.Type = 1
|
154
|
-
when :radial_gradient, 'radial_gradient'
|
155
|
-
draw_brush.Type = 2
|
156
|
-
when :image, 'image'
|
157
|
-
draw_brush.Type = 3
|
158
|
-
else
|
159
|
-
draw_brush.Type = 0
|
160
|
-
end
|
154
|
+
draw_brush.Type = Glimmer::LibUI.enum_symbol_to_value(:draw_brush_type, draw_brush_args[:type])
|
161
155
|
draw_brush.R = (draw_brush_args[:r] || draw_brush_args[:red]).to_f / 255.0
|
162
156
|
draw_brush.G = (draw_brush_args[:g] || draw_brush_args[:green]).to_f / 255.0
|
163
157
|
draw_brush.B = (draw_brush_args[:b] || draw_brush_args[:blue]).to_f / 255.0
|
@@ -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/libui.rb
CHANGED
@@ -87,6 +87,23 @@ module Glimmer
|
|
87
87
|
end
|
88
88
|
value
|
89
89
|
end
|
90
|
+
|
91
|
+
# Returns ruby underscored symbols for enum values starting with enum name (camelcase, e.g. 'ext_key')
|
92
|
+
def enum_symbols(enum_name)
|
93
|
+
enum_name = enum_name.to_s.underscore.to_sym
|
94
|
+
@enum_symbols ||= {}
|
95
|
+
@enum_symbols[enum_name] ||= ::LibUI.constants.select { |c| c.to_s.start_with?(enum_name.to_s.camelcase(:upper)) }.map { |c| c.to_s.underscore.sub("#{enum_name}_", '').to_sym }
|
96
|
+
end
|
97
|
+
|
98
|
+
def enum_symbol_to_value(enum_name, enum_symbol, default_index: 0)
|
99
|
+
if enum_symbol.is_a?(Integer)
|
100
|
+
enum_symbol
|
101
|
+
elsif enum_symbols(enum_name).include?(enum_symbol.to_s.to_sym)
|
102
|
+
::LibUI.const_get("#{enum_name}_#{enum_symbol}".camelcase(:upper))
|
103
|
+
else
|
104
|
+
enum_symbol_to_value(enum_name, enum_symbols(enum_name)[default_index])
|
105
|
+
end
|
106
|
+
end
|
90
107
|
end
|
91
108
|
end
|
92
109
|
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.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: 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
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.2.
|
19
|
+
version: 2.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.2.
|
26
|
+
version: 2.2.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: os
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -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
|