glimmer-dsl-libui 0.2.3 → 0.2.7
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 +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
|