white_gold 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +7 -0
  2. data/ext/dll/openal32.dll +0 -0
  3. data/ext/dll/sfml-audio-2.dll +0 -0
  4. data/ext/dll/sfml-graphics-2.dll +0 -0
  5. data/ext/dll/sfml-network-2.dll +0 -0
  6. data/ext/dll/sfml-system-2.dll +0 -0
  7. data/ext/dll/sfml-window-2.dll +0 -0
  8. data/ext/dll/tgui.dll +0 -0
  9. data/ext/so/libsfml-audio.so +0 -0
  10. data/ext/so/libsfml-graphics.so +0 -0
  11. data/ext/so/libsfml-network.so +0 -0
  12. data/ext/so/libsfml-system.so +0 -0
  13. data/ext/so/libsfml-window.so +0 -0
  14. data/ext/so/libtgui.so +0 -0
  15. data/lib/white_gold/abi/alias.rb +50 -0
  16. data/lib/white_gold/abi/enum.rb +43 -0
  17. data/lib/white_gold/abi/extern_object.rb +180 -0
  18. data/lib/white_gold/abi/interface/interface.rb +114 -0
  19. data/lib/white_gold/abi/interface/interface_collection_out.rb +29 -0
  20. data/lib/white_gold/abi/interface/interface_composed_out.rb +28 -0
  21. data/lib/white_gold/abi/interface/interface_single_out.rb +19 -0
  22. data/lib/white_gold/abi/packer.rb +28 -0
  23. data/lib/white_gold/abi/reducer.rb +12 -0
  24. data/lib/white_gold/abi/unpacker.rb +27 -0
  25. data/lib/white_gold/convention/api_child.rb +30 -0
  26. data/lib/white_gold/convention/bang_def.rb +5 -0
  27. data/lib/white_gold/convention/bang_nest.rb +16 -0
  28. data/lib/white_gold/convention/bang_nested_caller.rb +48 -0
  29. data/lib/white_gold/convention/bool_property.rb +13 -0
  30. data/lib/white_gold/convention/boolean.rb +2 -0
  31. data/lib/white_gold/convention/club.rb +26 -0
  32. data/lib/white_gold/convention/container_widgets.rb +181 -0
  33. data/lib/white_gold/convention/page.rb +96 -0
  34. data/lib/white_gold/convention/proc_method_factory.rb +22 -0
  35. data/lib/white_gold/convention/unit.rb +22 -0
  36. data/lib/white_gold/convention/widget_like.rb +146 -0
  37. data/lib/white_gold/dsl/backend_gui.rb +37 -0
  38. data/lib/white_gold/dsl/bitmap_button.rb +11 -0
  39. data/lib/white_gold/dsl/box_layout.rb +47 -0
  40. data/lib/white_gold/dsl/box_layout_ratios.rb +13 -0
  41. data/lib/white_gold/dsl/button.rb +10 -0
  42. data/lib/white_gold/dsl/button_base.rb +18 -0
  43. data/lib/white_gold/dsl/chat_box.rb +65 -0
  44. data/lib/white_gold/dsl/checkbox.rb +6 -0
  45. data/lib/white_gold/dsl/child_window.rb +47 -0
  46. data/lib/white_gold/dsl/clickable_widget.rb +15 -0
  47. data/lib/white_gold/dsl/color.rb +124 -0
  48. data/lib/white_gold/dsl/color_picker.rb +12 -0
  49. data/lib/white_gold/dsl/combo_box.rb +135 -0
  50. data/lib/white_gold/dsl/container.rb +95 -0
  51. data/lib/white_gold/dsl/edit_box.rb +38 -0
  52. data/lib/white_gold/dsl/file_dialog.rb +86 -0
  53. data/lib/white_gold/dsl/font.rb +23 -0
  54. data/lib/white_gold/dsl/grid.rb +131 -0
  55. data/lib/white_gold/dsl/group.rb +6 -0
  56. data/lib/white_gold/dsl/gui.rb +16 -0
  57. data/lib/white_gold/dsl/horizontal_layout.rb +6 -0
  58. data/lib/white_gold/dsl/horizontal_wrap.rb +6 -0
  59. data/lib/white_gold/dsl/knob.rb +16 -0
  60. data/lib/white_gold/dsl/label.rb +21 -0
  61. data/lib/white_gold/dsl/list_box.rb +125 -0
  62. data/lib/white_gold/dsl/list_view.rb +239 -0
  63. data/lib/white_gold/dsl/menu_bar.rb +252 -0
  64. data/lib/white_gold/dsl/message_box.rb +90 -0
  65. data/lib/white_gold/dsl/outline.rb +52 -0
  66. data/lib/white_gold/dsl/panel.rb +16 -0
  67. data/lib/white_gold/dsl/panel_list_box.rb +83 -0
  68. data/lib/white_gold/dsl/picture.rb +12 -0
  69. data/lib/white_gold/dsl/progress_bar.rb +19 -0
  70. data/lib/white_gold/dsl/radio_button.rb +18 -0
  71. data/lib/white_gold/dsl/radio_button_group.rb +14 -0
  72. data/lib/white_gold/dsl/range_slider.rb +15 -0
  73. data/lib/white_gold/dsl/rich_text_label.rb +6 -0
  74. data/lib/white_gold/dsl/scrollable_panel.rb +53 -0
  75. data/lib/white_gold/dsl/scrollbar.rb +28 -0
  76. data/lib/white_gold/dsl/separator_line.rb +6 -0
  77. data/lib/white_gold/dsl/signal/global_signal.rb +33 -0
  78. data/lib/white_gold/dsl/signal/signal.rb +44 -0
  79. data/lib/white_gold/dsl/signal/signal_animation_type.rb +16 -0
  80. data/lib/white_gold/dsl/signal/signal_bool.rb +16 -0
  81. data/lib/white_gold/dsl/signal/signal_color.rb +16 -0
  82. data/lib/white_gold/dsl/signal/signal_float.rb +16 -0
  83. data/lib/white_gold/dsl/signal/signal_int.rb +16 -0
  84. data/lib/white_gold/dsl/signal/signal_item.rb +6 -0
  85. data/lib/white_gold/dsl/signal/signal_item_hierarchy.rb +9 -0
  86. data/lib/white_gold/dsl/signal/signal_panel_list_box_item.rb +7 -0
  87. data/lib/white_gold/dsl/signal/signal_pointer.rb +15 -0
  88. data/lib/white_gold/dsl/signal/signal_range.rb +15 -0
  89. data/lib/white_gold/dsl/signal/signal_show_effect.rb +17 -0
  90. data/lib/white_gold/dsl/signal/signal_string.rb +16 -0
  91. data/lib/white_gold/dsl/signal/signal_typed_int_bool_ptr.rb +15 -0
  92. data/lib/white_gold/dsl/signal/signal_typed_size_t.rb +6 -0
  93. data/lib/white_gold/dsl/signal/signal_u_int.rb +16 -0
  94. data/lib/white_gold/dsl/signal/signal_vector2f.rb +14 -0
  95. data/lib/white_gold/dsl/slider.rb +26 -0
  96. data/lib/white_gold/dsl/spin_button.rb +24 -0
  97. data/lib/white_gold/dsl/spin_control.rb +15 -0
  98. data/lib/white_gold/dsl/subwidget_container.rb +9 -0
  99. data/lib/white_gold/dsl/tab_container.rb +121 -0
  100. data/lib/white_gold/dsl/tabs.rb +91 -0
  101. data/lib/white_gold/dsl/text_area.rb +34 -0
  102. data/lib/white_gold/dsl/texture.rb +53 -0
  103. data/lib/white_gold/dsl/theme/boolean_attribute.rb +13 -0
  104. data/lib/white_gold/dsl/theme/button_theme.rb +19 -0
  105. data/lib/white_gold/dsl/theme/chat_box_theme.rb +16 -0
  106. data/lib/white_gold/dsl/theme/child_window_theme.rb +25 -0
  107. data/lib/white_gold/dsl/theme/color_attribute.rb +13 -0
  108. data/lib/white_gold/dsl/theme/color_picker_theme.rb +14 -0
  109. data/lib/white_gold/dsl/theme/combo_box_theme.rb +33 -0
  110. data/lib/white_gold/dsl/theme/common_renderer.rb +7 -0
  111. data/lib/white_gold/dsl/theme/edit_box_theme.rb +34 -0
  112. data/lib/white_gold/dsl/theme/file_dialog_theme.rb +22 -0
  113. data/lib/white_gold/dsl/theme/float_attribute.rb +13 -0
  114. data/lib/white_gold/dsl/theme/group_theme.rb +9 -0
  115. data/lib/white_gold/dsl/theme/knob_theme.rb +15 -0
  116. data/lib/white_gold/dsl/theme/label_theme.rb +20 -0
  117. data/lib/white_gold/dsl/theme/list_box_theme.rb +25 -0
  118. data/lib/white_gold/dsl/theme/list_view_theme.rb +27 -0
  119. data/lib/white_gold/dsl/theme/menu_bar_theme.rb +21 -0
  120. data/lib/white_gold/dsl/theme/message_box_theme.rb +11 -0
  121. data/lib/white_gold/dsl/theme/outline_attribute.rb +13 -0
  122. data/lib/white_gold/dsl/theme/progress_bar_theme.rb +19 -0
  123. data/lib/white_gold/dsl/theme/radio_button_theme.rb +30 -0
  124. data/lib/white_gold/dsl/theme/scrollbar_theme.rb +24 -0
  125. data/lib/white_gold/dsl/theme/separator_line_theme.rb +9 -0
  126. data/lib/white_gold/dsl/theme/slider_theme.rb +20 -0
  127. data/lib/white_gold/dsl/theme/spin_button_theme.rb +19 -0
  128. data/lib/white_gold/dsl/theme/tabs_theme.rb +29 -0
  129. data/lib/white_gold/dsl/theme/text_area_theme.rb +22 -0
  130. data/lib/white_gold/dsl/theme/text_styles_attribute.rb +13 -0
  131. data/lib/white_gold/dsl/theme/texture_attribute.rb +17 -0
  132. data/lib/white_gold/dsl/theme/theme_attributed.rb +51 -0
  133. data/lib/white_gold/dsl/theme/theme_component.rb +23 -0
  134. data/lib/white_gold/dsl/theme/tree_view_theme.rb +26 -0
  135. data/lib/white_gold/dsl/theme/widget_theme.rb +12 -0
  136. data/lib/white_gold/dsl/theme.rb +144 -0
  137. data/lib/white_gold/dsl/toggle_button.rb +10 -0
  138. data/lib/white_gold/dsl/tool_tip.rb +21 -0
  139. data/lib/white_gold/dsl/tree_view.rb +186 -0
  140. data/lib/white_gold/dsl/util.rb +17 -0
  141. data/lib/white_gold/dsl/vertical_layout.rb +6 -0
  142. data/lib/white_gold/dsl/widget.rb +279 -0
  143. data/lib/white_gold/dsl/window.rb +16 -0
  144. data/lib/white_gold/generated/tgui-abi-loader.gf.rb +1813 -0
  145. data/lib/white_gold/library/theme/light.rb +111 -0
  146. data/lib/white_gold/master.rb +170 -0
  147. data/lib/white_gold/path/kernel.path.rb +3 -0
  148. data/lib/white_gold/path/numeric.path.rb +9 -0
  149. data/lib/white_gold/path/object.path.rb +22 -0
  150. data/lib/white_gold/path/string.path.rb +5 -0
  151. data/lib/white_gold/tgui-abi.rb +255 -0
  152. data/lib/white_gold/tgui-config.rb +20 -0
  153. data/lib/white_gold.rb +47 -0
  154. metadata +209 -0
