white_gold 0.0.4 → 0.1.0

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.
Files changed (40) 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/extern_object.rb +2 -2
  5. data/lib/white_gold/convention/container_widgets.rb +2 -2
  6. data/lib/white_gold/convention/page.rb +8 -4
  7. data/lib/white_gold/convention/theme/theme_attributed.rb +1 -1
  8. data/lib/white_gold/convention/theme/theme_component.rb +1 -1
  9. data/lib/white_gold/convention/widget_like.rb +1 -4
  10. data/lib/white_gold/dsl/backend_gui.rb +5 -4
  11. data/lib/white_gold/dsl/child_window.rb +1 -1
  12. data/lib/white_gold/dsl/color.rb +35 -27
  13. data/lib/white_gold/dsl/edit_box.rb +1 -2
  14. data/lib/white_gold/dsl/font.rb +4 -0
  15. data/lib/white_gold/dsl/gui.rb +5 -1
  16. data/lib/white_gold/dsl/label.rb +0 -2
  17. data/lib/white_gold/dsl/list_view.rb +6 -6
  18. data/lib/white_gold/dsl/outline.rb +4 -0
  19. data/lib/white_gold/dsl/picture.rb +0 -2
  20. data/lib/white_gold/dsl/radio_button.rb +1 -1
  21. data/lib/white_gold/dsl/sfml/shape.rb +3 -2
  22. data/lib/white_gold/dsl/sfml/text.rb +3 -1
  23. data/lib/white_gold/dsl/signal/signal_bool.rb +3 -3
  24. data/lib/white_gold/dsl/texture.rb +6 -1
  25. data/lib/white_gold/dsl/theme.rb +1 -2
  26. data/lib/white_gold/dsl/util.rb +3 -1
  27. data/lib/white_gold/dsl/widget.rb +10 -8
  28. data/lib/white_gold/dsl/window.rb +7 -4
  29. data/lib/white_gold/generated/tgui-abi-loader.gf.rb +30 -14
  30. data/lib/white_gold/master.rb +60 -47
  31. data/lib/white_gold/path/array.path.rb +0 -7
  32. data/lib/white_gold/path/object.path.rb +0 -6
  33. data/lib/white_gold/tgui-abi.rb +8 -13
  34. data/lib/white_gold/version.rb +1 -1
  35. data/lib/white_gold.rb +6 -6
  36. metadata +33 -8
  37. data/lib/white_gold/convention/bang_def.rb +0 -19
  38. data/lib/white_gold/convention/bang_nest.rb +0 -26
  39. data/lib/white_gold/convention/bang_nested_caller.rb +0 -81
  40. data/lib/white_gold/convention/proc_method_factory.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ef8367abb4fbdbbcab9b6fb824a8660bbe43e60ff818dfb4838205a1ff4c97c
4
- data.tar.gz: ffda1d2acecfd09228b7650cf08142d7c5bdb8efc5113e33dd66b2a111be887a
3
+ metadata.gz: b6e9f03a09822b6e1c71191072bc13cc29023a6a3f961153216d30f02e70a017
4
+ data.tar.gz: bc946f160aa4db22056fb561b25fe3654739b2fd65ff4863471993f5d1ec4c7f
5
5
  SHA512:
6
- metadata.gz: b201a718db038a62788d2e3a89e51adb692fee0667c79037ae331c97f18f4b4756a02048ae82b7fb33204ab423b02088406b7f4e62b76ee849ff5f59c0113182
7
- data.tar.gz: af5a2ee75a76096a46bd4c6d0b8f28058ca45eb04d1e213c2d686822be1a109d4bded3eddcfca902d0a18d032ba0f4c3ec07c3bb111c40567dad63206e22482c
6
+ metadata.gz: e599b9ea2a700c7c106c0109caba34de0d9dbc23777d064f00193af989e56c6fb03a7bfa0200101351d19b49e8c0cca556f19c994b34bdb0b2b26e852e149ce6
7
+ data.tar.gz: 3cccc9cec49e91a52e8f53cbdada968ad5319e64dd612f56814457f238b0343ca3a562da3b4e636f25821579b5514e62fa09e86aeaf06e992a0d521049a1c7d4
data/ext/dll/tgui.dll CHANGED
Binary file
data/ext/so/libtgui.so CHANGED
Binary file
@@ -1,11 +1,10 @@
1
- require_relative '../convention/bang_def'
2
1
  require_relative 'packer'
