white_gold 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/ext/dll/tgui.dll +0 -0
  3. data/ext/so/libtgui.so +0 -0
  4. data/lib/white_gold/abi/enum.rb +1 -1
  5. data/lib/white_gold/abi/extern_object.rb +2 -2
  6. data/lib/white_gold/abi/interface/interface.rb +3 -7
  7. data/lib/white_gold/convention/container_widgets.rb +47 -87
  8. data/lib/white_gold/convention/page.rb +18 -8
  9. data/lib/white_gold/convention/theme/boolean_attribute.rb +11 -9
  10. data/lib/white_gold/convention/theme/color_attribute.rb +11 -9
  11. data/lib/white_gold/convention/theme/float_attribute.rb +11 -9
  12. data/lib/white_gold/convention/theme/outline_attribute.rb +11 -9
  13. data/lib/white_gold/convention/theme/text_styles_attribute.rb +14 -12
  14. data/lib/white_gold/convention/theme/texture_attribute.rb +14 -12
  15. data/lib/white_gold/convention/theme/theme_attributed.rb +2 -2
  16. data/lib/white_gold/convention/theme/theme_component.rb +2 -2
  17. data/lib/white_gold/convention/theme_attributes.rb +6 -2
  18. data/lib/white_gold/convention/widget/keyboard_control.rb +30 -0
  19. data/lib/white_gold/convention/widget_class_aliases.rb +24 -0
  20. data/lib/white_gold/convention/widget_like.rb +1 -4
  21. data/lib/white_gold/dsl/backend_gui.rb +5 -4
  22. data/lib/white_gold/dsl/canvas.rb +5 -5
  23. data/lib/white_gold/dsl/chat_box.rb +1 -1
  24. data/lib/white_gold/dsl/child_window.rb +2 -2
  25. data/lib/white_gold/dsl/color.rb +39 -29
  26. data/lib/white_gold/dsl/combo_box.rb +2 -2
  27. data/lib/white_gold/dsl/container.rb +1 -1
  28. data/lib/white_gold/dsl/custom_widget.rb +28 -0
  29. data/lib/white_gold/dsl/edit_box.rb +1 -2
  30. data/lib/white_gold/dsl/font.rb +4 -0
  31. data/lib/white_gold/dsl/grid.rb +34 -10
  32. data/lib/white_gold/dsl/gui.rb +14 -1
  33. data/lib/white_gold/dsl/label.rb +3 -2
  34. data/lib/white_gold/dsl/list_box.rb +2 -2
  35. data/lib/white_gold/dsl/list_view.rb +12 -12
  36. data/lib/white_gold/dsl/menu_bar.rb +4 -4
  37. data/lib/white_gold/dsl/message_box.rb +3 -3
  38. data/lib/white_gold/dsl/outline.rb +4 -0
  39. data/lib/white_gold/dsl/panel.rb +8 -0
  40. data/lib/white_gold/dsl/panel_list_box.rb +12 -3
  41. data/lib/white_gold/dsl/picture.rb +0 -2
  42. data/lib/white_gold/dsl/radio_button.rb +16 -3
  43. data/lib/white_gold/dsl/scrollable_panel.rb +7 -0
  44. data/lib/white_gold/dsl/sfml/circle_shape.rb +4 -0
  45. data/lib/white_gold/dsl/sfml/convex_shape.rb +4 -0
  46. data/lib/white_gold/dsl/sfml/rectangle_shape.rb +4 -0
  47. data/lib/white_gold/dsl/sfml/shape.rb +3 -2
  48. data/lib/white_gold/dsl/sfml/text.rb +7 -1
  49. data/lib/white_gold/dsl/signal/global_signal.rb +1 -1
  50. data/lib/white_gold/dsl/signal/signal.rb +1 -1
  51. data/lib/white_gold/dsl/signal/signal_animation_type.rb +1 -1
  52. data/lib/white_gold/dsl/signal/signal_bool.rb +4 -4
  53. data/lib/white_gold/dsl/signal/signal_color.rb +1 -1
  54. data/lib/white_gold/dsl/signal/signal_float.rb +1 -1
  55. data/lib/white_gold/dsl/signal/signal_int.rb +1 -1
  56. data/lib/white_gold/dsl/signal/signal_pointer.rb +1 -1
  57. data/lib/white_gold/dsl/signal/signal_range.rb +1 -1
  58. data/lib/white_gold/dsl/signal/signal_show_effect.rb +1 -1
  59. data/lib/white_gold/dsl/signal/signal_string.rb +1 -1
  60. data/lib/white_gold/dsl/signal/signal_u_int.rb +1 -1
  61. data/lib/white_gold/dsl/signal/signal_vector2f.rb +1 -1
  62. data/lib/white_gold/dsl/tab_container.rb +2 -2
  63. data/lib/white_gold/dsl/tabs.rb +2 -2
  64. data/lib/white_gold/dsl/texture.rb +6 -1
  65. data/lib/white_gold/dsl/theme.rb +3 -4
  66. data/lib/white_gold/dsl/toggle_button.rb +3 -0
  67. data/lib/white_gold/dsl/tree_view.rb +2 -2
  68. data/lib/white_gold/dsl/util.rb +3 -1
  69. data/lib/white_gold/dsl/widget.rb +59 -27
  70. data/lib/white_gold/dsl/window.rb +12 -2
  71. data/lib/white_gold/generated/tgui-abi-loader.gf.rb +106 -15
  72. data/lib/white_gold/library/theme/light.rb +8 -1
  73. data/lib/white_gold/master.rb +77 -44
  74. data/lib/white_gold/path/array.path.rb +9 -0
  75. data/lib/white_gold/path/object.path.rb +0 -6
  76. data/lib/white_gold/tgui-abi.rb +36 -31
  77. data/lib/white_gold/version.rb +1 -1
  78. data/lib/white_gold.rb +8 -6
  79. metadata +37 -9
  80. data/lib/white_gold/abi/reducer.rb +0 -12
  81. data/lib/white_gold/convention/bang_def.rb +0 -5
  82. data/lib/white_gold/convention/bang_nest.rb +0 -26
  83. data/lib/white_gold/convention/bang_nested_caller.rb +0 -48
  84. data/lib/white_gold/convention/proc_method_factory.rb +0 -22
