Pixel-Composer/scripts/addon_lua_widget/addon_lua_widget.gml

181 lines
4.6 KiB
Text
Raw Normal View History

// feather ignore all
#region setup
function __addon_lua_setup(lua, context) {
__addon_lua_setup_functions(lua);
__addon_lua_setup_constants(lua, context);
__addon_lua_setup_widget(lua, context);
context.ready = true;
}
#endregion
#region widget manager
global.__lua_widget_functions = [
[ "__widget_wake", function(wd, hover, focus) {
if(!ds_map_exists(global.ADDON_WIDGET, wd)) return;
global.ADDON_WIDGET[? wd].setFocusHover(focus, hover);
} ],
[ "__textBox", function(ID, type, onModify) {
var _addon = noone;
with(_addon_custom) if(self.ID == ID) _addon = self;
if(_addon == noone) return noone;
var wd = new textBox(type, noone);
wd.setLua(_addon.thread, onModify, function(txt) {
return lua_call(lua_thread, lua_thread_key, txt);
});
var key = UUID_generate();
global.ADDON_WIDGET[? key] = wd;
return key;
} ],
[ "__textBox_draw", function(wd, _x, _y, _w, _h, _text, _m) {
if(!ds_map_exists(global.ADDON_WIDGET, wd)) return;
var _param = new widgetParam(_x, _y, _w, _h, _text, {}, _m)
global.ADDON_WIDGET[? wd].drawParam(_param);
} ],
@"
TextBox = {}
TextBox.new = function(type, onModify)
local self = {}
self.id = __textBox(ID, type, onModify)
function self.draw(self, _x, _y, _w, _h, _text)
__widget_wake(self.id, Panel.hoverable, Panel.clickable)
__textBox_draw(self.id, _x, _y, _w, _h, _text, Panel.mouse)
end
return self
end",
[ "__vectorBox", function(ID, size, onModify) {
var _addon = noone;
with(_addon_custom) if(self.ID == ID) _addon = self;
if(_addon == noone) return noone;
var wd = new vectorBox(size, noone);
wd.setLua(_addon.thread, onModify, function(v, i) {
return lua_call(lua_thread, lua_thread_key, i + 1, v);
});
var key = UUID_generate();
global.ADDON_WIDGET[? key] = wd;
return key;
} ],
[ "__vectorBox_draw", function(wd, _x, _y, _w, _h, _vector, _m) {
if(!ds_map_exists(global.ADDON_WIDGET, wd)) return;
var _param = new widgetParam(_x, _y, _w, _h, _vector, {}, _m)
global.ADDON_WIDGET[? wd].drawParam(_param);
} ],
@"
VectorBox = {}
VectorBox.new = function(size, onModify)
local self = {}
self.id = __vectorBox(ID, size, onModify)
function self.draw(self, _x, _y, _w, _h, _vector)
__widget_wake(self.id, Panel.hoverable, Panel.clickable)
__vectorBox_draw(self.id, _x, _y, _w, _h, _vector, Panel.mouse)
end
return self
end",
[ "__checkBox", function(ID, onModify) {
var _addon = noone;
with(_addon_custom) if(self.ID == ID) _addon = self;
if(_addon == noone) return noone;
var wd = new checkBox(onModify);
wd.setLua(_addon.thread, onModify, function() {
return lua_call(lua_thread, lua_thread_key);
});
var key = UUID_generate();
global.ADDON_WIDGET[? key] = wd;
return key;
} ],
[ "__checkBox_draw", function(wd, _x, _y, _value, _m) {
if(!ds_map_exists(global.ADDON_WIDGET, wd)) return;
var _param = new widgetParam(_x, _y, ui(24), ui(24), _value, {}, _m)
global.ADDON_WIDGET[? wd].drawParam(_param);
} ],
@"
CheckBox = {}
CheckBox.new = function(onModify)
local self = {}
self.id = __checkBox(ID, onModify)
function self.draw(self, _x, _y, _value)
__widget_wake(self.id, Panel.hoverable, Panel.clickable)
__checkBox_draw(self.id, _x, _y, _value, Panel.mouse)
end
return self
end",
[ "__button", function(ID, onModify, txt = "") {
var _addon = noone;
with(_addon_custom) if(self.ID == ID) _addon = self;
if(_addon == noone) return noone;
var wd = button(onModify).setText(txt);
wd.setLua(_addon.thread, onModify, function() {
return lua_call(lua_thread, lua_thread_key);
});
var key = UUID_generate();
global.ADDON_WIDGET[? key] = wd;
return key;
} ],
[ "__button_draw", function(wd, _x, _y, _w, _h, _m) {
if(!ds_map_exists(global.ADDON_WIDGET, wd)) return;
var _button = global.ADDON_WIDGET[? wd];
var _param = new widgetParam(_x, _y, _w, _h, 0, {}, _m)
_button.drawParam(_param);
} ],
@"
Button = {}
Button.new = function(onModify, txt)
local self = {}
self.id = __button(ID, onModify, txt)
function self.draw(self, _x, _y, _w, _h)
__widget_wake(self.id, Panel.hoverable, Panel.clickable)
__button_draw(self.id, _x, _y, _w, _h, Panel.mouse)
end
return self
end",
];
function __addon_lua_setup_widget(lua, context) {
for( var i = 0, n = array_length(global.__lua_widget_functions); i < n; i++ ) {
var _func = global.__lua_widget_functions[i];
if(is_string(_func)) lua_add_code(lua, _func);
else if(is_array(_func)) lua_add_function(lua, _func[0], _func[1]);
}
}
#endregion