white_gold 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/ext/dll/openal32.dll +0 -0
- data/ext/dll/sfml-audio-2.dll +0 -0
- data/ext/dll/sfml-graphics-2.dll +0 -0
- data/ext/dll/sfml-network-2.dll +0 -0
- data/ext/dll/sfml-system-2.dll +0 -0
- data/ext/dll/sfml-window-2.dll +0 -0
- data/ext/dll/tgui.dll +0 -0
- data/ext/so/libsfml-audio.so +0 -0
- data/ext/so/libsfml-graphics.so +0 -0
- data/ext/so/libsfml-network.so +0 -0
- data/ext/so/libsfml-system.so +0 -0
- data/ext/so/libsfml-window.so +0 -0
- data/ext/so/libtgui.so +0 -0
- data/lib/white_gold/abi/alias.rb +50 -0
- data/lib/white_gold/abi/enum.rb +43 -0
- data/lib/white_gold/abi/extern_object.rb +180 -0
- data/lib/white_gold/abi/interface/interface.rb +114 -0
- data/lib/white_gold/abi/interface/interface_collection_out.rb +29 -0
- data/lib/white_gold/abi/interface/interface_composed_out.rb +28 -0
- data/lib/white_gold/abi/interface/interface_single_out.rb +19 -0
- data/lib/white_gold/abi/packer.rb +28 -0
- data/lib/white_gold/abi/reducer.rb +12 -0
- data/lib/white_gold/abi/unpacker.rb +27 -0
- data/lib/white_gold/convention/api_child.rb +30 -0
- data/lib/white_gold/convention/bang_def.rb +5 -0
- data/lib/white_gold/convention/bang_nest.rb +16 -0
- data/lib/white_gold/convention/bang_nested_caller.rb +48 -0
- data/lib/white_gold/convention/bool_property.rb +13 -0
- data/lib/white_gold/convention/boolean.rb +2 -0
- data/lib/white_gold/convention/club.rb +26 -0
- data/lib/white_gold/convention/container_widgets.rb +181 -0
- data/lib/white_gold/convention/page.rb +96 -0
- data/lib/white_gold/convention/proc_method_factory.rb +22 -0
- data/lib/white_gold/convention/unit.rb +22 -0
- data/lib/white_gold/convention/widget_like.rb +146 -0
- data/lib/white_gold/dsl/backend_gui.rb +37 -0
- data/lib/white_gold/dsl/bitmap_button.rb +11 -0
- data/lib/white_gold/dsl/box_layout.rb +47 -0
- data/lib/white_gold/dsl/box_layout_ratios.rb +13 -0
- data/lib/white_gold/dsl/button.rb +10 -0
- data/lib/white_gold/dsl/button_base.rb +18 -0
- data/lib/white_gold/dsl/chat_box.rb +65 -0
- data/lib/white_gold/dsl/checkbox.rb +6 -0
- data/lib/white_gold/dsl/child_window.rb +47 -0
- data/lib/white_gold/dsl/clickable_widget.rb +15 -0
- data/lib/white_gold/dsl/color.rb +124 -0
- data/lib/white_gold/dsl/color_picker.rb +12 -0
- data/lib/white_gold/dsl/combo_box.rb +135 -0
- data/lib/white_gold/dsl/container.rb +95 -0
- data/lib/white_gold/dsl/edit_box.rb +38 -0
- data/lib/white_gold/dsl/file_dialog.rb +86 -0
- data/lib/white_gold/dsl/font.rb +23 -0
- data/lib/white_gold/dsl/grid.rb +131 -0
- data/lib/white_gold/dsl/group.rb +6 -0
- data/lib/white_gold/dsl/gui.rb +16 -0
- data/lib/white_gold/dsl/horizontal_layout.rb +6 -0
- data/lib/white_gold/dsl/horizontal_wrap.rb +6 -0
- data/lib/white_gold/dsl/knob.rb +16 -0
- data/lib/white_gold/dsl/label.rb +21 -0
- data/lib/white_gold/dsl/list_box.rb +125 -0
- data/lib/white_gold/dsl/list_view.rb +239 -0
- data/lib/white_gold/dsl/menu_bar.rb +252 -0
- data/lib/white_gold/dsl/message_box.rb +90 -0
- data/lib/white_gold/dsl/outline.rb +52 -0
- data/lib/white_gold/dsl/panel.rb +16 -0
- data/lib/white_gold/dsl/panel_list_box.rb +83 -0
- data/lib/white_gold/dsl/picture.rb +12 -0
- data/lib/white_gold/dsl/progress_bar.rb +19 -0
- data/lib/white_gold/dsl/radio_button.rb +18 -0
- data/lib/white_gold/dsl/radio_button_group.rb +14 -0
- data/lib/white_gold/dsl/range_slider.rb +15 -0
- data/lib/white_gold/dsl/rich_text_label.rb +6 -0
- data/lib/white_gold/dsl/scrollable_panel.rb +53 -0
- data/lib/white_gold/dsl/scrollbar.rb +28 -0
- data/lib/white_gold/dsl/separator_line.rb +6 -0
- data/lib/white_gold/dsl/signal/global_signal.rb +33 -0
- data/lib/white_gold/dsl/signal/signal.rb +44 -0
- data/lib/white_gold/dsl/signal/signal_animation_type.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_bool.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_color.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_float.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_int.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_item.rb +6 -0
- data/lib/white_gold/dsl/signal/signal_item_hierarchy.rb +9 -0
- data/lib/white_gold/dsl/signal/signal_panel_list_box_item.rb +7 -0
- data/lib/white_gold/dsl/signal/signal_pointer.rb +15 -0
- data/lib/white_gold/dsl/signal/signal_range.rb +15 -0
- data/lib/white_gold/dsl/signal/signal_show_effect.rb +17 -0
- data/lib/white_gold/dsl/signal/signal_string.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_typed_int_bool_ptr.rb +15 -0
- data/lib/white_gold/dsl/signal/signal_typed_size_t.rb +6 -0
- data/lib/white_gold/dsl/signal/signal_u_int.rb +16 -0
- data/lib/white_gold/dsl/signal/signal_vector2f.rb +14 -0
- data/lib/white_gold/dsl/slider.rb +26 -0
- data/lib/white_gold/dsl/spin_button.rb +24 -0
- data/lib/white_gold/dsl/spin_control.rb +15 -0
- data/lib/white_gold/dsl/subwidget_container.rb +9 -0
- data/lib/white_gold/dsl/tab_container.rb +121 -0
- data/lib/white_gold/dsl/tabs.rb +91 -0
- data/lib/white_gold/dsl/text_area.rb +34 -0
- data/lib/white_gold/dsl/texture.rb +53 -0
- data/lib/white_gold/dsl/theme/boolean_attribute.rb +13 -0
- data/lib/white_gold/dsl/theme/button_theme.rb +19 -0
- data/lib/white_gold/dsl/theme/chat_box_theme.rb +16 -0
- data/lib/white_gold/dsl/theme/child_window_theme.rb +25 -0
- data/lib/white_gold/dsl/theme/color_attribute.rb +13 -0
- data/lib/white_gold/dsl/theme/color_picker_theme.rb +14 -0
- data/lib/white_gold/dsl/theme/combo_box_theme.rb +33 -0
- data/lib/white_gold/dsl/theme/common_renderer.rb +7 -0
- data/lib/white_gold/dsl/theme/edit_box_theme.rb +34 -0
- data/lib/white_gold/dsl/theme/file_dialog_theme.rb +22 -0
- data/lib/white_gold/dsl/theme/float_attribute.rb +13 -0
- data/lib/white_gold/dsl/theme/group_theme.rb +9 -0
- data/lib/white_gold/dsl/theme/knob_theme.rb +15 -0
- data/lib/white_gold/dsl/theme/label_theme.rb +20 -0
- data/lib/white_gold/dsl/theme/list_box_theme.rb +25 -0
- data/lib/white_gold/dsl/theme/list_view_theme.rb +27 -0
- data/lib/white_gold/dsl/theme/menu_bar_theme.rb +21 -0
- data/lib/white_gold/dsl/theme/message_box_theme.rb +11 -0
- data/lib/white_gold/dsl/theme/outline_attribute.rb +13 -0
- data/lib/white_gold/dsl/theme/progress_bar_theme.rb +19 -0
- data/lib/white_gold/dsl/theme/radio_button_theme.rb +30 -0
- data/lib/white_gold/dsl/theme/scrollbar_theme.rb +24 -0
- data/lib/white_gold/dsl/theme/separator_line_theme.rb +9 -0
- data/lib/white_gold/dsl/theme/slider_theme.rb +20 -0
- data/lib/white_gold/dsl/theme/spin_button_theme.rb +19 -0
- data/lib/white_gold/dsl/theme/tabs_theme.rb +29 -0
- data/lib/white_gold/dsl/theme/text_area_theme.rb +22 -0
- data/lib/white_gold/dsl/theme/text_styles_attribute.rb +13 -0
- data/lib/white_gold/dsl/theme/texture_attribute.rb +17 -0
- data/lib/white_gold/dsl/theme/theme_attributed.rb +51 -0
- data/lib/white_gold/dsl/theme/theme_component.rb +23 -0
- data/lib/white_gold/dsl/theme/tree_view_theme.rb +26 -0
- data/lib/white_gold/dsl/theme/widget_theme.rb +12 -0
- data/lib/white_gold/dsl/theme.rb +144 -0
- data/lib/white_gold/dsl/toggle_button.rb +10 -0
- data/lib/white_gold/dsl/tool_tip.rb +21 -0
- data/lib/white_gold/dsl/tree_view.rb +186 -0
- data/lib/white_gold/dsl/util.rb +17 -0
- data/lib/white_gold/dsl/vertical_layout.rb +6 -0
- data/lib/white_gold/dsl/widget.rb +279 -0
- data/lib/white_gold/dsl/window.rb +16 -0
- data/lib/white_gold/generated/tgui-abi-loader.gf.rb +1813 -0
- data/lib/white_gold/library/theme/light.rb +111 -0
- data/lib/white_gold/master.rb +170 -0
- data/lib/white_gold/path/kernel.path.rb +3 -0
- data/lib/white_gold/path/numeric.path.rb +9 -0
- data/lib/white_gold/path/object.path.rb +22 -0
- data/lib/white_gold/path/string.path.rb +5 -0
- data/lib/white_gold/tgui-abi.rb +255 -0
- data/lib/white_gold/tgui-config.rb +20 -0
- data/lib/white_gold.rb +47 -0
- 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,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,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
|