3
2
  require_relative 'unpacker'
4
3
 
5
4
  class ExternObject
6
5
  extend Packer
7
6
  extend Unpacker
8
- extend BangDef
7
+ include Extree
9
8
 
10
9
  def initialize pointer:, autofree: true
11
10
  @pointer = pointer
@@ -14,6 +13,7 @@ class ExternObject
14
13
  cl = self.class
15
14
  while !cl.respond_to?(:finalizer)
16
15
  cl = cl.superclass
16
+ raise "Undefined finalizer for #{self.class}" if cl == ExternObject
17
17
  end
18
18
  ObjectSpace.define_finalizer(self, cl.proc.finalizer(pointer))
19
19
  end
@@ -53,7 +53,7 @@ module Tgui
53
53
  end
54
54
 
55
55
  module WidgetOwner
56
- extend BangDef
56
+ include Extree
57
57
 
58
58
  def self_child_methods
59
59
  ## TO OPTIMIZE
@@ -98,7 +98,7 @@ module Tgui
98
98
 
99
99
  def! :btn do |text = nil, **na, &on_press|
100
100
  text = @@auto_btn_name = @@auto_btn_name.next if !text
101
- api_bang_button text:, on_press:, **na
101
+ send! :button, text:, on_press:, **na
102
102
  end
103
103
 
104
104
  def! :keyboard_control do |*a, focus: true, **na, &b|
@@ -24,14 +24,14 @@ class Page < Tgui::Panel
24
24
 
25
25
  def respond_to? name
26
26
  super ||
27
- (name.end_with?("!") && bang_respond_to?(name[...-1])) ||
27
+ (name.end_with?("!") && extree_respond_to?(name[...-1])) ||
28
28
  @tgui.gui.respond_to?(name) ||
29
29
  @tgui.window.respond_to?(name)
30
30
  end
31
31
 
32
32
  def method_missing name, *a, **na, &b
33
33
  if name.end_with? "!"
34
- bang_method_missing name[...-1], *a, **na, &b
34
+ extree_method_missing name[...-1], *a, **na, &b
35
35
  elsif @tgui.gui.respond_to? name
36
36
  @tgui.gui.send name, *a, **na, &b
37
37
  elsif @tgui.window.respond_to? name
@@ -52,14 +52,18 @@ class Page < Tgui::Panel
52
52
  @tgui.next_page_id = page
53
53
  end
54
54
 
55
- def job **na, &b
56
- @tgui.job **na, &b
55
+ def job *a, **na, &b
56
+ @tgui.job *a, **na, &b
57
57
  end
58
58
 
59
59
  def timer *a, **na, &b
60
60
  @tgui.timer *a, **na, &b
61
61
  end
62
62
 
63
+ def after *a, **na, &b
64
+ @tgui.after *a, **na, &b
65
+ end
66
+
63
67
  def gui
64
68
  @tgui.gui
65
69
  end
@@ -7,7 +7,7 @@ require_relative 'texture_attribute'
7
7
 
8
8
  module Tgui
9
9
  module ThemeAttributed
10
- include BangDef
10
+ include Extree
11
11
 
