glimmer-dsl-libui 0.2.3 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -1
- data/README.md +550 -21
- data/VERSION +1 -1
- data/examples/basic_draw_text.rb +35 -37
- data/examples/basic_draw_text2.rb +68 -0
- data/examples/basic_table_color.rb +39 -0
- data/examples/custom_draw_text.rb +106 -0
- data/examples/custom_draw_text2.rb +120 -0
- data/glimmer-dsl-libui.gemspec +0 -0
- data/icons/glimmer.png +0 -0
- data/lib/glimmer/libui/attributed_string.rb +90 -4
- data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +2 -1
- data/lib/glimmer/libui/control_proxy/column/background_color_column_proxy.rb +38 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_text_color_column_proxy.rb +82 -0
- data/lib/glimmer/libui/control_proxy/column/image_text_color_column_proxy.rb +50 -0
- data/lib/glimmer/libui/control_proxy/column/text_color_column_proxy.rb +50 -0
- data/lib/glimmer/libui/control_proxy/combobox_proxy.rb +18 -0
- data/lib/glimmer/libui/control_proxy/editable_column.rb +1 -0
- data/lib/glimmer/libui/control_proxy/open_type_features_proxy.rb +53 -0
- data/lib/glimmer/libui/control_proxy/open_type_tag_proxy.rb +59 -0
- data/lib/glimmer/libui/control_proxy/table_proxy.rb +31 -11
- data/lib/glimmer/libui/control_proxy/text_proxy.rb +20 -5
- data/lib/glimmer/libui/control_proxy/triple_column.rb +45 -0
- data/lib/glimmer/libui.rb +1 -1
- metadata +14 -2
@@ -0,0 +1,82 @@
|
|
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/libui/control_proxy/column'
|
24
|
+
require 'glimmer/libui/control_proxy/triple_column'
|
25
|
+
require 'glimmer/libui/control_proxy/editable_column'
|
26
|
+
|
27
|
+
module Glimmer
|
28
|
+
module LibUI
|
29
|
+
class ControlProxy
|
30
|
+
module Column
|
31
|
+
# Proxy for LibUI checkbox text color column objects
|
32
|
+
#
|
33
|
+
# Follows the Proxy Design Pattern
|
34
|
+
class CheckboxTextColorColumnProxy < ControlProxy
|
35
|
+
include Column
|
36
|
+
include TripleColumn
|
37
|
+
include EditableColumn
|
38
|
+
|
39
|
+
def editable_checkbox(value = nil)
|
40
|
+
if value.nil?
|
41
|
+
@editable_checkbox = false if @editable_checkbox.nil?
|
42
|
+
@editable_checkbox
|
43
|
+
else
|
44
|
+
@editable_checkbox = !!value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
alias editable_checkbox= editable_checkbox
|
48
|
+
alias set_editable_checkbox editable_checkbox
|
49
|
+
alias editable_checkbox? editable_checkbox
|
50
|
+
|
51
|
+
def editable_text(value = nil)
|
52
|
+
if value.nil?
|
53
|
+
@editable_text = false if @editable_text.nil?
|
54
|
+
@editable_text
|
55
|
+
else
|
56
|
+
@editable_text = !!value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
alias editable_text= editable_text
|
60
|
+
alias set_editable_text editable_text
|
61
|
+
alias editable_text? editable_text
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def build_control
|
66
|
+
table_text_column_optional_params = ::LibUI::FFI::TableTextColumnOptionalParams.malloc
|
67
|
+
table_text_column_optional_params.ColorModelColumn = third_column_index
|
68
|
+
@parent_proxy.append_checkbox_text_column(name, column_index, editable_checkbox_value, second_column_index, editable_text_value, table_text_column_optional_params)
|
69
|
+
end
|
70
|
+
|
71
|
+
def editable_checkbox_value
|
72
|
+
(@parent_proxy.editable? || editable? || editable_checkbox?) ? -2 : -1
|
73
|
+
end
|
74
|
+
|
75
|
+
def editable_text_value
|
76
|
+
(@parent_proxy.editable? || editable? || editable_text?) ? -2 : -1
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,50 @@
|
|
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/libui/control_proxy/column'
|
24
|
+
require 'glimmer/libui/control_proxy/triple_column'
|
25
|
+
require 'glimmer/libui/control_proxy/editable_column'
|
26
|
+
|
27
|
+
module Glimmer
|
28
|
+
module LibUI
|
29
|
+
class ControlProxy
|
30
|
+
module Column
|
31
|
+
# Proxy for LibUI image text color column objects
|
32
|
+
#
|
33
|
+
# Follows the Proxy Design Pattern
|
34
|
+
class ImageTextColorColumnProxy < ControlProxy
|
35
|
+
include Column
|
36
|
+
include TripleColumn
|
37
|
+
include EditableColumn
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def build_control
|
42
|
+
table_text_column_optional_params = ::LibUI::FFI::TableTextColumnOptionalParams.malloc
|
43
|
+
table_text_column_optional_params.ColorModelColumn = third_column_index
|
44
|
+
@parent_proxy.append_image_text_column(name, column_index, second_column_index, editable_value, table_text_column_optional_params)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,50 @@
|
|
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/libui/control_proxy/column'
|
24
|
+
require 'glimmer/libui/control_proxy/dual_column'
|
25
|
+
require 'glimmer/libui/control_proxy/editable_column'
|
26
|
+
|
27
|
+
module Glimmer
|
28
|
+
module LibUI
|
29
|
+
class ControlProxy
|
30
|
+
module Column
|
31
|
+
# Proxy for LibUI text color column objects
|
32
|
+
#
|
33
|
+
# Follows the Proxy Design Pattern
|
34
|
+
class TextColorColumnProxy < ControlProxy
|
35
|
+
include Column
|
36
|
+
include DualColumn
|
37
|
+
include EditableColumn
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def build_control
|
42
|
+
table_text_column_optional_params = ::LibUI::FFI::TableTextColumnOptionalParams.malloc
|
43
|
+
table_text_column_optional_params.ColorModelColumn = second_column_index
|
44
|
+
@parent_proxy.append_text_column(name, column_index, editable_value, table_text_column_optional_params)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -28,6 +28,20 @@ module Glimmer
|
|
28
28
|
#
|
29
29
|
# Follows the Proxy Design Pattern
|
30
30
|
class ComboboxProxy < ControlProxy
|
31
|
+
def selected(value = nil)
|
32
|
+
if value.nil?
|
33
|
+
super()
|
34
|
+
else
|
35
|
+
if value.is_a?(String)
|
36
|
+
super(items.index(value).to_i)
|
37
|
+
else
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
alias selected= selected
|
43
|
+
alias set_selected selected
|
44
|
+
|
31
45
|
def items(*values)
|
32
46
|
values = values.first if values.first.is_a?(Array)
|
33
47
|
if values.empty?
|
@@ -39,6 +53,10 @@ module Glimmer
|
|
39
53
|
end
|
40
54
|
alias set_items items
|
41
55
|
alias items= items
|
56
|
+
|
57
|
+
def selected_item
|
58
|
+
items[selected]
|
59
|
+
end
|
42
60
|
end
|
43
61
|
end
|
44
62
|
end
|
@@ -0,0 +1,53 @@
|
|
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/libui/control_proxy/area_proxy'
|
24
|
+
require 'glimmer/libui/parent'
|
25
|
+
|
26
|
+
module Glimmer
|
27
|
+
module LibUI
|
28
|
+
class ControlProxy
|
29
|
+
# Proxy for LibUI open type features objects
|
30
|
+
#
|
31
|
+
# Follows the Proxy Design Pattern
|
32
|
+
class OpenTypeFeaturesProxy < ControlProxy
|
33
|
+
include Parent
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
::LibUI.free_open_type_features(@libui)
|
37
|
+
@parent_proxy&.children&.delete(self)
|
38
|
+
ControlProxy.control_proxies.delete(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def redraw
|
42
|
+
@parent_proxy.redraw
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def build_control
|
48
|
+
@libui = ::LibUI.new_open_type_features
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,59 @@
|
|
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/libui/control_proxy/area_proxy'
|
24
|
+
require 'glimmer/libui/parent'
|
25
|
+
|
26
|
+
module Glimmer
|
27
|
+
module LibUI
|
28
|
+
class ControlProxy
|
29
|
+
# Proxy for LibUI open type tag objects
|
30
|
+
#
|
31
|
+
# Follows the Proxy Design Pattern
|
32
|
+
class OpenTypeTagProxy < ControlProxy
|
33
|
+
def destroy
|
34
|
+
@parent_proxy&.children&.delete(self)
|
35
|
+
ControlProxy.control_proxies.delete(self)
|
36
|
+
end
|
37
|
+
|
38
|
+
def redraw
|
39
|
+
@parent_proxy.redraw
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def build_control
|
45
|
+
tag_args = @args.dup
|
46
|
+
tag_args[0] = ordinalize(tag_args[0])
|
47
|
+
tag_args[1] = ordinalize(tag_args[1])
|
48
|
+
tag_args[2] = ordinalize(tag_args[2])
|
49
|
+
tag_args[3] = ordinalize(tag_args[3])
|
50
|
+
::LibUI.open_type_features_add(@parent_proxy.libui, *tag_args)
|
51
|
+
end
|
52
|
+
|
53
|
+
def ordinalize(arg)
|
54
|
+
arg.is_a?(String) ? arg.ord : arg
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -58,8 +58,16 @@ module Glimmer
|
|
58
58
|
|
59
59
|
def post_initialize_child(child)
|
60
60
|
@columns << child
|
61
|
-
# add
|
62
|
-
|
61
|
+
# add extra complementary columns (:text, :color) if it is a dual/triple column (i.e. ImageTextColumnProxy or CheckboxTextColumnProxy
|
62
|
+
case child
|
63
|
+
when Column::ImageTextColumnProxy, Column::CheckboxTextColumnProxy
|
64
|
+
@columns << :text
|
65
|
+
when Column::TextColorColumnProxy
|
66
|
+
@columns << :color
|
67
|
+
when Column::CheckboxTextColorColumnProxy, Column::ImageTextColorColumnProxy
|
68
|
+
@columns << :text
|
69
|
+
@columns << :color
|
70
|
+
end
|
63
71
|
end
|
64
72
|
|
65
73
|
def destroy
|
@@ -119,27 +127,36 @@ module Glimmer
|
|
119
127
|
@model_handler = ::LibUI::FFI::TableModelHandler.malloc
|
120
128
|
@model_handler.NumColumns = fiddle_closure_block_caller(4) { @columns.map {|c| c.is_a?(DualColumn) ? 2 : 1}.sum }
|
121
129
|
@model_handler.ColumnType = fiddle_closure_block_caller(4, [1, 1, 4]) do |_, _, column|
|
130
|
+
# TODO consider refactoring to use Glimmer::LibUI.enum_symbols(:table_value_type)
|
122
131
|
case @columns[column]
|
123
|
-
when Column::TextColumnProxy, Column::ButtonColumnProxy,
|
132
|
+
when Column::TextColumnProxy, Column::ButtonColumnProxy, Column::TextColorColumnProxy, :text
|
124
133
|
0
|
125
|
-
when Column::ImageColumnProxy, Column::ImageTextColumnProxy
|
134
|
+
when Column::ImageColumnProxy, Column::ImageTextColumnProxy, Column::ImageTextColorColumnProxy
|
126
135
|
1
|
127
|
-
when Column::CheckboxColumnProxy, Column::CheckboxTextColumnProxy, Column::ProgressBarColumnProxy
|
136
|
+
when Column::CheckboxColumnProxy, Column::CheckboxTextColumnProxy, Column::CheckboxTextColorColumnProxy, Column::ProgressBarColumnProxy
|
128
137
|
2
|
138
|
+
when Column::BackgroundColorColumnProxy, :color
|
139
|
+
3
|
129
140
|
end
|
130
141
|
end
|
131
142
|
@model_handler.NumRows = fiddle_closure_block_caller(4) { cell_rows.count }
|
132
143
|
@model_handler.CellValue = fiddle_closure_block_caller(1, [1, 1, 4, 4]) do |_, _, row, column|
|
133
144
|
the_cell_rows = expanded_cell_rows
|
134
145
|
case @columns[column]
|
135
|
-
when Column::TextColumnProxy, Column::ButtonColumnProxy,
|
146
|
+
when Column::TextColumnProxy, Column::ButtonColumnProxy, Column::TextColorColumnProxy, :text
|
136
147
|
::LibUI.new_table_value_string((expanded_cell_rows[row] && expanded_cell_rows[row][column]).to_s)
|
137
|
-
when Column::ImageColumnProxy, Column::ImageTextColumnProxy
|
148
|
+
when Column::ImageColumnProxy, Column::ImageTextColumnProxy, Column::ImageTextColorColumnProxy
|
138
149
|
::LibUI.new_table_value_image((expanded_cell_rows[row] && (expanded_cell_rows[row][column].respond_to?(:libui) ? expanded_cell_rows[row][column].libui : expanded_cell_rows[row][column])))
|
139
|
-
when Column::CheckboxColumnProxy, Column::CheckboxTextColumnProxy
|
150
|
+
when Column::CheckboxColumnProxy, Column::CheckboxTextColumnProxy, Column::CheckboxTextColorColumnProxy
|
140
151
|
::LibUI.new_table_value_int((expanded_cell_rows[row] && (expanded_cell_rows[row][column] == 1 || expanded_cell_rows[row][column].to_s.strip.downcase == 'true' ? 1 : 0)))
|
141
152
|
when Column::ProgressBarColumnProxy
|
142
153
|
::LibUI.new_table_value_int((expanded_cell_rows[row] && (expanded_cell_rows[row][column].to_i)))
|
154
|
+
when Column::BackgroundColorColumnProxy
|
155
|
+
background_color = Glimmer::LibUI.interpret_color(expanded_cell_rows[row] && expanded_cell_rows[row][column])
|
156
|
+
::LibUI.new_table_value_color(background_color[:r] / 255.0, background_color[:g] / 255.0, background_color[:b] / 255.0, background_color[:a] || 1.0)
|
157
|
+
when :color
|
158
|
+
color = Glimmer::LibUI.interpret_color(expanded_cell_rows[row] && expanded_cell_rows[row][column])
|
159
|
+
::LibUI.new_table_value_color(color[:r] / 255.0, color[:g] / 255.0, color[:b] / 255.0, color[:a] || 1.0)
|
143
160
|
end
|
144
161
|
end
|
145
162
|
@model_handler.SetCellValue = fiddle_closure_block_caller(0, [1, 1, 4, 4, 1]) do |_, _, row, column, val|
|
@@ -148,7 +165,7 @@ module Glimmer
|
|
148
165
|
column = @columns[column].index
|
149
166
|
@cell_rows[row] ||= []
|
150
167
|
@cell_rows[row][column] = ::LibUI.table_value_string(val).to_s
|
151
|
-
when
|
168
|
+
when :text
|
152
169
|
column = @columns[column - 1].index
|
153
170
|
@cell_rows[row][column][1] = ::LibUI.table_value_string(val).to_s
|
154
171
|
when Column::ButtonColumnProxy
|
@@ -162,13 +179,16 @@ module Glimmer
|
|
162
179
|
|
163
180
|
@model = ::LibUI.new_table_model(@model_handler)
|
164
181
|
|
182
|
+
# figure out and reserve column indices for columns
|
183
|
+
@columns.each { |column| column.respond_to?(:column_index) && column.column_index }
|
184
|
+
|
165
185
|
@table_params = ::LibUI::FFI::TableParams.malloc
|
166
186
|
@table_params.Model = @model
|
167
|
-
@table_params.RowBackgroundColorModelColumn = -1
|
187
|
+
@table_params.RowBackgroundColorModelColumn = @columns.find {|column| column.is_a?(Column::BackgroundColorColumnProxy)}&.column_index || -1
|
168
188
|
|
169
189
|
@libui = ControlProxy.new_control(@keyword, [@table_params])
|
170
190
|
@libui.tap do
|
171
|
-
@columns.each {|column| column
|
191
|
+
@columns.each {|column| column.respond_to?(:build_control, true) && column.send(:build_control) }
|
172
192
|
end
|
173
193
|
end
|
174
194
|
|
@@ -51,10 +51,12 @@ module Glimmer
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def draw(area_draw_params)
|
54
|
+
reset_attributed_string
|
54
55
|
children.dup.each {|child| child.draw(area_draw_params)}
|
55
56
|
build_control
|
56
57
|
::LibUI.draw_text(area_draw_params[:context], @libui, x, y)
|
57
58
|
::LibUI.draw_free_text_layout(@libui)
|
59
|
+
::LibUI.free_attributed_string(@attributed_string)
|
58
60
|
end
|
59
61
|
|
60
62
|
def destroy
|
@@ -88,23 +90,35 @@ module Glimmer
|
|
88
90
|
|
89
91
|
def width(value = nil)
|
90
92
|
if value.nil?
|
91
|
-
@width ||= args[2] || (AreaProxy.current_area_draw_params && AreaProxy.current_area_draw_params[:
|
93
|
+
@width ||= args[2] || (AreaProxy.current_area_draw_params && AreaProxy.current_area_draw_params[:area_width])
|
92
94
|
else
|
93
95
|
@width = value
|
96
|
+
redraw
|
94
97
|
end
|
95
98
|
end
|
96
99
|
alias width= width
|
97
100
|
alias set_width width
|
98
101
|
|
99
102
|
def attributed_string
|
100
|
-
@attributed_string ||=
|
103
|
+
@attributed_string ||= reset_attributed_string
|
104
|
+
end
|
105
|
+
|
106
|
+
def reset_attributed_string
|
107
|
+
@attributed_string = ::LibUI.new_attributed_string('')
|
101
108
|
end
|
102
109
|
|
103
110
|
def default_font(value = nil)
|
104
111
|
if value.nil?
|
105
|
-
@default_font ||= {
|
112
|
+
@default_font ||= {
|
113
|
+
family: 'Helvetica',
|
114
|
+
size: 12.0,
|
115
|
+
weight: :normal,
|
116
|
+
italic: :normal,
|
117
|
+
stretch: :normal,
|
118
|
+
}
|
106
119
|
else
|
107
120
|
@default_font = value
|
121
|
+
redraw
|
108
122
|
end
|
109
123
|
end
|
110
124
|
alias default_font= default_font
|
@@ -122,9 +136,10 @@ module Glimmer
|
|
122
136
|
|
123
137
|
def align(value = nil)
|
124
138
|
if value.nil?
|
125
|
-
@align
|
139
|
+
@align
|
126
140
|
else
|
127
141
|
@align = value
|
142
|
+
redraw
|
128
143
|
end
|
129
144
|
end
|
130
145
|
alias align= align
|
@@ -135,7 +150,7 @@ module Glimmer
|
|
135
150
|
@draw_text_layout_params.String = attributed_string
|
136
151
|
@draw_text_layout_params.DefaultFont = default_font_descriptor
|
137
152
|
@draw_text_layout_params.Width = width
|
138
|
-
@draw_text_layout_params.Align = Glimmer::LibUI.enum_symbol_to_value(:draw_text_align, align, default_symbol: :
|
153
|
+
@draw_text_layout_params.Align = Glimmer::LibUI.enum_symbol_to_value(:draw_text_align, align, default_symbol: :left)
|
139
154
|
@draw_text_layout_params
|
140
155
|
end
|
141
156
|
|
@@ -0,0 +1,45 @@
|
|
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
|
+
module Glimmer
|
23
|
+
module LibUI
|
24
|
+
class ControlProxy
|
25
|
+
# A dual column is one that represents two values (e.g. image and text or checkbox and text)
|
26
|
+
# It is meant to be included in a column proxy class that already includes Column
|
27
|
+
module TripleColumn
|
28
|
+
def second_column_index
|
29
|
+
column_index + 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def third_column_index
|
33
|
+
column_index + 2
|
34
|
+
end
|
35
|
+
|
36
|
+
def column_index
|
37
|
+
@column_index ||= @parent_proxy.send(:next_column_index).tap do
|
38
|
+
@parent_proxy.send(:next_column_index)
|
39
|
+
@parent_proxy.send(:next_column_index)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/glimmer/libui.rb
CHANGED
@@ -115,7 +115,7 @@ module Glimmer
|
|
115
115
|
if enum_symbol.is_a?(Integer)
|
116
116
|
enum_symbol
|
117
117
|
elsif enum_symbols(enum_name).include?(enum_symbol.to_s.to_sym)
|
118
|
-
enum_symbol_values(enum_name)[enum_symbol]
|
118
|
+
enum_symbol_values(enum_name)[enum_symbol.to_s.to_sym]
|
119
119
|
elsif default_symbol
|
120
120
|
enum_symbol_to_value(enum_name, default_symbol)
|
121
121
|
else
|
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.2.
|
4
|
+
version: 0.2.7
|
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-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -216,11 +216,13 @@ files:
|
|
216
216
|
- examples/basic_area2.rb
|
217
217
|
- examples/basic_button.rb
|
218
218
|
- examples/basic_draw_text.rb
|
219
|
+
- examples/basic_draw_text2.rb
|
219
220
|
- examples/basic_entry.rb
|
220
221
|
- examples/basic_table.rb
|
221
222
|
- examples/basic_table_button.rb
|
222
223
|
- examples/basic_table_checkbox.rb
|
223
224
|
- examples/basic_table_checkbox_text.rb
|
225
|
+
- examples/basic_table_color.rb
|
224
226
|
- examples/basic_table_image.rb
|
225
227
|
- examples/basic_table_image_text.rb
|
226
228
|
- examples/basic_table_progress_bar.rb
|
@@ -230,6 +232,8 @@ files:
|
|
230
232
|
- examples/color_button.rb
|
231
233
|
- examples/color_the_circles.rb
|
232
234
|
- examples/control_gallery.rb
|
235
|
+
- examples/custom_draw_text.rb
|
236
|
+
- examples/custom_draw_text2.rb
|
233
237
|
- examples/date_time_picker.rb
|
234
238
|
- examples/dynamic_area.rb
|
235
239
|
- examples/dynamic_area2.rb
|
@@ -246,6 +250,7 @@ files:
|
|
246
250
|
- examples/simple_notepad.rb
|
247
251
|
- examples/timer.rb
|
248
252
|
- glimmer-dsl-libui.gemspec
|
253
|
+
- icons/glimmer.png
|
249
254
|
- lib/glimmer-dsl-libui.rb
|
250
255
|
- lib/glimmer/dsl/libui/control_expression.rb
|
251
256
|
- lib/glimmer/dsl/libui/dsl.rb
|
@@ -270,12 +275,16 @@ files:
|
|
270
275
|
- lib/glimmer/libui/control_proxy/checkbox_proxy.rb
|
271
276
|
- lib/glimmer/libui/control_proxy/color_button_proxy.rb
|
272
277
|
- lib/glimmer/libui/control_proxy/column.rb
|
278
|
+
- lib/glimmer/libui/control_proxy/column/background_color_column_proxy.rb
|
273
279
|
- lib/glimmer/libui/control_proxy/column/button_column_proxy.rb
|
274
280
|
- lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb
|
281
|
+
- lib/glimmer/libui/control_proxy/column/checkbox_text_color_column_proxy.rb
|
275
282
|
- lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb
|
276
283
|
- lib/glimmer/libui/control_proxy/column/image_column_proxy.rb
|
284
|
+
- lib/glimmer/libui/control_proxy/column/image_text_color_column_proxy.rb
|
277
285
|
- lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb
|
278
286
|
- lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb
|
287
|
+
- lib/glimmer/libui/control_proxy/column/text_color_column_proxy.rb
|
279
288
|
- lib/glimmer/libui/control_proxy/column/text_column_proxy.rb
|
280
289
|
- lib/glimmer/libui/control_proxy/combobox_proxy.rb
|
281
290
|
- lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb
|
@@ -309,12 +318,15 @@ files:
|
|
309
318
|
- lib/glimmer/libui/control_proxy/message_box/msg_box_proxy.rb
|
310
319
|
- lib/glimmer/libui/control_proxy/multiline_entry_proxy.rb
|
311
320
|
- lib/glimmer/libui/control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb
|
321
|
+
- lib/glimmer/libui/control_proxy/open_type_features_proxy.rb
|
322
|
+
- lib/glimmer/libui/control_proxy/open_type_tag_proxy.rb
|
312
323
|
- lib/glimmer/libui/control_proxy/path_proxy.rb
|
313
324
|
- lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb
|
314
325
|
- lib/glimmer/libui/control_proxy/tab_item_proxy.rb
|
315
326
|
- lib/glimmer/libui/control_proxy/table_proxy.rb
|
316
327
|
- lib/glimmer/libui/control_proxy/text_proxy.rb
|
317
328
|
- lib/glimmer/libui/control_proxy/transformable.rb
|
329
|
+
- lib/glimmer/libui/control_proxy/triple_column.rb
|
318
330
|
- lib/glimmer/libui/control_proxy/window_proxy.rb
|
319
331
|
- lib/glimmer/libui/parent.rb
|
320
332
|
- lib/glimmer/libui/shape.rb
|