@@ -3,5 +3,9 @@ require_relative 'shape'
3
3
  module Tgui
4
4
  class RectangleShape < Shape
5
5
  abi_attr :size, Vector2f
6
+
7
+ def self.finalizer pointer
8
+ _abi_delete pointer
9
+ end
6
10
  end
7
11
  end
@@ -1,9 +1,10 @@
1
1
  require_relative '../../abi/extern_object'
2
- require_relative '../../convention/bang_nest'
2
+ require_relative '../color'
3
+ require_relative '../texture'
3
4
 
4
5
  module Tgui
5
6
  class Shape < ExternObject
6
- include BangNest
7
+ include Extree
7
8
 
8
9
  abi_attr :texture, Texture
9
10
  abi_attr :radius, Float
@@ -1,8 +1,10 @@
1
1
  require_relative '../../abi/extern_object'
2
+ require_relative '../font'
3
+ require_relative '../color'
2
4
 
3
5
  module Tgui
4
6
  class Text < ExternObject
5
- include BangNest
7
+ include Extree
6
8
 
7
9
  abi_attr :string, String
8
10
  abi_attr :font, Font
@@ -18,5 +20,9 @@ module Tgui
18
20
  abi_attr :rotation, Float
19
21
  abi_attr :scale, Vector2f
20
22
  abi_attr :origin, Vector2f
23
+
24
+ def self.finalizer pointer
25
+ _abi_delete pointer
26
+ end
21
27
  end
22
28
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
 
7
7
  def block_caller &b
8
8
  Fiddle::Closure::BlockCaller.new(0, [0]) do
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(@widget)
11
11
  end