12
12
  ATTRIBUTE_TYPES = {
13
13
  boolean: BooleanAttribute,
@@ -2,7 +2,7 @@ require_relative 'theme_attributed'
2
2
 
3
3
  module Tgui
4
4
  class ThemeComponent
5
- include BangNest
5
+ include Extree
6
6
  extend ThemeAttributed
7
7
 
8
8
  def initialize name, custom_name
@@ -1,9 +1,6 @@
1
- require_relative 'bang_def'
2
- require_relative 'bang_nest'
3
1
 
4
2
  class WidgetLike
5
- extend BangDef
6
- include BangNest
3
+ include Extree
7
4
 
8
5
  class << self
9
6
  def abi_def name, original_name = nil, id: false, **na
@@ -1,11 +1,11 @@
1
1
  require_relative '../abi/extern_object'
2
- require_relative '../convention/bang_nest'
2
+ require_relative 'signal/signal_bool'
3
3
  require_relative 'signal/global_signal'
4
4
  require_relative 'font'
5
5
 
6
6
  module Tgui
7
7
  class BackendGui < ExternObject
8
- include BangNest
8
+ include Extree
9
9
 
10
10
  class ViewSignal < GlobalSignal
11
11
  def block_caller &b
@@ -21,8 +21,7 @@ module Tgui
21
21
  abi_def :viewport=, :set_absolute_, [Integer] * 4 => nil
22
22
  abi_def :viewport, :get_, nil => [Float] * 4
23
23
  abi_def :relative_viewport=, [Float] * 4 => nil
24
- abi_def :tab_focus_pass?, :is_tab_key_usage_enabled, nil => Boolean
25
- abi_def :tab_focus_pass=, :tab_key_usage_enabled, Boolean => nil
24
+ abi_attr :tab_focus_enabled?, Boolean, :tab_key_usage_enabled
26
25
  abi_attr :font, Font
27
26
  abi_def :unfocus, :unfocus_all_widgets
28
27
  abi_attr :opacity, Float
@@ -33,6 +32,8 @@ module Tgui
33
32
  abi_def :crd_to_px, :map_coords_to_pixel, [Float, Float] => [Float, Float]
34
33
  abi_attr :keyboard_navigation?, Boolean, :keyboard_navigation_enabled
35
34
  abi_signal :on_view_change, ViewSignal
35
+ abi_signal :on_focus, Signal, :on_window_focus
36
+ abi_signal :on_unfocus, Signal, :on_window_unfocus
36
37
 
37
38
  end
38
39
  end
@@ -47,7 +47,7 @@ module Tgui
47
47
  abi_attr :title_buttons, TitleButtons
48
48
  abi_attr :resizable?
49
49
  abi_attr :position_locked?
50
- abi_attr :keep_in_parent?
50
+ abi_attr :keep_in_parent?, Boolean, :get_
51
51
 
52
52
  def close destroy = false
53
53
  if destroy
@@ -14,36 +14,44 @@ module Tgui
14
14
  transparent: [255, 255, 255, 0]
15
15
  }
16
16
 
17
- def self.from *arg
18
- case arg.size
19
- when 1
20
- arg = arg.first
21
- case arg
22
- when Color
23
- return arg
24
- when String
25
- r, g, b, a = *tones_from_string(arg)
26
- when :random
27
- r, g, b = 5.times.map{ rand 255 }
28
- a = 255
29
- when Symbol
30
- r, g, b, a = *PREDEFINED_COLORS[arg]
31
- when Numeric
32
- r = g = b = arg
17
+ class << self
18
+ def finalizer pointer
19
+ _abi_delete pointer
20
+ end
21
+
22
+ def from *arg
23
+ case arg.size
24
+ when 1
25
+ arg = arg.first
26
+ case arg
27
+ when Color
28
+ return arg
29
+ when String
30
+ r, g, b, a = *tones_from_string(arg)
31
+ when :random
32
+ r, g, b = 5.times.map{ rand 255 }
33
+ a = 255
34
+ when Symbol
35
+ r, g, b, a = *PREDEFINED_COLORS[arg]
36
+ when Numeric
37
+ r = g = b = arg
38
+ a = 255
39
+ else raise "Unsupported argument #{arg} #{arg.class}"
40
+ end
41
+ when 2
42
+ r = g = b = arg[0]
43
+ a = arg[1]
44
+ when 3
45
+ r, g, b = *arg
33
46
  a = 255
34
- else raise "Unsupported argument #{arg} #{arg.class}"
47
+ when 4
48
+ r, g, b, a = *arg
49
+ else raise "Unsupported argument #{arg}"
35
50
  end
