Pixel-Composer/objects/o_dialog_menubox/Draw_64.gml

185 lines
5.8 KiB
Plaintext
Raw Normal View History

2022-01-13 05:24:03 +01:00
/// @description init
2023-03-28 06:58:28 +02:00
if(!ready) exit;
2022-01-13 05:24:03 +01:00
#region draw
2022-11-03 11:44:49 +01:00
var yy = dialog_y;
2022-01-13 05:24:03 +01:00
2023-06-10 13:59:45 +02:00
draw_sprite_stretched(THEME.menu_bg, 0, dialog_x, dialog_y, dialog_w, dialog_h);
2023-02-19 02:13:19 +01:00
//if(show_icon)
// draw_sprite_stretched(THEME.textbox_code, 0, dialog_x, dialog_y, ui(36), dialog_h);
2022-01-13 05:24:03 +01:00
for(var i = 0; i < array_length(menu); i++) {
2023-01-25 06:49:00 +01:00
var _menuItem = menu[i];
2023-11-01 08:10:25 +01:00
if(is_instanceof(_menuItem, MenuItem) && _menuItem.shiftMenu != noone && key_mod_press(SHIFT))
_menuItem = _menuItem.shiftMenu;
2023-02-19 02:13:19 +01:00
if(_menuItem == -1) {
var bx = dialog_x + ui(8);
var bw = dialog_w - ui(16);
draw_sprite_stretched(THEME.menu_separator, 0, bx, yy, bw, ui(6));
2022-11-03 11:44:49 +01:00
yy += 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
var _h = hght;
2023-02-19 02:13:19 +01:00
var label = _menuItem.name;
2022-01-13 05:24:03 +01:00
2023-11-01 08:10:25 +01:00
if(is_instanceof(_menuItem, MenuItemGroup))
2022-01-13 05:24:03 +01:00
_h += hght;
2023-01-25 06:49:00 +01:00
2023-02-19 02:13:19 +01:00
var hoverable = _menuItem.active && sHOVER;
2023-03-05 07:16:44 +01:00
if(hoverable && point_in_rectangle(mouse_mx, mouse_my, dialog_x, yy + 1, dialog_x + dialog_w, yy + _h - 1)) {
2023-01-25 06:49:00 +01:00
selecting = i;
2023-03-05 07:16:44 +01:00
var tips = array_safe_get(tooltips, i, noone);
if(tips != noone) TOOLTIP = tips;
}
2023-05-03 21:42:17 +02:00
var cc = c_white;
if(struct_has(_menuItem, "color"))
cc = _menuItem.color;
2023-01-25 06:49:00 +01:00
if(selecting == i) {
2023-05-03 21:42:17 +02:00
if(cc == c_white)
draw_sprite_stretched_ext(THEME.textbox, 3, dialog_x, yy, dialog_w, _h, COLORS.dialog_menubox_highlight, 0.75);
else
draw_sprite_stretched_ext(THEME.textbox, 3, dialog_x, yy, dialog_w, _h, cc, 0.8);
2022-01-13 05:24:03 +01:00
2023-02-19 02:13:19 +01:00
if(instanceof(_menuItem) == "MenuItem" && sFOCUS && (mouse_release(mb_left) || keyboard_check_released(vk_enter))) {
var _dat = {
2023-05-07 20:55:13 +02:00
_x: dialog_x,
x: dialog_x + dialog_w,
y: yy,
depth: depth,
name: _menuItem.name,
index: i,
context: context,
};
var _res = _menuItem.func(_dat);
if(_menuItem.isShelf) ds_list_add(children, _res);
2023-02-19 02:13:19 +01:00
else instance_destroy(o_dialog_menubox);
2022-01-13 05:24:03 +01:00
}
2023-05-03 21:42:17 +02:00
} else if(cc != c_white)
draw_sprite_stretched_ext(THEME.textbox, 3, dialog_x, yy, dialog_w, _h, cc, 0.5);
2022-01-13 05:24:03 +01:00
2023-11-01 08:10:25 +01:00
if(is_instanceof(_menuItem, MenuItemGroup)) {
2023-02-19 02:13:19 +01:00
var _submenus = _menuItem.group;
2022-11-18 03:20:31 +01:00
draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text_sub);
2023-03-02 07:59:14 +01:00
draw_set_alpha(_menuItem.active * 0.75 + 0.25);
2022-11-22 14:25:39 +01:00
draw_text(dialog_x + dialog_w / 2, yy + hght / 2, label);
draw_set_alpha(1);
2022-01-13 05:24:03 +01:00
2023-01-25 06:49:00 +01:00
var amo = array_length(_submenus);
2023-10-14 08:00:35 +02:00
var _w = (amo - 1) / 2 * (_menuItem.spacing + ui(4));
2022-01-13 05:24:03 +01:00
var _sx = dialog_x + dialog_w / 2 - _w;
for(var j = 0; j < amo; j++) {
2023-01-25 06:49:00 +01:00
var _submenu = _submenus[j];
2023-10-14 08:00:35 +02:00
var _bx = _sx + j * (_menuItem.spacing + ui(4));
var _by = yy + hght + hght / 2 - ui(4);
var _spr = noone, _ind = 0;
var _sprs = _submenu[0];
var _tlp = array_safe_get(_submenu, 2, "");
var _dat = array_safe_get(_submenu, 3, {});
var _clr = c_white;
var _str = "";
2022-01-13 05:24:03 +01:00
2023-10-14 08:00:35 +02:00
var _sw = _menuItem.spacing;
var _sh = _menuItem.spacing;
2023-10-07 09:09:18 +02:00
if(is_string(_sprs)) {
_str = _sprs;
draw_set_text(f_p2, fa_center, fa_center, COLORS._main_text);
_sw = string_width(_str) + ui(12);
_sh = string_height(_str) + ui(8);
2022-09-23 13:28:42 +02:00
} else {
2023-10-07 09:09:18 +02:00
if(is_array(_sprs)) {
_spr = _sprs[0];
_ind = _sprs[1];
2023-10-14 08:00:35 +02:00
_clr = array_safe_get(_sprs, 2, c_white);
2023-10-07 09:09:18 +02:00
} else _spr = _sprs;
2023-10-14 08:00:35 +02:00
_sw = sprite_get_width(_spr) + ui(8);
_sh = sprite_get_height(_spr) + ui(8);
2022-09-23 13:28:42 +02:00
}
2022-01-13 05:24:03 +01:00
2023-10-07 09:09:18 +02:00
if(sHOVER && point_in_rectangle(mouse_mx, mouse_my, _bx - _sw / 2, _by - _sh / 2, _bx + _sw / 2, _by + _sh / 2)) {
2023-01-25 06:49:00 +01:00
if(_tlp != "") TOOLTIP = _tlp;
2023-10-07 09:09:18 +02:00
draw_sprite_stretched_ext(THEME.textbox, 3, _bx - _sw / 2, _by - _sh / 2, _sw, _sh, COLORS.dialog_menubox_highlight, 1);
draw_sprite_stretched_ext(THEME.textbox, 1, _bx - _sw / 2, _by - _sh / 2, _sw, _sh, COLORS.dialog_menubox_highlight, 1);
2022-01-13 05:24:03 +01:00
2022-12-10 05:06:01 +01:00
if(mouse_press(mb_left, sFOCUS)) {
2023-10-14 08:00:35 +02:00
_submenu[1](_dat);
2022-11-01 03:06:03 +01:00
instance_destroy(o_dialog_menubox);
2022-01-13 05:24:03 +01:00
}
}
2023-10-07 09:09:18 +02:00
if(_spr != noone)
2023-10-14 08:00:35 +02:00
draw_sprite_ui_uniform(_spr, _ind, _bx, _by,, _clr);
2023-10-07 09:09:18 +02:00
if(_str != "")
draw_text(_bx, _by, _str);
2022-01-13 05:24:03 +01:00
}
} else {
2023-02-19 02:13:19 +01:00
var tx = dialog_x + show_icon * ui(32) + ui(16);
if(_menuItem.spr != noone) {
var spr = is_array(_menuItem.spr)? _menuItem.spr[0] : _menuItem.spr;
var ind = is_array(_menuItem.spr)? _menuItem.spr[1] : 0;
2023-03-02 07:59:14 +01:00
draw_sprite_ui(spr, ind, dialog_x + ui(24), yy + hght / 2,,,, COLORS._main_icon, _menuItem.active * 0.5 + 0.25);
2023-02-19 02:13:19 +01:00
}
2023-03-12 02:28:21 +01:00
if(_menuItem.toggle != noone) {
2023-03-13 10:45:56 +01:00
var tog = _menuItem.toggle(_menuItem);
2023-03-12 02:28:21 +01:00
if(tog) draw_sprite_ui(THEME.icon_toggle, 0, dialog_x + ui(24), yy + hght / 2,,,, COLORS._main_icon);
}
2022-11-18 03:20:31 +01:00
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text);
2023-03-02 07:59:14 +01:00
draw_set_alpha(_menuItem.active * 0.75 + 0.25);
2023-02-19 02:13:19 +01:00
draw_text(tx, yy + hght / 2, label);
2022-11-22 14:25:39 +01:00
draw_set_alpha(1);
2023-02-19 02:13:19 +01:00
if(_menuItem.isShelf) {
2022-11-18 03:20:31 +01:00
draw_sprite_ui_uniform(THEME.arrow, 0, dialog_x + dialog_w - ui(20), yy + hght / 2, 1, COLORS._main_icon);
2023-02-19 02:13:19 +01:00
} else if(_menuItem.hotkey != noone) {
var _key = find_hotkey(_menuItem.hotkey[0], _menuItem.hotkey[1]);
2022-11-01 03:06:03 +01:00
if(_key) {
2022-11-18 03:20:31 +01:00
draw_set_text(f_p1, fa_right, fa_center, COLORS._main_text_sub);
2023-03-02 07:59:14 +01:00
draw_set_alpha(_menuItem.active * 0.75 + 0.25);
2022-11-03 11:44:49 +01:00
draw_text(dialog_x + dialog_w - ui(16), yy + hght / 2, key_get_name(_key.key, _key.modi));
2023-03-02 07:59:14 +01:00
draw_set_alpha(1);
2022-11-01 03:06:03 +01:00
}
2022-01-13 05:24:03 +01:00
}
}
yy += _h;
}
2023-01-04 02:30:04 +01:00
2023-01-25 06:49:00 +01:00
if(sFOCUS) {
if(keyboard_check_pressed(vk_up)) {
selecting--;
if(selecting < 0) selecting = array_length(menu) - 1;
}
if(keyboard_check_pressed(vk_down))
2023-02-20 10:16:31 +01:00
selecting = safe_mod(selecting + 1, array_length(menu));
2023-01-25 06:49:00 +01:00
if(keyboard_check_pressed(vk_escape))
instance_destroy();
}
2023-06-10 13:59:45 +02:00
draw_sprite_stretched(THEME.menu_bg, 1, dialog_x, dialog_y, dialog_w, dialog_h);
2023-05-08 19:14:30 +02:00
#endregion
#region debug
2023-05-22 20:31:55 +02:00
if(global.FLAG[$ "context_menu_id"]) {
2023-05-08 19:14:30 +02:00
draw_set_color(c_white);
draw_rectangle_border(dialog_x, dialog_y, dialog_x + dialog_w, dialog_y + dialog_h, 2);
draw_set_text(f_p0, fa_left, fa_bottom);
draw_text(dialog_x, dialog_y - ui(2), menu_id);
}
2022-01-13 05:24:03 +01:00
#endregion