Pixel-Composer/objects/o_dialog_menubox/Create_0.gml

88 lines
2.1 KiB
Text
Raw Normal View History

2022-01-13 05:24:03 +01:00
/// @description init
event_inherited();
#region data
2023-05-08 19:14:30 +02:00
menu_id = "";
2022-11-01 03:06:03 +01:00
destroy_on_click_out = false;
2024-03-23 07:26:11 +01:00
draggable = false;
mouse_inside = false;
selecting = -1;
2023-01-25 06:49:00 +01:00
2022-01-13 05:24:03 +01:00
alarm[0] = -1;
2024-03-23 07:26:11 +01:00
menu = 1;
hght = ui(36);
2022-11-01 03:06:03 +01:00
children = ds_list_create();
ds_list_add(children, self);
2022-01-13 05:24:03 +01:00
2024-03-23 07:26:11 +01:00
tooltips = [];
2023-02-19 02:13:19 +01:00
show_icon = false;
2024-03-23 07:26:11 +01:00
context = noone;
2023-02-19 02:13:19 +01:00
2023-02-23 07:02:19 +01:00
function setMenu(_menu, align = fa_left) {
2022-01-13 05:24:03 +01:00
menu = _menu;
dialog_x = x;
dialog_y = y;
2023-02-19 02:13:19 +01:00
show_icon = false;
2022-01-13 05:24:03 +01:00
dialog_w = 0;
dialog_h = 0;
2022-11-01 03:06:03 +01:00
while(ds_list_size(children) > 1) {
var ch = children[| 1];
instance_destroy(children[| 1]);
ds_list_delete(children, 1);
}
2022-11-18 03:20:31 +01:00
draw_set_text(f_p0, fa_center, fa_center, COLORS._main_text);
2022-01-13 05:24:03 +01:00
for(var i = 0; i < array_length(menu); i++) {
2023-02-19 02:13:19 +01:00
var _menuItem = menu[i];
if(_menuItem == -1) {
2022-11-03 11:44:49 +01:00
dialog_h += ui(8);
2022-01-13 05:24:03 +01:00
continue;
}
2023-02-19 02:13:19 +01:00
2022-01-13 05:24:03 +01:00
draw_set_font(f_p0);
2023-02-19 02:13:19 +01:00
var ww = string_width(_menuItem.name) + ui(64);
if(instanceof(_menuItem) == "MenuItemGroup") {
var amo = array_length(_menuItem.group);
2023-10-14 08:00:35 +02:00
ww = max(ww, ui(16) + amo * (_menuItem.spacing + ui(4)));
2023-02-19 02:13:19 +01:00
dialog_h += hght;
}
2023-01-25 06:49:00 +01:00
2023-02-19 02:13:19 +01:00
if(instanceof(_menuItem) == "MenuItem") {
if(_menuItem.hotkey != noone) {
var _key = find_hotkey(_menuItem.hotkey[0], _menuItem.hotkey[1]);
2022-11-01 03:06:03 +01:00
if(_key) {
draw_set_font(f_p1);
var ss = key_get_name(_key.key, _key.modi);
2022-11-03 11:44:49 +01:00
ww += string_width(ss) + ui(16);
2022-11-01 03:06:03 +01:00
}
2023-02-19 02:13:19 +01:00
}
if(_menuItem.spr != noone)
show_icon = true;
2023-03-12 02:28:21 +01:00
if(_menuItem.toggle != noone)
show_icon = true;
2022-01-13 05:24:03 +01:00
}
2023-02-19 02:13:19 +01:00
dialog_w = max(dialog_w, ww);
2022-01-13 05:24:03 +01:00
dialog_h += hght;
}
2023-02-19 02:13:19 +01:00
if(show_icon)
dialog_w += ui(32);
2023-03-28 06:58:28 +02:00
dialog_y = min(dialog_y, WIN_H - dialog_h - 2);
2023-02-23 07:02:19 +01:00
switch(align) {
2023-03-28 06:58:28 +02:00
case fa_left: dialog_x = round(min(dialog_x, WIN_W - dialog_w - 2)); break;
case fa_center: dialog_x = round(min(dialog_x - dialog_w / 2, WIN_W - dialog_w - 2)); break;
case fa_right: dialog_x = round(max(dialog_x - dialog_w, 2)); break;
2023-02-23 07:02:19 +01:00
}
2022-01-13 05:24:03 +01:00
2024-03-23 07:26:11 +01:00
mouse_inside = point_in_rectangle(mouse_mx, mouse_my, dialog_x, dialog_y, dialog_x + dialog_w, dialog_y + dialog_h);
2022-01-13 05:24:03 +01:00
ready = true;
}
#endregion