@@ -0,0 +1,111 @@
1
+ text_color! 0
2
+ text_color_disabled! 111
3
+ background_color! 208
4
+ background_color_hover! 200
5
+ background_color_disabled! 180
6
+ selected_text_color! 0
7
+ selected_text_color_hover! 0
8
+ selected_background_color! 157, 185, 240
9
+ selected_background_color_hover! 147, 175, 230
10
+ border_color! 200
11
+ borders! 1
12
+ scrollbar_width! 13
13
+ arrow_background_color! 220
14
+ arrow_background_color_hover! 220
15
+ arrow_background_color_disabled! 240
16
+ arrow_color! 80
17
+ arrow_color_hover! 40
18
+ arrow_color_disabled! 60
19
+
20
+ button! do
21
+ background_color_down! 180
22
+ end
23
+
24
+ child_window! do
25
+ background_color! 240
26
+ title_bar_color! 220
27
+ distance_to_side! 3
28
+ padding_between_buttons! 3
29
+ show_text_on_title_buttons! true
30
+ title_bar_height! 24
31
+ end
32
+
33
+ editbox! do
34
+ background_color! 220
35
+ background_color_hover! 220
36
+ background_color_disabled! 180
37
+ border_color_focused! 127, 155, 240
38
+ default_text_color! 100
39
+ caret_width! 1
40
+ caret_color! 0
41
+ selected_text_background_color! 157, 185, 240
42
+ end
43
+
44
+ text_area! do
45
+ background_color! 220
46
+ default_text_color! 100
47
+ caret_width! 2
48
+ caret_color! 150, 150, 240
49
+ selected_text_background_color! 157, 185, 240
50
+ end
51
+
52
+ chat_box! do
53
+ background_color! 240
54
+ end
55
+
56
+ combobox! do
57
+ background_color! 220
58
+ default_text_color! 80
59
+ arrow_background_color_hover! 200
60
+ end
61
+
62
+ listbox! do
63
+ background_color! 240
64
+ background_color_hover! 220
65
+ end
66
+
67
+ list_view! do
68
+ background_color! 240
69
+ header_background_color! 220
70
+ end
71
+
72
+ menu! do
73
+ selected_background_color! 180
74
+ text_color_disabled! 80
75
+ separator_color! 142
76
+ separator_side_padding! 2
77
+ end
78
+
79
+ progress_bar! do
80
+ borders! 1
81
+ end
82
+
83
+ radio_button! do
84
+ borders! 1
85
+ border_color_focused! 127, 155, 240
86
+ background_color_disabled! 180
87
+ text_distance_ratio! 0.3
88
+ end
89
+
90
+ scrollbar! do
91
+ track_color! 220
92
+ thumb_color! 200
93
+ thumb_color_hover! 190
94
+ arrow_background_color! 200
95
+ arrow_background_color_hover! 190
96
+ end
97
+
98
+ slider! do
99
+ track_color! 220
100
+ thumb_color! 200
101
+ thumb_color_hover! 190
102
+ borders! 0
103
+ thumb_within_track! true
104
+ end
105
+
106
+ tabs! do
107
+ background_color_hover! 200
108
+ background_color_disabled! 190, 190, 180
109
+ text_color_disabled! 80
110
+ distance_to_side! 8
111
+ end
@@ -0,0 +1,170 @@
1
+ require_relative 'convention/boolean'
2
+ require_relative 'path/kernel.path'
3
+ require_relative 'path/numeric.path'
4
+ require_relative 'path/object.path'
5
+ require_relative 'path/string.path'
6
+ require_relative 'tgui-abi'
7
+ require_relative 'convention/page'
8
+
9
+ class WhiteGold
10
+ include Tgui
11
+
12
+ def [](method_name)
13
+ method(method_name)
14
+ end
15
+
16
+ def fps=(fps)
17
+ @frame_delay = 1.0 / fps
18
+ end
19
+
20
+ def init init_page = :main_page, fps: nil, theme: nil
21
+ @window = Window.new
22
+ @gui = Gui.new window
23
+ @preserved_pages = {}
24
+ Theme.default = theme if theme
25
+ self.fps = fps if fps
26
+ @frame_delay = 0.015 if !@frame_delay
27
+ @jobs = []
28
+ @next_page_id = init_page
29
+ load_page init_page
30
+ end
31
+
32
+ def run init_page = :main_page, fps: nil, theme: nil, init: true
33
+ self.init init_page, fps: fps, theme: theme if init
34
+
35
+ next_frame_time = Time.now
36
+ while @gui.self_active?
37
+ @gui.self_poll_events
38
+ now = Time.now
39
+ if @current_page_id != @next_page_id
40
+ if @current_page_id
41
+ page = @preserved_pages[@current_page_id]
42
+ @gui.self_remove page
43
+ page.disconnect
44
+ @preserved_pages.delete(@current_page_id)
45
+ end
46
+ load_page @next_page_id
47
+ end
48
+ @jobs.filter!(&:audit)
49
+ sleep next_frame_time - now if next_frame_time > now
50
+ @gui.self_draw
51
+ next_frame_time += @frame_delay
52
+ end
53
+ end
54
+
55
+ def load_page page_id
56
+ @current_page_id = page_id
57
+ case page_id
58
+ when Symbol
59
+ page = @preserved_pages[page_id] = Page.new self
60
+ @gui.self_add page, "main_container"
61
+ @current_page = page
62
+ ExternObject.callback_storage = page.widget_callbacks
63
+ ExternObject.global_callback_storage = page.global_callbacks
64
+ ExternObject.data_storage = page.custom_data
65
+ send(page_id)
66
+ when Class
67
+ page = @preserved_pages[page_id] = page_id.new self
68
+ @gui.self_add page, "main_container"
69
+ @current_page = page
70
+ ExternObject.callback_storage = page.widget_callbacks
71
+ ExternObject.global_callback_storage = page.global_callbacks
72
+ ExternObject.data_storage = page.custom_data
73
+ page.build
74
+ when Proc
75
+ page = @preserved_pages[page_id] = Page.new self
76
+ @gui.self_add page, "main_container"
77
+ @current_page = page
78
+ ExternObject.callback_storage = page.widget_callbacks
79
+ ExternObject.global_callback_storage = page.global_callbacks
80
+ ExternObject.data_storage = page.custom_data
81
+ instance_exec &page_id
82
+ end
83
+ end
84
+
85
+ attr_accessor :next_page_id
86
+ attr :gui, :window
87
+
88
+ def page
89
+ @current_page
90
+ end
91
+
92
+ def go next_page_id
93
+ @next_page_id = next_page_id
94
+ end
95
+
96
+ class Job
97
+ NO_RESULT = Object.new
98
+
99
+ def initialize delay:, repeat:, run: true, &b
100
+ @delay = delay
101
+ @repeat = repeat
102
+ @job = b
103
+ @result = NO_RESULT
104
+ self.run if run
105
+ end
106
+
107
+ def run
108
+ @thread = Thread.new do
109
+ sleep(@delay / 1000.0) if @delay
110
+ @result = @job.(self)
111
+ end
112
+ end
113
+
114
+ def on_done &b
115
+ @on_done = b
116
+ b.(@result) if @thread && !@thread.alive?
117
+ end
118
+
119
+ def audit
120
+ if @thread
121
+ if @thread.alive?
122
+ return true
123
+ else
124
+ @on_done.(@result) if @on_done
125
+ if @repeat
126
+ run
127
+ return true
128
+ else
129
+ return false
130
+ end
131
+ end
132
+ else
133
+ return true
134
+ end
135
+ end
136
+
137
+ def finish result = NO_RESULT
138
+ @repeat = false
139
+ @result = result if result != NO_RESULT
140
+ end
141
+ end
142
+
143
+ def job delay: nil, repeat: false, &b
144
+ job = Job.new delay:, repeat:, &b
145
+ @jobs << job
146
+ job
147
+ end
148
+
149
+ def timer delay_ = nil, delay: nil, repeat: false, &b
150
+ job delay: delay || delay_, repeat: do
151
+ end.on_done &b
152
+ end
153
+
154
+ def respond_to? name
155
+ super || @current_page.respond_to?(name)
156
+ end
157
+
158
+ def method_missing name, *a, **na, &b
159
+ if @current_page.respond_to? name
160
+ @current_page.send(name, *a, **na, &b)
161
+ elsif @gui.respond_to? name
162
+ @gui.send(name, *a, **na, &b)
163
+ elsif @window.respond_to? name
164
+ @window.send(name, *a, **na, &b)
165
+ else
166
+ no_method_error = "method missing in Page/Gui/Window"
167
+ raise no_method_error
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,3 @@
1
+ module Kernel
2
+ VOID = Object.new
3
+ end
@@ -0,0 +1,9 @@
1
+ class Numeric
2
+ def pc
3
+ "#{self}%"
4
+ end
5
+
6
+ def px
7
+ "#{self}"
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../convention/proc_method_factory'
2
+
3
+ class Object
4
+ def behalf client, &todo
5
+ client.instance_exec self, client, &todo
6
+ end
7
+
8
+ def proc &block
9
+ block_given? ? Kernel.proc(&block) : ProcMethodFactory.new(self)
10
+ end
11
+
12
+ class << self
13
+ def to_abi object
14
+ object
15
+ end
16
+
17
+ def to_api data
18
+ data
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,5 @@
1
+ class String
2
+ def pascalcase
3
+ split("_").map(&:capitalize).join
4
+ end
5
+ end
@@ -0,0 +1,255 @@
1
+ require 'fiddle/import'
2
+ require_relative 'tgui-config'
3
+ require_relative 'abi/extern_object'
4
+ require_relative 'abi/enum'
5
+
6
+ module Tgui
7
+ module Abi
8
+ extend Fiddle::Importer
9
+
10
+ begin
11
+ Config::LIBS.each{ dlload _1 }
12
+ rescue LoadError
13
+ raise LoadError, 'Could not find shared library'
14
+ end
15
+
16
+ def self.call_arg_map! a
17
+ a.map! do
18
+ case _1
19
+ when ExternObject then _1.pointer
20
+ when true then 1
21
+ when false then 0
22
+ else _1
23
+ end
24
+ end
25
+ end
26
+
27
+ Vector2f = struct [
28
+ 'float x',
29
+ 'float y'
30
+ ]
31
+
32
+ Vector2u = struct [
33
+ 'int x',
34
+ 'int y'
35
+ ]
36
+
37
+ UIntRect = struct [
38
+ 'int left',
39
+ 'int top',
40
+ 'int width',
41
+ 'int height'
42
+ ]
43
+ end
44
+
45
+ Vector2f = Abi::Vector2f
46
+ Vector2u = Abi::Vector2u
47
+ UIntRect = Abi::UIntRect
48
+ end
49
+
50
+ class ExternObject
51
+
52
+ abi_bit_enum "TextStyles", :regular, :bold, :italic, :underlined, :strike_through
53
+
54
+ abi_enum "CursorType", :arrow, :text, :hand, :size_left, :size_right,
55
+ :size_top, :size_bottom, :size_top_left, :size_bottom_right,
56
+ :size_bottom_left, :size_top_right, :size_horizontal, :size_vertical,
57
+ :crosshair, :help, :not_allowed
58
+
59
+ end
60
+
61
+ def each_file_ancestor base, dir, &b
62
+ base_dir = "#{base}/#{dir}"
63
+ Dir.each_child base_dir do |filename|
64
+ if File.directory? "#{base_dir}/#{filename}"
65
+ each_file_ancestor base, "#{dir}/#{filename}", &b
66
+ else
67
+ b.("#{dir}/#{filename}")
68
+ end
69
+ end
70
+ end
71
+
72
+ each_file_ancestor File.dirname(__FILE__), "dsl" do |dsl_file|
73
+ require_relative dsl_file
74
+ end
75
+
76
+ # ABI loader should be required after dsl directory files because of class hierarchy
77
+ require_relative 'generated/tgui-abi-loader.gf'
78
+ require_relative 'convention/container_widgets'
79
+
80
+ class ExternObject
81
+ class << self
82
+ def finalizer pointer
83
+ Tgui::Util.free(pointer)
84
+ end
85
+ end
86
+
87
+ abi_packer Object do |o|
88
+ o = o.first if o.is_a? Array
89
+ o
90
+ end
91
+
92
+ abi_packer String do |o|
93
+ o = o.first if o.is_a? Array
94
+ o.to_s
95
+ end
96
+
97
+ abi_packer Integer do |o|
98
+ o = o.first if o.is_a? Array
99
+ o.to_i
100
+ end
101
+
102
+ abi_packer Float do |o|
103
+ o = o.first if o.is_a? Array
104
+ o.to_f
105
+ end
106
+
107
+ abi_packer Boolean do |o|
108
+ o = o.first if o.is_a? Array
109
+ o ? 1 : 0
110
+ end
111
+
112
+ abi_packer "SizeLayout" do |*arg|
113
+ case arg.size
114
+ when 1
115
+ a = arg.first
116
+ x = y = a
117
+ when 2
118
+ x, y = *arg
119
+ else raise "Unsupported argument #{arg}"
120
+ end
121
+ [abi_pack_single_size_layout(x), abi_pack_single_size_layout(y)]
122
+ end
123
+
124
+ abi_packer "SingleSizeLayout" do |o|
125
+ o = o.first if o.is_a? Array
126
+ case o
127
+ when String then o
128
+ when Numeric then Unit.nominate o
129
+ when :full then "100%"
130
+ when :half then "50%"
131
+ when :third then "parent.innersize / 3"
132
+ when :quarter then "25%"
133
+ else raise "Invalid value `#{o}` given"
134
+ end
135
+ end
136
+
137
+ abi_packer "PositionLayout" do |*arg|
138
+ case arg.size
139
+ when 1
140
+ a = arg.first
141
+ x = y = a
142
+ when 2
143
+ x, y = *arg
144
+ else raise "Unsupported argument #{arg}"
145
+ end
146
+ [abi_pack_single_position_layout(x), abi_pack_single_position_layout(y)]
147
+ end
148
+
149
+ abi_packer "SinglePositionLayout" do |o|
150
+ o = o.first if o.is_a? Array
151
+ case o
152
+ when String then o
153
+ when Rational then "(parent.innersize - size) * #{o.numerator} / #{o.denominator}"
154
+ when Numeric then Unit.nominate o
155
+ when :center then "(parent.innersize - size) / 2"
156
+ when :begin then "0"
157
+ when :end then "parent.innersize - size / 2"
158
+ else raise "Invalid value `#{o}` given"
159
+ end
160
+ end
161
+
162
+ abi_packer Tgui::Abi::Vector2f do |o|
163
+ case o
164
+ when Array
165
+ raise "Invalid array size excepted: #{2}, given: #{o.size}" if o.size != 2
166
+ return o.map{ abi_pack_float _1 }
167
+ else
168
+ raise "Unable to make Vector2f from #{o}"
169
+ end
170
+ end
171
+
172
+ abi_packer Tgui::Abi::Vector2u do |o|
173
+ case o
174
+ when Array
175
+ raise "Invalid array size excepted: #{2}, given: #{o.size}" if o.size != 2
176
+ return o.map{ abi_pack_integer _1 }
177
+ else
178
+ raise "Unable to make Vector2u from #{o}"
179
+ end
180
+ end
181
+
182
+ abi_packer Tgui::Abi::UIntRect do |o|
183
+ case o
184
+ when Array
185
+ raise "Invalid array size excepted: #{4}, given: #{o.size}" if o.size != 4
186
+ return o.map{ abi_pack_integer _1 }
187
+ else
188
+ raise "Unable to make UIntRect from #{o}"
189
+ end
190
+ end
191
+
192
+ abi_packer Tgui::Color
193
+ abi_packer Tgui::Outline
194
+ abi_packer Tgui::Font
195
+ abi_packer Tgui::Texture
196
+
197
+ abi_unpacker String do |o|
198
+ a = []
199
+ (0..).each do |i|
200
+ i *= 4
201
+ ch = (o[i]) | (o[i + 1] << 8) | (o[i + 2] << 16) | (o[i + 3] << 24)
202
+ break if ch == 0
203
+ a << ch
204
+ end
205
+ raise "deleted string!" if a[0] == 572653601
206
+ a.pack("N*").encode("UTF-8", "UTF-32BE")
207
+ end
208
+
209
+ abi_unpacker Integer do |o|
210
+ o
211
+ end
212
+
213
+ abi_unpacker Float do |o|
214
+ o
215
+ end
216
+
217
+ abi_unpacker Boolean do |o|
218
+ o.odd?
219
+ end
220
+
221
+ abi_unpacker "SizeLayout" do |o|
222
+ [o.x, o.y]
223
+ end
224
+
225
+ abi_unpacker "PositionLayout" do |o|
226
+ [o.x, o.y]
227
+ end
228
+
229
+ abi_unpacker Tgui::Vector2f do |o|
230
+ v = Tgui::Vector2f.new o
231
+ r = [v.x, v.y]
232
+ Util.free(o)
233
+ r
234
+ end
235
+
236
+ abi_unpacker Tgui::Vector2u do |o|
237
+ v = Tgui::Vector2u.new o
238
+ r = [v.x, v.y]
239
+ Util.free(o)
240
+ r
241
+ end
242
+
243
+ abi_unpacker Tgui::UIntRect do |o|
244
+ v = Tgui::UIntRect.new o
245
+ r = [v.left, v.top, v.width, v.height]
246
+ Util.free(o)
247
+ r
248
+ end
249
+
250
+ abi_unpacker Tgui::Color
251
+ abi_unpacker Tgui::Outline
252
+ abi_unpacker Tgui::Font
253
+ abi_unpacker Tgui::Texture
254
+
255
+ end
@@ -0,0 +1,20 @@
1
+ module Tgui
2
+ module Config
3
+ if RUBY_PLATFORM =~ /cygwin|mswin|mingw|bccwin|wince|emx/
4
+ LIBS = [
5
+ File.expand_path('../../ext/dll/openal32.dll', __dir__),
6
+ File.expand_path('../../ext/dll/sfml-system-2.dll', __dir__),
7
+ File.expand_path('../../ext/dll/sfml-window-2.dll', __dir__),
8
+ File.expand_path('../../ext/dll/sfml-graphics-2.dll', __dir__),
9
+ File.expand_path('../../ext/dll/tgui.dll', __dir__),
10
+ ].freeze
11
+ else
12
+ LIBS = [
13
+ File.expand_path('../../ext/so/libsfml-system.so', __dir__),
14
+ File.expand_path('../../ext/so/libsfml-window.so', __dir__),
15
+ File.expand_path('../../ext/so/libsfml-graphics.so', __dir__),
16
+ File.expand_path('../../ext/so/libtgui.so', __dir__),
17
+ ].freeze
18
+ end
19
+ end
20
+ end
data/lib/white_gold.rb ADDED
@@ -0,0 +1,47 @@
1
+ require_relative 'white_gold/master'
2
+ include Tgui
3
+
4
+ @wg = WhiteGold.new
5
+
6
+ @wg.methods.difference(Object.instance_methods, [:respond_to?, :method_missing, :go, :[], :page]).each do |m|
7
+ define_method m do |*a, **na, &b|
8
+ @wg.send(m, *a, **na, &b)
9
+ end
10
+ end
11
+
12
+ class << self
13
+
14
+ def respond_to? name
15
+ super || (name.end_with?("!") && @wg.respond_to?(name))
16
+ end
17
+
18
+ def method_missing name, *a, **na, &b
19
+ if name.end_with?("!")
20
+ @wg.send(name, *a, **na, &b)
21
+ else super
22
+ end
23
+ end
24
+
25
+ def go page
26
+ method(page).unbind.bind(@wg) if Symbol === page && !@wg.respond_to?(page)
27
+ @wg.go page
28
+ end
29
+
30
+ def page
31
+ @wg.page
32
+ end
33
+
34
+ def def! name, &b
35
+ @wg.page.class.def! name, &b
36
+ end
37
+ end
38
+
39
+ @wg.init Page
40
+ if $0 != 'irb'
41
+ at_exit do
42
+ go :main_page
43
+ rescue NameError
44
+ ensure
45
+ @wg.run init: false
46
+ end
47
+ end