white_gold 0.0.2 → 0.0.3
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/ext/dll/tgui.dll +0 -0
- data/ext/so/libtgui.so +0 -0
- data/lib/white_gold/abi/extern_object.rb +6 -1
- data/lib/white_gold/abi/unpacker.rb +4 -2
- data/lib/white_gold/convention/bang_nest.rb +12 -2
- data/lib/white_gold/convention/bang_nested_caller.rb +34 -34
- data/lib/white_gold/convention/container_widgets.rb +29 -24
- data/lib/white_gold/convention/page.rb +20 -2
- data/lib/white_gold/convention/theme/text_styles_attribute.rb +7 -2
- data/lib/white_gold/convention/theme/theme_attributed.rb +1 -1
- data/lib/white_gold/convention/tree_node.rb +43 -0
- data/lib/white_gold/convention/widget_like.rb +0 -6
- data/lib/white_gold/dsl/backend_gui.rb +1 -0
- data/lib/white_gold/dsl/canvas.rb +40 -0
- data/lib/white_gold/dsl/chat_box.rb +1 -1
- data/lib/white_gold/dsl/child_window.rb +1 -1
- data/lib/white_gold/dsl/color.rb +5 -2
- data/lib/white_gold/dsl/combo_box.rb +2 -2
- data/lib/white_gold/dsl/container.rb +17 -11
- data/lib/white_gold/dsl/font.rb +5 -1
- data/lib/white_gold/dsl/grid.rb +3 -3
- data/lib/white_gold/dsl/list_box.rb +7 -11
- data/lib/white_gold/dsl/list_view.rb +6 -6
- data/lib/white_gold/dsl/menu_bar.rb +5 -48
- data/lib/white_gold/dsl/message_box.rb +2 -2
- data/lib/white_gold/dsl/panel_list_box.rb +3 -3
- data/lib/white_gold/dsl/sfml/circle_shape.rb +7 -0
- data/lib/white_gold/dsl/sfml/convex_shape.rb +15 -0
- data/lib/white_gold/dsl/sfml/rectangle_shape.rb +7 -0
- data/lib/white_gold/dsl/sfml/shape.rb +19 -0
- data/lib/white_gold/dsl/sfml/text.rb +22 -0
- data/lib/white_gold/dsl/signal/global_signal.rb +1 -1
- data/lib/white_gold/dsl/signal/signal.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_animation_type.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_bool.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_color.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_float.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_int.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_pointer.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_range.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_show_effect.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_string.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_u_int.rb +1 -1
- data/lib/white_gold/dsl/signal/signal_vector2f.rb +1 -1
- data/lib/white_gold/dsl/tab_container.rb +2 -2
- data/lib/white_gold/dsl/tabs.rb +2 -2
- data/lib/white_gold/dsl/theme.rb +1 -1
- data/lib/white_gold/dsl/tree_view.rb +21 -33
- data/lib/white_gold/dsl/widget.rb +71 -38
- data/lib/white_gold/generated/tgui-abi-loader.gf.rb +197 -47
- data/lib/white_gold/master.rb +21 -40
- data/lib/white_gold/tgui-abi.rb +16 -16
- data/lib/white_gold/version.rb +3 -0
- data/lib/white_gold.rb +29 -28
- metadata +16 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6727469d73967f049141a5c7b128bfb88b5c18cb128ce7b00417e7f889648138
|
4
|
+
data.tar.gz: f30fed9fdbfc915eb0fb70fded0aabe9593991037af91253427d59b22f053913
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9373c37d6ccbbb45b973b55c92dd924ec9bc9511ee4a5b1e244859f956f9133d767b30874255535b3fd715d396fb5b96787076014fcfdd5354005973631ac7e
|
7
|
+
data.tar.gz: 240acb40c4ef8d00788e704c40eff66c93535b20d57c3973c9a04e50c18e7dae3c3fc808a1f63308700eb11efe4458dcc970033b385f922e38d72ea53e9c88f0
|
data/ext/dll/tgui.dll
CHANGED
Binary file
|
data/ext/so/libtgui.so
CHANGED
Binary file
|
@@ -17,6 +17,7 @@ class ExternObject
|
|
17
17
|
end
|
18
18
|
ObjectSpace.define_finalizer(self, cl.proc.finalizer(pointer))
|
19
19
|
end
|
20
|
+
initialized
|
20
21
|
end
|
21
22
|
|
22
23
|
def initialized
|
@@ -102,7 +103,11 @@ class ExternObject
|
|
102
103
|
getter = "#{original_name}#{name}".delete_suffix("?").to_sym
|
103
104
|
setter = "set_#{name}".delete_suffix("?").to_sym
|
104
105
|
else
|
105
|
-
|
106
|
+
if name.end_with? "?"
|
107
|
+
getter = "is_#{original_name}".to_sym
|
108
|
+
else
|
109
|
+
getter = "get_#{original_name}".to_sym
|
110
|
+
end
|
106
111
|
setter = "set_#{original_name}".to_sym
|
107
112
|
end
|
108
113
|
else
|
@@ -2,15 +2,17 @@ require_relative 'interface/interface'
|
|
2
2
|
|
3
3
|
module Unpacker
|
4
4
|
def abi_unpacker base, &body
|
5
|
+
method_name = abi_unpacker_method_name(base)
|
5
6
|
if block_given?
|
6
|
-
define_method
|
7
|
+
define_method method_name, &body
|
7
8
|
elsif base.is_a? Module
|
8
|
-
define_method
|
9
|
+
define_method method_name do |o|
|
9
10
|
base.new pointer: o
|
10
11
|
end
|
11
12
|
else
|
12
13
|
raise "..."
|
13
14
|
end
|
15
|
+
method_name
|
14
16
|
end
|
15
17
|
|
16
18
|
def abi_unpacker_method_name base
|
@@ -4,13 +4,23 @@ module BangNest
|
|
4
4
|
include BangNestedCaller
|
5
5
|
|
6
6
|
def respond_to? name
|
7
|
-
super || bang_respond_to?(name)
|
7
|
+
super || (name.end_with?("!") && bang_respond_to?(name[...-1]))
|
8
8
|
end
|
9
9
|
|
10
10
|
def method_missing name, *a, **na, &b
|
11
11
|
if name.end_with? "!"
|
12
|
-
bang_method_missing name, *a, **na, &b
|
12
|
+
bang_method_missing name[...-1], *a, **na, &b
|
13
13
|
else super
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
def send! *a, **na, &b
|
18
|
+
a.each do |k|
|
19
|
+
send("#{k}=", true)
|
20
|
+
end
|
21
|
+
na.each do |k, v|
|
22
|
+
send("#{k}=", v)
|
23
|
+
end
|
24
|
+
super(&b)
|
25
|
+
end
|
16
26
|
end
|
@@ -1,48 +1,48 @@
|
|
1
1
|
module BangNestedCaller
|
2
|
-
def bang_respond_to? name
|
3
|
-
name.end_with?("!") && (respond_to?("#{name[...-1]}=") || respond_to?("api_bang_#{name[...-1]}") || (@bang_target && @bang_target.respond_to?(name)))
|
4
|
-
end
|
5
|
-
|
6
|
-
def bang_method_missing name, *a, **na, &b
|
7
|
-
return @bang_target.send(name, *a, **na, &b) if @bang_target && @bang_target.respond_to?(name)
|
8
2
|
|
9
|
-
|
10
|
-
return send(api_name, *a, **na, &b) if respond_to? api_name
|
11
|
-
|
12
|
-
setter = "#{name[...-1]}=".to_sym
|
13
|
-
if respond_to? setter
|
14
|
-
return send(setter, a) if !a.empty?
|
15
|
-
return send(setter, na) if !na.empty?
|
16
|
-
return send(setter, b) if block_given?
|
17
|
-
return send(setter)
|
18
|
-
end
|
19
|
-
|
20
|
-
no_method_error = NoMethodError.new("undefined bang nested method `#{name}` for #{bang_object_stack.map(&:class).join("/")}")
|
21
|
-
raise no_method_error
|
22
|
-
end
|
3
|
+
@@bang_stack = []
|
23
4
|
|
24
5
|
def self!
|
25
|
-
|
6
|
+
@@bang_stack.last
|
26
7
|
end
|
27
8
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
stack << @bang_target if @bang_target
|
32
|
-
stack += @bang_target.bang_object_stack(false) if @bang_target&.respond_to? :bang_object_stack
|
33
|
-
return stack
|
9
|
+
def bang_respond_to? name
|
10
|
+
top = @@bang_stack.include?(self) ? @@bang_stack.last : self
|
11
|
+
top.respond_to?("#{name}=") || top.respond_to?("api_bang_#{name}")
|
34
12
|
end
|
35
13
|
|
14
|
+
def bang_send name, *a, **na, &b
|
15
|
+
top = @@bang_stack.last
|
16
|
+
api_bang_name = "api_bang_#{name}".to_sym
|
17
|
+
return top.send(api_bang_name, *a, **na, &b) if top.respond_to? api_bang_name
|
18
|
+
setter = "#{name}=".to_sym
|
19
|
+
if top.respond_to? setter
|
20
|
+
return top.send(setter, a) if !a.empty?
|
21
|
+
return top.send(setter, na) if !na.empty?
|
22
|
+
return top.send(setter, b) if block_given?
|
23
|
+
return top.send(setter)
|
24
|
+
end
|
25
|
+
no_method_error = NoMethodError.new("bang method missing `#{name}!` for #{top.class}")
|
26
|
+
raise no_method_error
|
27
|
+
end
|
36
28
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
29
|
+
def bang_method_missing name, *a, **na, &b
|
30
|
+
if @@bang_stack.include?(self)
|
31
|
+
bang_send name, *a, **na, &b
|
32
|
+
else
|
33
|
+
@@bang_stack.push self
|
34
|
+
result = bang_send name, *a, **na, &b
|
35
|
+
@@bang_stack.pop
|
36
|
+
result
|
40
37
|
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def send! &b
|
41
41
|
if b
|
42
|
-
|
43
|
-
b.call
|
44
|
-
|
42
|
+
@@bang_stack.push self
|
43
|
+
b.call self
|
44
|
+
@@bang_stack.pop
|
45
45
|
end
|
46
|
-
|
46
|
+
self
|
47
47
|
end
|
48
48
|
end
|
@@ -2,9 +2,10 @@ require_relative '../convention/api_child'
|
|
2
2
|
|
3
3
|
module Tgui
|
4
4
|
|
5
|
-
|
5
|
+
ORDINARY_WIDGETS = {
|
6
6
|
bitmap_button: Tgui::BitmapButton,
|
7
7
|
button: Tgui::Button,
|
8
|
+
canvas: Tgui::Canvas,
|
8
9
|
chatbox: Tgui::ChatBox,
|
9
10
|
checkbox: Tgui::CheckBox,
|
10
11
|
child_window: Tgui::ChildWindow,
|
@@ -25,9 +26,7 @@ module Tgui
|
|
25
26
|
panel: Tgui::Panel,
|
26
27
|
panel_listbox: Tgui::PanelListBox,
|
27
28
|
panel_tabs: Tgui::TabContainer,
|
28
|
-
picture: false,
|
29
29
|
progressbar: Tgui::ProgressBar,
|
30
|
-
radio: false,
|
31
30
|
radio_button: Tgui::RadioButton,
|
32
31
|
radio_button_group: Tgui::RadioButtonGroup,
|
33
32
|
range_slider: Tgui::RangeSlider,
|
@@ -44,10 +43,18 @@ module Tgui
|
|
44
43
|
vela: Tgui::VerticalLayout,
|
45
44
|
}.freeze
|
46
45
|
|
46
|
+
UNORDINARY_WIDGETS = {
|
47
|
+
picture: Tgui::Picture
|
48
|
+
}
|
49
|
+
|
50
|
+
def self.widget_set
|
51
|
+
{}.merge ORDINARY_WIDGETS, UNORDINARY_WIDGETS
|
52
|
+
end
|
53
|
+
|
47
54
|
module WidgetOwner
|
48
55
|
extend BangDef
|
49
56
|
|
50
|
-
def
|
57
|
+
def self_common_widget_nest widget, *keys, id: nil, **na, &b
|
51
58
|
club_params = {}
|
52
59
|
Enumerator.new do |e|
|
53
60
|
cl = widget.class
|
@@ -72,18 +79,18 @@ module Tgui
|
|
72
79
|
club_params.merge! club.params
|
73
80
|
end
|
74
81
|
|
75
|
-
|
82
|
+
widget.send! **club_params, **na, &b
|
76
83
|
end
|
77
84
|
|
78
|
-
def
|
85
|
+
def self_child_methods
|
79
86
|
## TO OPTIMIZE
|
80
87
|
methods.filter{ _1.start_with? ApiChild::API_CHILD_PREFIX }
|
81
88
|
end
|
82
89
|
|
83
|
-
def
|
90
|
+
def self_equip_child_widget widget
|
84
91
|
widget.page = page
|
85
92
|
parent = self
|
86
|
-
|
93
|
+
self_child_methods.each do |method|
|
87
94
|
widget.define_singleton_method method[ApiChild::API_CHILD_PREFIX.length..] do |*a|
|
88
95
|
parent.send(method, self, *a)
|
89
96
|
end
|
@@ -91,10 +98,10 @@ module Tgui
|
|
91
98
|
widget
|
92
99
|
end
|
93
100
|
|
94
|
-
|
101
|
+
ORDINARY_WIDGETS.each do |m, c|
|
95
102
|
if c
|
96
103
|
def! m do |*a, **na, &b|
|
97
|
-
|
104
|
+
self_common_widget_equip self_equip_child_widget(c.new), *a, **na, &b
|
98
105
|
end
|
99
106
|
end
|
100
107
|
end
|
@@ -110,16 +117,16 @@ module Tgui
|
|
110
117
|
)
|
111
118
|
transparent = na[:transparent] || false
|
112
119
|
pic = Tgui::Picture.new texture, transparent
|
113
|
-
|
114
|
-
|
120
|
+
self_equip_child_widget pic
|
121
|
+
self_common_widget_equip pic, *a, **na.except(:url, :part_rect, :smooth, :transparent), &b
|
115
122
|
end
|
116
123
|
|
117
124
|
def! :radio do |object, *a, **na, &b|
|
118
125
|
radio = RadioButton.new
|
119
|
-
|
126
|
+
self_equip_child_widget radio
|
120
127
|
radio.object = object
|
121
128
|
na[:text] ||= object.to_s
|
122
|
-
|
129
|
+
self_common_widget_equip radio, *a, **na, &b
|
123
130
|
end
|
124
131
|
|
125
132
|
def! :msg do |text, **buttons|
|
@@ -146,22 +153,20 @@ module Tgui
|
|
146
153
|
|
147
154
|
@@auto_widget_id = "@/"
|
148
155
|
|
149
|
-
def
|
156
|
+
def self_common_widget_equip widget, *keys, **na, &b
|
150
157
|
@@auto_widget_id = id = @@auto_widget_id.next
|
151
158
|
add widget, id
|
152
|
-
|
159
|
+
self_common_widget_nest widget, *keys, id:, **na, &b
|
153
160
|
end
|
154
161
|
|
155
162
|
end
|
156
163
|
|
157
164
|
class TabContainer
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
raise NoMethodError.new("Method `#{m}` should be called on Panel from TabContainer, not TabContainer itself")
|
162
|
-
end
|
163
|
-
end
|
165
|
+
|
166
|
+
def add widget, name
|
167
|
+
raise NoMethodError.new("Widget can't be added to TabContainer directly. Add it to TabContainer panel instead.")
|
164
168
|
end
|
169
|
+
|
165
170
|
end
|
166
171
|
|
167
172
|
class ToolTip
|
@@ -169,9 +174,9 @@ module Tgui
|
|
169
174
|
|
170
175
|
attr :widget
|
171
176
|
|
172
|
-
def
|
177
|
+
def self_common_widget_equip widget, *keys, **na, &b
|
173
178
|
@widget = widget
|
174
|
-
|
179
|
+
self_common_widget_nest widget, *keys, **na, &b
|
175
180
|
end
|
176
181
|
end
|
177
182
|
|
@@ -22,6 +22,24 @@ class Page < Tgui::Group
|
|
22
22
|
def build
|
23
23
|
end
|
24
24
|
|
25
|
+
def respond_to? name
|
26
|
+
super ||
|
27
|
+
(name.end_with?("!") && bang_respond_to?(name[...-1])) ||
|
28
|
+
@tgui.gui.respond_to?(name) ||
|
29
|
+
@tgui.window.respond_to?(name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing name, *a, **na, &b
|
33
|
+
if name.end_with? "!"
|
34
|
+
bang_method_missing name[...-1], *a, **na, &b
|
35
|
+
elsif @tgui.gui.respond_to? name
|
36
|
+
@tgui.gui.send name, *a, **na, &b
|
37
|
+
elsif @tgui.window.respond_to? name
|
38
|
+
@tgui.window.send name, *a, **na, &b
|
39
|
+
else super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
25
43
|
def disconnect
|
26
44
|
@global_callbacks.each do |id, signal|
|
27
45
|
signal.disconnect id
|
@@ -79,11 +97,11 @@ class Page < Tgui::Group
|
|
79
97
|
theme = self.theme
|
80
98
|
if seed
|
81
99
|
theme.reset_attributes
|
82
|
-
|
100
|
+
theme.send! do
|
83
101
|
load Tgui::Theme.loadpath(seed)
|
84
102
|
end
|
85
103
|
end
|
86
|
-
|
104
|
+
theme.send! **na, &b
|
87
105
|
theme.self_commit @custom_renderers
|
88
106
|
end
|
89
107
|
|
@@ -1,13 +1,18 @@
|
|
1
|
+
require_relative '../../abi/extern_object'
|
2
|
+
|
1
3
|
class TextStylesAttribute
|
2
4
|
def initialize name, value
|
3
5
|
@name = name
|
4
|
-
@value = value
|
6
|
+
@value = Array(value).map do |style|
|
7
|
+
raise "Invalid style #{style}" if !ExternObject::TextStyles[style]
|
8
|
+
style.to_s.upcase
|
9
|
+
end.join("|")
|
5
10
|
end
|
6
11
|
|
7
12
|
attr :name
|
8
13
|
attr :value
|
9
14
|
|
10
15
|
def to_theme
|
11
|
-
"#{name} = #{value
|
16
|
+
"#{name} = #{value};"
|
12
17
|
end
|
13
18
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class TreeNode
|
2
|
+
def initialize text
|
3
|
+
@text = text
|
4
|
+
@nodes = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
attr_accessor :text
|
8
|
+
attr :nodes
|
9
|
+
|
10
|
+
def [](*path, grow: false)
|
11
|
+
if grow
|
12
|
+
path.reduce(self){|node, o| node.nodes[o] ||= TreeNode.new(nil) }
|
13
|
+
else
|
14
|
+
path.reduce(self){|node, o| node&.nodes[o] }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def cut *path, last
|
19
|
+
self[*path].nodes.delete last
|
20
|
+
end
|
21
|
+
|
22
|
+
def cut_branches *path
|
23
|
+
self[*path].nodes = {}
|
24
|
+
end
|
25
|
+
|
26
|
+
def path_str_to_object *path
|
27
|
+
object_path = []
|
28
|
+
path.reduce self do |node, str|
|
29
|
+
o, node = *node.nodes.find{|k, v| v.text == str }
|
30
|
+
object_path << o
|
31
|
+
node
|
32
|
+
end
|
33
|
+
object_path
|
34
|
+
end
|
35
|
+
|
36
|
+
def path_object_to_str *path
|
37
|
+
str_path = []
|
38
|
+
path.reduce self do |node, o|
|
39
|
+
node[o].tap{ str_path << _1.text }
|
40
|
+
end
|
41
|
+
str_path
|
42
|
+
end
|
43
|
+
end
|
@@ -31,6 +31,7 @@ module Tgui
|
|
31
31
|
abi_def :pop_mouse_cursor, :restore_override_mouse_cursor
|
32
32
|
abi_def :px_to_crd, :map_pixel_to_coords, [Integer, Integer] => [Float, Float]
|
33
33
|
abi_def :crd_to_px, :map_coords_to_pixel, [Float, Float] => [Float, Float]
|
34
|
+
abi_attr :keyboard_navigation?, Boolean, :keyboard_navigation_enabled
|
34
35
|
abi_signal :on_view_change, ViewSignal
|
35
36
|
|
36
37
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative 'clickable_widget'
|
2
|
+
|
3
|
+
module Tgui
|
4
|
+
class Canvas < ClickableWidget
|
5
|
+
|
6
|
+
class Draw < WidgetLike
|
7
|
+
|
8
|
+
def! :fill do |*color|
|
9
|
+
host._abi_clear host.abi_pack(Color, *color)
|
10
|
+
end
|
11
|
+
|
12
|
+
def! :rectangle do |**na, &b|
|
13
|
+
shape = RectangleShape.new.send! **na, &b
|
14
|
+
host._abi_draw shape
|
15
|
+
end
|
16
|
+
|
17
|
+
def! :circle do |**na, &b|
|
18
|
+
shape = CircleShape.new.send! **na, &b
|
19
|
+
host._abi_draw shape
|
20
|
+
end
|
21
|
+
|
22
|
+
def! :convex do |**na, &b|
|
23
|
+
shape = ConvexShape.new.send! **na, &b
|
24
|
+
host._abi_draw shape
|
25
|
+
end
|
26
|
+
|
27
|
+
def! :text do |**na, &b|
|
28
|
+
text = Text.new.send! **na, &b
|
29
|
+
host._abi_draw text
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def! :draw do |&b|
|
35
|
+
Draw.new(self, nil).send! &b
|
36
|
+
_abi_display
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/white_gold/dsl/color.rb
CHANGED
@@ -21,6 +21,9 @@ module Tgui
|
|
21
21
|
return arg
|
22
22
|
when String
|
23
23
|
r, g, b, a = *tones_from_string(arg)
|
24
|
+
when :random
|
25
|
+
r, g, b = 5.times.map{ rand 255 }
|
26
|
+
a = 255
|
24
27
|
when Symbol
|
25
28
|
r, g, b, a = *PREDEFINED_COLORS[arg]
|
26
29
|
when Numeric
|
@@ -61,12 +64,12 @@ module Tgui
|
|
61
64
|
Color.new *Color.hsv_to_rgb(h, s, (v - shadow).clamp(0, 255)), alpha
|
62
65
|
end
|
63
66
|
|
64
|
-
def
|
67
|
+
def to_arr
|
65
68
|
[red, green, blue, alpha]
|
66
69
|
end
|
67
70
|
|
68
71
|
def to_s
|
69
|
-
"##{
|
72
|
+
"##{to_arr.map{ _1.to_s(16).ljust(2, '0') }.join}"
|
70
73
|
end
|
71
74
|
|
72
75
|
def inspect
|
@@ -37,7 +37,7 @@ module Tgui
|
|
37
37
|
def block_caller &b
|
38
38
|
Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP]) do |str1, str2|
|
39
39
|
id = @widget.abi_unpack_string(str2)
|
40
|
-
@widget.
|
40
|
+
@widget.send! do
|
41
41
|
b.(@widget.self_get_object_by_id(id), @widget)
|
42
42
|
end
|
43
43
|
end
|
@@ -99,7 +99,7 @@ module Tgui
|
|
99
99
|
_abi_add_item abi_pack_string(text), abi_pack_string(id)
|
100
100
|
item = Item.new self, id
|
101
101
|
self_objects[id] = object
|
102
|
-
|
102
|
+
item.send! **na, &b
|
103
103
|
end
|
104
104
|
|
105
105
|
def selected
|
@@ -19,7 +19,7 @@ module Tgui
|
|
19
19
|
abi_def :remove, Widget => nil
|
20
20
|
|
21
21
|
def move_front widget, ceil = false
|
22
|
-
widget =
|
22
|
+
widget = abi_pack(Widget, widget)
|
23
23
|
if ceil
|
24
24
|
_abi_move_widget_to_front widget
|
25
25
|
else
|
@@ -28,7 +28,7 @@ module Tgui
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def move_back widget, floor = false
|
31
|
-
widget =
|
31
|
+
widget = abi_pack(Widget, widget)
|
32
32
|
if floor
|
33
33
|
_abi_move_widget_to_back widget
|
34
34
|
else
|
@@ -37,13 +37,21 @@ module Tgui
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def move_at index, widget
|
40
|
-
_abi_set_widget_index
|
40
|
+
_abi_set_widget_index abi_pack(Widget, widget), abi_pack_integer(index)
|
41
41
|
end
|
42
42
|
|
43
43
|
abi_def :index, :get_widget_, Widget => Integer
|
44
44
|
abi_def :focused_child, :get_, nil => Widget
|
45
45
|
abi_def :focused_leaf, :get_, nil => Widget
|
46
|
-
|
46
|
+
|
47
|
+
def leaf_at_position x, y
|
48
|
+
abi_unpack(Widget, _abi_get_widget_at_pos(api_pack_float(x), abi_pack_float(y), abi_pack_boolean(true)))
|
49
|
+
end
|
50
|
+
|
51
|
+
def child_at_position x, y
|
52
|
+
abi_unpack(Widget, _abi_get_widget_at_pos(api_pack_float(x), abi_pack_float(y), abi_pack_boolean(false)))
|
53
|
+
end
|
54
|
+
|
47
55
|
abi_def :focus_next, :focus_next_widget
|
48
56
|
abi_def :focus_previous, :focus_previous_widget
|
49
57
|
|
@@ -66,21 +74,19 @@ module Tgui
|
|
66
74
|
|
67
75
|
# internal
|
68
76
|
|
69
|
-
|
77
|
+
|
78
|
+
abi_packer Widget do |o|
|
79
|
+
o = o.first if o.is_a? Array
|
70
80
|
case o
|
71
81
|
when Symbol
|
72
82
|
self[o]
|
73
83
|
when Widget
|
74
84
|
o
|
75
85
|
else
|
76
|
-
raise "Unable to make Widget from #{o}"
|
86
|
+
raise "Unable to make Widget from #{o}(#{o.class})"
|
77
87
|
end
|
78
88
|
end
|
79
|
-
|
80
|
-
def abi_unpack_widget o
|
81
|
-
self_cast_up o
|
82
|
-
end
|
83
|
-
|
89
|
+
|
84
90
|
def self_get_widget_name a
|
85
91
|
case a
|
86
92
|
when Widget
|
data/lib/white_gold/dsl/font.rb
CHANGED
data/lib/white_gold/dsl/grid.rb
CHANGED
@@ -84,9 +84,9 @@ module Tgui
|
|
84
84
|
|
85
85
|
def add widget, id
|
86
86
|
super
|
87
|
-
_abi_set_widget_cell
|
88
|
-
_abi_set_widget_alignment
|
89
|
-
_abi_set_widget_padding
|
87
|
+
_abi_set_widget_cell abi_pack(Widget, widget), *cell
|
88
|
+
_abi_set_widget_alignment abi_pack(Widget, widget), abi_pack(Alignment, alignment) if alignment
|
89
|
+
_abi_set_widget_padding abi_pack(Widget, widget), abi_pack(Outline, *padding) if padding
|
90
90
|
if direction == :column
|
91
91
|
next_column false
|
92
92
|
else
|