glimmer-dsl-libui 0.1.2 → 0.1.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 +55 -0
- data/README.md +1127 -65
- data/VERSION +1 -1
- data/examples/area_gallery.rb +50 -0
- data/examples/area_gallery2.rb +111 -0
- data/examples/area_gallery3.rb +52 -0
- data/examples/area_gallery4.rb +113 -0
- data/examples/basic_area2.rb +1 -1
- data/examples/basic_button.rb +2 -2
- data/examples/basic_entry.rb +2 -2
- data/examples/basic_table_progress_bar.rb +13 -3
- 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 +1 -3
- data/lib/glimmer/dsl/libui/dsl.rb +1 -0
- data/lib/glimmer/dsl/libui/file_expression.rb +5 -1
- data/lib/glimmer/dsl/libui/property_expression.rb +5 -1
- data/lib/glimmer/{libui/box.rb → dsl/libui/shape_expression.rb} +26 -29
- data/lib/glimmer/dsl/libui/tab_item_expression.rb +2 -2
- data/lib/glimmer/libui/control_proxy/area_proxy.rb +117 -0
- data/lib/glimmer/libui/{menu_item_proxy.rb → control_proxy/box/horizontal_box_proxy.rb} +9 -12
- data/lib/glimmer/libui/{vertical_box_proxy.rb → control_proxy/box/vertical_box_proxy.rb} +10 -6
- data/lib/glimmer/libui/control_proxy/box.rb +61 -0
- 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/{progress_bar_column_proxy.rb → control_proxy/column/progress_bar_column_proxy.rb} +14 -10
- data/lib/glimmer/libui/control_proxy/column/text_column_proxy.rb +46 -0
- data/lib/glimmer/libui/control_proxy/column.rb +55 -0
- data/lib/glimmer/libui/{checkbox_column_proxy.rb → control_proxy/combobox_proxy.rb} +16 -13
- 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/{preferences_menu_item_proxy.rb → control_proxy/menu_item_proxy/preferences_menu_item_proxy.rb} +11 -9
- data/lib/glimmer/libui/control_proxy/menu_item_proxy/quit_menu_item_proxy.rb +66 -0
- 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/{horizontal_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/{check_menu_item_proxy.rb → control_proxy/message_box.rb} +11 -10
- data/lib/glimmer/libui/control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb +34 -0
- data/lib/glimmer/libui/{image_column_proxy.rb → control_proxy/multiline_entry_proxy.rb} +10 -11
- data/lib/glimmer/libui/control_proxy/path_proxy.rb +169 -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 +41 -22
- data/lib/glimmer/libui/{enableable_column.rb → parent.rb} +7 -15
- data/lib/glimmer/libui/shape/arc.rb +43 -0
- data/lib/glimmer/libui/{date_picker_proxy.rb → shape/bezier.rb} +8 -9
- data/lib/glimmer/libui/{quit_menu_item_proxy.rb → shape/figure.rb} +24 -32
- data/lib/glimmer/libui/{non_wrapping_multiline_entry_proxy.rb → shape/line.rb} +11 -5
- data/lib/glimmer/libui/{time_picker_proxy.rb → shape/rectangle.rb} +8 -9
- data/lib/glimmer/libui/{about_menu_item_proxy.rb → shape/square.rb} +9 -8
- data/lib/glimmer/libui/shape.rb +145 -0
- data/lib/glimmer/libui.rb +92 -0
- data/lib/glimmer-dsl-libui.rb +2 -0
- metadata +82 -48
- data/lib/glimmer/libui/area_proxy.rb +0 -105
- 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_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/path_proxy.rb +0 -167
- data/lib/glimmer/libui/rectangle_proxy.rb +0 -100
- 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/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
|
|
@@ -29,7 +29,7 @@ module Glimmer
|
|
|
29
29
|
include ParentExpression
|
|
30
30
|
|
|
31
31
|
def can_interpret?(parent, keyword, *args, &block)
|
|
32
|
-
Glimmer::LibUI::ControlProxy.
|
|
32
|
+
Glimmer::LibUI::ControlProxy.exists?(keyword)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def interpret(parent, keyword, *args, &block)
|
|
@@ -46,6 +46,4 @@ module Glimmer
|
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
# TODO Consider moving all controls underneath Control namespace
|
|
50
49
|
require 'glimmer/libui/control_proxy'
|
|
51
|
-
Dir[File.expand_path('../../libui/*.rb', __dir__)].each {|f| require f}
|
|
@@ -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
|
|
@@ -21,13 +21,17 @@
|
|
|
21
21
|
|
|
22
22
|
require 'glimmer/dsl/expression'
|
|
23
23
|
require 'glimmer/libui/control_proxy'
|
|
24
|
+
require 'glimmer/libui/shape'
|
|
24
25
|
|
|
25
26
|
module Glimmer
|
|
26
27
|
module DSL
|
|
27
28
|
module Libui
|
|
28
29
|
class PropertyExpression < Expression
|
|
29
30
|
def can_interpret?(parent, keyword, *args, &block)
|
|
30
|
-
|
|
31
|
+
(
|
|
32
|
+
parent.is_a?(Glimmer::LibUI::ControlProxy) or
|
|
33
|
+
parent.is_a?(Glimmer::LibUI::Shape)
|
|
34
|
+
) and
|
|
31
35
|
block.nil? and
|
|
32
36
|
parent.respond_to?(keyword, *args)
|
|
33
37
|
end
|
|
@@ -19,39 +19,36 @@
|
|
|
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/
|
|
22
|
+
require 'glimmer/dsl/expression'
|
|
23
|
+
require 'glimmer/dsl/parent_expression'
|
|
23
24
|
|
|
24
25
|
module Glimmer
|
|
25
|
-
module
|
|
26
|
-
module
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
'box'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def children
|
|
40
|
-
@children ||= []
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def destroy_child(child)
|
|
44
|
-
::LibUI.send("box_delete", @libui, children.index(child))
|
|
45
|
-
ControlProxy.control_proxies.delete(child)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
def build_control
|
|
51
|
-
super.tap do
|
|
52
|
-
self.padded = true
|
|
26
|
+
module DSL
|
|
27
|
+
module Libui
|
|
28
|
+
class ShapeExpression < Expression
|
|
29
|
+
include ParentExpression
|
|
30
|
+
|
|
31
|
+
def can_interpret?(parent, keyword, *args, &block)
|
|
32
|
+
Glimmer::LibUI::Shape.exists?(keyword) and
|
|
33
|
+
(
|
|
34
|
+
parent.is_a?(Glimmer::LibUI::ControlProxy::PathProxy) or
|
|
35
|
+
parent.is_a?(Glimmer::LibUI::Shape)
|
|
36
|
+
)
|
|
53
37
|
end
|
|
38
|
+
|
|
39
|
+
def interpret(parent, keyword, *args, &block)
|
|
40
|
+
Glimmer::LibUI::Shape.create(keyword, parent, args, &block)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def add_content(parent, keyword, *args, &block)
|
|
44
|
+
super
|
|
45
|
+
parent.post_add_content
|
|
46
|
+
end
|
|
47
|
+
|
|
54
48
|
end
|
|
55
49
|
end
|
|
56
50
|
end
|
|
57
51
|
end
|
|
52
|
+
|
|
53
|
+
require 'glimmer/libui/control_proxy/path_proxy'
|
|
54
|
+
require 'glimmer/libui/shape'
|
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
21
|
|
|
22
22
|
require 'glimmer/dsl/static_expression'
|
|
23
|
-
require 'glimmer/libui/tab_item_proxy'
|
|
23
|
+
require 'glimmer/libui/control_proxy/tab_item_proxy'
|
|
24
24
|
|
|
25
25
|
module Glimmer
|
|
26
26
|
module DSL
|
|
27
27
|
module Libui
|
|
28
28
|
class TabItemExpression < StaticExpression
|
|
29
29
|
def interpret(parent, keyword, *args, &block)
|
|
30
|
-
Glimmer::LibUI::TabItemProxy.create(keyword, parent, args, &block)
|
|
30
|
+
Glimmer::LibUI::ControlProxy::TabItemProxy.create(keyword, parent, args, &block)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Copyright (c) 2021 Andy Maleh
|
|
2
|
+
#
|
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
# a copy of this software and associated documentation files (the
|
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
# the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be
|
|
12
|
+
# included in all copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'glimmer/libui/control_proxy'
|
|
23
|
+
require 'glimmer/fiddle_consumer'
|
|
24
|
+
require 'glimmer/libui/parent'
|
|
25
|
+
require 'glimmer/libui/control_proxy/transformable'
|
|
26
|
+
|
|
27
|
+
module Glimmer
|
|
28
|
+
module LibUI
|
|
29
|
+
class ControlProxy
|
|
30
|
+
# Proxy for LibUI area objects
|
|
31
|
+
#
|
|
32
|
+
# Follows the Proxy Design Pattern
|
|
33
|
+
class AreaProxy < ControlProxy
|
|
34
|
+
class << self
|
|
35
|
+
# this attribute is only populated during on_draw call
|
|
36
|
+
attr_accessor :current_area_draw_params
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
include Glimmer::FiddleConsumer
|
|
40
|
+
include Parent
|
|
41
|
+
prepend Transformable
|
|
42
|
+
|
|
43
|
+
attr_reader :area_handler
|
|
44
|
+
|
|
45
|
+
def post_add_content
|
|
46
|
+
super
|
|
47
|
+
install_listeners
|
|
48
|
+
end
|
|
49
|
+
|
|
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
|
+
def draw(area_draw_params)
|
|
74
|
+
children.dup.each {|child| child.draw(area_draw_params)}
|
|
75
|
+
on_draw.each {|listener| listener.call(area_draw_params)}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def redraw
|
|
79
|
+
queue_redraw_all
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def build_control
|
|
85
|
+
@area_handler = ::LibUI::FFI::AreaHandler.malloc
|
|
86
|
+
@libui = ::LibUI.new_area(@area_handler)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def install_listeners
|
|
90
|
+
@area_handler.Draw = fiddle_closure_block_caller(0, [1, 1, 1]) do |_, _, area_draw_params|
|
|
91
|
+
area_draw_params = ::LibUI::FFI::AreaDrawParams.new(area_draw_params)
|
|
92
|
+
area_draw_params = area_draw_params_hash(area_draw_params)
|
|
93
|
+
AreaProxy.current_area_draw_params = area_draw_params
|
|
94
|
+
draw(area_draw_params)
|
|
95
|
+
AreaProxy.current_area_draw_params = nil
|
|
96
|
+
end
|
|
97
|
+
@area_handler.MouseEvent = fiddle_closure_block_caller(0, [0]) {}
|
|
98
|
+
@area_handler.MouseCrossed = fiddle_closure_block_caller(0, [0]) {}
|
|
99
|
+
@area_handler.DragBroken = fiddle_closure_block_caller(0, [0]) {}
|
|
100
|
+
@area_handler.KeyEvent = fiddle_closure_block_caller(0, [0]) {}
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def area_draw_params_hash(area_draw_params)
|
|
104
|
+
{
|
|
105
|
+
context: area_draw_params.Context,
|
|
106
|
+
area_width: area_draw_params.AreaWidth,
|
|
107
|
+
area_height: area_draw_params.AreaHeight,
|
|
108
|
+
clip_x: area_draw_params.ClipX,
|
|
109
|
+
clip_y: area_draw_params.ClipY,
|
|
110
|
+
clip_width: area_draw_params.ClipWidth,
|
|
111
|
+
clip_height: area_draw_params.ClipHeight,
|
|
112
|
+
}
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -20,21 +20,18 @@
|
|
|
20
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
21
|
|
|
22
22
|
require 'glimmer/libui/control_proxy'
|
|
23
|
+
require 'glimmer/libui/control_proxy/box'
|
|
23
24
|
|
|
24
25
|
module Glimmer
|
|
25
26
|
module LibUI
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
def build_control
|
|
37
|
-
@libui = @parent_proxy.append_item(*@args)
|
|
27
|
+
class ControlProxy
|
|
28
|
+
module Box
|
|
29
|
+
# Proxy for LibUI horizontal box objects
|
|
30
|
+
#
|
|
31
|
+
# Follows the Proxy Design Pattern
|
|
32
|
+
class HorizontalBoxProxy < ControlProxy
|
|
33
|
+
include Box
|
|
34
|
+
end
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
end
|
|
@@ -20,15 +20,19 @@
|
|
|
20
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
21
|
|
|
22
22
|
require 'glimmer/libui/control_proxy'
|
|
23
|
-
require 'glimmer/libui/box'
|
|
23
|
+
require 'glimmer/libui/control_proxy/box'
|
|
24
24
|
|
|
25
25
|
module Glimmer
|
|
26
26
|
module LibUI
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
class ControlProxy
|
|
28
|
+
module Box
|
|
29
|
+
# Proxy for LibUI vertical box objects
|
|
30
|
+
#
|
|
31
|
+
# Follows the Proxy Design Pattern
|
|
32
|
+
class VerticalBoxProxy < ControlProxy
|
|
33
|
+
include Box
|
|
34
|
+
end
|
|
35
|
+
end
|
|
32
36
|
end
|
|
33
37
|
end
|
|
34
38
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Copyright (c) 2021 Andy Maleh
|
|
2
|
+
#
|
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
# a copy of this software and associated documentation files (the
|
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
# the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be
|
|
12
|
+
# included in all copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
21
|
+
|
|
22
|
+
require 'glimmer/libui/control_proxy'
|
|
23
|
+
|
|
24
|
+
module Glimmer
|
|
25
|
+
module LibUI
|
|
26
|
+
class ControlProxy
|
|
27
|
+
module Box
|
|
28
|
+
APPEND_PROPERTIES = %w[stretchy]
|
|
29
|
+
|
|
30
|
+
def post_initialize_child(child)
|
|
31
|
+
child.stretchy = true if child.stretchy.nil?
|
|
32
|
+
::LibUI.box_append(@libui, child.libui, Glimmer::LibUI.boolean_to_integer(child.stretchy))
|
|
33
|
+
children << child
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def libui_api_keyword
|
|
37
|
+
'box'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def children
|
|
41
|
+
@children ||= []
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def destroy_child(child)
|
|
45
|
+
::LibUI.send("box_delete", @libui, children.index(child))
|
|
46
|
+
ControlProxy.control_proxies.delete(child)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def build_control
|
|
52
|
+
super.tap do
|
|
53
|
+
self.padded = true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
Dir[File.expand_path("./#{File.basename(__FILE__, '.rb')}/*.rb", __dir__)].each {|f| require f}
|
|
@@ -23,18 +23,20 @@ require 'glimmer/libui/control_proxy'
|
|
|
23
23
|
|
|
24
24
|
module Glimmer
|
|
25
25
|
module LibUI
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
class ControlProxy
|
|
27
|
+
# Proxy for LibUI button objects
|
|
28
|
+
#
|
|
29
|
+
# Follows the Proxy Design Pattern
|
|
30
|
+
class ButtonProxy < ControlProxy
|
|
31
|
+
DEFAULT_TEXT = ''
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def build_control
|
|
36
|
+
construction_args = @args.dup
|
|
37
|
+
construction_args[0] = DEFAULT_TEXT if construction_args.size == 0
|
|
38
|
+
@libui = ControlProxy.new_control(@keyword, construction_args)
|
|
39
|
+
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
end
|
|
@@ -23,18 +23,20 @@ require 'glimmer/libui/control_proxy'
|
|
|
23
23
|
|
|
24
24
|
module Glimmer
|
|
25
25
|
module LibUI
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
class ControlProxy
|
|
27
|
+
# Proxy for LibUI checkbox objects
|
|
28
|
+
#
|
|
29
|
+
# Follows the Proxy Design Pattern
|
|
30
|
+
class CheckboxProxy < ControlProxy
|
|
31
|
+
DEFAULT_TEXT = ''
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def build_control
|
|
36
|
+
construction_args = @args.dup
|
|
37
|
+
construction_args[0] = DEFAULT_TEXT if construction_args.size == 0
|
|
38
|
+
@libui = ControlProxy.new_control(@keyword, construction_args)
|
|
39
|
+
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
end
|