36
- when 2
37
- r = g = b = arg[0]
38
- a = arg[1]
39
- when 3
40
- r, g, b = *arg
41
- a = 255
42
- when 4
43
- r, g, b, a = *arg
44
- else raise "Unsupported argument #{arg}"
51
+ Color.new r, g, b, a
45
52
  end
46
- Color.new r, g, b, a
53
+
54
+ alias_method :[], :from
47
55
  end
48
56
 
49
57
  abi_def :red, :get_, nil => Integer
@@ -51,8 +51,7 @@ module Tgui
51
51
  abi_def :selected_text, :get_, nil => String
52
52
  abi_attr :password_character, String
53
53
  abi_attr :characters_limit, Integer, :maximum_characters
54
- abi_def :limited_text_width=, :limit_text_width, Boolean => nil
55
- abi_def :limited_text_width?, :is_text_width_limited, nil => Boolean
54
+ abi_attr :text_width_limited?, Boolean, :get_
56
55
  abi_attr :read_only?
57
56
  abi_attr :caret_position, Integer
58
57
  abi_attr :suffix, String
@@ -3,6 +3,10 @@ require_relative '../abi/extern_object'
3
3
  module Tgui
4
4
  class Font < ExternObject
5
5
 
6
+ def self.finalizer pointer
7
+ _abi_delete pointer
8
+ end
9
+
6
10
  def self.from *arg
7
11
  case arg.size
8
12
  when 1
@@ -4,6 +4,10 @@ require_relative 'signal/signal'
4
4
  module Tgui
5
5
  class Gui < BackendGui
6
6
 
7
+ def self.finalizer(pointer)
8
+ _abi_delete pointer
9
+ end
10
+
7
11
  abi_def :self_add, :add, [Object, String] => nil
8
12
  abi_def :self_remove, :remove, [Object] => nil
9
13
  abi_def :self_active?, :is_active, nil => Boolean
@@ -11,7 +15,7 @@ module Tgui
11
15
  abi_def :self_draw, :draw
12
16
  abi_def :background_color=, :set_clear_color, Color => nil
13
17
  abi_attr :clipboard, String
14
- abi_def :screen_size, :get_, nil => Vector2u
18
+ abi_def :screen_size, :get_, nil => Vector2i
15
19
 
16
20
  attr_accessor :page
17
21
 
@@ -22,8 +22,6 @@ module Tgui
22
22
  abi_attr :scrollbar_value, Integer
23
23
  abi_attr :auto_size?, Boolean, :get_
24
24
  abi_attr :max_width, Integer, :maximum_text_width
25
- abi_def :ignore_mouse_events, Boolean => nil
26
- abi_def :ignore_mouse_events?, :ignoring_mouse_events, nil => Boolean
27
25
  abi_enum "HorizontalAlignment", :left, :center, :right
28
26
  abi_attr :horizontal_alignment, HorizontalAlignment
29
27
  def alignment=(a)
@@ -179,11 +179,11 @@ module Tgui
179
179
  def grid_lines=(grid_lines)
180
180
  case grid_lines
181
181
  when Numeric
182
- api_bang_grid_lines width: grid_lines
182
+ send! :grid_lines, width: grid_lines
183
183
  when false
184
- api_bang_grid_lines horizontal: false, vertical: false
184
+ send! :grid_lines, horizontal: false, vertical: false
185
185
  when Hash
186
- api_bang_grid_lines **grid_lines
186
+ send! :grid_lines, **grid_lines
187
187
  end
188
188
  end
189
189
 
@@ -205,11 +205,11 @@ module Tgui
205
205
  def header=(header)
206
206
  case header
207
207
  when true, false
208
- api_bang_header visible: header
208
+ send! :header, visible: header
209
209
  when Hash
210
- api_bang_header **header
210
+ send! :header, **header
211
211
  when Proc
212
- api_bang_header &header
212
+ send! :header, &header
213
213
  end
214
214
  end
215
215
 
@@ -3,6 +3,10 @@ require_relative '../abi/extern_object'
3
3
  module Tgui
4
4
  class Outline < ExternObject
5
5
 
6
+ def self.finalizer pointer
7
+ _abi_delete pointer
8
+ end
9
+
6
10
  def self.from *arg
