glimmer-dsl-libui 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +599 -883
- data/VERSION +1 -1
- data/bin/girb +0 -0
- data/examples/area_gallery.rb +19 -19
- data/examples/area_gallery2.rb +91 -89
- data/examples/area_gallery3.rb +19 -19
- data/examples/area_gallery4.rb +91 -89
- data/examples/basic_transform.rb +3 -6
- data/examples/basic_transform2.rb +34 -0
- data/examples/color_the_circles.rb +1 -3
- data/examples/dynamic_area.rb +1 -3
- data/examples/dynamic_area2.rb +5 -7
- data/examples/form_table.rb +4 -0
- data/examples/grid.rb +4 -4
- data/examples/histogram.rb +4 -8
- data/examples/meta_example.rb +50 -10
- data/examples/snake.rb +1 -3
- data/examples/tetris.rb +15 -18
- data/examples/tic_tac_toe/board.rb +4 -2
- data/examples/tic_tac_toe.rb +1 -3
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/shape_expression.rb +6 -1
- data/lib/glimmer/libui/shape.rb +44 -1
- metadata +6 -5
data/examples/dynamic_area2.rb
CHANGED
@@ -54,7 +54,7 @@ window('Dynamic Area', 240, 600) {
|
|
54
54
|
value 102
|
55
55
|
|
56
56
|
on_changed do
|
57
|
-
@
|
57
|
+
@rectangle.fill[:r] = @red_spinbox.value # updating hash properties automatically triggers 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
|
+
@rectangle.fill[:g] = @green_spinbox.value # updating hash properties automatically triggers 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
|
+
@rectangle.fill[:b] = @blue_spinbox.value # updating hash properties automatically triggers area.queue_redraw_all
|
76
76
|
end
|
77
77
|
}
|
78
78
|
|
@@ -81,15 +81,13 @@ window('Dynamic Area', 240, 600) {
|
|
81
81
|
value 100
|
82
82
|
|
83
83
|
on_changed do
|
84
|
-
@
|
84
|
+
@rectangle.fill[:a] = @alpha_spinbox.value / 100.0 # updating hash properties automatically triggers area.queue_redraw_all
|
85
85
|
end
|
86
86
|
}
|
87
87
|
}
|
88
88
|
|
89
89
|
area {
|
90
|
-
@
|
91
|
-
@rectangle = rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value)
|
92
|
-
|
90
|
+
@rectangle = rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value) { # stable path
|
93
91
|
fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
|
94
92
|
}
|
95
93
|
}
|
data/examples/form_table.rb
CHANGED
@@ -22,15 +22,19 @@ window('Contacts', 600, 600) { |w|
|
|
22
22
|
@name_entry = entry {
|
23
23
|
label 'Name'
|
24
24
|
}
|
25
|
+
|
25
26
|
@email_entry = entry {
|
26
27
|
label 'Email'
|
27
28
|
}
|
29
|
+
|
28
30
|
@phone_entry = entry {
|
29
31
|
label 'Phone'
|
30
32
|
}
|
33
|
+
|
31
34
|
@city_entry = entry {
|
32
35
|
label 'City'
|
33
36
|
}
|
37
|
+
|
34
38
|
@state_entry = entry {
|
35
39
|
label 'State'
|
36
40
|
}
|
data/examples/grid.rb
CHANGED
@@ -8,16 +8,16 @@ window('Grid') {
|
|
8
8
|
tab {
|
9
9
|
tab_item('Span') {
|
10
10
|
grid {
|
11
|
-
4.times
|
12
|
-
4.times
|
11
|
+
4.times do |top_value|
|
12
|
+
4.times do |left_value|
|
13
13
|
label("(#{left_value}, #{top_value}) xspan1\nyspan1") {
|
14
14
|
left left_value
|
15
15
|
top top_value
|
16
16
|
hexpand true
|
17
17
|
vexpand true
|
18
18
|
}
|
19
|
-
|
20
|
-
|
19
|
+
end
|
20
|
+
end
|
21
21
|
label("(0, 4) xspan2\nyspan1 more text fits horizontally") {
|
22
22
|
left 0
|
23
23
|
top 4
|
data/examples/histogram.rb
CHANGED
@@ -79,19 +79,15 @@ window('histogram example', 640, 480) {
|
|
79
79
|
|
80
80
|
@area = area {
|
81
81
|
on_draw do |area_draw_params|
|
82
|
-
|
83
|
-
rectangle(0, 0, area_draw_params[:area_width], area_draw_params[:area_height])
|
84
|
-
|
82
|
+
rectangle(0, 0, area_draw_params[:area_width], area_draw_params[:area_height]) {
|
85
83
|
fill 0xFFFFFF
|
86
84
|
}
|
87
85
|
|
88
86
|
graph_width, graph_height = *graph_size(area_draw_params[:area_width], area_draw_params[:area_height])
|
89
87
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
line(X_OFF_LEFT + graph_width, Y_OFF_TOP + graph_height)
|
94
|
-
}
|
88
|
+
figure(X_OFF_LEFT, Y_OFF_TOP) {
|
89
|
+
line(X_OFF_LEFT, Y_OFF_TOP + graph_height)
|
90
|
+
line(X_OFF_LEFT + graph_width, Y_OFF_TOP + graph_height)
|
95
91
|
|
96
92
|
stroke 0x000000, thickness: 2, miter_limit: 10
|
97
93
|
}
|
data/examples/meta_example.rb
CHANGED
@@ -5,8 +5,10 @@ require 'fileutils'
|
|
5
5
|
class MetaExample
|
6
6
|
include Glimmer
|
7
7
|
|
8
|
+
ADDITIONAL_BASIC_EXAMPLES = ['Color Button', 'Font Button', 'Form', 'Date Time Picker', 'Simple Notepad']
|
9
|
+
|
8
10
|
def initialize
|
9
|
-
@selected_example_index =
|
11
|
+
@selected_example_index = examples_with_versions.index(basic_examples_with_versions.first)
|
10
12
|
end
|
11
13
|
|
12
14
|
def examples
|
@@ -25,6 +27,14 @@ class MetaExample
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
30
|
+
def basic_examples_with_versions
|
31
|
+
examples_with_versions.select {|example| example.start_with?('Basic') || ADDITIONAL_BASIC_EXAMPLES.include?(example) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def advanced_examples_with_versions
|
35
|
+
examples_with_versions - basic_examples_with_versions
|
36
|
+
end
|
37
|
+
|
28
38
|
def file_path_for(example)
|
29
39
|
File.join(File.expand_path('.', __dir__), "#{example.underscore}.rb")
|
30
40
|
end
|
@@ -66,17 +76,47 @@ class MetaExample
|
|
66
76
|
vertical_box {
|
67
77
|
stretchy false
|
68
78
|
|
69
|
-
|
79
|
+
tab {
|
70
80
|
stretchy false
|
71
|
-
items examples_with_versions
|
72
|
-
selected @selected_example_index
|
73
81
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
82
|
+
tab_item('Basic') {
|
83
|
+
vertical_box {
|
84
|
+
@basic_example_radio_buttons = radio_buttons {
|
85
|
+
stretchy false
|
86
|
+
items basic_examples_with_versions
|
87
|
+
selected basic_examples_with_versions.index(examples_with_versions[@selected_example_index])
|
88
|
+
|
89
|
+
on_selected do
|
90
|
+
@selected_example_index = examples_with_versions.index(basic_examples_with_versions[@basic_example_radio_buttons.selected])
|
91
|
+
example = selected_example
|
92
|
+
@code_entry.text = File.read(file_path_for(example))
|
93
|
+
@version_spinbox.value = 1
|
94
|
+
end
|
95
|
+
}
|
96
|
+
|
97
|
+
label # filler
|
98
|
+
label # filler
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
tab_item('Advanced') {
|
103
|
+
vertical_box {
|
104
|
+
@advanced_example_radio_buttons = radio_buttons {
|
105
|
+
stretchy false
|
106
|
+
items advanced_examples_with_versions
|
107
|
+
|
108
|
+
on_selected do
|
109
|
+
@selected_example_index = examples_with_versions.index(advanced_examples_with_versions[@advanced_example_radio_buttons.selected])
|
110
|
+
example = selected_example
|
111
|
+
@code_entry.text = File.read(file_path_for(example))
|
112
|
+
@version_spinbox.value = 1
|
113
|
+
end
|
114
|
+
}
|
115
|
+
|
116
|
+
label # filler
|
117
|
+
label # filler
|
118
|
+
}
|
119
|
+
}
|
80
120
|
}
|
81
121
|
|
82
122
|
horizontal_box {
|
data/examples/snake.rb
CHANGED
data/examples/tetris.rb
CHANGED
@@ -203,34 +203,31 @@ class Tetris
|
|
203
203
|
bevel_pixel_size = 0.16 * block_size.to_f
|
204
204
|
color = Glimmer::LibUI.interpret_color(Model::Block::COLOR_CLEAR)
|
205
205
|
area {
|
206
|
-
block[:background_square] =
|
207
|
-
square(0, 0, block_size)
|
208
|
-
|
206
|
+
block[:background_square] = square(0, 0, block_size) {
|
209
207
|
fill color
|
210
208
|
}
|
211
|
-
|
212
|
-
|
213
|
-
|
209
|
+
|
210
|
+
block[:top_bevel_edge] = polygon {
|
211
|
+
point_array 0, 0, block_size, 0, block_size - bevel_pixel_size, bevel_pixel_size, bevel_pixel_size, bevel_pixel_size
|
214
212
|
fill r: color[:r] + 4*BEVEL_CONSTANT, g: color[:g] + 4*BEVEL_CONSTANT, b: color[:b] + 4*BEVEL_CONSTANT
|
215
213
|
}
|
216
|
-
|
217
|
-
|
218
|
-
|
214
|
+
|
215
|
+
block[:right_bevel_edge] = polygon {
|
216
|
+
point_array block_size, 0, block_size - bevel_pixel_size, bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size, block_size, block_size
|
219
217
|
fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
|
220
218
|
}
|
221
|
-
|
222
|
-
|
223
|
-
|
219
|
+
|
220
|
+
block[:bottom_bevel_edge] = polygon {
|
221
|
+
point_array block_size, block_size, 0, block_size, bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size, block_size - bevel_pixel_size
|
224
222
|
fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
|
225
223
|
}
|
226
|
-
|
227
|
-
|
228
|
-
|
224
|
+
|
225
|
+
block[:left_bevel_edge] = polygon {
|
226
|
+
point_array 0, 0, 0, block_size, bevel_pixel_size, block_size - bevel_pixel_size, bevel_pixel_size, bevel_pixel_size
|
229
227
|
fill r: color[:r] - BEVEL_CONSTANT, g: color[:g] - BEVEL_CONSTANT, b: color[:b] - BEVEL_CONSTANT
|
230
228
|
}
|
231
|
-
|
232
|
-
|
233
|
-
|
229
|
+
|
230
|
+
block[:border_square] = square(0, 0, block_size) {
|
234
231
|
stroke COLOR_GRAY
|
235
232
|
}
|
236
233
|
|
@@ -38,8 +38,10 @@ class TicTacToe
|
|
38
38
|
|
39
39
|
#row and column numbers are 1-based
|
40
40
|
def mark(row, column)
|
41
|
-
self[row, column].
|
42
|
-
|
41
|
+
if self[row, column].empty
|
42
|
+
self[row, column].mark(current_sign)
|
43
|
+
game_over? #updates winning sign
|
44
|
+
end
|
43
45
|
end
|
44
46
|
|
45
47
|
def current_sign
|
data/examples/tic_tac_toe.rb
CHANGED
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -21,6 +21,9 @@
|
|
21
21
|
|
22
22
|
require 'glimmer/dsl/expression'
|
23
23
|
require 'glimmer/dsl/parent_expression'
|
24
|
+
require 'glimmer/libui/control_proxy/path_proxy'
|
25
|
+
require 'glimmer/libui/shape'
|
26
|
+
require 'glimmer/libui/control_proxy/area_proxy'
|
24
27
|
|
25
28
|
module Glimmer
|
26
29
|
module DSL
|
@@ -32,7 +35,9 @@ module Glimmer
|
|
32
35
|
Glimmer::LibUI::Shape.exists?(keyword) and
|
33
36
|
(
|
34
37
|
parent.is_a?(Glimmer::LibUI::ControlProxy::PathProxy) or
|
35
|
-
|
38
|
+
parent.is_a?(Glimmer::LibUI::Shape) or
|
39
|
+
parent.is_a?(Glimmer::LibUI::ControlProxy::AreaProxy) or
|
40
|
+
(parent.nil? && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params)
|
36
41
|
)
|
37
42
|
end
|
38
43
|
|
data/lib/glimmer/libui/shape.rb
CHANGED
@@ -73,12 +73,22 @@ module Glimmer
|
|
73
73
|
@args = args
|
74
74
|
@block = block
|
75
75
|
set_parameter_defaults
|
76
|
+
build_control if implicit_path?
|
76
77
|
post_add_content if @block.nil?
|
77
78
|
end
|
78
79
|
|
79
80
|
# Subclasses may override to perform post add_content work (normally must call super)
|
80
81
|
def post_add_content
|
81
82
|
@parent&.post_initialize_child(self)
|
83
|
+
@parent.post_add_content if implicit_path? && dynamic?
|
84
|
+
end
|
85
|
+
|
86
|
+
def post_initialize_child(child, add_child: true)
|
87
|
+
if child.is_a?(ControlProxy::MatrixProxy)
|
88
|
+
path_proxy.post_initialize_child(child, add_child: add_child)
|
89
|
+
else
|
90
|
+
super(child, add_child: add_child)
|
91
|
+
end
|
82
92
|
end
|
83
93
|
|
84
94
|
# Subclasses must override to perform draw work and call super afterwards to ensure calling destroy when semi-declarative in an on_draw method
|
@@ -105,6 +115,24 @@ module Glimmer
|
|
105
115
|
def path_proxy
|
106
116
|
find_parent_in_ancestors { |parent| parent.nil? || parent.is_a?(ControlProxy::PathProxy) }
|
107
117
|
end
|
118
|
+
|
119
|
+
def fill(*args)
|
120
|
+
path_proxy.fill(*args)
|
121
|
+
end
|
122
|
+
alias fill= fill
|
123
|
+
alias set_fill fill
|
124
|
+
|
125
|
+
def stroke(*args)
|
126
|
+
path_proxy.stroke(*args)
|
127
|
+
end
|
128
|
+
alias stroke= stroke
|
129
|
+
alias set_stroke stroke
|
130
|
+
|
131
|
+
def transform(matrix = nil)
|
132
|
+
path_proxy.transform(matrix)
|
133
|
+
end
|
134
|
+
alias transform= transform
|
135
|
+
alias set_transform transform
|
108
136
|
|
109
137
|
def respond_to?(method_name, *args, &block)
|
110
138
|
self.class.parameters.include?(method_name.to_s.sub(/=$/, '').sub(/^set_/, '').to_sym) or
|
@@ -117,6 +145,7 @@ module Glimmer
|
|
117
145
|
method_name = method_name.to_s
|
118
146
|
parameter_index = self.class.parameters.index(method_name_parameter)
|
119
147
|
if method_name.start_with?('set_') || method_name.end_with?('=') || !args.empty?
|
148
|
+
args = [args] if args.size > 1
|
120
149
|
if args.first != @args[parameter_index]
|
121
150
|
@args[parameter_index] = args.first
|
122
151
|
request_auto_redraw
|
@@ -124,13 +153,27 @@ module Glimmer
|
|
124
153
|
else
|
125
154
|
@args[parameter_index]
|
126
155
|
end
|
127
|
-
else
|
156
|
+
else # TODO consider if there is a need to redirect anything to path proxy or delete this TODO
|
128
157
|
super
|
129
158
|
end
|
130
159
|
end
|
131
160
|
|
132
161
|
private
|
133
162
|
|
163
|
+
def build_control
|
164
|
+
block = Proc.new {} if dynamic?
|
165
|
+
@parent = Glimmer::LibUI::ControlProxy::PathProxy.new('path', @parent, [], &block)
|
166
|
+
end
|
167
|
+
|
168
|
+
# indicates if nested directly under area or on_draw event (having an implicit path not an explicit path parent)
|
169
|
+
def implicit_path?
|
170
|
+
@implicit_path ||= !!(@parent.is_a?(Glimmer::LibUI::ControlProxy::AreaProxy) || (@parent.nil? && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params))
|
171
|
+
end
|
172
|
+
|
173
|
+
def dynamic?
|
174
|
+
((@parent.nil? || (@parent.is_a?(ControlProxy::PathProxy) && @parent.parent_proxy.nil?)) && Glimmer::LibUI::ControlProxy::AreaProxy.current_area_draw_params)
|
175
|
+
end
|
176
|
+
|
134
177
|
def set_parameter_defaults
|
135
178
|
self.class.parameter_defaults.each_with_index do |default, i|
|
136
179
|
@args[i] ||= default
|
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.3.
|
4
|
+
version: 0.3.3
|
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-11-
|
11
|
+
date: 2021-11-21 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.
|
19
|
+
version: 2.5.0
|
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.
|
26
|
+
version: 2.5.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: os
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -238,6 +238,7 @@ files:
|
|
238
238
|
- examples/basic_table_image_text2.rb
|
239
239
|
- examples/basic_table_progress_bar.rb
|
240
240
|
- examples/basic_transform.rb
|
241
|
+
- examples/basic_transform2.rb
|
241
242
|
- examples/basic_window.rb
|
242
243
|
- examples/basic_window2.rb
|
243
244
|
- examples/color_button.rb
|
@@ -394,7 +395,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
394
395
|
- !ruby/object:Gem::Version
|
395
396
|
version: '0'
|
396
397
|
requirements: []
|
397
|
-
rubygems_version: 3.2.
|
398
|
+
rubygems_version: 3.2.31
|
398
399
|
signing_key:
|
399
400
|
specification_version: 4
|
400
401
|
summary: Glimmer DSL for LibUI
|