12
12
  end
@@ -10,7 +10,7 @@ module Tgui
10
10
 
11
11
  def block_caller &b
12
12
  Fiddle::Closure::BlockCaller.new(0, [0]) do
13
- @widget.send! do
13
+ @widget.host! do
14
14
  b.(@widget)
15
15
  end
16
16
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller
7
7
  block_caller = Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_INT]) do |animation_type|
8
8
  at = @widget.abi_unpack AnimationType, animation_type
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(at, @widget)
11
11
  end
12
12
  end
@@ -1,13 +1,13 @@
1
1
  require_relative 'signal'
2
2
 
3
3
  module Tgui
4
- class SignalBoolean < Signal
4
+ class SignalBool < Signal
5
5
 
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_INT]) do |int|
8
- b = @widget.abi_unpack Boolean, int
9
- @widget.send! do
10
- b.(b, @widget)
8
+ bool = @widget.abi_unpack Boolean, int
9
+ @widget.host! do
10
+ b.(bool, @widget)
11
11
  end
12
12
  end
13
13
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP]) do |ptr|
8
8
  c = @widget.abi_unpack Color, ptr
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(c, @widget)
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_FLOAT]) do |float|
8
8
  f = @widget.abi_unpack_float float
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(f, @widget)
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP]) do |int|
8
8
  i = @widget.abi_unpack_integer int
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(i, @widget)
11
11
  end
12
12
  end
@@ -5,7 +5,7 @@ module Tgui
5
5
 
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP]) do |pointer|
8
- @widget.send! do
8
+ @widget.host! do
9
9
  b.(pointer, @widget)
10
10
  end
11
11
  end
@@ -5,7 +5,7 @@ module Tgui
5
5
 
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_FLOAT, Fiddle::TYPE_FLOAT]) do |min, max|
8
- @widget.send! do
8
+ @widget.host! do
9
9
  b.(min..max, @widget)
10
10
  end
11
11
  end
@@ -7,7 +7,7 @@ module Tgui
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_INT, Fiddle::TYPE_INT]) do |show_effect_type, shown|
8
8
  effect_type = @widget.abi_unpack ShowEffectType, show_effect_type
9
9
  shown = @widget.abi_unpack Boolean, shown
10
- @widget.send! do
10
+ @widget.host! do
11
11
  b.(effect_type, shown, @widget)
12
12
  end
13
13
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP]) do |str|
8
8
  string = @widget.abi_unpack_string(str)
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(string, @widget)
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Tgui
6
6
  def block_caller &b
7
7
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_INT]) do |uint|
8
8
  int = @widget.abi_unpack Integer, uint
9
- @widget.send! do
9
+ @widget.host! do
10
10
  b.(int, @widget)
11
11
  end
12
12
  end
@@ -5,7 +5,7 @@ module Tgui
5
5
  def block_caller &b
6
6
  Fiddle::Closure::BlockCaller.new(0, [Fiddle::TYPE_VOIDP]) do |ptr|
7
7
  vector = @widget.abi_unpack Vector2f, ptr
8
- @widget.send! do
8
+ @widget.host! do
9
9
  b.(vector, @widget)
10
10
  end
11
11
  end
@@ -75,7 +75,7 @@ module Tgui
75
75
  objects.insert index, object
76
76
  tab_panel = TabPanel.new self, index, panel_pointer
77
77
  tab_panel.page = page
78
- tab_panel.send! **na, &b
78
+ scope! tab_panel, **na, &b
79
79
  end
80
80
 
81
81
  def [](object)
@@ -93,7 +93,7 @@ module Tgui
93
93
  def! :tabs do |**na, &b|
94
94
  tabs = Tabs.new self, _abi_get_tabs
95
95
  tabs.page = page
96
- tabs.send! **na, &b
96
+ scope! tabs, **na, &b
97
97
  end
98
98
 
99
99
  def remove object
