glimmer-dsl-libui 0.4.2 → 0.4.6
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 +33 -0
- data/README.md +1359 -200
- data/VERSION +1 -1
- data/examples/basic_entry.rb +27 -24
- data/examples/basic_entry2.rb +31 -0
- data/examples/color_button.rb +18 -13
- data/examples/color_button2.rb +14 -0
- data/examples/dynamic_area.rb +77 -90
- data/examples/dynamic_area2.rb +14 -12
- data/examples/dynamic_area3.rb +90 -0
- data/examples/dynamic_area4.rb +95 -0
- data/examples/font_button.rb +17 -12
- data/examples/font_button2.rb +18 -0
- data/examples/form.rb +42 -30
- data/examples/form2.rb +37 -0
- data/examples/form_table.rb +100 -87
- data/examples/form_table2.rb +93 -0
- data/examples/histogram.rb +93 -91
- data/examples/histogram2.rb +109 -0
- data/examples/login.rb +45 -39
- data/examples/login2.rb +55 -0
- data/examples/login3.rb +65 -0
- data/examples/login4.rb +61 -0
- data/examples/login5.rb +43 -0
- data/examples/meta_example.rb +9 -6
- data/examples/method_based_custom_keyword.rb +8 -15
- data/examples/method_based_custom_keyword2.rb +97 -0
- data/examples/timer.rb +28 -31
- data/examples/timer2.rb +129 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/data_binding_expression.rb +4 -6
- data/lib/glimmer/libui/attributed_string.rb +3 -0
- data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +5 -0
- data/lib/glimmer/libui/control_proxy/entry_proxy.rb +5 -0
- data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +4 -0
- data/lib/glimmer/libui/control_proxy/multiline_entry_proxy.rb +5 -0
- data/lib/glimmer/libui/control_proxy/slider_proxy.rb +38 -0
- data/lib/glimmer/libui/control_proxy/spinbox_proxy.rb +38 -0
- data/lib/glimmer/libui/control_proxy.rb +4 -0
- data/lib/glimmer/libui/data_bindable.rb +39 -0
- data/lib/glimmer/libui/shape.rb +2 -0
- metadata +19 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.6
|
data/examples/basic_entry.rb
CHANGED
@@ -2,30 +2,33 @@
|
|
2
2
|
|
3
3
|
require 'glimmer-dsl-libui'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
5
|
+
class BasicEntry
|
6
|
+
include Glimmer
|
7
|
+
|
8
|
+
attr_accessor :entry_text
|
9
|
+
|
10
|
+
def launch
|
11
|
+
window('Basic Entry', 300, 50) {
|
12
|
+
horizontal_box {
|
13
|
+
entry {
|
14
|
+
# stretchy true # Smart default option for appending to horizontal_box
|
15
|
+
text <=> [self, :entry_text, after_write: ->(text) {puts text; $stdout.flush}] # bidirectional data-binding between text property and entry_text attribute, printing after write to model.
|
16
|
+
}
|
17
|
+
|
18
|
+
button('Button') {
|
19
|
+
stretchy false # stretchy property is available when control is nested under horizontal_box
|
20
|
+
|
21
|
+
on_clicked do
|
22
|
+
msg_box('You entered', entry_text)
|
23
|
+
end
|
24
|
+
}
|
25
|
+
}
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
msg_box('You entered', text)
|
27
|
+
on_closing do
|
28
|
+
puts 'Bye Bye'
|
24
29
|
end
|
25
|
-
}
|
26
|
-
}
|
27
|
-
|
28
|
-
on_closing do
|
29
|
-
puts 'Bye Bye'
|
30
|
+
}.show
|
30
31
|
end
|
31
|
-
|
32
|
+
end
|
33
|
+
|
34
|
+
BasicEntry.new.launch
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
|
5
|
+
include Glimmer
|
6
|
+
|
7
|
+
window('Basic Entry', 300, 50) {
|
8
|
+
horizontal_box {
|
9
|
+
e = entry {
|
10
|
+
# stretchy true # Smart default option for appending to horizontal_box
|
11
|
+
|
12
|
+
on_changed do
|
13
|
+
puts e.text
|
14
|
+
$stdout.flush # For Windows
|
15
|
+
end
|
16
|
+
}
|
17
|
+
|
18
|
+
button('Button') {
|
19
|
+
stretchy false # stretchy property is available when control is nested under horizontal_box
|
20
|
+
|
21
|
+
on_clicked do
|
22
|
+
text = e.text
|
23
|
+
msg_box('You entered', text)
|
24
|
+
end
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
on_closing do
|
29
|
+
puts 'Bye Bye'
|
30
|
+
end
|
31
|
+
}.show
|
data/examples/color_button.rb
CHANGED
@@ -1,16 +1,21 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
require 'glimmer-dsl-libui'
|
4
2
|
|
5
|
-
|
3
|
+
class ColorButton
|
4
|
+
include Glimmer
|
5
|
+
|
6
|
+
attr_accessor :selected_color
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@selected_color = :blue
|
10
|
+
end
|
11
|
+
|
12
|
+
def launch
|
13
|
+
window('color button', 240) {
|
14
|
+
color_button {
|
15
|
+
color <=> [self, :selected_color, after_write: ->(color) {p color}]
|
16
|
+
}
|
17
|
+
}.show
|
18
|
+
end
|
19
|
+
end
|
6
20
|
|
7
|
-
|
8
|
-
color_button { |cb|
|
9
|
-
color :blue
|
10
|
-
|
11
|
-
on_changed do
|
12
|
-
rgba = cb.color
|
13
|
-
p rgba
|
14
|
-
end
|
15
|
-
}
|
16
|
-
}.show
|
21
|
+
ColorButton.new.launch
|
data/examples/dynamic_area.rb
CHANGED
@@ -1,97 +1,84 @@
|
|
1
1
|
require 'glimmer-dsl-libui'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
window('Dynamic Area', 240, 600) {
|
6
|
-
margined true
|
3
|
+
class DynamicArea
|
4
|
+
include Glimmer
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@y_spinbox = spinbox(0, 1000) {
|
26
|
-
label 'y'
|
27
|
-
value 25
|
28
|
-
|
29
|
-
on_changed do
|
30
|
-
@area.queue_redraw_all
|
31
|
-
end
|
32
|
-
}
|
33
|
-
|
34
|
-
@width_spinbox = spinbox(0, 1000) {
|
35
|
-
label 'width'
|
36
|
-
value 150
|
37
|
-
|
38
|
-
on_changed do
|
39
|
-
@area.queue_redraw_all
|
40
|
-
end
|
41
|
-
}
|
42
|
-
|
43
|
-
@height_spinbox = spinbox(0, 1000) {
|
44
|
-
label 'height'
|
45
|
-
value 150
|
46
|
-
|
47
|
-
on_changed do
|
48
|
-
@area.queue_redraw_all
|
49
|
-
end
|
50
|
-
}
|
51
|
-
|
52
|
-
@red_spinbox = spinbox(0, 255) {
|
53
|
-
label 'red'
|
54
|
-
value 102
|
55
|
-
|
56
|
-
on_changed do
|
57
|
-
@area.queue_redraw_all
|
58
|
-
end
|
59
|
-
}
|
60
|
-
|
61
|
-
@green_spinbox = spinbox(0, 255) {
|
62
|
-
label 'green'
|
63
|
-
value 102
|
64
|
-
|
65
|
-
on_changed do
|
66
|
-
@area.queue_redraw_all
|
67
|
-
end
|
68
|
-
}
|
6
|
+
attr_accessor :rectangle_x, :rectangle_y, :rectangle_width, :rectangle_height, :rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@rectangle_x = 25
|
10
|
+
@rectangle_y = 25
|
11
|
+
@rectangle_width = 150
|
12
|
+
@rectangle_height = 150
|
13
|
+
@rectangle_red = 102
|
14
|
+
@rectangle_green = 102
|
15
|
+
@rectangle_blue = 204
|
16
|
+
@rectangle_alpha = 100
|
17
|
+
end
|
18
|
+
|
19
|
+
def launch
|
20
|
+
window('Dynamic Area', 240, 600) {
|
21
|
+
margined true
|
69
22
|
|
70
|
-
|
71
|
-
label '
|
72
|
-
|
23
|
+
vertical_box {
|
24
|
+
label('Rectangle Properties') {
|
25
|
+
stretchy false
|
26
|
+
}
|
73
27
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
28
|
+
form {
|
29
|
+
stretchy false
|
30
|
+
|
31
|
+
spinbox(0, 1000) {
|
32
|
+
label 'x'
|
33
|
+
value <=> [self, :rectangle_x, after_write: -> {@area.queue_redraw_all}]
|
34
|
+
}
|
35
|
+
|
36
|
+
spinbox(0, 1000) {
|
37
|
+
label 'y'
|
38
|
+
value <=> [self, :rectangle_y, after_write: -> {@area.queue_redraw_all}]
|
39
|
+
}
|
40
|
+
|
41
|
+
spinbox(0, 1000) {
|
42
|
+
label 'width'
|
43
|
+
value <=> [self, :rectangle_width, after_write: -> {@area.queue_redraw_all}]
|
44
|
+
}
|
45
|
+
|
46
|
+
spinbox(0, 1000) {
|
47
|
+
label 'height'
|
48
|
+
value <=> [self, :rectangle_height, after_write: -> {@area.queue_redraw_all}]
|
49
|
+
}
|
50
|
+
|
51
|
+
spinbox(0, 255) {
|
52
|
+
label 'red'
|
53
|
+
value <=> [self, :rectangle_red, after_write: -> {@area.queue_redraw_all}]
|
54
|
+
}
|
55
|
+
|
56
|
+
spinbox(0, 255) {
|
57
|
+
label 'green'
|
58
|
+
value <=> [self, :rectangle_green, after_write: -> {@area.queue_redraw_all}]
|
59
|
+
}
|
60
|
+
|
61
|
+
spinbox(0, 255) {
|
62
|
+
label 'blue'
|
63
|
+
value <=> [self, :rectangle_blue, after_write: -> {@area.queue_redraw_all}]
|
64
|
+
}
|
65
|
+
|
66
|
+
spinbox(0, 100) {
|
67
|
+
label 'alpha'
|
68
|
+
value <=> [self, :rectangle_alpha, after_write: -> {@area.queue_redraw_all}]
|
69
|
+
}
|
70
|
+
}
|
82
71
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
@area = area {
|
90
|
-
on_draw do |area_draw_params|
|
91
|
-
rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # a dynamic path is added semi-declaratively inside on_draw block
|
92
|
-
fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
|
72
|
+
@area = area {
|
73
|
+
on_draw do |area_draw_params|
|
74
|
+
rectangle(rectangle_x, rectangle_y, rectangle_width, rectangle_height) { # a dynamic path is added semi-declaratively inside on_draw block
|
75
|
+
fill r: rectangle_red, g: rectangle_green, b: rectangle_blue, a: rectangle_alpha / 100.0
|
76
|
+
}
|
77
|
+
end
|
93
78
|
}
|
94
|
-
|
95
|
-
}
|
96
|
-
|
97
|
-
|
79
|
+
}
|
80
|
+
}.show
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
DynamicArea.new.launch
|
data/examples/dynamic_area2.rb
CHANGED
@@ -18,7 +18,7 @@ window('Dynamic Area', 240, 600) {
|
|
18
18
|
value 25
|
19
19
|
|
20
20
|
on_changed do
|
21
|
-
@
|
21
|
+
@area.queue_redraw_all
|
22
22
|
end
|
23
23
|
}
|
24
24
|
|
@@ -27,7 +27,7 @@ window('Dynamic Area', 240, 600) {
|
|
27
27
|
value 25
|
28
28
|
|
29
29
|
on_changed do
|
30
|
-
@
|
30
|
+
@area.queue_redraw_all
|
31
31
|
end
|
32
32
|
}
|
33
33
|
|
@@ -36,7 +36,7 @@ window('Dynamic Area', 240, 600) {
|
|
36
36
|
value 150
|
37
37
|
|
38
38
|
on_changed do
|
39
|
-
@
|
39
|
+
@area.queue_redraw_all
|
40
40
|
end
|
41
41
|
}
|
42
42
|
|
@@ -45,7 +45,7 @@ window('Dynamic Area', 240, 600) {
|
|
45
45
|
value 150
|
46
46
|
|
47
47
|
on_changed do
|
48
|
-
@
|
48
|
+
@area.queue_redraw_all
|
49
49
|
end
|
50
50
|
}
|
51
51
|
|
@@ -54,7 +54,7 @@ window('Dynamic Area', 240, 600) {
|
|
54
54
|
value 102
|
55
55
|
|
56
56
|
on_changed do
|
57
|
-
@
|
57
|
+
@area.queue_redraw_all
|
58
58
|
end
|
59
59
|
}
|
60
60
|
|
@@ -63,7 +63,7 @@ window('Dynamic Area', 240, 600) {
|
|
63
63
|
value 102
|
64
64
|
|
65
65
|
on_changed do
|
66
|
-
@
|
66
|
+
@area.queue_redraw_all
|
67
67
|
end
|
68
68
|
}
|
69
69
|
|
@@ -72,7 +72,7 @@ window('Dynamic Area', 240, 600) {
|
|
72
72
|
value 204
|
73
73
|
|
74
74
|
on_changed do
|
75
|
-
@
|
75
|
+
@area.queue_redraw_all
|
76
76
|
end
|
77
77
|
}
|
78
78
|
|
@@ -81,15 +81,17 @@ window('Dynamic Area', 240, 600) {
|
|
81
81
|
value 100
|
82
82
|
|
83
83
|
on_changed do
|
84
|
-
@
|
84
|
+
@area.queue_redraw_all
|
85
85
|
end
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
89
|
-
area {
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
@area = area {
|
90
|
+
on_draw do |area_draw_params|
|
91
|
+
rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # a dynamic path is added semi-declaratively inside on_draw block
|
92
|
+
fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
|
93
|
+
}
|
94
|
+
end
|
93
95
|
}
|
94
96
|
}
|
95
97
|
}.show
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'glimmer-dsl-libui'
|
2
|
+
|
3
|
+
class DynamicArea
|
4
|
+
include Glimmer
|
5
|
+
|
6
|
+
attr_accessor :rectangle_x, :rectangle_y, :rectangle_width, :rectangle_height, :rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@rectangle_x = 25
|
10
|
+
@rectangle_y = 25
|
11
|
+
@rectangle_width = 150
|
12
|
+
@rectangle_height = 150
|
13
|
+
@rectangle_red = 102
|
14
|
+
@rectangle_green = 102
|
15
|
+
@rectangle_blue = 204
|
16
|
+
@rectangle_alpha = 100
|
17
|
+
end
|
18
|
+
|
19
|
+
def rectangle_fill
|
20
|
+
{ r: rectangle_red, g: rectangle_green, b: rectangle_blue, a: rectangle_alpha / 100.0 }
|
21
|
+
end
|
22
|
+
|
23
|
+
def launch
|
24
|
+
window('Dynamic Area', 240, 600) {
|
25
|
+
margined true
|
26
|
+
|
27
|
+
vertical_box {
|
28
|
+
label('Rectangle Properties') {
|
29
|
+
stretchy false
|
30
|
+
}
|
31
|
+
|
32
|
+
form {
|
33
|
+
stretchy false
|
34
|
+
|
35
|
+
@x_spinbox = spinbox(0, 1000) {
|
36
|
+
label 'x'
|
37
|
+
value <=> [self, :rectangle_x]
|
38
|
+
}
|
39
|
+
|
40
|
+
@y_spinbox = spinbox(0, 1000) {
|
41
|
+
label 'y'
|
42
|
+
value <=> [self, :rectangle_y]
|
43
|
+
}
|
44
|
+
|
45
|
+
@width_spinbox = spinbox(0, 1000) {
|
46
|
+
label 'width'
|
47
|
+
value <=> [self, :rectangle_width]
|
48
|
+
}
|
49
|
+
|
50
|
+
@height_spinbox = spinbox(0, 1000) {
|
51
|
+
label 'height'
|
52
|
+
value <=> [self, :rectangle_height]
|
53
|
+
}
|
54
|
+
|
55
|
+
@red_spinbox = spinbox(0, 255) {
|
56
|
+
label 'red'
|
57
|
+
value <=> [self, :rectangle_red]
|
58
|
+
}
|
59
|
+
|
60
|
+
@green_spinbox = spinbox(0, 255) {
|
61
|
+
label 'green'
|
62
|
+
value <=> [self, :rectangle_green]
|
63
|
+
}
|
64
|
+
|
65
|
+
@blue_spinbox = spinbox(0, 255) {
|
66
|
+
label 'blue'
|
67
|
+
value <=> [self, :rectangle_blue]
|
68
|
+
}
|
69
|
+
|
70
|
+
@alpha_spinbox = spinbox(0, 100) {
|
71
|
+
label 'alpha'
|
72
|
+
value <=> [self, :rectangle_alpha]
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
area {
|
77
|
+
@rectangle = rectangle { # stable implicit path shape
|
78
|
+
x <= [self, :rectangle_x]
|
79
|
+
y <= [self, :rectangle_y]
|
80
|
+
width <= [self, :rectangle_width]
|
81
|
+
height <= [self, :rectangle_height]
|
82
|
+
fill <= [self, :rectangle_fill, computed_by: [:rectangle_red, :rectangle_green, :rectangle_blue, :rectangle_alpha]]
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}.show
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
DynamicArea.new.launch
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'glimmer-dsl-libui'
|
2
|
+
|
3
|
+
include Glimmer
|
4
|
+
|
5
|
+
window('Dynamic Area', 240, 600) {
|
6
|
+
margined true
|
7
|
+
|
8
|
+
vertical_box {
|
9
|
+
label('Rectangle Properties') {
|
10
|
+
stretchy false
|
11
|
+
}
|
12
|
+
|
13
|
+
form {
|
14
|
+
stretchy false
|
15
|
+
|
16
|
+
@x_spinbox = spinbox(0, 1000) {
|
17
|
+
label 'x'
|
18
|
+
value 25
|
19
|
+
|
20
|
+
on_changed do
|
21
|
+
@rectangle.x = @x_spinbox.value # updating properties automatically triggers area.queue_redraw_all
|
22
|
+
end
|
23
|
+
}
|
24
|
+
|
25
|
+
@y_spinbox = spinbox(0, 1000) {
|
26
|
+
label 'y'
|
27
|
+
value 25
|
28
|
+
|
29
|
+
on_changed do
|
30
|
+
@rectangle.y = @y_spinbox.value # updating properties automatically triggers area.queue_redraw_all
|
31
|
+
end
|
32
|
+
}
|
33
|
+
|
34
|
+
@width_spinbox = spinbox(0, 1000) {
|
35
|
+
label 'width'
|
36
|
+
value 150
|
37
|
+
|
38
|
+
on_changed do
|
39
|
+
@rectangle.width = @width_spinbox.value # updating properties automatically triggers area.queue_redraw_all
|
40
|
+
end
|
41
|
+
}
|
42
|
+
|
43
|
+
@height_spinbox = spinbox(0, 1000) {
|
44
|
+
label 'height'
|
45
|
+
value 150
|
46
|
+
|
47
|
+
on_changed do
|
48
|
+
@rectangle.height = @height_spinbox.value # updating properties automatically triggers area.queue_redraw_all
|
49
|
+
end
|
50
|
+
}
|
51
|
+
|
52
|
+
@red_spinbox = spinbox(0, 255) {
|
53
|
+
label 'red'
|
54
|
+
value 102
|
55
|
+
|
56
|
+
on_changed do
|
57
|
+
@rectangle.fill[:r] = @red_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
|
58
|
+
end
|
59
|
+
}
|
60
|
+
|
61
|
+
@green_spinbox = spinbox(0, 255) {
|
62
|
+
label 'green'
|
63
|
+
value 102
|
64
|
+
|
65
|
+
on_changed do
|
66
|
+
@rectangle.fill[:g] = @green_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
|
67
|
+
end
|
68
|
+
}
|
69
|
+
|
70
|
+
@blue_spinbox = spinbox(0, 255) {
|
71
|
+
label 'blue'
|
72
|
+
value 204
|
73
|
+
|
74
|
+
on_changed do
|
75
|
+
@rectangle.fill[:b] = @blue_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
|
76
|
+
end
|
77
|
+
}
|
78
|
+
|
79
|
+
@alpha_spinbox = spinbox(0, 100) {
|
80
|
+
label 'alpha'
|
81
|
+
value 100
|
82
|
+
|
83
|
+
on_changed do
|
84
|
+
@rectangle.fill[:a] = @alpha_spinbox.value / 100.0 # updating hash properties automatically triggers area.queue_redraw_all
|
85
|
+
end
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
area {
|
90
|
+
@rectangle = rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # stable implicit path shape
|
91
|
+
fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}.show
|
data/examples/font_button.rb
CHANGED
@@ -2,17 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'glimmer-dsl-libui'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
on_changed do
|
10
|
-
font_descriptor = fb.font
|
11
|
-
p font_descriptor
|
12
|
-
end
|
13
|
-
}
|
5
|
+
class FontButton
|
6
|
+
include Glimmer
|
7
|
+
|
8
|
+
attr_accessor :font_descriptor
|
14
9
|
|
15
|
-
|
16
|
-
|
10
|
+
def launch
|
11
|
+
window('hello world', 300, 200) {
|
12
|
+
font_button {
|
13
|
+
font <=> [self, :font_descriptor, after_write: -> { p font_descriptor }]
|
14
|
+
}
|
15
|
+
|
16
|
+
on_closing do
|
17
|
+
puts 'Bye Bye'
|
18
|
+
end
|
19
|
+
}.show
|
17
20
|
end
|
18
|
-
|
21
|
+
end
|
22
|
+
|
23
|
+
FontButton.new.launch
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
|
5
|
+
include Glimmer
|
6
|
+
|
7
|
+
window('hello world', 300, 200) {
|
8
|
+
font_button { |fb|
|
9
|
+
on_changed do
|
10
|
+
font_descriptor = fb.font
|
11
|
+
p font_descriptor
|
12
|
+
end
|
13
|
+
}
|
14
|
+
|
15
|
+
on_closing do
|
16
|
+
puts 'Bye Bye'
|
17
|
+
end
|
18
|
+
}.show
|