7
11
  case arg.size
8
12
  when 1
@@ -4,8 +4,6 @@ require_relative 'signal/signal_vector2f'
4
4
  module Tgui
5
5
  class Picture < ClickableWidget
6
6
 
7
- abi_def :ignore_mouse, :ignore_mouse_events, Boolean => nil
8
- abi_def :ignore_mouse?, :is_ignoring_mouse_events, nil => Boolean
9
7
  abi_signal :on_double_click, SignalVector2f
10
8
 
11
9
  end
@@ -38,7 +38,7 @@ module Tgui
38
38
  abi_attr :text_clickable?
39
39
  abi_signal :on_check, Signal
40
40
  abi_signal :on_uncheck, Signal
41
- abi_signal :on_change, SignalBoolean
41
+ abi_signal :on_change, SignalBool
42
42
 
43
43
  def object
44
44
  self_object
@@ -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
@@ -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
8
+ bool = @widget.abi_unpack Boolean, int
9
9
  @widget.host! do
10
- b.(b, @widget)
10
+ b.(bool, @widget)
11
11
  end
12
12
  end
13
13
  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
@@ -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
 
@@ -59,9 +57,9 @@ module Tgui
59
57
  def theme=(theme)
60
58
  case theme
61
59
  when Hash
62
- api_bang_theme **theme
60
+ send! :theme, **theme
63
61
  when Proc
64
- api_bang_theme &theme
62
+ send! :theme, &theme
65
63
  else
66
64
  page.custom_renderers[self] = theme
67
65
  self_set_renderer theme
@@ -74,6 +72,9 @@ module Tgui
74
72
  def! :focus do |focus = VOID|
75
73
  self.focused = focus
76
74
  end
75
+ def! :unfocus do
76
+ self.focused = false
77
+ end
77
78
  abi_attr :focusable?
78
79
  abi_signal :on_position_change, Tgui::SignalVector2f
79
80
  abi_signal :on_size_change, Tgui::SignalVector2f
@@ -123,12 +124,13 @@ module Tgui
123
124
  abi_attr :mouse_cursor, CursorType
124
125
  abi_def :draggable?, :is_widget_, nil => Boolean
125
126
  abi_def :mouse_down?, nil => Boolean
127
+ abi_attr :ignore_mouse_events?, Boolean, :get_
126
128
 
127
129
  abi_enum "ShowEffectType", :fade, :scale, :slide_to_right, :slide_to_left, :slide_to_bottom,
128
130
  :slide_to_top, slide_from_left: :slide_to_right, slide_from_right: :slide_to_left,
129
131
  slide_from_top: :slide_to_bottom, slide_from_bottom: :slide_to_top
130
132
 
131
- def visible=(a)
133
+ def visible=(a = true)
132
134
  if a.is_a? Array
133
135
  if a[0]
134
136
  show *a[1..]
@@ -273,7 +275,7 @@ module Tgui
273
275
  end
274
276
 
275
277
  def! :messagebox do |*a, **na, &b|
276
- page.api_bang_messagebox *a, **na, &b
278
+ page.send! :messagebox, *a, **na, &b
277
279
  end
278
280
 
279
281
  def! :msg do |text, **buttons|
@@ -285,7 +287,7 @@ module Tgui
285
287
  end
286
288
  [k, procedure]
287
289
  end
288
- page.api_bang_messagebox text:, position: :center, label_alignment: :center, buttons: buttons
290
+ page.send! :messagebox, text:, position: :center, label_alignment: :center, buttons: buttons
289
291
  end
290
292
 
291
293
  def! :page do |*a, **na, &b|
@@ -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,8 +14,8 @@ module Tgui
11
14
  end
12
15
  abi_def :open?
13
16
  abi_def :title=, String => nil
14
- abi_attr :size, Vector2u
15
- abi_attr :position, Vector2u
17
+ abi_attr :size, Vector2i
18
+ abi_attr :position, Vector2i
16
19
  abi_def :has_focus?, nil => Boolean
17
20
  abi_def :request_focus
18
21
  def! :request_focus do