Pixel-Composer/scripts/widget/widget.gml

116 lines
2.4 KiB
Text
Raw Normal View History

2023-01-17 08:11:55 +01:00
function widget() constructor {
2023-01-25 06:49:00 +01:00
active = false;
hover = false;
2024-03-28 14:18:02 +01:00
hovering= false;
2023-01-25 06:49:00 +01:00
iactive = false;
ihover = false;
2023-10-04 09:49:31 +02:00
parent = noone;
2023-01-17 08:11:55 +01:00
interactable = true;
2024-05-17 15:25:01 +02:00
2024-05-26 04:51:14 +02:00
right_click_block = true;
2024-03-27 11:51:14 +01:00
side_button = noone;
2024-05-17 15:25:01 +02:00
front_button = noone;
2023-01-17 08:11:55 +01:00
2024-03-28 14:18:02 +01:00
hide = false;
2023-05-07 20:55:13 +02:00
lua_thread = noone;
lua_thread_key = "";
2024-03-26 04:03:45 +01:00
font = f_p0;
2023-01-17 08:11:55 +01:00
x = 0;
y = 0;
w = 0;
h = 0;
2023-07-12 16:28:32 +02:00
rx = 0;
ry = 0;
2024-03-31 11:10:14 +02:00
static setLua = function(_lua_thread, _lua_key, _lua_func) { #region
2023-05-07 20:55:13 +02:00
lua_thread = _lua_thread;
lua_thread_key = _lua_key;
onModify = method(self, _lua_func);
2024-03-31 11:10:14 +02:00
} #endregion
2023-05-07 20:55:13 +02:00
2024-03-31 11:10:14 +02:00
static setInteract = function(interactable = noone) { #region
2023-01-25 06:49:00 +01:00
self.interactable = interactable;
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-25 06:49:00 +01:00
2024-03-31 11:10:14 +02:00
static register = function(parent = noone) { #region
2023-01-17 08:11:55 +01:00
if(!interactable) return;
array_push(WIDGET_ACTIVE, self);
self.parent = parent;
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-17 08:11:55 +01:00
2024-03-27 11:51:14 +01:00
static setParam = function(params) { #region
font = params.font;
rx = params.rx;
ry = params.ry;
} #endregion
2023-01-17 08:11:55 +01:00
static trigger = function() { }
2024-03-31 11:10:14 +02:00
static parentFocus = function() { #region
2023-01-17 08:11:55 +01:00
if(parent == noone) return;
if(y < 0)
parent.scroll_y_to += abs(y) + ui(16);
else if(y + ui(16) > parent.surface_h)
parent.scroll_y_to -= abs(parent.surface_h - y) + h + ui(16);
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-17 08:11:55 +01:00
2024-03-28 14:18:02 +01:00
static isHovering = function() { return hovering; }
2024-03-31 11:10:14 +02:00
static activate = function() { #region
2023-01-17 08:11:55 +01:00
if(!interactable) return;
WIDGET_CURRENT = self;
WIDGET_CURRENT_SCROLL = parent;
parentFocus();
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-17 08:11:55 +01:00
2024-03-31 11:10:14 +02:00
static deactivate = function() { #region
2023-01-17 08:11:55 +01:00
if(WIDGET_CURRENT != self) return;
WIDGET_CURRENT = noone;
WIDGET_CURRENT_SCROLL = noone;
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-17 08:11:55 +01:00
2024-03-31 11:10:14 +02:00
static setFocusHover = function(active = false, hover = false) { #region
2023-01-25 06:49:00 +01:00
self.active = interactable && active;
self.hover = interactable && hover;
self.iactive = active;
self.ihover = hover;
2024-03-31 11:10:14 +02:00
} #endregion
2023-01-17 08:11:55 +01:00
2024-03-31 11:10:14 +02:00
static resetFocus = function() { #region
2023-01-17 08:11:55 +01:00
active = false;
hover = false;
2024-03-31 11:10:14 +02:00
} #endregion
static clone = function() { return variable_clone(self); }
2023-06-21 20:36:53 +02:00
2023-07-23 20:21:35 +02:00
static drawParam = function(params) {}
2023-06-21 20:36:53 +02:00
static draw = function() {}
2023-07-30 19:56:53 +02:00
}
function widgetParam(x, y, w, h, data, display_data = {}, m = mouse_ui, rx = 0, ry = 0) constructor {
2023-07-30 19:56:53 +02:00
self.x = x;
self.y = y;
self.w = w;
self.h = h;
self.s = ui(24);
2023-07-30 19:56:53 +02:00
self.data = data;
self.m = m;
self.rx = rx;
self.ry = ry;
self.halign = fa_left;
self.valign = fa_top;
self.display_data = display_data;
2024-03-26 04:03:45 +01:00
self.font = f_p0;
2023-01-17 08:11:55 +01:00
}