glimmer-dsl-libui 0.1.4 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -0
- data/README.md +939 -255
- data/VERSION +1 -1
- data/examples/area_gallery.rb +72 -38
- data/examples/area_gallery2.rb +126 -92
- data/examples/area_gallery3.rb +74 -40
- data/examples/area_gallery4.rb +132 -98
- data/examples/basic_area2.rb +1 -1
- data/examples/basic_button.rb +2 -2
- data/examples/basic_entry.rb +2 -2
- data/examples/basic_transform.rb +27 -0
- data/examples/control_gallery.rb +3 -3
- data/examples/dynamic_area.rb +1 -1
- data/examples/form.rb +2 -2
- data/examples/histogram.rb +118 -0
- data/examples/meta_example.rb +71 -20
- data/examples/midi_player.rb +8 -10
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/control_expression.rb +0 -2
- data/lib/glimmer/dsl/libui/file_expression.rb +5 -1
- data/lib/glimmer/dsl/libui/shape_expression.rb +2 -4
- data/lib/glimmer/dsl/libui/tab_item_expression.rb +2 -2
- data/lib/glimmer/libui/control_proxy/area_proxy.rb +166 -0
- data/lib/glimmer/libui/{menu_item_proxy.rb → control_proxy/box/horizontal_box_proxy.rb} +9 -12
- data/lib/glimmer/libui/{horizontal_box_proxy.rb → control_proxy/box/vertical_box_proxy.rb} +10 -6
- data/lib/glimmer/libui/{box.rb → control_proxy/box.rb} +31 -27
- data/lib/glimmer/libui/{button_proxy.rb → control_proxy/button_proxy.rb} +14 -12
- data/lib/glimmer/libui/{checkbox_proxy.rb → control_proxy/checkbox_proxy.rb} +14 -12
- data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +118 -0
- data/lib/glimmer/libui/control_proxy/column/button_column_proxy.rb +76 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb +46 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb +80 -0
- data/lib/glimmer/libui/{radio_buttons_proxy.rb → control_proxy/column/image_column_proxy.rb} +14 -13
- data/lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb +48 -0
- data/lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb +44 -0
- data/lib/glimmer/libui/{checkbox_column_proxy.rb → control_proxy/column/text_column_proxy.rb} +17 -13
- data/lib/glimmer/libui/control_proxy/column.rb +55 -0
- data/lib/glimmer/libui/control_proxy/combobox_proxy.rb +45 -0
- data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/date_picker_proxy.rb +43 -0
- data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/time_picker_proxy.rb +43 -0
- data/lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb +72 -0
- data/lib/glimmer/libui/control_proxy/dual_column.rb +40 -0
- data/lib/glimmer/libui/control_proxy/editable_column.rb +46 -0
- data/lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb +45 -0
- data/lib/glimmer/libui/{dual_column.rb → control_proxy/enableable_column.rb} +18 -10
- data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +70 -0
- data/lib/glimmer/libui/{form_proxy.rb → control_proxy/form_proxy.rb} +26 -24
- data/lib/glimmer/libui/{grid_proxy.rb → control_proxy/grid_proxy.rb} +29 -27
- data/lib/glimmer/libui/{group_proxy.rb → control_proxy/group_proxy.rb} +24 -22
- data/lib/glimmer/libui/{image_part_proxy.rb → control_proxy/image_part_proxy.rb} +20 -18
- data/lib/glimmer/libui/{image_proxy.rb → control_proxy/image_proxy.rb} +32 -30
- data/lib/glimmer/libui/{combobox_proxy.rb → control_proxy/label_proxy.rb} +13 -13
- data/lib/glimmer/libui/control_proxy/matrix_proxy.rb +147 -0
- data/lib/glimmer/libui/{editable_column.rb → control_proxy/menu_item_proxy/about_menu_item_proxy.rb} +13 -16
- data/lib/glimmer/libui/control_proxy/menu_item_proxy/check_menu_item_proxy.rb +41 -0
- data/lib/glimmer/libui/{date_picker_proxy.rb → control_proxy/menu_item_proxy/preferences_menu_item_proxy.rb} +10 -10
- data/lib/glimmer/libui/{quit_menu_item_proxy.rb → control_proxy/menu_item_proxy/quit_menu_item_proxy.rb} +33 -29
- data/lib/glimmer/libui/control_proxy/menu_item_proxy/separator_menu_item_proxy.rb +41 -0
- data/lib/glimmer/libui/control_proxy/menu_item_proxy.rb +45 -0
- data/lib/glimmer/libui/{editable_combobox_proxy.rb → control_proxy/menu_proxy.rb} +13 -13
- data/lib/glimmer/libui/{vertical_box_proxy.rb → control_proxy/message_box/msg_box_error_proxy.rb} +9 -6
- data/lib/glimmer/libui/{multiline_entry_proxy.rb → control_proxy/message_box/msg_box_proxy.rb} +8 -6
- data/lib/glimmer/libui/{time_picker_proxy.rb → control_proxy/message_box.rb} +9 -10
- data/lib/glimmer/libui/{rectangle.rb → control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb} +6 -8
- data/lib/glimmer/libui/{progress_bar_column_proxy.rb → control_proxy/multiline_entry_proxy.rb} +10 -11
- data/lib/glimmer/libui/control_proxy/path_proxy.rb +190 -0
- data/lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb +45 -0
- data/lib/glimmer/libui/{button_column_proxy.rb → control_proxy/tab_item_proxy.rb} +37 -40
- data/lib/glimmer/libui/control_proxy/table_proxy.rb +182 -0
- data/lib/glimmer/libui/control_proxy/transformable.rb +74 -0
- data/lib/glimmer/libui/control_proxy/window_proxy.rb +128 -0
- data/lib/glimmer/libui/control_proxy.rb +72 -21
- data/lib/glimmer/libui/{enableable_column.rb → parent.rb} +7 -15
- data/lib/glimmer/libui/{arc.rb → shape/arc.rb} +13 -11
- data/lib/glimmer/libui/shape/bezier.rb +38 -0
- data/lib/glimmer/libui/{figure.rb → shape/figure.rb} +23 -21
- data/lib/glimmer/libui/{line.rb → shape/line.rb} +9 -7
- data/lib/glimmer/libui/{bezier.rb → shape/rectangle.rb} +9 -7
- data/lib/glimmer/libui/{square.rb → shape/square.rb} +9 -7
- data/lib/glimmer/libui/shape.rb +16 -15
- data/lib/glimmer/libui.rb +92 -0
- data/lib/glimmer-dsl-libui.rb +3 -0
- metadata +76 -53
- data/lib/glimmer/libui/about_menu_item_proxy.rb +0 -37
- data/lib/glimmer/libui/area_proxy.rb +0 -105
- data/lib/glimmer/libui/check_menu_item_proxy.rb +0 -37
- data/lib/glimmer/libui/checkbox_text_column_proxy.rb +0 -76
- data/lib/glimmer/libui/color_button_proxy.rb +0 -64
- data/lib/glimmer/libui/column.rb +0 -51
- data/lib/glimmer/libui/date_time_picker_proxy.rb +0 -68
- data/lib/glimmer/libui/font_button_proxy.rb +0 -68
- data/lib/glimmer/libui/image_column_proxy.rb +0 -40
- data/lib/glimmer/libui/image_text_column_proxy.rb +0 -44
- data/lib/glimmer/libui/label_proxy.rb +0 -41
- data/lib/glimmer/libui/menu_proxy.rb +0 -41
- data/lib/glimmer/libui/non_wrapping_multiline_entry_proxy.rb +0 -32
- data/lib/glimmer/libui/path_proxy.rb +0 -169
- data/lib/glimmer/libui/preferences_menu_item_proxy.rb +0 -37
- data/lib/glimmer/libui/separator_menu_item_proxy.rb +0 -37
- data/lib/glimmer/libui/tab_item_proxy.rb +0 -67
- data/lib/glimmer/libui/table_proxy.rb +0 -180
- data/lib/glimmer/libui/text_column_proxy.rb +0 -42
- data/lib/glimmer/libui/window_proxy.rb +0 -119
data/examples/area_gallery4.rb
CHANGED
@@ -3,113 +3,147 @@ require 'glimmer-dsl-libui'
|
|
3
3
|
include Glimmer
|
4
4
|
|
5
5
|
window('Area Gallery', 400, 400) {
|
6
|
-
|
7
|
-
|
8
|
-
on_draw
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
area {
|
7
|
+
on_draw do |area_draw_params|
|
8
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
9
|
+
square {
|
10
|
+
x 0
|
11
|
+
y 0
|
12
|
+
length 100
|
13
|
+
}
|
14
|
+
square {
|
15
|
+
x 100
|
16
|
+
y 100
|
17
|
+
length 400
|
18
|
+
}
|
19
|
+
|
20
|
+
fill r: 102, g: 102, b: 204
|
21
|
+
}
|
22
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
23
|
+
rectangle {
|
24
|
+
x 0
|
25
|
+
y 100
|
26
|
+
width 100
|
27
|
+
height 400
|
28
|
+
}
|
29
|
+
rectangle {
|
30
|
+
x 100
|
31
|
+
y 0
|
32
|
+
width 400
|
33
|
+
height 100
|
34
|
+
}
|
35
|
+
|
36
|
+
fill r: 204, g: 102, b: 204
|
37
|
+
}
|
38
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
39
|
+
figure {
|
40
|
+
x 100
|
41
|
+
y 100
|
42
|
+
|
43
|
+
line {
|
16
44
|
x 100
|
17
|
-
y
|
18
|
-
length 400
|
45
|
+
y 400
|
19
46
|
}
|
20
|
-
|
21
|
-
|
22
|
-
}
|
23
|
-
path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
|
24
|
-
rectangle {
|
25
|
-
x 0
|
47
|
+
line {
|
48
|
+
x 400
|
26
49
|
y 100
|
27
|
-
width 100
|
28
|
-
height 400
|
29
50
|
}
|
30
|
-
|
31
|
-
x
|
32
|
-
y
|
33
|
-
width 400
|
34
|
-
height 100
|
51
|
+
line {
|
52
|
+
x 400
|
53
|
+
y 400
|
35
54
|
}
|
36
|
-
|
37
|
-
|
55
|
+
|
56
|
+
closed true
|
38
57
|
}
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
}
|
56
|
-
|
57
|
-
closed true
|
58
|
+
|
59
|
+
fill r: 202, g: 102, b: 104, a: 0.5
|
60
|
+
stroke r: 0, g: 0, b: 0
|
61
|
+
}
|
62
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
63
|
+
figure {
|
64
|
+
x 0
|
65
|
+
y 0
|
66
|
+
|
67
|
+
bezier {
|
68
|
+
c1_x 200
|
69
|
+
c1_y 100
|
70
|
+
c2_x 100
|
71
|
+
c2_y 200
|
72
|
+
end_x 400
|
73
|
+
end_y 100
|
58
74
|
}
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
y 0
|
67
|
-
|
68
|
-
bezier {
|
69
|
-
c1_x 200
|
70
|
-
c1_y 100
|
71
|
-
c2_x 100
|
72
|
-
c2_y 200
|
73
|
-
end_x 400
|
74
|
-
end_y 100
|
75
|
-
}
|
76
|
-
bezier {
|
77
|
-
c1_x 300
|
78
|
-
c1_y 100
|
79
|
-
c2_x 100
|
80
|
-
c2_y 300
|
81
|
-
end_x 100
|
82
|
-
end_y 400
|
83
|
-
}
|
84
|
-
bezier {
|
85
|
-
c1_x 100
|
86
|
-
c1_y 300
|
87
|
-
c2_x 300
|
88
|
-
c2_y 100
|
89
|
-
end_x 400
|
90
|
-
end_y 400
|
91
|
-
}
|
92
|
-
|
93
|
-
closed true
|
75
|
+
bezier {
|
76
|
+
c1_x 300
|
77
|
+
c1_y 100
|
78
|
+
c2_x 100
|
79
|
+
c2_y 300
|
80
|
+
end_x 100
|
81
|
+
end_y 400
|
94
82
|
}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
y_center 200
|
103
|
-
radius 90
|
104
|
-
start_angle 0
|
105
|
-
sweep 360
|
106
|
-
is_negative false
|
83
|
+
bezier {
|
84
|
+
c1_x 100
|
85
|
+
c1_y 300
|
86
|
+
c2_x 300
|
87
|
+
c2_y 100
|
88
|
+
end_x 400
|
89
|
+
end_y 400
|
107
90
|
}
|
108
|
-
|
109
|
-
|
110
|
-
stroke thickness: 2, r: 0, g: 0, b: 0
|
91
|
+
|
92
|
+
closed true
|
111
93
|
}
|
112
|
-
|
113
|
-
|
94
|
+
|
95
|
+
fill r: 202, g: 102, b: 204, a: 0.5
|
96
|
+
stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
|
97
|
+
}
|
98
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
99
|
+
arc {
|
100
|
+
x_center 200
|
101
|
+
y_center 200
|
102
|
+
radius 90
|
103
|
+
start_angle 0
|
104
|
+
sweep 360
|
105
|
+
is_negative false
|
106
|
+
}
|
107
|
+
|
108
|
+
fill r: 202, g: 102, b: 204, a: 0.5
|
109
|
+
stroke r: 0, g: 0, b: 0, thickness: 2
|
110
|
+
}
|
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
|
114
148
|
}
|
115
149
|
}.show
|
data/examples/basic_area2.rb
CHANGED
@@ -8,7 +8,7 @@ window('Basic Area', 400, 400) {
|
|
8
8
|
vertical_box {
|
9
9
|
area {
|
10
10
|
on_draw do |area_draw_params|
|
11
|
-
path
|
11
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
12
12
|
rectangle(0, 0, 400, 400)
|
13
13
|
|
14
14
|
fill r: 102, g: 102, b: 204, a: 1.0
|
data/examples/basic_button.rb
CHANGED
@@ -4,10 +4,10 @@ require 'glimmer-dsl-libui'
|
|
4
4
|
|
5
5
|
include Glimmer
|
6
6
|
|
7
|
-
window('hello world', 300, 200) {
|
7
|
+
window('hello world', 300, 200) {
|
8
8
|
button('Button') {
|
9
9
|
on_clicked do
|
10
|
-
msg_box(
|
10
|
+
msg_box('Information', 'You clicked the button')
|
11
11
|
end
|
12
12
|
}
|
13
13
|
|
data/examples/basic_entry.rb
CHANGED
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
|
|
4
4
|
|
5
5
|
include Glimmer
|
6
6
|
|
7
|
-
window('Basic Entry', 300, 50) {
|
7
|
+
window('Basic Entry', 300, 50) {
|
8
8
|
horizontal_box {
|
9
9
|
e = entry {
|
10
10
|
# stretchy true # Smart default option for appending to horizontal_box
|
@@ -20,7 +20,7 @@ window('Basic Entry', 300, 50) { |w|
|
|
20
20
|
|
21
21
|
on_clicked do
|
22
22
|
text = e.text
|
23
|
-
msg_box(
|
23
|
+
msg_box('You entered', text)
|
24
24
|
end
|
25
25
|
}
|
26
26
|
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'glimmer-dsl-libui'
|
2
|
+
|
3
|
+
include Glimmer
|
4
|
+
|
5
|
+
window('Basic Transform', 350, 350) {
|
6
|
+
area {
|
7
|
+
path {
|
8
|
+
square(0, 0, 350)
|
9
|
+
|
10
|
+
fill r: 255, g: 255, b: 0
|
11
|
+
}
|
12
|
+
40.times do |n|
|
13
|
+
path {
|
14
|
+
square(0, 0, 100)
|
15
|
+
|
16
|
+
fill r: [255 - n*5, 0].max, g: [n*5, 255].min, b: 0, a: 0.5
|
17
|
+
stroke :black, thickness: 2
|
18
|
+
transform {
|
19
|
+
skew 0.15, 0.15
|
20
|
+
translate 50, 50
|
21
|
+
rotate 100, 100, -9 * n
|
22
|
+
scale 1.1, 1.1
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
}
|
27
|
+
}.show
|
data/examples/control_gallery.rb
CHANGED
@@ -7,14 +7,14 @@ include Glimmer
|
|
7
7
|
menu('File') {
|
8
8
|
menu_item('Open') {
|
9
9
|
on_clicked do
|
10
|
-
file = open_file
|
10
|
+
file = open_file
|
11
11
|
puts file unless file.nil?
|
12
12
|
end
|
13
13
|
}
|
14
14
|
|
15
15
|
menu_item('Save') {
|
16
16
|
on_clicked do
|
17
|
-
file = save_file
|
17
|
+
file = save_file
|
18
18
|
puts file unless file.nil?
|
19
19
|
end
|
20
20
|
}
|
@@ -57,7 +57,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500) {
|
|
57
57
|
stretchy false
|
58
58
|
|
59
59
|
on_clicked do
|
60
|
-
msg_box(
|
60
|
+
msg_box('Information', 'You clicked the button')
|
61
61
|
end
|
62
62
|
}
|
63
63
|
|
data/examples/dynamic_area.rb
CHANGED
@@ -88,7 +88,7 @@ window('Dynamic Area', 240, 600) {
|
|
88
88
|
|
89
89
|
@area = area {
|
90
90
|
on_draw do |area_draw_params|
|
91
|
-
path
|
91
|
+
path { # a dynamic path is added semi-declaratively inside on_draw block
|
92
92
|
rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value)
|
93
93
|
|
94
94
|
fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
|
data/examples/form.rb
CHANGED
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
|
|
4
4
|
|
5
5
|
include Glimmer
|
6
6
|
|
7
|
-
window('Form') {
|
7
|
+
window('Form') {
|
8
8
|
margined true
|
9
9
|
|
10
10
|
vertical_box {
|
@@ -20,7 +20,7 @@ window('Form') { |w|
|
|
20
20
|
|
21
21
|
button('Display Name') {
|
22
22
|
on_clicked do
|
23
|
-
msg_box(
|
23
|
+
msg_box('Name', "#{@first_name_entry.text} #{@last_name_entry.text}")
|
24
24
|
end
|
25
25
|
}
|
26
26
|
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# https://github.com/jamescook/libui-ruby/blob/master/example/histogram.rb
|
2
|
+
|
3
|
+
require 'glimmer-dsl-libui'
|
4
|
+
|
5
|
+
include Glimmer
|
6
|
+
|
7
|
+
X_OFF_LEFT = 20
|
8
|
+
Y_OFF_TOP = 20
|
9
|
+
X_OFF_RIGHT = 20
|
10
|
+
Y_OFF_BOTTOM = 20
|
11
|
+
POINT_RADIUS = 5
|
12
|
+
COLOR_BLUE = 0x1E90FF
|
13
|
+
|
14
|
+
@datapoints = 10.times.map {Random.new.rand(90)}
|
15
|
+
|
16
|
+
def graph_size(area_width, area_height)
|
17
|
+
graph_width = area_width - X_OFF_LEFT - X_OFF_RIGHT
|
18
|
+
graph_height = area_height - Y_OFF_TOP - Y_OFF_BOTTOM
|
19
|
+
[graph_width, graph_height]
|
20
|
+
end
|
21
|
+
|
22
|
+
def point_locations(width, height)
|
23
|
+
xincr = width / 9.0 # 10 - 1 to make the last point be at the end
|
24
|
+
yincr = height / 100.0
|
25
|
+
|
26
|
+
@datapoints.each_with_index.map do |value, i|
|
27
|
+
val = 100 - value
|
28
|
+
[xincr * i, yincr * val]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# method-based custom control representing a graph path
|
33
|
+
def graph_path(width, height, should_extend, &block)
|
34
|
+
locations = point_locations(width, height)
|
35
|
+
path {
|
36
|
+
first_location = locations[0] # x and y
|
37
|
+
figure(first_location[0], first_location[1]) {
|
38
|
+
locations.each do |loc|
|
39
|
+
line(loc[0], loc[1])
|
40
|
+
end
|
41
|
+
if should_extend
|
42
|
+
line(width, height)
|
43
|
+
line(0, height)
|
44
|
+
|
45
|
+
closed true
|
46
|
+
end
|
47
|
+
}
|
48
|
+
|
49
|
+
# apply a transform to the coordinate space for this path so (0, 0) is the top-left corner of the graph
|
50
|
+
transform {
|
51
|
+
translate X_OFF_LEFT, Y_OFF_TOP
|
52
|
+
}
|
53
|
+
|
54
|
+
block.call
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
window('histogram example', 640, 480) {
|
59
|
+
margined true
|
60
|
+
|
61
|
+
horizontal_box {
|
62
|
+
vertical_box {
|
63
|
+
stretchy false
|
64
|
+
|
65
|
+
10.times do |i|
|
66
|
+
spinbox(0, 100) { |sb|
|
67
|
+
stretchy false
|
68
|
+
value @datapoints[i]
|
69
|
+
|
70
|
+
on_changed do
|
71
|
+
@datapoints[i] = sb.value
|
72
|
+
@area.queue_redraw_all
|
73
|
+
end
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
@color_button = color_button {
|
78
|
+
stretchy false
|
79
|
+
color COLOR_BLUE
|
80
|
+
|
81
|
+
on_changed do
|
82
|
+
@area.queue_redraw_all
|
83
|
+
end
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
@area = area {
|
88
|
+
on_draw do |area_draw_params|
|
89
|
+
path {
|
90
|
+
rectangle(0, 0, area_draw_params[:area_width], area_draw_params[:area_height])
|
91
|
+
|
92
|
+
fill 0xFFFFFF
|
93
|
+
}
|
94
|
+
|
95
|
+
graph_width, graph_height = *graph_size(area_draw_params[:area_width], area_draw_params[:area_height])
|
96
|
+
|
97
|
+
path {
|
98
|
+
figure(X_OFF_LEFT, Y_OFF_TOP) {
|
99
|
+
line(X_OFF_LEFT, Y_OFF_TOP + graph_height)
|
100
|
+
line(X_OFF_LEFT + graph_width, Y_OFF_TOP + graph_height)
|
101
|
+
}
|
102
|
+
|
103
|
+
stroke 0x000000, thickness: 2, miter_limit: 10
|
104
|
+
}
|
105
|
+
|
106
|
+
# now create the fill for the graph below the graph line
|
107
|
+
graph_path(graph_width, graph_height, true) {
|
108
|
+
fill @color_button.color.merge(a: 0.5)
|
109
|
+
}
|
110
|
+
|
111
|
+
# now draw the histogram line
|
112
|
+
graph_path(graph_width, graph_height, false) {
|
113
|
+
stroke @color_button.color.merge(thickness: 2, miter_limit: 10)
|
114
|
+
}
|
115
|
+
end
|
116
|
+
}
|
117
|
+
}
|
118
|
+
}.show
|
data/examples/meta_example.rb
CHANGED
@@ -6,59 +6,110 @@ require 'facets'
|
|
6
6
|
class MetaExample
|
7
7
|
include Glimmer
|
8
8
|
|
9
|
+
def initialize
|
10
|
+
@selected_example_index = 0
|
11
|
+
end
|
12
|
+
|
9
13
|
def examples
|
10
14
|
if @examples.nil?
|
11
15
|
example_files = Dir.glob(File.join(File.expand_path('.', __dir__), '**', '*.rb'))
|
12
16
|
example_file_names = example_files.map { |f| File.basename(f, '.rb') }
|
13
|
-
example_file_names = example_file_names.reject { |f| f == 'meta_example' }
|
17
|
+
example_file_names = example_file_names.reject { |f| f == 'meta_example' || f.match(/\d$/) }
|
14
18
|
@examples = example_file_names.map { |f| f.underscore.titlecase }
|
15
19
|
end
|
16
20
|
@examples
|
17
21
|
end
|
18
22
|
|
23
|
+
def examples_with_versions
|
24
|
+
examples.map do |example|
|
25
|
+
version_count_for(example) > 1 ? "#{example} (#{version_count_for(example)} versions)" : example
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
19
29
|
def file_path_for(example)
|
20
30
|
File.join(File.expand_path('.', __dir__), "#{example.underscore}.rb")
|
21
31
|
end
|
22
32
|
|
33
|
+
def version_count_for(example)
|
34
|
+
Dir.glob(File.join(File.expand_path('.', __dir__), "#{example.underscore}*.rb")).select {|file| file.match(/\d\.rb$/)}.count + 1
|
35
|
+
end
|
36
|
+
|
23
37
|
def glimmer_dsl_libui_file
|
24
38
|
File.expand_path('../lib/glimmer-dsl-libui', __dir__)
|
25
39
|
end
|
26
40
|
|
41
|
+
def selected_example
|
42
|
+
examples[@selected_example_index]
|
43
|
+
end
|
44
|
+
|
27
45
|
def launch
|
28
|
-
window('Meta-Example', 700, 500) {
|
46
|
+
window('Meta-Example', 700, 500) {
|
29
47
|
margined true
|
30
48
|
|
31
49
|
horizontal_box {
|
32
50
|
vertical_box {
|
51
|
+
stretchy false
|
52
|
+
|
33
53
|
@rbs = radio_buttons {
|
34
54
|
stretchy false
|
35
|
-
items
|
36
|
-
selected
|
55
|
+
items examples_with_versions
|
56
|
+
selected @selected_example_index
|
37
57
|
|
38
58
|
on_selected do
|
39
|
-
@
|
59
|
+
@selected_example_index = @rbs.selected
|
60
|
+
example = selected_example
|
61
|
+
@nwme.text = File.read(file_path_for(example))
|
62
|
+
@sb.value = 1
|
40
63
|
end
|
41
64
|
}
|
42
|
-
|
65
|
+
|
66
|
+
horizontal_box {
|
67
|
+
label('Version') {
|
68
|
+
stretchy false
|
69
|
+
}
|
70
|
+
|
71
|
+
@sb = spinbox(1, 100) {
|
72
|
+
value 1
|
73
|
+
|
74
|
+
on_changed do
|
75
|
+
example = selected_example
|
76
|
+
if @sb.value > version_count_for(example)
|
77
|
+
@sb.value -= 1
|
78
|
+
else
|
79
|
+
version_number = @sb.value == 1 ? '' : @sb.value
|
80
|
+
example = "#{selected_example}#{version_number}"
|
81
|
+
@nwme.text = File.read(file_path_for(example))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
horizontal_box {
|
43
88
|
stretchy false
|
44
89
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
90
|
+
button('Launch') {
|
91
|
+
on_clicked do
|
92
|
+
begin
|
93
|
+
meta_example_file = File.join(Dir.home, '.meta_example.rb')
|
94
|
+
File.write(meta_example_file, @nwme.text)
|
95
|
+
result = `ruby -r #{glimmer_dsl_libui_file} #{meta_example_file} 2>&1`
|
96
|
+
msg_box('Error Running Example', result) if result.include?('error')
|
97
|
+
rescue => e
|
98
|
+
puts 'Unable to write code changes! Running original example...'
|
99
|
+
system "ruby -r #{glimmer_dsl_libui_file} #{file_path_for(selected_example)}"
|
100
|
+
end
|
54
101
|
end
|
55
|
-
|
102
|
+
}
|
103
|
+
button('Reset') {
|
104
|
+
on_clicked do
|
105
|
+
@nwme.text = File.read(file_path_for(selected_example))
|
106
|
+
end
|
107
|
+
}
|
56
108
|
}
|
57
109
|
}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
}
|
110
|
+
|
111
|
+
@nwme = non_wrapping_multiline_entry {
|
112
|
+
text File.read(file_path_for(selected_example))
|
62
113
|
}
|
63
114
|
}
|
64
115
|
}.show
|
data/examples/midi_player.rb
CHANGED
@@ -40,23 +40,22 @@ class TinyMidiPlayer
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def show_version
|
44
|
-
msg_box(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
"Version #{VERSION}")
|
43
|
+
def show_version
|
44
|
+
msg_box('Tiny Midi Player',
|
45
|
+
"Written in Ruby\n" \
|
46
|
+
"https://github.com/kojix2/libui\n" \
|
47
|
+
"Version #{VERSION}")
|
49
48
|
end
|
50
49
|
|
51
50
|
def create_gui
|
52
51
|
menu('Help') { |m|
|
53
52
|
menu_item('Version') {
|
54
53
|
on_clicked do
|
55
|
-
show_version
|
54
|
+
show_version
|
56
55
|
end
|
57
56
|
}
|
58
57
|
}
|
59
|
-
|
58
|
+
window('Tiny Midi Player', 200, 50) {
|
60
59
|
horizontal_box {
|
61
60
|
vertical_box {
|
62
61
|
stretchy false
|
@@ -82,8 +81,7 @@ class TinyMidiPlayer
|
|
82
81
|
end
|
83
82
|
}
|
84
83
|
}
|
85
|
-
}
|
86
|
-
@main_window.show
|
84
|
+
}.show
|
87
85
|
end
|
88
86
|
end
|
89
87
|
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -19,12 +19,16 @@
|
|
19
19
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
|
+
require 'glimmer/libui/control_proxy'
|
23
|
+
|
22
24
|
module Glimmer
|
23
25
|
module DSL
|
24
26
|
module Libui
|
25
27
|
module FileExpression
|
26
28
|
def interpret(parent, keyword, *args, &block)
|
27
|
-
|
29
|
+
window = args.empty? ? Glimmer::LibUI::ControlProxy.main_window_proxy : args.first
|
30
|
+
window = window.libui if window.respond_to?(:libui)
|
31
|
+
file_pointer = ::LibUI.send(self.class.name.underscore.split('::').last.sub(/_expression$/, ''), window)
|
28
32
|
file_pointer.to_s unless file_pointer.null?
|
29
33
|
end
|
30
34
|
end
|