@@ -61,7 +61,7 @@ module Tgui
61
61
  end
62
62
  objects.insert index, object
63
63
  tab = Tab.new self, index
64
- tab.send! **na, &b
64
+ scope! tab, **na, &b
65
65
  end
66
66
 
67
67
  def remove object
@@ -101,7 +101,7 @@ module Tgui
101
101
 
102
102
  def block_caller &b
103
103
  Fiddle::Closure::BlockCaller.new(0, [0]) do
104
- @widget.send! do
104
+ @widget.host! do
105
105
  b.(@widget.selected, @widget)
106
106
  end
107
107
  end
@@ -3,6 +3,11 @@ require_relative 'color'
3
3
 
4
4
  module Tgui
5
5
  class Texture < ExternObject
6
+
7
+ def self.finalizer pointer
8
+ _abi_delete pointer
9
+ end
10
+
6
11
  def self.from *arg
7
12
  case arg.size
8
13
  when 1
@@ -33,7 +38,7 @@ module Tgui
33
38
  end
34
39
 
35
40
  abi_def :id, :get_, nil => String
36
- abi_def :image_size, :get_, nil => Vector2u
41
+ abi_def :image_size, :get_, nil => Vector2i
37
42
  abi_def :part_rect, :get_, nil => UIntRect
38
43
  abi_def :smooth?, nil => Boolean
39
44
  abi_attr :color, Color
@@ -1,11 +1,10 @@
1
1
  require 'tempfile'
2
2
  require_relative '../abi/extern_object'
3
- require_relative '../convention/bang_nest'
4
3
  require_relative '../convention/theme/theme_attributed'
5
4
 
6
5
  module Tgui
7
6
  class Theme < ExternObject
8
- include BangNest
7
+ include Extree
9
8
  extend ThemeAttributed
10
9
 
11
10
  class << self
@@ -70,7 +69,7 @@ module Tgui
70
69
  self.next_renderer_id = renderer_id = next_renderer_id.next
71
70
  attribute = type.new(seed, renderer_id)
72
71
  attributes[attribute.name] = attribute
73
- attribute.send! **na, &b
72
+ attribute.host! **na, &b
74
73
  self_commit
75
74
  renderer_id
76
75
  end
@@ -97,7 +96,7 @@ module Tgui
97
96
  _abi_load @source if @source
98
97
  end
99
98
  custom_rendered&.each do |widget, renderer|
100
- widget.self_renderer = renderer
99
+ widget.self_set_renderer renderer
101
100
  end
102
101
  end
103
102
  end
@@ -3,6 +3,9 @@ require_relative 'button_base'
3
3
  module Tgui
4
4
  class ToggleButton < ButtonBase
5
5
 
6
+ class Theme < ButtonBase::Theme
7
+ end
8
+
6
9
  abi_attr :down?
7
10
  abi_signal :on_toggle
8
11
 
@@ -34,7 +34,7 @@ module Tgui
34
34
  end
35
35
  SignalItemHierarchy.fetch_path vector, loader
36
36
  object_path = @widget.self_tree.path_str_to_object *path
37
- @widget.send! do
37
+ @widget.host! do
38
38
  b.(object_path.last, object_path, @widget)
39
39
  end
40
40
  end
@@ -176,7 +176,7 @@ module Tgui
176
176
  self_tree[*new_path, grow: true].text = _3
177
177
  end
178
178
  item = Item.new self, new_path
179
- item.send! **na, &b
179
+ scope! item, **na, &b
180
180
  end
181
181
 
182
182
  def self_change_item path, text, **na, &b
@@ -3,7 +3,9 @@ require_relative '../abi/extern_object'
3
3
  module Tgui
4
4
  class Util < ExternObject
5
5
 
6
- abi_static :free
6
+ abi_static :delete_vector2f
7
+ abi_static :delete_vector2i
8
+ abi_static :delete_u_int_rect
7
9
 
8
10
  def self.expand_path path, exist: true
9
11
  if !path.match?(/^\w:\//) # TODO UNIX
@@ -1,5 +1,4 @@
1
1
  require_relative '../abi/extern_object'
2
- require_relative '../convention/bang_nest'
3
2
  require_relative '../convention/unit'
4
3
  require_relative '../convention/widget_like'
5
4
  require_relative '../convention/api_child'
@@ -15,8 +14,7 @@ require_relative 'tool_tip'
15
14
 
16
15
  module Tgui
17
16
  class Widget < ExternObject
18
- include BangNest
19
- extend BangDef
17
+ include Extree
20
18
 
21
19
  class Theme < ThemeComponent
22
20
 
@@ -29,6 +27,10 @@ module Tgui
29
27
 
30
28
  attr_accessor :page
31
29
 
30
+ def window
31
+ page.window
32
+ end
33
+
32
34
  abi_attr :text_size, Integer
33
35
  abi_attr :enabled?
34
36
 
@@ -36,34 +38,43 @@ module Tgui
36
38
  self.enabled = !disabled
37
39
  end
38
40
 
39
- def! :renderer do |seed = VOID, **na, &b|
41
+ def! :theme do |seed = VOID, **na, &b|
40
42
  seed = page.custom_renderers[self] if seed == VOID
41
43
  if !na.empty? || b
42
- seed = page.theme.custom! self.class::Theme, seed, **na, &b
43
- page.custom_renderers[self] = seed
44
- elsif !seed
45
- page.custom_renderers.delete self
46
- else
44
+ if seed.is_a?(String) && seed =~ /_\d+/
45
+ page.theme.attributes[seed].host! **na, &b
46
+ page.theme.self_commit
47
+ else
48
+ seed = page.theme.custom! self.class::Theme, seed, **na, &b
49
+ page.custom_renderers[self] = seed
50
+ end
51
+ elsif seed
47
52
  page.custom_renderers[self] = seed
48
53
  end
49
- self.self_renderer = seed
54
+ self_set_renderer seed
50
55
  end
51
56
 
52
- def renderer=(renderer)
53
- case renderer
57
+ def theme=(theme)
58
+ case theme
54
59
  when Hash
55
- api_bang_renderer **renderer
60
+ send! :theme, **theme
56
61
  when Proc
57
- api_bang_renderer &renderer
62
+ send! :theme, &theme
58
63
  else
59
- page.custom_renderers[self] = renderer
60
- self.self_renderer = renderer
64
+ page.custom_renderers[self] = theme
65
+ self_set_renderer theme
61
66
  end
62
67
  end
63
68
 
64
- abi_def :self_renderer=, :set_renderer, proc.self_renderer => nil
69
+ abi_def :self_set_renderer, :set_renderer, proc.self_theme_name => nil
65
70
 
66
71
  abi_attr :focused?
72
+ def! :focus do |focus = VOID|
73
+ self.focused = focus
74
+ end
75
+ def! :unfocus do
76
+ self.focused = false
77
+ end
67
78
  abi_attr :focusable?
68
79
  abi_signal :on_position_change, Tgui::SignalVector2f
69
80
  abi_signal :on_size_change, Tgui::SignalVector2f
@@ -99,7 +110,7 @@ module Tgui
99
110
  if block_given?
100
111
  tooltip = ToolTip.new
101
112
  tooltip.page = page
102
- tooltip.send! **na, &b
113
+ scope! tooltip, **na, &b
103
114
  _abi_set_tool_tip tooltip.widget if tooltip.widget
104
115
  else
105
116
  widget = _abi_get_tool_tip
@@ -113,12 +124,13 @@ module Tgui
113
124
  abi_attr :mouse_cursor, CursorType
114
125
  abi_def :draggable?, :is_widget_, nil => Boolean
115
126
  abi_def :mouse_down?, nil => Boolean
127
+ abi_attr :ignore_mouse_events?, Boolean, :get_
116
128
 
117
129
  abi_enum "ShowEffectType", :fade, :scale, :slide_to_right, :slide_to_left, :slide_to_bottom,
118
130
  :slide_to_top, slide_from_left: :slide_to_right, slide_from_right: :slide_to_left,
119
131
  slide_from_top: :slide_to_bottom, slide_from_bottom: :slide_to_top
120
132
 
121
- def visible=(a)
133
+ def visible=(a = true)
122
134
  if a.is_a? Array
123
135
  if a[0]
124
136
  show *a[1..]
@@ -198,14 +210,14 @@ module Tgui
198
210
  end
199
211
 
200
212
  def! :navigation do |**na, &b|
201
- navigation.send! **na, &b
213
+ scope! navigation, **na, &b
202
214
  end
203
215
 
204
216
  def navigation
205
217
  Navigation.new self, nil
206
218
  end
207
219
 
208
- abi_enum "KeyCode", nil, :a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k,
220
+ abi_enum "KeyCode", :a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k,
209
221
  :l, :m, :n, :o, :p, :q, :r, :s, :t, :u, :v, :w, :x, :y, :z,
210
222
  :num0, :num1, :num2, :num3, :num4, :num5, :num6, :num7, :num8, :num9,
211
223
  :escape, :left_control, :left_shift, :left_alt, :left_system,
@@ -258,10 +270,30 @@ module Tgui
258
270
 
259
271
  def! :robot do |**na, &b|
260
272
  robot = Robot.new self
261
- robot.send! **na, &b if block_given?
273
+ scope! robot, **na, &b if block_given?
262
274
  robot
263
275
  end
264
276
 
277
+ def! :messagebox do |*a, **na, &b|
278
+ page.send! :messagebox, *a, **na, &b
279
+ end
280
+
281
+ def! :msg do |text, **buttons|
282
+ buttons["OK"] = nil if buttons.empty?
283
+ buttons = buttons.map do |k, v|
284
+ procedure = proc do |o, b, w|
285
+ v&.call
286
+ w.close true
287
+ end
288
+ [k, procedure]
289
+ end
290
+ page.send! :messagebox, text:, position: :center, label_alignment: :center, buttons: buttons
291
+ end
292
+
293
+ def! :page do |*a, **na, &b|
294
+ page.host! *a, **na, &b
295
+ end
296
+
265
297
  def self.api_attr name, &init
266
298
  define_method "#{name}=" do |value|
267
299
  @@data_storage[Widget.get_unshared(@pointer).to_i][name] = value
@@ -302,14 +334,14 @@ module Tgui
302
334
  class << self
303
335
  include ApiChild
304
336
 
305
- def self_renderer widget, renderer = nil
306
- case renderer
337
+ def self_theme_name widget, theme = nil
338
+ case theme
307
339
  when Module
308
- renderer.name.split("::").last
340
+ theme.name.split("::").last
309
341
  when nil, false, VOID
310
- self_renderer widget, widget.class
342
+ self_theme_name widget, widget.class
311
343
  else
312
- renderer.to_s
344
+ theme.to_s
313
345
  end
314
346
  end
315
347
 
@@ -1,9 +1,12 @@
1
1
  require_relative '../abi/extern_object'
2
- require_relative '../convention/bang_nest'
3
2
 
4
3
  module Tgui
5
4
  class Window < ExternObject
6
- include BangNest
5
+ include Extree
6
+
7
+ def self.finalizer(pointer)
8
+ _abi_delete pointer
9
+ end
7
10
 
8
11
  abi_def :close
9
12
  def! :close do
@@ -11,6 +14,13 @@ module Tgui
11
14
  end
12
15
  abi_def :open?
13
16
  abi_def :title=, String => nil
17
+ abi_attr :size, Vector2i
18
+ abi_attr :position, Vector2i
19
+ abi_def :has_focus?, nil => Boolean
20
+ abi_def :request_focus
21
+ def! :request_focus do
22
+ request_focus
23
+ end
14
24
 
15
25
  end
16
26
  end