diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 5b51e44eb..53c7e5ff1 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -662,6 +662,7 @@ {"name":"json_functions","order":8,"path":"scripts/json_functions/json_functions.yy",}, {"name":"json_minify","order":6,"path":"scripts/json_minify/json_minify.yy",}, {"name":"json_prettify","order":7,"path":"scripts/json_prettify/json_prettify.yy",}, + {"name":"keyboard_display","order":3,"path":"scripts/keyboard_display/keyboard_display.yy",}, {"name":"keyboard_function","order":2,"path":"scripts/keyboard_function/keyboard_function.yy",}, {"name":"lcd_function","order":2,"path":"scripts/lcd_function/lcd_function.yy",}, {"name":"lerp_float","order":1,"path":"scripts/lerp_float/lerp_float.yy",}, @@ -1820,6 +1821,7 @@ {"name":"s_checkbox","order":16,"path":"sprites/s_checkbox/s_checkbox.yy",}, {"name":"s_circle_16","order":33,"path":"sprites/s_circle_16/s_circle_16.yy",}, {"name":"s_circle_8","order":34,"path":"sprites/s_circle_8/s_circle_8.yy",}, + {"name":"s_circle_hotkey","order":231,"path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",}, {"name":"s_circle_toggle_8","order":35,"path":"sprites/s_circle_toggle_8/s_circle_toggle_8.yy",}, {"name":"s_close_16","order":36,"path":"sprites/s_close_16/s_close_16.yy",}, {"name":"s_code_show_auto","order":37,"path":"sprites/s_code_show_auto/s_code_show_auto.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 7859cfab8..ff8c020ca 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1194,6 +1194,7 @@ {"id":{"name":"json_minify","path":"scripts/json_minify/json_minify.yy",},}, {"id":{"name":"json_prettify","path":"scripts/json_prettify/json_prettify.yy",},}, {"id":{"name":"key_press","path":"scripts/key_press/key_press.yy",},}, + {"id":{"name":"keyboard_display","path":"scripts/keyboard_display/keyboard_display.yy",},}, {"id":{"name":"keyboard_function","path":"scripts/keyboard_function/keyboard_function.yy",},}, {"id":{"name":"lcd_function","path":"scripts/lcd_function/lcd_function.yy",},}, {"id":{"name":"lerp_float","path":"scripts/lerp_float/lerp_float.yy",},}, @@ -2523,6 +2524,7 @@ {"id":{"name":"s_checkbox","path":"sprites/s_checkbox/s_checkbox.yy",},}, {"id":{"name":"s_circle_16","path":"sprites/s_circle_16/s_circle_16.yy",},}, {"id":{"name":"s_circle_8","path":"sprites/s_circle_8/s_circle_8.yy",},}, + {"id":{"name":"s_circle_hotkey","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},}, {"id":{"name":"s_circle_toggle_8","path":"sprites/s_circle_toggle_8/s_circle_toggle_8.yy",},}, {"id":{"name":"s_close_16","path":"sprites/s_close_16/s_close_16.yy",},}, {"id":{"name":"s_code_show_auto","path":"sprites/s_code_show_auto/s_code_show_auto.yy",},}, diff --git a/datafiles/data/Theme.zip b/datafiles/data/Theme.zip index ff451f474..a783b752a 100644 Binary files a/datafiles/data/Theme.zip and b/datafiles/data/Theme.zip differ diff --git a/objects/o_dialog_menubox/Destroy_0.gml b/objects/o_dialog_menubox/Destroy_0.gml index 2b5930258..2c7950c51 100644 --- a/objects/o_dialog_menubox/Destroy_0.gml +++ b/objects/o_dialog_menubox/Destroy_0.gml @@ -3,6 +3,4 @@ event_inherited(); for( var i = 0, n = array_length(children); i < n; i++ ) instance_destroy(children[i]); -// print(FOCUS); -// if(instance_number(o_dialog_menubox) == 1) -// FOCUS = FOCUS_BEFORE; \ No newline at end of file +if(FOCUS == noone && instance_number(o_dialog_menubox) == 1) FOCUS = FOCUS_BEFORE; \ No newline at end of file diff --git a/objects/o_dialog_menubox/Draw_64.gml b/objects/o_dialog_menubox/Draw_64.gml index 9533dbdf1..ed4dcfff9 100644 --- a/objects/o_dialog_menubox/Draw_64.gml +++ b/objects/o_dialog_menubox/Draw_64.gml @@ -88,17 +88,12 @@ if(!ready) exit; }; selecting_menu = _menuItem; - var _loadKey = _key.full_name(); - - var context_menu_settings = [ - _loadKey, - menuItem("Edit hotkey", function() /*=>*/ { - hk_editing = selecting_menu; - keyboard_lastchar = hk_editing.hoykeyObject.key; - }), - ]; with(o_dialog_menubox) { if(!remove_parents) instance_destroy(); } + var context_menu_settings = [ + _key.full_name(), + menuItem(__txt("Edit hotkey"), function() /*=>*/ { hk_editing = selecting_menu; keyboard_lastchar = hk_editing.hoykeyObject.key; }), + ]; item_selecting = submenuCall(_dat, context_menu_settings); item_selecting.remove_parents = false; diff --git a/objects/o_dialog_panel/Create_0.gml b/objects/o_dialog_panel/Create_0.gml index 8e60bc5f7..ac34e10a1 100644 --- a/objects/o_dialog_panel/Create_0.gml +++ b/objects/o_dialog_panel/Create_0.gml @@ -2,16 +2,17 @@ event_inherited(); #region panel - dialog_w = 640; - dialog_h = 480; - padding = ui(8); - title_height = ui(24); - dialog_resizable = true; + dialog_w = 640; + dialog_h = 480; + padding = ui(8); + title_height = ui(24); + dialog_resizable = true; + destroy_on_click_out = true; + destroy_on_escape = false; panel = surface_create(dialog_w, dialog_h); mask_surface = noone; content = noone; - destroy_on_click_out = true; function setContent(content) { self.content = content; diff --git a/objects/o_dialog_preference/Create_0.gml b/objects/o_dialog_preference/Create_0.gml index 71573dda9..a18e5e122 100644 --- a/objects/o_dialog_preference/Create_0.gml +++ b/objects/o_dialog_preference/Create_0.gml @@ -2,8 +2,8 @@ event_inherited(); #region data - dialog_w = ui(900); - dialog_h = ui(640); + dialog_w = min(WIN_W - ui(16), ui(1000)); + dialog_h = min(WIN_H - ui(16), ui(700)); page_width = ui(160); destroy_on_click_out = true; @@ -20,7 +20,7 @@ event_inherited(); panel_width = dialog_w - ui(padding + padding) - page_width; panel_height = dialog_h - ui(title_height + padding); - hotkey_cont_h = ui(0); + hotkey_cont_h = ui(240); hotkey_height = panel_height - hotkey_cont_h - ui(32); onResize = function() /*=>*/ { @@ -639,9 +639,17 @@ event_inherited(); #region hotkey hk_editing = noone; + hk_modifiers = MOD_KEY.none; hotkeyContext = []; hotkeyArray = []; + hotkey_focus = noone; + hotkey_focus_highlight = noone; + hotkey_focus_high_bg = 0; + hotkey_focus_index = 0; + + keyboards_display = new KeyboardDisplay(); + for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) { var ctx = HOTKEY_CONTEXT[| j]; var _lst = []; @@ -676,14 +684,11 @@ event_inherited(); } array_push(hotkeyContext, { context: ctx, list: _lst }); - - var _title = ctx == ""? "Global" : ctx; - _title = string_replace_all(_title, "_", " "); - array_push(hotkeyArray, _title); + array_push(hotkeyArray, $" - {ctx}"); } hk_page = 0; - hk_scroll = new scrollBox(hotkeyArray, function(val) /*=>*/ { hk_page = val; }); + hk_scroll = new scrollBox(hotkeyArray, function(val) /*=>*/ { hk_page = val; sp_hotkey.scroll_y_to = 0; }); hk_scroll.align = fa_left; sp_hotkey = new scrollPane(panel_width, hotkey_height, function(_y, _m) { @@ -705,97 +710,91 @@ event_inherited(); var _hov = sHOVER && sp_hotkey.hover; var modified = false; - // for (var i = 0, n = array_length(hotkeyContext); i < n; i++) { - // var _ctxObj = hotkeyContext[i]; - var _ctxObj = hotkeyContext[hk_page]; - var _cntx = _ctxObj.context; - var _list = _ctxObj.list; - var _yy = yy + hh; + var _ctxObj = hotkeyContext[hk_page]; + var _cntx = _ctxObj.context; + var _list = _ctxObj.list; + var _yy = yy + hh; + + var _search = string_lower(search_text); + + for (var j = 0, m = array_length(_list); j < m; j++) { - // var _grlab = _cntx == ""? __txt("Global") : _cntx; - // draw_set_text(f_p1, fa_left, fa_top, COLORS._main_text_sub); - // draw_text_add(ui(8), _yy, _grlab); + var key = _list[j]; + var name = __txt(key.name); + var dk = key_get_name(key.key, key.modi); - // array_push(sect, [ _grlab, sp_hotkey, hh + ui(12) ]); - // if(_yy >= 0 && section_current == "") - // section_current = psect; - // psect = _grlab; + if(_search != "" && string_pos(_search, string_lower(name)) == 0 + && string_pos(_search, string_lower(dk)) == 0) + continue; - ind = 0; - // hh += string_height("l") + ui(8); + var pkey = key.key; + var modi = key.modi; + var _yy = yy + hh; + var _lb_y = _yy; - for (var j = 0, m = array_length(_list); j < m; j++) { + if(hotkey_focus == key) sp_hotkey.scroll_y_to = -hh; + + if(ind++ % 2 == 0) draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, _yy - padd, _ww, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); + if(hotkey_focus_highlight == key) draw_sprite_stretched_add(THEME.ui_panel, 0, 0, _yy - padd, _ww, th + padd * 2, COLORS._main_accent, min(1, hotkey_focus_high_bg) * .5); + + draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text); + draw_text_add(ui(24), _lb_y, name); + + var kw = string_width(dk); + + var tx = key_x1 - ui(24); + var bx = tx - kw - ui(8); + var by = _yy - ui(3); + var bw = kw + ui(16); + var bh = th + ui(6); + var cc = c_white; + + if(hk_editing == key) { + draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, COLORS._main_accent); + cc = COLORS._main_text_accent; - var key = _list[j]; - var name = __txt(key.name); - - if(search_text != "" && string_pos(string_lower(search_text), string_lower(name)) == 0) - continue; - - var pkey = key.key; - var modi = key.modi; - var _yy = yy + hh; - var _lb_y = _yy; - - if(ind++ % 2 == 0) draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, _yy - padd, _ww, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); - - draw_set_text(f_p2, fa_left, fa_top, COLORS._main_text); - draw_text_add(ui(24), _lb_y, name); - - var dk = key_get_name(key.key, key.modi); - var kw = string_width(dk); - - var tx = key_x1 - ui(24); - var bx = tx - kw - ui(8); - var by = _yy - ui(3); - var bw = kw + ui(16); - var bh = th + ui(6); - var cc = c_white; - - if(hk_editing == key) { - draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, COLORS._main_accent); - cc = COLORS._main_text_accent; + } else { + if(_hov && point_in_rectangle(_m[0], _m[1], bx, by, bx + bw, by + bh)) { + draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, CDEF.main_ltgrey); + sp_hotkey.hover_content = true; + cc = CDEF.main_white; + + if(mouse_press(mb_left, sFOCUS)) { + hk_editing = key; + keyboard_lastchar = pkey; + } } else { - if(_hov && point_in_rectangle(_m[0], _m[1], bx, by, bx + bw, by + bh)) { - draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, CDEF.main_ltgrey); - sp_hotkey.hover_content = true; - cc = CDEF.main_white; - - if(mouse_press(mb_left, sFOCUS)) { - hk_editing = key; - keyboard_lastchar = pkey; - } - - } else { - draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, CDEF.main_dkgrey, 1); - cc = CDEF.main_ltgrey; - } + draw_sprite_stretched_ext(THEME.ui_panel, 1, bx, by, bw, bh, CDEF.main_dkgrey, 1); + cc = CDEF.main_ltgrey; } - - draw_set_text(f_p2, fa_right, fa_top, cc); - draw_text_add(tx, _lb_y, dk); - - if(key.key != key.dKey || key.modi != key.dModi) { - modified = true; - var bx = x1 - ui(32); - var by = _yy + th / 2 - ui(12); - var b = buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, _hov, __txt("Reset"), THEME.refresh_16); - - if(b) sp_hotkey.hover_content = true; - if(b == 2) { - key.key = key.dKey; - key.modi = key.dModi; - - PREF_SAVE(); - } - } - - hh += th + padd * 2; } - // } + + draw_set_text(f_p2, fa_right, fa_top, cc); + draw_text_add(tx, _lb_y, dk); + + if(key.key != key.dKey || key.modi != key.dModi) { + modified = true; + var bx = _ww - ui(32); + var by = _yy + th / 2 - ui(12); + var b = buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, _hov, __txt("Reset"), THEME.refresh_16); + + if(b) sp_hotkey.hover_content = true; + if(b == 2) { + key.key = key.dKey; + key.modi = key.dModi; + + PREF_SAVE(); + } + } + + hh += th + padd * 2; + } + + hotkey_focus = noone; + hotkey_focus_high_bg = lerp_linear(hotkey_focus_high_bg, 0, DELTA_TIME); + if(hotkey_focus_high_bg == 0) hotkey_focus_highlight = noone; - // sections[page_current] = sect; if(hk_editing != noone) hotkey_editing(hk_editing); return hh + ui(32); @@ -917,9 +916,7 @@ event_inherited(); #endregion #region search - tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { - search_text = str; - }); + tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_text = str; }); tb_search.align = fa_left; search_text = ""; diff --git a/objects/o_dialog_preference/Draw_64.gml b/objects/o_dialog_preference/Draw_64.gml index 6f7b07158..d3af8fba7 100644 --- a/objects/o_dialog_preference/Draw_64.gml +++ b/objects/o_dialog_preference/Draw_64.gml @@ -96,6 +96,148 @@ if !ready exit; if(mouse_press(mb_left, sFOCUS)) hk_editing = noone; + var hk_w = panel_width; + var hk_h = hotkey_cont_h - ui(16); + var kdsp = keyboards_display; + var keys = keyboards_display.keys; + + var ks = min(hk_w / kdsp.width, hk_h / kdsp.height); + var _kww = ks * kdsp.width; + var _khh = ks * kdsp.height; + + var _ksx = px + hk_w / 2 - _kww / 2; + var _ksy = py + hk_h / 2 - _khh / 2; + var _kp = ui(2); + + var _keyUsing = {}; + var _ctxObj = hotkeyContext[hk_page]; + var _cntx = _ctxObj.context; + var _list = _ctxObj.list; + + for (var j = 0, m = array_length(_list); j < m; j++) { + + var _ky = _list[j]; + var _kkey = _ky.key; + var _kmod = _ky.modi; + + if(_kkey == noone && _kmod == MOD_KEY.none) continue; + + if(!struct_has(_keyUsing, _kkey)) + _keyUsing[$ _kkey] = {}; + + var _kuse = _keyUsing[$ _kkey]; + if(!struct_has(_kuse, _kmod)) + _kuse[$ _kmod] = []; + + array_append(_kuse[$ _kmod], _ky); + } + + var c_control = CDEF.orange, kc_control = colorMultiply(CDEF.main_dkgrey, c_control); + var c_shift = CDEF.blue, kc_shift = colorMultiply(CDEF.main_dkgrey, c_shift); + var c_alt = CDEF.lime, kc_alt = colorMultiply(CDEF.main_dkgrey, c_alt); + var _sel = true; + + var _mod_arr = [ + MOD_KEY.ctrl, MOD_KEY.shift, MOD_KEY.alt, + MOD_KEY.ctrl | MOD_KEY.shift, + MOD_KEY.ctrl | MOD_KEY.alt, + MOD_KEY.shift | MOD_KEY.alt, + MOD_KEY.ctrl | MOD_KEY.shift | MOD_KEY.alt, + ]; + + var _cur_mod = MOD_KEY.ctrl * key_mod_press(CTRL) + + MOD_KEY.shift * key_mod_press(SHIFT) + + MOD_KEY.alt * key_mod_press(ALT) + + var _cmod = _cur_mod == MOD_KEY.none? hk_modifiers : _cur_mod; + + draw_set_text(f_p4, fa_center, fa_center); + for (var i = 0, n = array_length(keys); i < n; i++) { + var _key = keys[i]; + var _kx = _ksx + _key.x * ks; + var _ky = _ksy + _key.y * ks; + var _kw = _key.w * ks; + var _kh = _key.h * ks; + var _vk = _key.vk; + + _kx += _kw / 2 - (_kw - _kp) / 2; + _ky += _kh / 2 - (_kh - _kp) / 2; + _kw -= _kp; + _kh -= _kp; + + if(_vk == -1) { + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, CDEF.main_black, 0.3); + continue; + } + + var _tc = CDEF.main_grey; + var _hov = sHOVER && point_in_rectangle(mouse_mx, mouse_my, _kx - _kp, _ky - _kp, _kx + _kw + _kp - 1, _ky + _kh + _kp - 1); + + if(_vk == vk_control) { + _sel = bool(MOD_KEY.ctrl & _cmod); + + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, _sel? c_control : kc_control); + _tc = _sel? kc_control : c_control; + + if(mouse_press(mb_left, sFOCUS && _hov)) hk_modifiers ^= MOD_KEY.ctrl; + + } else if(_vk == vk_shift) { + _sel = bool(MOD_KEY.shift & _cmod); + + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, _sel? c_shift : kc_shift); + _tc = _sel? kc_shift : c_shift; + + if(mouse_press(mb_left, sFOCUS && _hov)) hk_modifiers ^= MOD_KEY.shift; + + } else if(_vk == vk_alt) { + _sel = bool(MOD_KEY.alt & _cmod); + + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, _sel? c_alt : kc_alt); + _tc = _sel? kc_alt : c_alt; + + if(mouse_press(mb_left, sFOCUS && _hov)) hk_modifiers ^= MOD_KEY.alt; + + } else if(struct_has(_keyUsing, _vk) && struct_has(_keyUsing[$ _vk], _cmod)) { + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, CDEF.main_ltgrey); + draw_sprite_stretched_add(THEME.ui_panel, 1, _kx, _ky, _kw, _kh, c_white, 0.1); + _tc = CDEF.main_mdblack; + + var _act = _keyUsing[$ _vk][$ _cmod]; + + if(_hov) { + TOOLTIP = new tooltipHotkey_assign(_act, key_get_name(_vk, _cmod)); + + if(mouse_press(mb_left, sFOCUS)) { + if(hotkey_focus_index >= array_length(_act)) + hotkey_focus_index = 0; + + hotkey_focus = _act[hotkey_focus_index]; + hotkey_focus_highlight = _act[hotkey_focus_index]; + hotkey_focus_high_bg = 1; + + hotkey_focus_index++; + } + } + + } else { + draw_sprite_stretched_ext(THEME.ui_panel, 0, _kx, _ky, _kw, _kh, CDEF.main_black); + _tc = CDEF.main_grey; + + if(_hov) { + TOOLTIP = new tooltipHotkey_assign(noone, key_get_name(_vk, _cmod)); + } + } + + draw_sprite_stretched_add(THEME.ui_panel, 1, _kx, _ky, _kw, _kh, c_white, 0.1 + _hov * 0.2); + + if(is_string(_key.key)) { + draw_set_color(_tc); + draw_set_alpha(1); + draw_text(_kx + _kw / 2, _ky + _kh / 2, _key.key); + } + + } + var _ppy = py + hotkey_cont_h; hk_scroll.font = f_p2; diff --git a/objects/o_dialog_scrollbox/Destroy_0.gml b/objects/o_dialog_scrollbox/Destroy_0.gml index f9f12dc0c..668fbafe2 100644 --- a/objects/o_dialog_scrollbox/Destroy_0.gml +++ b/objects/o_dialog_scrollbox/Destroy_0.gml @@ -3,4 +3,6 @@ event_inherited(); if(initVal > -1) scrollbox.onModify(initVal); -scrollbox.open = false; \ No newline at end of file +scrollbox.open = false; + +if(FOCUS == noone && instance_number(o_dialog_scrollbox_horizontal) == 1) FOCUS = FOCUS_BEFORE; \ No newline at end of file diff --git a/objects/o_dialog_scrollbox_horizontal/Destroy_0.gml b/objects/o_dialog_scrollbox_horizontal/Destroy_0.gml index f9f12dc0c..d867400e7 100644 --- a/objects/o_dialog_scrollbox_horizontal/Destroy_0.gml +++ b/objects/o_dialog_scrollbox_horizontal/Destroy_0.gml @@ -3,4 +3,6 @@ event_inherited(); if(initVal > -1) scrollbox.onModify(initVal); -scrollbox.open = false; \ No newline at end of file +scrollbox.open = false; + +if(FOCUS == noone && instance_number(o_dialog_scrollbox) == 1) FOCUS = FOCUS_BEFORE; \ No newline at end of file diff --git a/objects/o_main/Step_0.gml b/objects/o_main/Step_0.gml index 20203d2a9..7f5a37cba 100644 --- a/objects/o_main/Step_0.gml +++ b/objects/o_main/Step_0.gml @@ -27,27 +27,23 @@ if(PROJECT.active && !PROJECT.safeMode) { //node step if(!instance_exists(o_dialog_preference) && !HOTKEY_BLOCK) { if(ds_map_exists(HOTKEYS, "")) { var l = HOTKEYS[? ""]; - for(var i = 0; i < ds_list_size(l); i++) { + for(var i = 0, n = ds_list_size(l); i < n; i++) { var hotkey = l[| i]; if(hotkey.key == 0 && hotkey.modi == MOD_KEY.none) continue; - if(key_press(hotkey.key, hotkey.modi)) { + if(key_press(hotkey.key, hotkey.modi)) hotkey.action(); - break; - } } } if(ds_map_exists(HOTKEYS, FOCUS_STR)) { var list = HOTKEYS[? FOCUS_STR]; - for(var i = 0; i < ds_list_size(list); i++) { - var hotkey = list[| i]; + for(var i = 0, n = ds_list_size(list); i < n; i++) { + var hotkey = list[| i]; if(hotkey.key == 0 && hotkey.modi == MOD_KEY.none) continue; - - if(key_press(hotkey.key, hotkey.modi)) { + + if(key_press(hotkey.key, hotkey.modi)) hotkey.action(); - break; - } } } } diff --git a/scripts/__panel_linear_setting/__panel_linear_setting.gml b/scripts/__panel_linear_setting/__panel_linear_setting.gml index 7640148d1..3bd0f98b4 100644 --- a/scripts/__panel_linear_setting/__panel_linear_setting.gml +++ b/scripts/__panel_linear_setting/__panel_linear_setting.gml @@ -1,10 +1,11 @@ -function __Panel_Linear_Setting_Item(name, editWidget, data, onEdit = noone, getDefault = noone) constructor { +function __Panel_Linear_Setting_Item(name, editWidget, data, onEdit = noone, getDefault = noone, action = noone) constructor { self.name = name; self.editWidget = editWidget; self.data = data; self.onEdit = onEdit; self.getDefault = getDefault; + self.action = action == noone? noone : struct_try_get(FUNCTIONS, string_to_var2(action[0], action[1]), noone); self.is_patreon = false; @@ -27,21 +28,24 @@ function __Panel_Linear_Setting_Label(name, sprite, _index = 0, _color = c_white } function Panel_Linear_Setting() : PanelContent() constructor { - title = __txtx("preview_3d_settings", "3D Preview Settings"); - - w = ui(400); + title = __txt("Settings"); + w = ui(400); + wdgw = ui(180); bg_y = -1; bg_y_to = -1; - bg_a = 0; + bg_a = 0; + + hk_editing = noone; + selecting_menu = noone; + properties = []; - properties = [] static setHeight = function() { h = ui(12 + 36 * array_length(properties)); } static drawSettings = function(panel) { var yy = ui(24); var th = ui(36); - var ww = w - ui(180); + var ww = wdgw; var wh = TEXTBOX_HEIGHT; var _hov = false; @@ -75,8 +79,6 @@ function Panel_Linear_Setting() : PanelContent() constructor { _widg.setFocusHover(pFOCUS, pHOVER); _widg.register(); - //if(i % 2) draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, ui(4), yy - th / 2, w - ui(8), th, COLORS.panel_prop_bg, 0.25); - if(pHOVER && point_in_rectangle(mx, my, 0, yy - th / 2, w, yy + th / 2)) { bg_y_to = yy - th / 2; _hov = true; @@ -99,6 +101,50 @@ function Panel_Linear_Setting() : PanelContent() constructor { _widg.drawParam(params); + if(_prop.action != noone) { + var _key = _prop.action.hotkey; + + if(_hov && !_widg.inBBOX([ mx, my ]) && mouse_press(mb_right)) { + selecting_menu = _key; + + var context_menu_settings = [ + _key.full_name(), + menuItem(__txt("Edit hotkey"), function() /*=>*/ { hk_editing = selecting_menu; keyboard_lastchar = hk_editing.key; }), + ]; + + menuCall("", context_menu_settings); + } + + + if(_key) { + draw_set_font(f_p1); + + var _ktxt = key_get_name(_key.key, _key.modi); + var _tw = string_width(_ktxt); + var _th = line_get_height(); + + var _hx = _x1 - ww - ui(16); + var _hy = yy + ui(2); + + var _bx = _hx - _tw - ui(4); + var _by = _hy - _th / 2 - ui(3); + var _bw = _tw + ui(8); + var _bh = _th + ui(3); + + if(hk_editing == _key) { + draw_set_text(f_p1, fa_right, fa_center, COLORS._main_accent); + draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, COLORS._main_text_accent); + + } else if(_ktxt != "") { + draw_set_text(f_p1, fa_right, fa_center, COLORS._main_text_sub); + draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, CDEF.main_dkgrey); + } + + draw_text(_hx, _hy, _ktxt); + } + + } + if(_prop.getDefault != noone) { var _defVal = is_method(_prop.getDefault)? _prop.getDefault() : _prop.getDefault; var _bs = ui(32); @@ -122,6 +168,13 @@ function Panel_Linear_Setting() : PanelContent() constructor { if(bg_y == -1) bg_y = bg_y_to; else bg_y = lerp_float(bg_y, bg_y_to, 2); + + if(hk_editing != noone) { + if(keyboard_check_pressed(vk_enter)) hk_editing = noone; + else hotkey_editing(hk_editing); + + if(keyboard_check_pressed(vk_escape)) hk_editing = noone; + } } function drawContent(panel) { drawSettings(panel); } diff --git a/scripts/contextMenu_controller/contextMenu_controller.gml b/scripts/contextMenu_controller/contextMenu_controller.gml index da0401083..ab87070ca 100644 --- a/scripts/contextMenu_controller/contextMenu_controller.gml +++ b/scripts/contextMenu_controller/contextMenu_controller.gml @@ -62,7 +62,6 @@ function fileNameCall(path, onModify, _x = mouse_mx + 8, _y = mouse_my + 8) { } function menuItem(name, func, spr = noone, hotkey = noone, toggle = noone, params = {}) { return new MenuItem(name, func, spr, hotkey, toggle, params); } -function menuItemAction(name, func, spr = noone, toggle = noone) { return new MenuItem(name, func, spr, struct_try_get(ACTION_MAP, func, noone), toggle); } function MenuItem(_name, _func, _spr = noone, _hotkey = noone, _toggle = noone, _params = {}) constructor { active = true; diff --git a/scripts/function_register/function_register.gml b/scripts/function_register/function_register.gml index 6bde8f40c..38ec291a8 100644 --- a/scripts/function_register/function_register.gml +++ b/scripts/function_register/function_register.gml @@ -11,11 +11,10 @@ } function __fnInit() { - globalvar CMD_FUNCTIONS, ACTION_MAP, MENU_ITEMS, FUNCTIONS; + globalvar CMD_FUNCTIONS, MENU_ITEMS, FUNCTIONS; FUNCTIONS = {}; CMD_FUNCTIONS = {}; - ACTION_MAP = {}; MENU_ITEMS = {}; __fnInit_Global(); @@ -43,13 +42,11 @@ function functionObject(_context, _name, _key, _mod, _action) constructor { action = _action; hide = false; - fnName = _context == ""? _name : $"{_context} {_name}"; - fnName = string_to_var(fnName); - menu = noone; + fnName = string_to_var2(_context, _name); + menu = noone; FUNCTIONS[$ fnName] = self; CMD_FUNCTIONS[$ fnName] = { action: _action, args: [] }; - ACTION_MAP[$ _action] = [ _context, _name ]; static setArg = function(_args = []) { CMD_FUNCTIONS[$ fnName] = { action, args: _args }; @@ -57,7 +54,7 @@ function functionObject(_context, _name, _key, _mod, _action) constructor { } static setMenuAlt = function(_name, _id, _spr = noone, shelf = false) { - menu = menuItemAction(__txt(_name), action, _spr); + menu = menuItem(__txt(_name), action, _spr, [ context, name ]); if(shelf) menu.setIsShelf(); MENU_ITEMS[$ _id] = menu; @@ -65,7 +62,7 @@ function functionObject(_context, _name, _key, _mod, _action) constructor { } static setMenu = function(_id, _spr = noone, shelf = false) { - menu = menuItemAction(__txt(name), action, _spr); + menu = menuItem(__txt(name), action, _spr, [ context, name ]); if(shelf) menu.setIsShelf(); MENU_ITEMS[$ _id] = menu; diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index 41af05d05..0ee3306fc 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -39,7 +39,7 @@ LATEST_VERSION = 11700; VERSION = 11790; SAVE_VERSION = 11700; - VERSION_STRING = "1.17.10.005"; + VERSION_STRING = "1.17.10.006"; BUILD_NUMBER = 11790; HOTKEYS = ds_map_create(); diff --git a/scripts/hotkey_data/hotkey_data.gml b/scripts/hotkey_data/hotkey_data.gml index 82ad644c6..42cd5165f 100644 --- a/scripts/hotkey_data/hotkey_data.gml +++ b/scripts/hotkey_data/hotkey_data.gml @@ -165,14 +165,13 @@ function find_hotkey(_context, _name) { } function hotkey_editing(hotkey) { - HOTKEY_BLOCK = true; - static vk_list = [ vk_left, vk_right, vk_up, vk_down, vk_space, vk_backspace, vk_tab, vk_home, vk_end, vk_delete, vk_insert, vk_pageup, vk_pagedown, vk_pause, vk_printscreen, vk_f1, vk_f2, vk_f3, vk_f4, vk_f5, vk_f6, vk_f7, vk_f8, vk_f9, vk_f10, vk_f11, vk_f12, ]; + HOTKEY_BLOCK = true; var _mod_prs = 0; if(keyboard_check(vk_control)) _mod_prs |= MOD_KEY.ctrl; @@ -188,7 +187,7 @@ function hotkey_editing(hotkey) { } else if(keyboard_check_pressed(vk_anykey)) { hotkey.modi = _mod_prs; hotkey.key = 0; - var press = false; + var press = false; for(var a = 0; a < array_length(vk_list); a++) { if(!keyboard_check_pressed(vk_list[a])) continue; @@ -198,8 +197,9 @@ function hotkey_editing(hotkey) { } if(!press) { - var k = ds_map_find_first(global.KEY_STRING_MAP); + var k = ds_map_find_first(global.KEY_STRING_MAP); var amo = ds_map_size(global.KEY_STRING_MAP); + repeat(amo) { if(!keyboard_check_pressed(k)) { k = ds_map_find_next(global.KEY_STRING_MAP, k); diff --git a/scripts/key_press/key_press.gml b/scripts/key_press/key_press.gml index 3cecced38..51e77564c 100644 --- a/scripts/key_press/key_press.gml +++ b/scripts/key_press/key_press.gml @@ -1,4 +1,11 @@ #region key map + enum MOD_KEY { + none = 0, + ctrl = 1 << 0, + shift = 1 << 1, + alt = 1 << 2 + } + global.KEY_STRING_MAP = ds_map_create(); global.KEY_STRING_MAP[? 0] = "" @@ -40,10 +47,10 @@ global.KEY_STRING_MAP[? 89] = "Y" global.KEY_STRING_MAP[? 90] = "Z" - global.KEY_STRING_MAP[? 96] = "Num 0" - global.KEY_STRING_MAP[? 97] = "Num 1" - global.KEY_STRING_MAP[? 98] = "Num 2" - global.KEY_STRING_MAP[? 99] = "Num 3" + global.KEY_STRING_MAP[? 96] = "Num 0" + global.KEY_STRING_MAP[? 97] = "Num 1" + global.KEY_STRING_MAP[? 98] = "Num 2" + global.KEY_STRING_MAP[? 99] = "Num 3" global.KEY_STRING_MAP[? 100] = "Num 4" global.KEY_STRING_MAP[? 101] = "Num 5" global.KEY_STRING_MAP[? 102] = "Num 6" @@ -95,34 +102,34 @@ if(_mod & MOD_KEY.shift) dk += "Shift+"; if(_mod & MOD_KEY.alt) dk += "Alt+"; - switch(_key) { - case vk_space : dk += "Space"; break; - case vk_left : dk += "Left"; break; - case vk_right : dk += "Right"; break; - case vk_up : dk += "Up"; break; - case vk_down : dk += "Down"; break; - case vk_backspace : dk += "Backspace"; break; - case vk_tab : dk += "Tab"; break; - case vk_home : dk += "Home"; break; - case vk_end : dk += "End"; break; - case vk_delete : dk += "Delete"; break; - case vk_insert : dk += "Insert"; break; - case vk_pageup : dk += "Page Up"; break; - case vk_pagedown : dk += "Page Down"; break; - case vk_pause : dk += "Pause"; break; - case vk_printscreen : dk += "Printscreen"; break; - case vk_f1 : dk += "F1"; break; - case vk_f2 : dk += "F2"; break; - case vk_f3 : dk += "F3"; break; - case vk_f4 : dk += "F4"; break; - case vk_f5 : dk += "F5"; break; - case vk_f6 : dk += "F6"; break; - case vk_f7 : dk += "F7"; break; - case vk_f8 : dk += "F8"; break; - case vk_f9 : dk += "F9"; break; - case vk_f10 : dk += "F10"; break; - case vk_f11 : dk += "F11"; break; - case vk_f12 : dk += "F12"; break; + switch(_key) { + case vk_space : dk += "Space"; break; + case vk_left : dk += "Left"; break; + case vk_right : dk += "Right"; break; + case vk_up : dk += "Up"; break; + case vk_down : dk += "Down"; break; + case vk_backspace : dk += "Backspace"; break; + case vk_tab : dk += "Tab"; break; + case vk_home : dk += "Home"; break; + case vk_end : dk += "End"; break; + case vk_delete : dk += "Delete"; break; + case vk_insert : dk += "Insert"; break; + case vk_pageup : dk += "Page Up"; break; + case vk_pagedown : dk += "Page Down"; break; + case vk_pause : dk += "Pause"; break; + case vk_printscreen : dk += "Printscreen"; break; + case vk_f1 : dk += "F1"; break; + case vk_f2 : dk += "F2"; break; + case vk_f3 : dk += "F3"; break; + case vk_f4 : dk += "F4"; break; + case vk_f5 : dk += "F5"; break; + case vk_f6 : dk += "F6"; break; + case vk_f7 : dk += "F7"; break; + case vk_f8 : dk += "F8"; break; + case vk_f9 : dk += "F9"; break; + case vk_f10 : dk += "F10"; break; + case vk_f11 : dk += "F11"; break; + case vk_f12 : dk += "F12"; break; default : if(ds_map_exists(global.KEY_STRING_MAP, _key)) @@ -139,13 +146,6 @@ } #endregion -enum MOD_KEY { - none = 0, - ctrl = 1 << 0, - shift = 1 << 1, - alt = 1 << 2 -} - function key_press(_key, _mod = MOD_KEY.none) { if(WIDGET_CURRENT) return false; if(_mod == MOD_KEY.none && _key == noone) return false; diff --git a/scripts/keyboard_display/keyboard_display.gml b/scripts/keyboard_display/keyboard_display.gml new file mode 100644 index 000000000..c894e6d41 --- /dev/null +++ b/scripts/keyboard_display/keyboard_display.gml @@ -0,0 +1,137 @@ +function KeyboardDisplayLayout_Key(_key, _vk, _x, _y, _w = 1, _h = 1) constructor { + key = _key; + vk = _vk; + x = _x; + y = _y; + w = _w; + h = _h; +} + +function KeyboardDisplay() constructor { + __key = function(_key, _vk, _x, _y, _w = 1, _h = 1) /*=>*/ { return new KeyboardDisplayLayout_Key(_key, _vk, _x, _y, _w, _h); } + + keys = [ + __key( "Esc", -1, 0, 0), + __key( "F1", vk_f1, 2, 0), + __key( "F2", vk_f2, 3, 0), + __key( "F3", vk_f3, 4, 0), + __key( "F4", vk_f4, 5, 0), + __key( "F5", vk_f5, 6.5, 0), + __key( "F6", vk_f6, 7.5, 0), + __key( "F7", vk_f7, 8.5, 0), + __key( "F8", vk_f8, 9.5, 0), + __key( "F9", vk_f9, 11, 0), + __key( "F10", vk_f10, 12, 0), + __key( "F11", vk_f11, 13, 0), + __key( "F12", vk_f12, 14, 0), //15 + + __key( "`", 192, 0, 1.1), + __key( "1", ord("1"), 1, 1.1), + __key( "2", ord("2"), 2, 1.1), + __key( "3", ord("3"), 3, 1.1), + __key( "4", ord("4"), 4, 1.1), + __key( "5", ord("5"), 5, 1.1), + __key( "6", ord("6"), 6, 1.1), + __key( "7", ord("7"), 7, 1.1), + __key( "8", ord("8"), 8, 1.1), + __key( "9", ord("9"), 9, 1.1), + __key( "0", ord("0"), 10, 1.1), + __key( "-", 189, 11, 1.1), + __key( "=", 187, 12, 1.1), + __key( "bsp", vk_backspace, 13, 1.1, 2), //15 + + __key( "Tab", vk_tab, 0, 2.1, 1.5), + __key( "Q", ord("Q"), 1.5, 2.1), + __key( "W", ord("W"), 2.5, 2.1), + __key( "E", ord("E"), 3.5, 2.1), + __key( "R", ord("R"), 4.5, 2.1), + __key( "T", ord("T"), 5.5, 2.1), + __key( "Y", ord("Y"), 6.5, 2.1), + __key( "U", ord("U"), 7.5, 2.1), + __key( "I", ord("I"), 8.5, 2.1), + __key( "O", ord("O"), 9.5, 2.1), + __key( "P", ord("P"), 10.5, 2.1), + __key( "[", 219, 11.5, 2.1), + __key( "]", 221, 12.5, 2.1), + __key( "\\", 220, 13.5, 2.1, 1.5), + + __key( "Caps", -1, 0, 3.1, 2), + __key( "A", ord("A"), 2, 3.1), + __key( "S", ord("S"), 3, 3.1), + __key( "D", ord("D"), 4, 3.1), + __key( "F", ord("F"), 5, 3.1), + __key( "G", ord("G"), 6, 3.1), + __key( "H", ord("H"), 7, 3.1), + __key( "J", ord("J"), 8, 3.1), + __key( "K", ord("K"), 9, 3.1), + __key( "L", ord("L"), 10, 3.1), + __key( ";", 186, 11, 3.1), + __key( "'", 222, 12, 3.1), + __key( "Enter", -1, 13, 3.1, 2), + + __key( "Shift", vk_shift, 0, 4.1, 2.5), + __key( "Z", ord("Z"), 2.5, 4.1), + __key( "X", ord("X"), 3.5, 4.1), + __key( "C", ord("C"), 4.5, 4.1), + __key( "V", ord("V"), 5.5, 4.1), + __key( "B", ord("B"), 6.5, 4.1), + __key( "N", ord("N"), 7.5, 4.1), + __key( "M", ord("M"), 8.5, 4.1), + __key( ",", 188, 9.5, 4.1), + __key( ".", 190, 10.5, 4.1), + __key( "/", 191, 11.5, 4.1), + __key( "Shift", vk_shift, 12.5, 4.1, 2.5), + + __key( "Ctrl", vk_control, 0, 5.1), + __key( "Win", -1, 1, 5.1), + __key( "Alt", vk_alt, 2, 5.1), + __key( "", vk_space, 3, 5.1, 8), + __key( "Alt", vk_alt, 11, 5.1), + __key( "Win", -1, 12, 5.1), + __key( "Fn", -1, 13, 5.1), + __key( "Ctrl", vk_control, 14, 5.1), + + ////////////////////////////////////////////////////// + + __key( "Ins", vk_insert, 15.1, 1.1), + __key( "Home", vk_home, 16.1, 1.1), + __key( "PgUp", vk_pageup, 17.1, 1.1), + + __key( "Del", vk_delete, 15.1, 2.1), + __key( "End", vk_end, 16.1, 2.1), + __key( "PgDn", vk_pagedown, 17.1, 2.1), + + __key( "Up", vk_up, 16.1, 4.1), + __key( "Left", vk_left, 15.1, 5.1), + __key( "Down", vk_down, 16.1, 5.1), + __key( "Right", vk_right, 17.1, 5.1), + + ////////////////////////////////////////////////////// + + __key( "Num", -1, 18.2, 1.1), + __key( "/", vk_divide, 19.2, 1.1), + __key( "*", vk_multiply, 20.2, 1.1), + __key( "-", vk_subtract, 21.2, 1.1), + + __key( "7", vk_numpad7, 18.2, 2.1), + __key( "8", vk_numpad8, 19.2, 2.1), + __key( "9", vk_numpad9, 20.2, 2.1), + __key( "+", vk_add, 21.2, 2.1, 1, 2), + + __key( "4", vk_numpad4, 18.2, 3.1), + __key( "5", vk_numpad5, 19.2, 3.1), + __key( "6", vk_numpad6, 20.2, 3.1), + + __key( "1", vk_numpad1, 18.2, 4.1), + __key( "2", vk_numpad2, 19.2, 4.1), + __key( "3", vk_numpad3, 20.2, 4.1), + __key( "Enter", -1, 21.2, 4.1, 1, 2), + + __key( "0", vk_numpad0, 18.2, 5.1, 2), + __key( ".", vk_decimal, 20.2, 5.1), + + ]; + + width = 22.2; + height = 6.1; +} \ No newline at end of file diff --git a/scripts/keyboard_display/keyboard_display.yy b/scripts/keyboard_display/keyboard_display.yy new file mode 100644 index 000000000..8836bb2bf --- /dev/null +++ b/scripts/keyboard_display/keyboard_display.yy @@ -0,0 +1,13 @@ +{ + "$GMScript":"", + "%Name":"keyboard_display", + "isCompatibility":false, + "isDnD":false, + "name":"keyboard_display", + "parent":{ + "name":"inputs", + "path":"folders/functions/inputs.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", +} \ No newline at end of file diff --git a/scripts/load_function/load_function.gml b/scripts/load_function/load_function.gml index 3e467191d..55f713983 100644 --- a/scripts/load_function/load_function.gml +++ b/scripts/load_function/load_function.gml @@ -160,7 +160,9 @@ function LOAD_AT(path, params = new __loadParams()) { #region if(struct_has(_load_content, "nodes")) { try { var _node_list = _load_content.nodes; + for(var i = 0, n = array_length(_node_list); i < n; i++) { + var _node = nodeLoad(_node_list[i]); if(_node) array_push(create_list, _node); } diff --git a/scripts/node_path_shift/node_path_shift.gml b/scripts/node_path_shift/node_path_shift.gml index 67f5d259c..796715942 100644 --- a/scripts/node_path_shift/node_path_shift.gml +++ b/scripts/node_path_shift/node_path_shift.gml @@ -11,7 +11,7 @@ function Node_Path_Shift(_x, _y, _group = noone) : Node(_x, _y, _group) construc cached_pos = ds_map_create(); - static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region + static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { var _path = getInputData(0); if(_path && struct_has(_path, "drawOverlay")) _path.drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); @@ -35,29 +35,29 @@ function Node_Path_Shift(_x, _y, _group = noone) : Node(_x, _y, _group) construc oy = ny; } } - } #endregion + } - static getLineCount = function() { #region + static getLineCount = function() { var _path = getInputData(0); return struct_has(_path, "getLineCount")? _path.getLineCount() : 1; - } #endregion + } - static getSegmentCount = function(ind = 0) { #region + static getSegmentCount = function(ind = 0) { var _path = getInputData(0); return struct_has(_path, "getSegmentCount")? _path.getSegmentCount(ind) : 0; - } #endregion + } - static getLength = function(ind = 0) { #region + static getLength = function(ind = 0) { var _path = getInputData(0); return struct_has(_path, "getLength")? _path.getLength(ind) : 0; - } #endregion + } - static getAccuLength = function(ind = 0) { #region + static getAccuLength = function(ind = 0) { var _path = getInputData(0); return struct_has(_path, "getAccuLength")? _path.getAccuLength(ind) : []; - } #endregion + } - static getPointRatio = function(_rat, ind = 0, out = undefined) { #region + static getPointRatio = function(_rat, ind = 0, out = undefined) { if(out == undefined) out = new __vec2(); else { out.x = 0; out.y = 0; } var _cKey = $"{_rat},{ind}"; @@ -91,22 +91,22 @@ function Node_Path_Shift(_x, _y, _group = noone) : Node(_x, _y, _group) construc cached_pos[? _cKey] = out.clone(); return out; - } #endregion + } static getPointDistance = function(_dist, ind = 0, out = undefined) { return getPointRatio(_dist / getLength(), ind, out); } - static getBoundary = function(ind = 0) { #region + static getBoundary = function(ind = 0) { var _path = getInputData(0); return struct_has(_path, "getBoundary")? _path.getBoundary(ind) : new BoundingBox( 0, 0, 1, 1 ); - } #endregion + } - static update = function() { #region + static update = function() { ds_map_clear(cached_pos); outputs[0].setValue(self); - } #endregion + } - static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { var bbox = drawGetBbox(xx, yy, _s); draw_sprite_fit(s_node_path_shift, 0, bbox.xc, bbox.yc, bbox.w, bbox.h); - } #endregion + } } \ No newline at end of file diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 2e5657e6e..35d60974a 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -11,6 +11,7 @@ function nodeValueSeed(_node, _type) { } function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constructor { + static DISPLAY_DATA_KEYS = [ "linked", "angle_display", "bone_id", "unit", "atlas_crop" ]; #region ---- main ---- @@ -102,7 +103,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru #endregion #region ---- value ---- - def_val = variable_clone(_value); + + def_val = array_clone(_value); def_length = is_array(def_val)? array_length(def_val) : 0; def_depth = array_get_depth(def_val); unit = new nodeValueUnit(self); @@ -537,7 +539,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru return self; } - static resetDisplay = function() { #region //////////////////// RESET DISPLAY //////////////////// + static resetDisplay = function() { + editWidget = noone; switch(display_type) { case VALUE_DISPLAY.button : #region @@ -807,7 +810,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extract_node = "Node_Boolean"; break; #endregion - case VALUE_TYPE.color : #region + case VALUE_TYPE.color : switch(display_type) { case VALUE_DISPLAY._default : editWidget = new buttonColor(function(color) { return setValueInspector(color); } ); @@ -822,15 +825,15 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extract_node = "Node_Palette"; break; } - break; #endregion + break; - case VALUE_TYPE.gradient : #region + case VALUE_TYPE.gradient : editWidget = new buttonGradient(function(gradient) { return setValueInspector(gradient); } ); extract_node = "Node_Gradient_Out"; - break; #endregion + break; - case VALUE_TYPE.path : #region + case VALUE_TYPE.path : switch(display_type) { case VALUE_DISPLAY.path_array : editWidget = new pathArrayBox(self, display_data.filter, function(path) { setValueInspector(path); } ); @@ -868,14 +871,14 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru editWidget = new fontScrollBox( function(val) { return setValueInspector(FONT_INTERNAL[val]); } ); break; } - break; #endregion + break; - case VALUE_TYPE.curve : #region + case VALUE_TYPE.curve : display_type = VALUE_DISPLAY.curve; editWidget = new curveBox(function(_modified) { return setValueInspector(_modified); }); - break; #endregion + break; - case VALUE_TYPE.text : #region + case VALUE_TYPE.text : switch(display_type) { case VALUE_DISPLAY._default : editWidget = new textArea(TEXTBOX_INPUT.text, function(str) { return setValueInspector(str); }); @@ -922,9 +925,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru editWidget = new textArrayBox(function() { return animator.values[0].value; }, display_data.data, function() { node.doUpdate(); }); break; } - break; #endregion + break; - case VALUE_TYPE.d3Material : #region + case VALUE_TYPE.d3Material : editWidget = new materialBox(function(ind) { var res = setValueInspector(ind); node.triggerRender(); @@ -934,19 +937,19 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru if(!struct_has(display_data, "atlas")) display_data.atlas = true; show_in_inspector = true; extract_node = "Node_Canvas"; - break; #endregion + break; - case VALUE_TYPE.surface : #region + case VALUE_TYPE.surface : editWidget = new surfaceBox(function(ind) { return setValueInspector(ind); } ); if(!struct_has(display_data, "atlas")) display_data.atlas = true; show_in_inspector = true; extract_node = "Node_Canvas"; - break; #endregion + break; - case VALUE_TYPE.pathnode : #region + case VALUE_TYPE.pathnode : extract_node = "Node_Path"; - break; #endregion + break; } if(is_struct(display_data) && struct_has(display_data, "side_button") && editWidget.side_button == noone) @@ -961,7 +964,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } setDropKey(); - } resetDisplay(); #endregion + } + + resetDisplay(); /////============ RENDER ============ @@ -2276,6 +2281,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru static cleanUp = function() {} static toString = function() { return (connect_type == JUNCTION_CONNECT.input? "Input" : "Output") + $" junction {index} of [{name}]: {node}"; } + } /////========== FUNCTIONS ========== diff --git a/scripts/node_value_color/node_value_color.gml b/scripts/node_value_color/node_value_color.gml index a620cb5e5..2e27b547f 100644 --- a/scripts/node_value_color/node_value_color.gml +++ b/scripts/node_value_color/node_value_color.gml @@ -9,7 +9,10 @@ function NodeValue_Color(_name, _node, _value, _tooltip = "") : NodeValue(_name, var val = __curr_get_val[0]; var nod = __curr_get_val[1]; - return val >= 1? cola(val) : make_color_rgb(val * 255, val * 255, val * 255); + return val; + + if(nod.type == VALUE_TYPE.integer || nod.type == VALUE_TYPE.float) + return val >= 1? cola(val) : make_color_rgb(val * 255, val * 255, val * 255); } static __getAnimValue = function(_time = CURRENT_FRAME) { diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 28718e078..9ba87cdac 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -1,64 +1,71 @@ -#region // function calls - function panel_graph_add_node() { CALL("graph_add_node"); PANEL_GRAPH.callAddDialog(); } - function panel_graph_focus_content() { CALL("graph_focus_content"); PANEL_GRAPH.fullView(); } - function panel_graph_preview_focus() { CALL("graph_preview_focus"); PANEL_GRAPH.setCurrentPreview(); } +#region function calls + #macro PANEL_GRAPH_PROJECT_CHECK if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - function panel_graph_import_image() { CALL("graph_import_image"); PANEL_GRAPH.createNodeHotkey("Node_Image"); } - function panel_graph_import_image_array() { CALL("graph_import_image_array"); PANEL_GRAPH.createNodeHotkey("Node_Image_Sequence"); } - function panel_graph_add_number() { CALL("graph_add_number"); PANEL_GRAPH.createNodeHotkey("Node_Number"); } - function panel_graph_add_vec2() { CALL("graph_add_vec2"); PANEL_GRAPH.createNodeHotkey("Node_Vector2"); } - function panel_graph_add_vec3() { CALL("graph_add_vec3"); PANEL_GRAPH.createNodeHotkey("Node_Vector3"); } - function panel_graph_add_vec4() { CALL("graph_add_vec4"); PANEL_GRAPH.createNodeHotkey("Node_Vector4"); } - function panel_graph_add_display() { CALL("graph_add_disp"); PANEL_GRAPH.createNodeHotkey("Node_Display_Text"); } + function panel_graph_add_node() { CALL("graph_add_node"); PANEL_GRAPH.callAddDialog(); } + function panel_graph_focus_content() { CALL("graph_focus_content"); PANEL_GRAPH.fullView(); } + function panel_graph_preview_focus() { CALL("graph_preview_focus"); PANEL_GRAPH.setCurrentPreview(); } - function panel_graph_add_math_add() { CALL("graph_add_math_add"); PANEL_GRAPH.createNodeHotkey(Node_create_Math, { query: "add" }); } + function panel_graph_import_image() { CALL("graph_import_image"); PANEL_GRAPH.createNodeHotkey("Node_Image"); } + function panel_graph_import_image_array() { CALL("graph_import_image_array"); PANEL_GRAPH.createNodeHotkey("Node_Image_Sequence"); } + function panel_graph_add_number() { CALL("graph_add_number"); PANEL_GRAPH.createNodeHotkey("Node_Number"); } + function panel_graph_add_vec2() { CALL("graph_add_vec2"); PANEL_GRAPH.createNodeHotkey("Node_Vector2"); } + function panel_graph_add_vec3() { CALL("graph_add_vec3"); PANEL_GRAPH.createNodeHotkey("Node_Vector3"); } + function panel_graph_add_vec4() { CALL("graph_add_vec4"); PANEL_GRAPH.createNodeHotkey("Node_Vector4"); } + function panel_graph_add_display() { CALL("graph_add_disp"); PANEL_GRAPH.createNodeHotkey("Node_Display_Text"); } + function panel_graph_add_math_add() { CALL("graph_add_math_add"); PANEL_GRAPH.createNodeHotkey(Node_create_Math, { query: "add" }); } - function panel_graph_select_all() { CALL("graph_select_all"); PANEL_GRAPH.nodes_selecting = PANEL_GRAPH.nodes_list; } - function panel_graph_toggle_grid() { CALL("graph_toggle_grid"); PANEL_GRAPH.display_parameter.show_grid = !PANEL_GRAPH.display_parameter.show_grid; } + function panel_graph_select_all() { CALL("graph_select_all"); PANEL_GRAPH.nodes_selecting = PANEL_GRAPH.nodes_list; } + function panel_graph_toggle_grid() { CALL("graph_toggle_grid"); PANEL_GRAPH.display_parameter.show_grid = !PANEL_GRAPH.display_parameter.show_grid; } + function panel_graph_toggle_dimension() { CALL("graph_toggle_dimension"); PANEL_GRAPH.display_parameter.show_dimension = !PANEL_GRAPH.display_parameter.show_dimension; } + function panel_graph_toggle_compute() { CALL("graph_toggle_compute"); PANEL_GRAPH.display_parameter.show_compute = !PANEL_GRAPH.display_parameter.show_compute; } + function panel_graph_toggle_control() { CALL("graph_toggle_control"); PANEL_GRAPH.display_parameter.show_control = !PANEL_GRAPH.display_parameter.show_control; } + function panel_graph_toggle_avoid_label() { CALL("graph_toggle_avoid_label"); PANEL_GRAPH.display_parameter.avoid_label = !PANEL_GRAPH.display_parameter.avoid_label; } + + function panel_graph_add_transform() { CALL("graph_add_transform"); PANEL_GRAPH.doTransform(); } + function panel_graph_blend() { CALL("graph_blend"); PANEL_GRAPH.doBlend(); } + function panel_graph_compose() { CALL("graph_compose"); PANEL_GRAPH.doCompose(); } + function panel_graph_array() { CALL("graph_array"); PANEL_GRAPH.doArray(); } + function panel_graph_group() { CALL("graph_group"); PANEL_GRAPH.doGroup(); } + function panel_graph_ungroup() { CALL("graph_ungroup"); PANEL_GRAPH.doUngroup(); } + function panel_graph_export() { CALL("graph_export"); PANEL_GRAPH.setCurrentExport(); } - function panel_graph_export() { CALL("graph_export"); PANEL_GRAPH.setCurrentExport(); } - - function panel_graph_add_transform() { CALL("graph_add_transform"); PANEL_GRAPH.doTransform(); } - function panel_graph_blend() { CALL("graph_blend"); PANEL_GRAPH.doBlend(); } - function panel_graph_compose() { CALL("graph_compose"); PANEL_GRAPH.doCompose(); } - function panel_graph_array() { CALL("graph_array"); PANEL_GRAPH.doArray(); } - function panel_graph_group() { CALL("graph_group"); PANEL_GRAPH.doGroup(); } - function panel_graph_ungroup() { CALL("graph_ungroup"); PANEL_GRAPH.doUngroup(); } + function panel_graph_canvas_copy() { CALL("graph_canvas_copy"); PANEL_GRAPH.setCurrentCanvas(); } + function panel_graph_canvas_blend() { CALL("graph_canvas_blend"); PANEL_GRAPH.setCurrentCanvasBlend(); } - function panel_graph_canvas_copy() { CALL("graph_canvas_copy"); PANEL_GRAPH.setCurrentCanvas(); } - function panel_graph_canvas_blend() { CALL("graph_canvas_blend"); PANEL_GRAPH.setCurrentCanvasBlend(); } + function panel_graph_frame() { CALL("graph_frame"); PANEL_GRAPH.doFrame(); } + function panel_graph_delete_break() { CALL("graph_delete_break"); PANEL_GRAPH.doDelete(false); } + function panel_graph_delete_merge() { CALL("graph_delete_merge"); PANEL_GRAPH.doDelete(true); } + function panel_graph_duplicate() { CALL("graph_duplicate"); PANEL_GRAPH.doDuplicate(); } + function panel_graph_copy() { CALL("graph_copy"); PANEL_GRAPH.doCopy(); } + function panel_graph_paste() { CALL("graph_paste"); PANEL_GRAPH.doPaste(); } + + function panel_graph_auto_align() { CALL("graph_auto_align"); node_auto_align(PANEL_GRAPH.nodes_selecting); } + function panel_graph_search() { CALL("graph_search"); PANEL_GRAPH.toggleSearch(); } + function panel_graph_toggle_minimap() { CALL("graph_toggle_minimap"); PANEL_GRAPH.minimap_show = !PANEL_GRAPH.minimap_show; } - function panel_graph_frame() { CALL("graph_frame"); PANEL_GRAPH.doFrame(); } - function panel_graph_delete_break() { CALL("graph_delete_break"); PANEL_GRAPH.doDelete(false); } - function panel_graph_delete_merge() { CALL("graph_delete_merge"); PANEL_GRAPH.doDelete(true); } - function panel_graph_duplicate() { CALL("graph_duplicate"); PANEL_GRAPH.doDuplicate(); } - function panel_graph_copy() { CALL("graph_copy"); PANEL_GRAPH.doCopy(); } - function panel_graph_paste() { CALL("graph_paste"); PANEL_GRAPH.doPaste(); } + function panel_graph_pan() { CALL("graph_pan"); if(PANEL_GRAPH.node_hovering || PANEL_GRAPH.value_focus) return; PANEL_GRAPH.graph_dragging_key = true; } + function panel_graph_zoom() { CALL("graph_zoom"); if(PANEL_GRAPH.node_hovering || PANEL_GRAPH.value_focus) return; PANEL_GRAPH.graph_zooming_key = true; } - function panel_graph_auto_align() { CALL("graph_auto_align"); node_auto_align(PANEL_GRAPH.nodes_selecting); } - function panel_graph_search() { CALL("graph_search"); PANEL_GRAPH.toggleSearch(); } - function panel_graph_toggle_minimap() { CALL("graph_toggle_minimap"); PANEL_GRAPH.minimap_show = !PANEL_GRAPH.minimap_show; } - - function panel_graph_pan() { CALL("graph_pan"); if(PANEL_GRAPH.node_hovering || PANEL_GRAPH.value_focus) return; PANEL_GRAPH.graph_dragging_key = true;} - function panel_graph_zoom() { CALL("graph_zoom"); if(PANEL_GRAPH.node_hovering || PANEL_GRAPH.value_focus) return; PANEL_GRAPH.graph_zooming_key = true;} + function panel_graph_send_to_preview() { CALL("graph_send_to_preview"); PANEL_GRAPH.send_to_preview(); } + function panel_graph_preview_window() { CALL("graph_preview_window"); create_preview_window(PANEL_GRAPH.getFocusingNode()); } + function panel_graph_inspector_panel() { CALL("graph_inspector_panel"); PANEL_GRAPH.inspector_panel(); } + function panel_graph_send_to_export() { CALL("graph_send_to_export"); PANEL_GRAPH.send_hover_to_export(); } + function panel_graph_toggle_preview() { CALL("graph_toggle_preview"); PANEL_GRAPH.setTriggerPreview(); } + function panel_graph_toggle_render() { CALL("graph_toggle_render"); PANEL_GRAPH.setTriggerRender(); } + function panel_graph_toggle_parameter() { CALL("graph_toggle_parameter"); PANEL_GRAPH.setTriggerParameter(); } + function panel_graph_enter_group() { CALL("graph_enter_group"); PANEL_GRAPH.enter_group(); } + function panel_graph_hide_disconnected() { CALL("graph_hide_disconnected"); PANEL_GRAPH.hide_disconnected(); } - function panel_graph_send_to_preview() { CALL("graph_send_to_preview"); PANEL_GRAPH.send_to_preview(); } - function panel_graph_preview_window() { CALL("graph_preview_window"); create_preview_window(PANEL_GRAPH.getFocusingNode()); } - function panel_graph_inspector_panel() { CALL("graph_inspector_panel"); PANEL_GRAPH.inspector_panel(); } - function panel_graph_send_to_export() { CALL("graph_send_to_export"); PANEL_GRAPH.send_hover_to_export(); } - function panel_graph_toggle_preview() { CALL("graph_toggle_preview"); PANEL_GRAPH.setTriggerPreview(); } - function panel_graph_toggle_render() { CALL("graph_toggle_render"); PANEL_GRAPH.setTriggerRender(); } - function panel_graph_toggle_parameter() { CALL("graph_toggle_parameter"); PANEL_GRAPH.setTriggerParameter(); } - function panel_graph_enter_group() { CALL("graph_enter_group"); PANEL_GRAPH.enter_group(); } - function panel_graph_hide_disconnected() { CALL("graph_hide_disconnected"); PANEL_GRAPH.hide_disconnected(); } + function panel_graph_open_group_tab() { CALL("graph_open_group_tab"); PANEL_GRAPH.open_group_tab(); } + function panel_graph_set_as_tool() { CALL("graph_open_set_as_tool"); PANEL_GRAPH.set_as_tool(); } - function panel_graph_open_group_tab() { CALL("graph_open_group_tab"); PANEL_GRAPH.open_group_tab(); } - function panel_graph_set_as_tool() { CALL("graph_open_set_as_tool"); PANEL_GRAPH.set_as_tool(); } - - function panel_graph_doCopyProp() { CALL("graph_doCopyProp"); PANEL_GRAPH.doCopyProp(); } - function panel_graph_doPasteProp() { CALL("graph_doPasteProp"); PANEL_GRAPH.doPasteProp(); } - function panel_graph_createTunnel() { CALL("graph_createTunnel"); PANEL_GRAPH.createTunnel(); } + function panel_graph_doCopyProp() { CALL("graph_doCopyProp"); PANEL_GRAPH.doCopyProp(); } + function panel_graph_doPasteProp() { CALL("graph_doPasteProp"); PANEL_GRAPH.doPasteProp(); } + function panel_graph_createTunnel() { CALL("graph_createTunnel"); PANEL_GRAPH.createTunnel(); } + function panel_graph_grid_snap() { CALL("graph_grid_snap"); PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.snap = !PANEL_GRAPH.project.graphGrid.snap; } + function panel_graph_show_origin() { CALL("graph_grid_show_origin"); PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.show_origin = !PANEL_GRAPH.project.graphGrid.show_origin; } + function __fnInit_Graph() { registerFunction("Graph", "Add Node", "A", MOD_KEY.none, panel_graph_add_node ).setMenu("graph_add_node") registerFunction("Graph", "Focus Content", "F", MOD_KEY.none, panel_graph_focus_content ).setMenu("graph_focus_content") @@ -75,6 +82,10 @@ registerFunction("Graph", "Select All", "A", MOD_KEY.ctrl, panel_graph_select_all ).setMenu("graph_select_all") registerFunction("Graph", "Toggle Grid", "G", MOD_KEY.none, panel_graph_toggle_grid ).setMenu("graph_toggle_grid") + registerFunction("Graph", "Toggle Dimension", "", MOD_KEY.none, panel_graph_toggle_dimension ).setMenu("graph_toggle_dimension") + registerFunction("Graph", "Toggle Compute", "", MOD_KEY.none, panel_graph_toggle_compute ).setMenu("graph_toggle_compute") + registerFunction("Graph", "Toggle Control", "", MOD_KEY.none, panel_graph_toggle_control ).setMenu("graph_toggle_control") + registerFunction("Graph", "Toggle Avoid Label", "", MOD_KEY.none, panel_graph_toggle_avoid_label ).setMenu("graph_toggle_avoid_label") registerFunction("Graph", "Blend", "B", MOD_KEY.ctrl, panel_graph_blend ).setMenu("graph_blend") registerFunction("Graph", "Compose", "B", MOD_KEY.ctrl | MOD_KEY.shift, panel_graph_compose ).setMenu("graph_compose") @@ -118,12 +129,20 @@ registerFunction("Graph", "Copy Value", "", MOD_KEY.none, panel_graph_doCopyProp ).setMenu("graph_copy_value") registerFunction("Graph", "Paste Value", "", MOD_KEY.none, panel_graph_doPasteProp ).setMenu("graph_paste_value") registerFunction("Graph", "Create Tunnel", "", MOD_KEY.none, panel_graph_createTunnel ).setMenu("graph_create_tunnel") + + registerFunction("Graph", "Toggle Grid Snap", "", MOD_KEY.none, panel_graph_grid_snap ).setMenu("graph_grid_snap") + registerFunction("Graph", "Toggle Show Origin", "", MOD_KEY.none, panel_graph_show_origin ).setMenu("graph_show_origin") if(!DEMO) { - registerFunction("Graph", "Export Selected", "E", MOD_KEY.ctrl, panel_graph_export ).setMenu("graph_export_selected") - registerFunction("Graph", "Export Hover", "", MOD_KEY.none, panel_graph_send_to_export ).setMenu("graph_export_hover") + registerFunction("Graph", "Export Selected Node", "E", MOD_KEY.ctrl, panel_graph_export ).setMenu("graph_export_selected") + registerFunction("Graph", "Export Hovering Node", "", MOD_KEY.none, panel_graph_send_to_export ).setMenu("graph_export_hover") } + registerFunction("Graph", "Export As Image", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Graph_Export_Image(PANEL_GRAPH)) }).setMenu("graph_export_image") + registerFunction("Graph", "Connection Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Graph_Connection_Setting()) }).setMenu("graph_connection_settings") + registerFunction("Graph", "Grid Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Graph_Grid_Setting()) }).setMenu("graph_grid_settings") + registerFunction("Graph", "View Settiings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Graph_View_Setting(PANEL_GRAPH, PANEL_GRAPH.display_parameter)) }).setMenu("graph_view_settings") + __fnGroupInit_Graph() } @@ -237,7 +256,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { function setTitle() { title_raw = project.path == ""? "New project" : filename_name_only(project.path); - title = title_raw + (project.modified? "*" : ""); + title = title_raw + (project.modified? "*" : ""); } static reset = function() { @@ -276,9 +295,9 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { graph_pan_x_to = 0; graph_pan_y_to = 0; - scale = [ 0.01, 0.02, 0.05, 0.10, 0.15, 0.20, 0.25, 0.33, 0.50, 0.65, 0.80, 1, 1.2, 1.35, 1.5, 2.0 ]; - graph_s = 1; - graph_s_to = graph_s; + scale = [ 0.01, 0.02, 0.05, 0.10, 0.15, 0.20, 0.25, 0.33, 0.50, 0.65, 0.80, 1, 1.2, 1.35, 1.5, 2.0 ]; + graph_s = 1; + graph_s_to = graph_s; graph_dragging_key = false; graph_zooming_key = false; @@ -372,25 +391,27 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { #endregion #region // ---- minimap ---- - minimap_show = false; - minimap_w = ui(160); - minimap_h = ui(160); - minimap_surface = -1; + minimap_show = false; + minimap_w = ui(160); + minimap_h = ui(160); + minimap_surface = -1; minimap_panning = false; minimap_dragging = false; - minimap_drag_sx = 0; - minimap_drag_sy = 0; - minimap_drag_mx = 0; - minimap_drag_my = 0; + minimap_drag_sx = 0; + minimap_drag_sy = 0; + minimap_drag_mx = 0; + minimap_drag_my = 0; #endregion #region // ---- context frame ---- - context_framing = false; + context_framing = false; context_frame_progress = 0; context_frame_direct = 0; - context_frame_sx = 0; context_frame_ex = 0; - context_frame_sy = 0; context_frame_ey = 0; + context_frame_sx = 0; + context_frame_ex = 0; + context_frame_sy = 0; + context_frame_ey = 0; #endregion #region // ---- search ---- @@ -399,9 +420,9 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { search_index = 0; search_result = []; - tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_string = string(str); searchNodes(); }); - tb_search.align = fa_left; - tb_search.auto_update = true; + tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_string = string(str); searchNodes(); }); + tb_search.align = fa_left; + tb_search.auto_update = true; #endregion toolbar_height = ui(40); @@ -426,10 +447,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { for(var i = 0; i < array_length(_arr); i++) { var _node = _arr[i]; - if(!is_instanceof(_node, Node)) continue; - if(is_instanceof(_node, Node_Collection_Inline)) continue; - if(is_instanceof(_node, Node_Feedback_Inline)) continue; - if(!_node.active) continue; + if(!is_instanceof(_node, Node)) continue; + if(is_instanceof(_node, Node_Collection_Inline)) continue; + if(is_instanceof(_node, Node_Feedback_Inline)) continue; + if(!_node.active) continue; minx = min(minx, _node.x - 32); maxx = max(maxx, _node.x + _node.w + 32); @@ -453,44 +474,48 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { function initSize() { toCenterNode(); } #region // ++++ toolbars ++++ - tooltip_center = new tooltipHotkey(__txtx("panel_graph_center_to_nodes", "Center to nodes"), "Graph", "Focus content"); - tooltip_search = new tooltipHotkey(__txt("Search"), "Graph", "Search"); - tooltip_minimap = new tooltipHotkey(__txtx("panel_graph_toggle_minimap", "Toggle minimap"), "Graph", "Toggle Minimap"); - + toolbars_general = [ [ THEME.icon_preview_export, - function() /*=>*/ {return 0}, function() /*=>*/ {return __txtx("panel_graph_export_image", "Export graph as image")}, + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txtx("panel_graph_export_image", "Export graph as image"), "Graph", "Export As Image")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Graph_Export_Image(self)); } ], [ THEME.search_24, - function() /*=>*/ {return 0}, function() /*=>*/ {return tooltip_search}, + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txt("Search"), "Graph", "Search")}, function(param) /*=>*/ { toggleSearch(); } ], [ THEME.icon_center_canvas, - function() /*=>*/ {return 0}, function() /*=>*/ {return tooltip_center}, + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txtx("panel_graph_center_to_nodes", "Center to nodes"), "Graph", "Focus content")}, function(param) /*=>*/ { toCenterNode(); } ], [ THEME.icon_minimap, - function() /*=>*/ {return minimap_show}, function() /*=>*/ {return tooltip_minimap}, + function() /*=>*/ {return minimap_show}, + function() /*=>*/ {return new tooltipHotkey(__txtx("panel_graph_toggle_minimap", "Toggle minimap"), "Graph", "Toggle Minimap")}, function(param) /*=>*/ { minimap_show = !minimap_show; } ], [ THEME.icon_curve_connection, - function() /*=>*/ {return PREFERENCES.curve_connection_line}, function() /*=>*/ {return __txtx("panel_graph_connection_line", "Connection render settings")}, + function() /*=>*/ {return PREFERENCES.curve_connection_line}, + function() /*=>*/ {return new tooltipHotkey(__txtx("panel_graph_connection_line", "Connection render settings"), "Graph", "Connection Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Graph_Connection_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], [ THEME.icon_grid_setting, - function() /*=>*/ {return 0}, function() /*=>*/ {return __txtx("grid_title", "Grid settings")}, + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txtx("grid_title", "Grid settings"), "Graph", "Grid Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Graph_Grid_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], [ THEME.icon_visibility, - function() /*=>*/ {return 0}, function() /*=>*/ {return __txtx("graph_visibility_title", "Visibility settings")}, + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txtx("graph_visibility_title", "Visibility settings"), "Graph", "View Settiings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Graph_View_Setting(self, display_parameter), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], ]; @@ -3041,7 +3066,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { toCenterNode(nodes_selecting); } - function toggleSearch() { + function toggleSearch() { is_searching = !is_searching; if(is_searching) { diff --git a/scripts/panel_graph_connection_settings/panel_graph_connection_settings.gml b/scripts/panel_graph_connection_settings/panel_graph_connection_settings.gml index 47124421e..cb6030e4c 100644 --- a/scripts/panel_graph_connection_settings/panel_graph_connection_settings.gml +++ b/scripts/panel_graph_connection_settings/panel_graph_connection_settings.gml @@ -1,48 +1,44 @@ function Panel_Graph_Connection_Setting() : Panel_Linear_Setting() constructor { title = __txtx("graph_connection_settings", "Connection Settings"); - w = ui(400); + properties = [ + new __Panel_Linear_Setting_Item_Preference( + __txt("Type"), + "curve_connection_line", + new buttonGroup([ THEME.icon_curve_connection, THEME.icon_curve_connection, THEME.icon_curve_connection, THEME.icon_curve_connection ], + function(val) { PREFERENCES.curve_connection_line = val; }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("dialog_connection_thickness", "Line thickness"), + "connection_line_width", + new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_width = max(0.5, real(str)); }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("dialog_connection_radius", "Corner radius"), + "connection_line_corner", + new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_corner = max(0, real(str)); }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("pref_connection_quality", "Render quality"), + "connection_line_aa", + new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_aa = clamp(real(str), 1, 4); }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("pref_connection_highlight", "Highlight connection"), + "connection_line_highlight", + new buttonGroup([ "None", "ALT", "Always" ], function(val) { PREFERENCES.connection_line_highlight = val; }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("pref_connection_highlight_fade", "Fade connection"), + "connection_line_highlight_fade", + slider(0, 1, 0.05, function(val) { PREFERENCES.connection_line_highlight_fade = val; }), + ), + new __Panel_Linear_Setting_Item_Preference( + __txtx("pref_connection_highlight_all", "Highlight all"), + "connection_line_highlight_all", + new checkBox(function() { PREFERENCES.connection_line_highlight_all = !PREFERENCES.connection_line_highlight_all; }), + ), + ]; - #region data - properties = [ - new __Panel_Linear_Setting_Item_Preference( - __txt("Type"), - "curve_connection_line", - new buttonGroup([ THEME.icon_curve_connection, THEME.icon_curve_connection, THEME.icon_curve_connection, THEME.icon_curve_connection ], - function(val) { PREFERENCES.curve_connection_line = val; }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("dialog_connection_thickness", "Line thickness"), - "connection_line_width", - new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_width = max(0.5, real(str)); }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("dialog_connection_radius", "Corner radius"), - "connection_line_corner", - new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_corner = max(0, real(str)); }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("pref_connection_quality", "Render quality"), - "connection_line_aa", - new textBox(TEXTBOX_INPUT.number, function(str) { PREFERENCES.connection_line_aa = clamp(real(str), 1, 4); }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("pref_connection_highlight", "Highlight connection"), - "connection_line_highlight", - new buttonGroup([ "None", "ALT", "Always" ], function(val) { PREFERENCES.connection_line_highlight = val; }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("pref_connection_highlight_fade", "Fade connection"), - "connection_line_highlight_fade", - slider(0, 1, 0.05, function(val) { PREFERENCES.connection_line_highlight_fade = val; }), - ), - new __Panel_Linear_Setting_Item_Preference( - __txtx("pref_connection_highlight_all", "Highlight all"), - "connection_line_highlight_all", - new checkBox(function() { PREFERENCES.connection_line_highlight_all = !PREFERENCES.connection_line_highlight_all; }), - ), - ]; - - setHeight(); - #endregion + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.gml b/scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.gml index f374f73f3..60f8799ab 100644 --- a/scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.gml +++ b/scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.gml @@ -41,43 +41,24 @@ function Panel_Graph_Export_Image(targetPanel) : PanelContent() constructor { widgets = []; widgets[0] = [ "Nodes", new scrollBox(nodes_select, - function(val) { + function(val) /*=>*/ { sel = val; nodeList = val? targetPanel.nodes_selecting : targetPanel.nodes_list; refresh(); }, false), - function() { return nodes_select[sel] } ]; - - widgets[1] = [ "Scale", new textBox(TEXTBOX_INPUT.number, function(val) { settings.scale = val; refresh(); }), - function() { return settings.scale } ]; - - widgets[2] = [ "Padding", new textBox(TEXTBOX_INPUT.number, function(val) { settings.padding = val; refresh(); }), - function() { return settings.padding } ]; - - widgets[3] = [ "Solid Background", new checkBox(function() { settings.bgEnable = !settings.bgEnable; refresh(); }), - function() { return settings.bgEnable } ]; - - widgets[4] = [ "Background Color", new buttonColor(function(val) { settings.bgColor = val; refresh(); }), - function() { return settings.bgColor } ]; - - widgets[5] = [ "Render Grid", new checkBox(function() { settings.gridEnable = !settings.gridEnable; refresh(); }), - function() { return settings.gridEnable } ]; - - widgets[6] = [ "Grid Color", new buttonColor(function(val) { settings.gridColor = val; refresh(); }), - function() { return settings.gridColor } ]; - - widgets[7] = [ "Grid Opacity", new textBox(TEXTBOX_INPUT.number, function(val) { settings.gridAlpha = val; refresh(); }), - function() { return settings.gridAlpha } ]; - - widgets[8] = [ "Border", new textBox(TEXTBOX_INPUT.number, function(val) { settings.borderPad = val; refresh(); }), - function() { return settings.borderPad } ]; - - widgets[9] = [ "Border Color", new buttonColor(function(val) { settings.borderColor = val; refresh(); }), - function() { return settings.borderColor } ]; - - widgets[10] = [ "Border Opacity", new textBox(TEXTBOX_INPUT.number, function(val) { settings.borderAlpha = val; refresh(); }), - function() { return settings.borderAlpha } ]; - + function() /*=>*/ {return nodes_select[sel]} + ]; + + widgets[1] = [ "Scale", new textBox(TEXTBOX_INPUT.number, function(val) /*=>*/ { settings.scale = val; refresh(); }), function() /*=>*/ {return settings.scale} ]; + widgets[2] = [ "Padding", new textBox(TEXTBOX_INPUT.number, function(val) /*=>*/ { settings.padding = val; refresh(); }), function() /*=>*/ {return settings.padding} ]; + widgets[3] = [ "Solid Background", new checkBox( function() /*=>*/ { settings.bgEnable = !settings.bgEnable; refresh(); }), function() /*=>*/ {return settings.bgEnable} ]; + widgets[4] = [ "Background Color", new buttonColor( function(val) /*=>*/ { settings.bgColor = val; refresh(); }), function() /*=>*/ {return settings.bgColor} ]; + widgets[5] = [ "Render Grid", new checkBox( function() /*=>*/ { settings.gridEnable = !settings.gridEnable; refresh(); }), function() /*=>*/ {return settings.gridEnable} ]; + widgets[6] = [ "Grid Color", new buttonColor( function(val) /*=>*/ { settings.gridColor = val; refresh(); }), function() /*=>*/ {return settings.gridColor} ]; + widgets[7] = [ "Grid Opacity", new textBox(TEXTBOX_INPUT.number, function(val) /*=>*/ { settings.gridAlpha = val; refresh(); }), function() /*=>*/ {return settings.gridAlpha} ]; + widgets[8] = [ "Border", new textBox(TEXTBOX_INPUT.number, function(val) /*=>*/ { settings.borderPad = val; refresh(); }), function() /*=>*/ {return settings.borderPad} ]; + widgets[9] = [ "Border Color", new buttonColor( function(val) /*=>*/ { settings.borderColor = val; refresh(); }), function() /*=>*/ {return settings.borderColor} ]; + widgets[10] = [ "Border Opacity", new textBox(TEXTBOX_INPUT.number, function(val) /*=>*/ { settings.borderAlpha = val; refresh(); }), function() /*=>*/ {return settings.borderAlpha} ]; b_export = button(function() { if(!is_surface(surface)) return; diff --git a/scripts/panel_graph_grid_settings/panel_graph_grid_settings.gml b/scripts/panel_graph_grid_settings/panel_graph_grid_settings.gml index 7498ddb9c..0d2f7a948 100644 --- a/scripts/panel_graph_grid_settings/panel_graph_grid_settings.gml +++ b/scripts/panel_graph_grid_settings/panel_graph_grid_settings.gml @@ -1,73 +1,53 @@ function Panel_Graph_Grid_Setting() : Panel_Linear_Setting() constructor { title = __txtx("graph_grid_settings", "Grid Settings"); - w = ui(380); - - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txtx("grid_snap", "Snap to grid"), - new checkBox(function() { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.snap = !PANEL_GRAPH.project.graphGrid.snap; - }), - function() { return PANEL_GRAPH.project.graphGrid.snap; }, - function(val) { PANEL_GRAPH.project.graphGrid.snap = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txtx("grid_size", "Grid size"), - new textBox(TEXTBOX_INPUT.number, function(str) { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.size = max(1, real(str)); - }), - function() { return PANEL_GRAPH.project.graphGrid.size; }, - function(val) { PANEL_GRAPH.project.graphGrid.size = val; }, - 16, - ), - new __Panel_Linear_Setting_Item( - __txtx("project_graphGrid_opacity", "Grid opacity"), - slider(0, 1, .05, function(str) { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.opacity = clamp(real(str), 0, 1); - }), - function() { return PANEL_GRAPH.project.graphGrid.opacity; }, - function(val) { PANEL_GRAPH.project.graphGrid.opacity = val; }, - 0.05, - ), - new __Panel_Linear_Setting_Item( - __txtx("project_graphGrid_color", "Grid color"), - new buttonColor(function(color) { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.color = color; - }, self), - function() { return PANEL_GRAPH.project.graphGrid.color; }, - function(val) { PANEL_GRAPH.project.graphGrid.color = val; }, - c_white, - ), - new __Panel_Linear_Setting_Item( - __txtx("grid_show_origin", "Show origin"), - new checkBox(function() { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.show_origin = !PANEL_GRAPH.project.graphGrid.show_origin; - }), - function() { return PANEL_GRAPH.project.graphGrid.show_origin; }, - function(val) { PANEL_GRAPH.project.graphGrid.show_origin = val; }, - false, - ), - new __Panel_Linear_Setting_Item( - __txtx("grid_highlight_every", "Highlight period"), - new textBox(TEXTBOX_INPUT.number, function(str) { - if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return; - PANEL_GRAPH.project.graphGrid.highlight = max(1, round(real(str))); - }), - function() { return PANEL_GRAPH.project.graphGrid.highlight; }, - function(val) { PANEL_GRAPH.project.graphGrid.highlight = val; }, - 12, - ), - - ]; + properties = [ + new __Panel_Linear_Setting_Item( + __txtx("grid_snap", "Snap to grid"), + new checkBox(function() /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.snap = !PANEL_GRAPH.project.graphGrid.snap; }), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.snap}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.snap = val; }, + true, + ["Graph", "Toggle Grid Snap"] + ), + new __Panel_Linear_Setting_Item( + __txtx("grid_size", "Grid size"), + new textBox(TEXTBOX_INPUT.number, function(str) /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.size = max(1, real(str)); }), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.size}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.size = val; }, + 16, + ), + new __Panel_Linear_Setting_Item( + __txtx("project_graphGrid_opacity", "Grid opacity"), + slider(0, 1, .05, function(str) /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.opacity = clamp(real(str), 0, 1); }), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.opacity}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.opacity = val; }, + 0.05, + ), + new __Panel_Linear_Setting_Item( + __txtx("project_graphGrid_color", "Grid color"), + new buttonColor(function(color) /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.color = color; }, self), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.color}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.color = val; }, + c_white, + ), + new __Panel_Linear_Setting_Item( + __txtx("grid_show_origin", "Show origin"), + new checkBox(function() /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.show_origin = !PANEL_GRAPH.project.graphGrid.show_origin; }), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.show_origin}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.show_origin = val; }, + false, + ["Graph", "Toggle Show Origin"] + ), + new __Panel_Linear_Setting_Item( + __txtx("grid_highlight_every", "Highlight period"), + new textBox(TEXTBOX_INPUT.number, function(str) /*=>*/ { PANEL_GRAPH_PROJECT_CHECK PANEL_GRAPH.project.graphGrid.highlight = max(1, round(real(str))); }), + function() /*=>*/ {return PANEL_GRAPH.project.graphGrid.highlight}, + function(val) /*=>*/ { PANEL_GRAPH.project.graphGrid.highlight = val; }, + 12, + ), - setHeight(); - #endregion + ]; + + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_graph_view_settings/panel_graph_view_settings.gml b/scripts/panel_graph_view_settings/panel_graph_view_settings.gml index 2cfc26540..c0a60842a 100644 --- a/scripts/panel_graph_view_settings/panel_graph_view_settings.gml +++ b/scripts/panel_graph_view_settings/panel_graph_view_settings.gml @@ -1,66 +1,68 @@ function Panel_Graph_View_Setting(graphPanel, display) : Panel_Linear_Setting() constructor { title = __txtx("graph_view_settings", "View Settings"); - w = ui(380); self.graphPanel = graphPanel; display_parameter = display; - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txt("Grid"), - new checkBox(function() { display_parameter.show_grid = !display_parameter.show_grid; }), - function() { return display_parameter.show_grid }, - function(val) { display_parameter.show_grid = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txtx("graph_visibility_dim", "Dimension"), - new checkBox(function() { display_parameter.show_dimension = !display_parameter.show_dimension; }), - function() { return display_parameter.show_dimension }, - function(val) { display_parameter.show_dimension = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txtx("graph_visibility_compute", "Compute Time"), - new checkBox(function() { display_parameter.show_compute = !display_parameter.show_compute; }), - function() { return display_parameter.show_compute }, - function(val) { display_parameter.show_compute = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txtx("graph_visibility_avoid_label", "Avoid Label"), - new checkBox(function() { display_parameter.avoid_label = !display_parameter.avoid_label; }), - function() { return display_parameter.avoid_label }, - function(val) { display_parameter.avoid_label = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txtx("graph_visibility_slideshow", "Show Controller"), - new checkBox(function() { display_parameter.show_control = !display_parameter.show_control; }), - function() { return display_parameter.show_control }, - function(val) { display_parameter.show_control = val; }, - false, - ), - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - new __Panel_Linear_Setting_Item( - __txtx("graph_visibility_preview_scale", "Preview Scale"), - slider(50, 100, 1, function(val) { display_parameter.preview_scale = val; }), - function() { return display_parameter.preview_scale }, - function(val) { display_parameter.preview_scale = val; }, - 100, - ), - new __Panel_Linear_Setting_Item( - __txt("View Control"), - new buttonGroup([ "None", "Left", "Right" ], function(val) { graphPanel.show_view_control = val; }), - function() { return graphPanel.show_view_control }, - function(val) { graphPanel.show_view_control = val; }, - 1, - ), - ]; + properties = [ + new __Panel_Linear_Setting_Item( + __txt("Grid"), + new checkBox(function() /*=>*/ { display_parameter.show_grid = !display_parameter.show_grid; }), + function() /*=>*/ {return display_parameter.show_grid}, + function(val) /*=>*/ { display_parameter.show_grid = val; }, + true, + [ "Graph", "Toggle Grid" ], + ), + new __Panel_Linear_Setting_Item( + __txtx("graph_visibility_dim", "Dimension"), + new checkBox(function() /*=>*/ { display_parameter.show_dimension = !display_parameter.show_dimension; }), + function() /*=>*/ {return display_parameter.show_dimension}, + function(val) /*=>*/ { display_parameter.show_dimension = val; }, + true, + [ "Graph", "Toggle Dimension" ], + ), + new __Panel_Linear_Setting_Item( + __txtx("graph_visibility_compute", "Compute Time"), + new checkBox(function() /*=>*/ { display_parameter.show_compute = !display_parameter.show_compute; }), + function() /*=>*/ {return display_parameter.show_compute}, + function(val) /*=>*/ { display_parameter.show_compute = val; }, + true, + [ "Graph", "Toggle Compute" ], + ), + new __Panel_Linear_Setting_Item( + __txtx("graph_visibility_avoid_label", "Avoid Label"), + new checkBox(function() /*=>*/ { display_parameter.avoid_label = !display_parameter.avoid_label; }), + function() /*=>*/ {return display_parameter.avoid_label}, + function(val) /*=>*/ { display_parameter.avoid_label = val; }, + true, + [ "Graph", "Toggle Avoid Label" ], + ), + new __Panel_Linear_Setting_Item( + __txtx("graph_visibility_slideshow", "Show Controller"), + new checkBox(function() /*=>*/ { display_parameter.show_control = !display_parameter.show_control; }), + function() /*=>*/ {return display_parameter.show_control}, + function(val) /*=>*/ { display_parameter.show_control = val; }, + false, + [ "Graph", "Toggle Control" ], + ), - setHeight(); - #endregion + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + new __Panel_Linear_Setting_Item( + __txtx("graph_visibility_preview_scale", "Preview Scale"), + slider(50, 100, 1, function(val) /*=>*/ { display_parameter.preview_scale = val; }), + function() /*=>*/ {return display_parameter.preview_scale}, + function(val) /*=>*/ { display_parameter.preview_scale = val; }, + 100, + ), + new __Panel_Linear_Setting_Item( + __txt("View Control"), + new buttonGroup([ "None", "Left", "Right" ], function(val) /*=>*/ { graphPanel.show_view_control = val; }), + function() /*=>*/ {return graphPanel.show_view_control}, + function(val) /*=>*/ { graphPanel.show_view_control = val; }, + 1, + ), + ]; + + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index a6bea477c..25673f179 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -107,7 +107,6 @@ function Panel_Menu() : PanelContent() constructor { menu_file_nondemo = [ MENU_ITEMS.new_file, MENU_ITEMS.open, - // .setShiftMenu(menuItemAction(__txt("Open in safe mode") + "...", LOAD_SAFE, THEME.noti_icon_file_load)), MENU_ITEMS.save, MENU_ITEMS.save_as, diff --git a/scripts/panel_nodes/panel_nodes.gml b/scripts/panel_nodes/panel_nodes.gml index 442a8c35f..8bba16045 100644 --- a/scripts/panel_nodes/panel_nodes.gml +++ b/scripts/panel_nodes/panel_nodes.gml @@ -7,10 +7,10 @@ function Panel_Nodes() : PanelContent() constructor { search_string = ""; - tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_string = string(str); }); - tb_search.align = fa_left; - tb_search.auto_update = true; - tb_search.boxColor = COLORS._main_icon_light; + tb_search = new textBox(TEXTBOX_INPUT.text, function(str) /*=>*/ { search_string = string(str); }); + tb_search.align = fa_left; + tb_search.auto_update = true; + tb_search.boxColor = COLORS._main_icon_light; node_collapse = ds_map_create(); @@ -26,7 +26,7 @@ function Panel_Nodes() : PanelContent() constructor { var node = _arr[i]; var name = node.renamed? node.display_name : node.name; - if(string_lower(search_string) != "" && string_lower(string_pos(search_string, name)) == 0) + if(string_lower(search_string) != "" && string_pos(string_lower(search_string), string_lower(name)) == 0) continue; var isGroup = struct_has(node, "nodes"); diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 915b2f746..a9e262244 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -32,6 +32,18 @@ function panel_preview_copy_color() { CALL("preview_copy_color"); PANEL_PREVIEW.copy_color(); } function panel_preview_copy_color_hex() { CALL("preview_copy_color_hex"); PANEL_PREVIEW.copy_color_hex(); } + function panel_preview_toggle_grid_pixel() { CALL("preview_toggle_grid_pixel"); PROJECT.previewGrid.pixel = !PROJECT.previewGrid.pixel; } + function panel_preview_toggle_grid_visible() { CALL("preview_toggle_grid_visible"); PROJECT.previewGrid.show = !PROJECT.previewGrid.show; } + function panel_preview_toggle_grid_snap() { CALL("preview_toggle_grid_snap"); PROJECT.previewGrid.snap = !PROJECT.previewGrid.snap; } + + function panel_preview_onion_enabled() { CALL("preview_onion_enabled"); PROJECT.onion_skin.enabled = !PROJECT.onion_skin.enabled; } + function panel_preview_onion_on_top() { CALL("preview_onion_on_top"); PROJECT.onion_skin.on_top = !PROJECT.onion_skin.on_top; } + + function panel_preview_show_info() { CALL("preview_show_info"); PANEL_PREVIEW.show_info = !PANEL_PREVIEW.show_info; } + function panel_preview_toggle_reset_view() { CALL("preview_toggle_reset_view"); PANEL_PREVIEW.toggle_reset_view(); } + function panel_preview_toggle_split_view() { CALL("preview_toggle_split_view"); PANEL_PREVIEW.toggle_split_view(); } + function panel_preview_toggle_lock() { CALL("preview_toggle_lock"); PANEL_PREVIEW.toggle_lock(); } + function __fnInit_Preview() { registerFunction("Preview", "Focus content", "F", MOD_KEY.none, panel_preview_focus_content ).setMenu("preview_focus_content", THEME.icon_center_canvas) registerFunction("Preview", "Save current frame", "S", MOD_KEY.shift, panel_preview_save_current_frame ).setMenu("preview_save_current_frame") @@ -68,6 +80,31 @@ registerFunction("Preview", "Copy Color", "", MOD_KEY.none, panel_preview_copy_color ).setMenu("preview_copy_color") registerFunction("Preview", "Copy Color Hex", "", MOD_KEY.none, panel_preview_copy_color_hex ).setMenu("preview_copy_color_hex") + registerFunction("Preview", "Toggle Pixel Grid", "", MOD_KEY.none, panel_preview_toggle_grid_pixel ).setMenu("preview_toggle_grid_pixel") + registerFunction("Preview", "Toggle Grid", "", MOD_KEY.none, panel_preview_toggle_grid_visible ).setMenu("preview_toggle_grid_visible") + registerFunction("Preview", "Toggle Snap to Grid", "", MOD_KEY.none, panel_preview_toggle_grid_snap ).setMenu("preview_toggle_grid_snap") + + registerFunction("Preview", "Toggle Onion Skin", "", MOD_KEY.none, panel_preview_onion_enabled ).setMenu("preview_onion_enabled") + registerFunction("Preview", "Toggle Onion Skin view", "", MOD_KEY.none, panel_preview_onion_on_top ).setMenu("preview_onion_on_top") + + registerFunction("Preview", "Toggle Show Info", "", MOD_KEY.none, panel_preview_show_info ).setMenu("preview_show_info") + registerFunction("Preview", "Toggle Reset View", "", MOD_KEY.none, panel_preview_toggle_reset_view ).setMenu("preview_toggle_reset_view") + registerFunction("Preview", "Toggle Split View", "", MOD_KEY.none, panel_preview_toggle_split_view ).setMenu("preview_toggle_split_view") + registerFunction("Preview", "Toggle Lock", "", MOD_KEY.none, panel_preview_toggle_lock ).setMenu("preview_toggle_lock") + registerFunction("Preview", "Tiling Settings", "", MOD_KEY.none, function(_dat) /*=>*/ { submenuCall(_dat, [ + MENU_ITEMS.preview_set_tile_off, + MENU_ITEMS.preview_set_tile_horizontal, + MENU_ITEMS.preview_set_tile_vertical, + MENU_ITEMS.preview_set_tile_both, + ]) }).setMenu("preview_tiling_settings") + + registerFunction("Preview", "Grid Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_Grid_Setting()) }).setMenu("preview_grid_settings") + registerFunction("Preview", "Onion Skin Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_Onion_Setting()) }).setMenu("preview_onion_settings") + registerFunction("Preview", "3D View Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_3D_Setting(PANEL_PREVIEW)) }).setMenu("preview_3D_settings") + registerFunction("Preview", "3D SDF View Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_3D_SDF_Setting(PANEL_PREVIEW)) }).setMenu("preview_3D_SDF_settings") + registerFunction("Preview", "3D Snap Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_Snap_Setting(PANEL_PREVIEW)) }).setMenu("preview_snap_settings") + registerFunction("Preview", "View Settings", "", MOD_KEY.none, function() /*=>*/ { dialogPanelCall(new Panel_Preview_View_Setting(PANEL_PREVIEW)) }).setMenu("preview_view_settings") + __fnGroupInit_Preview(); } @@ -90,110 +127,104 @@ function Panel_Preview() : PanelContent() constructor { last_focus = noone; #region ---- canvas control & sample ---- - function initSize() { - canvas_x = w / 2; - canvas_y = h / 2; - } - run_in(1, function() { initSize() }); + function initSize() { canvas_x = w / 2; canvas_y = h / 2; } + run_in(1, function() /*=>*/ { initSize() }); - canvas_x = 0; - canvas_y = 0; - canvas_s = 1; - canvas_w = ui(128); - canvas_h = ui(128); - canvas_a = 0; - - canvas_bg = -1; - + canvas_x = 0; + canvas_y = 0; + canvas_s = 1; + canvas_w = ui(128); + canvas_h = ui(128); + canvas_a = 0; + canvas_bg = -1; do_fullView = false; - - canvas_hover = true; + + canvas_hover = true; canvas_dragging_key = false; - canvas_dragging = false; - canvas_drag_key = 0; - canvas_drag_mx = 0; - canvas_drag_my = 0; - canvas_drag_sx = 0; - canvas_drag_sy = 0; + canvas_dragging = false; + canvas_drag_key = 0; + canvas_drag_mx = 0; + canvas_drag_my = 0; + canvas_drag_sx = 0; + canvas_drag_sy = 0; - canvas_zooming_key = false; - canvas_zooming = false; - canvas_zoom_mx = 0; - canvas_zoom_my = 0; - canvas_zoom_m = 0; - canvas_zoom_s = 0; + canvas_zooming_key = false; + canvas_zooming = false; + canvas_zoom_mx = 0; + canvas_zoom_my = 0; + canvas_zoom_m = 0; + canvas_zoom_s = 0; - view_pan_tool = false; - view_zoom_tool = false; + view_pan_tool = false; + view_zoom_tool = false; - sample_color = noone; - sample_x = noone; - sample_y = noone; + sample_color = noone; + sample_x = noone; + sample_y = noone; #endregion #region ---- preview ---- - locked = false; - preview_node = [ noone, noone ]; - preview_surfaces = [ 0, 0 ]; - preview_surface = [ 0, 0 ]; - tile_surface = surface_create(1, 1); + locked = false; + preview_node = [ noone, noone ]; + preview_surfaces = [ 0, 0 ]; + preview_surface = [ 0, 0 ]; + tile_surface = surface_create(1, 1); - preview_x = 0; - preview_x_to = 0; - preview_x_max = 0; - preview_sequence = [ 0, 0 ]; - _preview_sequence = preview_sequence; - preview_rate = 10; + preview_x = 0; + preview_x_to = 0; + preview_x_max = 0; + preview_sequence = [ 0, 0 ]; + _preview_sequence = preview_sequence; + preview_rate = 10; - right_menu_x = 0; - right_menu_y = 8; - mouse_on_preview = 0; - _mouse_on_preview = 0; + right_menu_x = 0; + right_menu_y = 8; + mouse_on_preview = 0; + _mouse_on_preview = 0; + + splitView = 0; + splitPosition = 0.5; + splitSelection = 0; + + splitViewDragging = false; + splitViewStart = 0; + splitViewMouse = 0; + + tileMode = 0; + bg_color = COLORS.panel_bg_clear; + + mouse_pos_string = ""; + + show_info = true; + show_view_control = 1; resetViewOnDoubleClick = true; - - splitView = 0; - splitPosition = 0.5; - splitSelection = 0; - - splitViewDragging = false; - splitViewStart = 0; - splitViewMouse = 0; - - tileMode = 0; - - bg_color = COLORS.panel_bg_clear; - - mouse_pos_string = ""; - - show_info = true; - show_view_control = 1; #endregion #region ---- tool ---- - tool_x = 0; - tool_x_to = 0; - tool_x_max = 0; + tool_x = 0; + tool_x_to = 0; + tool_x_max = 0; - tool_y = 0; - tool_y_to = 0; - tool_y_max = 0; + tool_y = 0; + tool_y_to = 0; + tool_y_max = 0; - tool_ry = 0; - tool_ry_to = 0; - tool_ry_max = 0; + tool_ry = 0; + tool_ry_to = 0; + tool_ry_max = 0; - tool_current = noone; + tool_current = noone; - toolbar_width = ui(40); - toolbar_height = ui(40); + toolbar_width = ui(40); + toolbar_height = ui(40); - tool_hovering = noone; - tool_side_draw_l = false; - tool_side_draw_r = false; - overlay_hovering = false; - view_hovering = false; + tool_hovering = noone; + tool_side_draw_l = false; + tool_side_draw_r = false; + overlay_hovering = false; + view_hovering = false; sbChannel = new scrollBox([], function(index) { var node = __getNodePreview(); @@ -209,62 +240,62 @@ function Panel_Preview() : PanelContent() constructor { #endregion #region ---- 3d ---- - d3_active = NODE_3D.none; + d3_active = NODE_3D.none; d3_active_transition = 0; - d3_surface = noone; - d3_surface_normal = noone; - d3_surface_depth = noone; - d3_surface_outline = noone; - d3_surface_bg = noone; - d3_preview_channel = 0; + d3_surface = noone; + d3_surface_normal = noone; + d3_surface_depth = noone; + d3_surface_outline = noone; + d3_surface_bg = noone; + d3_preview_channel = 0; - d3_deferData = noone; - d3_drawBG = false; + d3_deferData = noone; + d3_drawBG = false; - global.SKY_SPHERE = new __3dUVSphere(0.5, 16, 8, true); + global.SKY_SPHERE = new __3dUVSphere(0.5, 16, 8, true); #region camera - d3_view_camera = new __3dCamera(); - d3_camW = 1; - d3_camH = 1; + d3_view_camera = new __3dCamera(); + d3_camW = 1; + d3_camH = 1; d3_view_camera.setFocusAngle(135, 45, 4); - d3_camLerp = 0; - d3_camLerp_x = 0; - d3_camLerp_y = 0; + d3_camLerp = 0; + d3_camLerp_x = 0; + d3_camLerp_y = 0; - d3_camTarget = new __vec3(); + d3_camTarget = new __vec3(); - d3_camPanning = false; - d3_camPan_mx = 0; - d3_camPan_my = 0; + d3_camPanning = false; + d3_camPan_mx = 0; + d3_camPan_my = 0; - d3_zoom_speed = 0.2; - d3_pan_speed = 2; + d3_zoom_speed = 0.2; + d3_pan_speed = 2; #endregion #region scene - d3_scene = new __3dScene(d3_view_camera, "Preview panel"); - d3_scene.lightAmbient = $404040; - d3_scene.cull_mode = cull_counterclockwise; - d3_scene_preview = d3_scene; + d3_scene = new __3dScene(d3_view_camera, "Preview panel"); + d3_scene.lightAmbient = $404040; + d3_scene.cull_mode = cull_counterclockwise; + d3_scene_preview = d3_scene; d3_scene_light_enabled = true; - d3_scene_light0 = new __3dLightDirectional(); - d3_scene_light0.transform.position.set(-1, -2, 3); + d3_scene_light0 = new __3dLightDirectional(); d3_scene_light0.color = $FFFFFF; - d3_scene_light0.shadow_active = false; + d3_scene_light0.shadow_active = false; d3_scene_light0.shadow_map_scale = 4; + d3_scene_light0.transform.position.set(-1, -2, 3); - d3_scene_light1 = new __3dLightDirectional(); - d3_scene_light1.transform.position.set(1, 2, -3); + d3_scene_light1 = new __3dLightDirectional(); d3_scene_light1.color = $505050; + d3_scene_light1.transform.position.set(1, 2, -3); #endregion #region tool - d3_tool_snap = false; + d3_tool_snap = false; d3_tool_snap_position = 1; d3_tool_snap_rotation = 15; #endregion @@ -273,52 +304,57 @@ function Panel_Preview() : PanelContent() constructor { tb_framerate = new textBox(TEXTBOX_INPUT.number, function(val) { preview_rate = real(val); }); #region ++++ toolbars & actions ++++ - function set_tile_off() { tileMode = 0; } - function set_tile_horizontal() { tileMode = 1; } - function set_tile_vertical() { tileMode = 2; } - function set_tile_both() { tileMode = 3; } - function set_tile_toggle() { tileMode = (tileMode + 1) % 4; } + static set_tile_off = function() /*=>*/ { tileMode = 0; } + static set_tile_horizontal = function() /*=>*/ { tileMode = 1; } + static set_tile_vertical = function() /*=>*/ { tileMode = 2; } + static set_tile_both = function() /*=>*/ { tileMode = 3; } + static set_tile_toggle = function() /*=>*/ { tileMode = (tileMode + 1) % 4; } - function new_preview_window() { create_preview_window(getNodePreview()); } - function copy_color() { clipboard_set_text(sample_color); } - function copy_color_hex() { clipboard_set_text(color_get_hex(sample_color)); } + static new_preview_window = function() /*=>*/ { create_preview_window(getNodePreview()); } + static copy_color = function() /*=>*/ { clipboard_set_text(sample_color); } + static copy_color_hex = function() /*=>*/ { clipboard_set_text(color_get_hex(sample_color)); } + + static toggle_reset_view = function() /*=>*/ { resetViewOnDoubleClick = !resetViewOnDoubleClick; } + static toggle_split_view = function() /*=>*/ { splitView = (splitView + 1) % 3; } + + static toggle_lock = function() /*=>*/ { locked = !locked } topbar_height = ui(32); toolbar_height = ui(40); toolbars = [ [ THEME.icon_reset_when_preview, - function() { return resetViewOnDoubleClick; }, - function() { return resetViewOnDoubleClick? __txtx("panel_preview_center_canvas_on_preview", "Center canvas on preview") : - __txtx("panel_preview_keep_canvas_on_preview", "Keep canvas on preview"); }, - function() { resetViewOnDoubleClick = !resetViewOnDoubleClick; } + function() /*=>*/ {return resetViewOnDoubleClick}, + function() /*=>*/ { return new tooltipHotkey(resetViewOnDoubleClick? __txtx("panel_preview_center_canvas_on_preview", "Center canvas on preview") : + __txtx("panel_preview_keep_canvas_on_preview", "Keep canvas on preview"), "Preview", "Toggle Reset View" )}, + toggle_reset_view, ], [ THEME.icon_split_view, - function() { return splitView; }, - function() { + function() /*=>*/ {return splitView}, + function() /*=>*/ { switch(splitView) { - case 0 : return __txtx("panel_preview_split_view_off", "Split view off"); - case 1 : return __txtx("panel_preview_horizontal_split_view", "Horizontal split view"); - case 2 : return __txtx("panel_preview_vertical_split_view", "Vertical split view"); + case 0 : return new tooltipHotkey(__txtx("panel_preview_split_view_off", "Split view off"), "Preview", "Toggle Split View"); + case 1 : return new tooltipHotkey(__txtx("panel_preview_horizontal_split_view", "Horizontal split view"), "Preview", "Toggle Split View"); + case 2 : return new tooltipHotkey(__txtx("panel_preview_vertical_split_view", "Vertical split view"), "Preview", "Toggle Split View"); } - return __txtx("panel_preview_split_view", "Split view"); - }, - function() { splitView = (splitView + 1) % 3; } + return new tooltipHotkey(__txtx("panel_preview_split_view", "Split view"), "Preview", "Toggle Split View"); + }, + toggle_split_view, ], [ THEME.icon_tile_view, - function() { var t = [3, 0, 1, 2]; return array_safe_get_fast(t, tileMode); }, - function() { + function() /*=>*/ { var t = [3, 0, 1, 2]; return array_safe_get_fast(t, tileMode); }, + function() /*=>*/ { switch(tileMode) { - case 0 : return __txtx("panel_preview_tile_off", "Tile off"); - case 1 : return __txtx("panel_preview_tile_horizontal", "Tile horizontal"); - case 2 : return __txtx("panel_preview_tile_vertical", "Tile vertical"); - case 3 : return __txtx("panel_preview_tile_both", "Tile both"); + case 0 : return new tooltipHotkey(__txtx("panel_preview_tile_off", "Tile off"), "Preview", "Tiling Settings"); + case 1 : return new tooltipHotkey(__txtx("panel_preview_tile_horizontal", "Tile horizontal"), "Preview", "Tiling Settings"); + case 2 : return new tooltipHotkey(__txtx("panel_preview_tile_vertical", "Tile vertical"), "Preview", "Tiling Settings"); + case 3 : return new tooltipHotkey(__txtx("panel_preview_tile_both", "Tile both"), "Preview", "Tiling Settings"); } - return __txtx("panel_preview_tile_mode", "Tile mode"); + return new tooltipHotkey(__txtx("panel_preview_tile_mode", "Tile mode"), "Preview", "Tiling Settings"); }, - function(data) { + function(data) /*=>*/ { menuCall("preview_tile_menu", [ MENU_ITEMS.preview_set_tile_off, MENU_ITEMS.preview_set_tile_horizontal, @@ -329,19 +365,15 @@ function Panel_Preview() : PanelContent() constructor { ], [ THEME.icon_grid_setting, - function() { return 0; }, - function() { return __txtx("grid_title", "Grid setting") }, - function(param) { - var dia = dialogPanelCall(new Panel_Preview_Grid_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); - } + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txtx("grid_title", "Grid setting"), "Preview", "Grid Settings")}, + function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_Grid_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], [ THEME.onion_skin, - function() { return 0; }, - function() { return __txt("Onion Skin") }, - function(param) { - var dia = dialogPanelCall(new Panel_Preview_Onion_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); - } + function() /*=>*/ {return 0}, + function() /*=>*/ {return new tooltipHotkey(__txt("Onion Skin"), "Preview", "Onion Skin Settings")}, + function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_Onion_Setting(), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], ]; @@ -349,13 +381,13 @@ function Panel_Preview() : PanelContent() constructor { [ THEME.d3d_preview_settings, function() /*=>*/ {return 0}, - function() /*=>*/ {return __txt("3D Preview Settings")}, + function() /*=>*/ {return new tooltipHotkey(__txt("3D Preview Settings"), "Preview", "3D View Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_3D_Setting(self), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], [ THEME.d3d_snap_settings, function() /*=>*/ {return 0}, - function() /*=>*/ {return __txt("3D Snap Settings")}, + function() /*=>*/ {return new tooltipHotkey(__txt("3D Snap Settings"), "Preview", "3D Snap Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_Snap_Setting(self), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], ]; @@ -364,42 +396,39 @@ function Panel_Preview() : PanelContent() constructor { [ THEME.d3d_preview_settings, function() /*=>*/ {return 0}, - function() /*=>*/ {return __txt("3D SDF Preview Settings")}, + function() /*=>*/ {return new tooltipHotkey(__txt("3D SDF Preview Settings"), "Preview", "3D SDF View Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_3D_SDF_Setting(self), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], [ THEME.d3d_snap_settings, function() /*=>*/ {return 0}, - function() /*=>*/ {return __txt("3D Snap Settings")}, + function() /*=>*/ {return new tooltipHotkey(__txt("3D Snap Settings"), "Preview", "3D Snap Settings")}, function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_Snap_Setting(self), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); } ], ]; - tooltip_center = new tooltipHotkey(__txtx("panel_preview_center_canvas", "Center canvas"), "Preview", "Focus content"); - tooltip_export = new tooltipHotkey(__txtx("panel_preview_export_canvas", "Export canvas"), "Preview", "Save current frame"); - actions = [ [ THEME.lock, - __txtx("panel_preview_lock_preview", "Lock previewing node"), - function() /*=>*/ { locked = !locked; }, + new tooltipHotkey(__txtx("panel_preview_lock_preview", "Lock previewing node"), "Preview", "Toggle Lock"), + toggle_lock, function() /*=>*/ {return !locked}, ], [ THEME.icon_preview_export, - tooltip_export, + new tooltipHotkey(__txtx("panel_preview_export_canvas", "Export canvas"), "Preview", "Save current frame"), function() /*=>*/ { saveCurrentFrame(); }, function() /*=>*/ {return 0}, ], [ THEME.icon_center_canvas, - tooltip_center, + new tooltipHotkey(__txtx("panel_preview_center_canvas", "Center canvas"), "Preview", "Focus content"), function() /*=>*/ { fullView(); }, function() /*=>*/ {return 0}, ], [ THEME.icon_visibility, - __txtx("graph_visibility_title", "Visibility settings"), + new tooltipHotkey(__txtx("graph_visibility_title", "Visibility settings"), "Preview", "View Settings"), function(param) /*=>*/ { dialogPanelCall(new Panel_Preview_View_Setting(self), param.x, param.y, { anchor: ANCHOR.bottom | ANCHOR.left }); }, function() /*=>*/ {return 0}, ], @@ -1976,9 +2005,9 @@ function Panel_Preview() : PanelContent() constructor { var _toolbars = toolbars; switch(d3_active) { - case NODE_3D.none : _toolbars = toolbars; break; - case NODE_3D.polygon : _toolbars = toolbars_3d; break; - case NODE_3D.sdf : _toolbars = toolbars_3d_sdf; break; + case NODE_3D.none : _toolbars = toolbars; break; + case NODE_3D.polygon : _toolbars = toolbars_3d; break; + case NODE_3D.sdf : _toolbars = toolbars_3d_sdf; break; } for( var i = 0, n = array_length(_toolbars); i < n; i++ ) { diff --git a/scripts/panel_preview_3d_sdf_setting/panel_preview_3d_sdf_setting.gml b/scripts/panel_preview_3d_sdf_setting/panel_preview_3d_sdf_setting.gml index 15bc663f5..f85373668 100644 --- a/scripts/panel_preview_3d_sdf_setting/panel_preview_3d_sdf_setting.gml +++ b/scripts/panel_preview_3d_sdf_setting/panel_preview_3d_sdf_setting.gml @@ -1,7 +1,5 @@ function Panel_Preview_3D_SDF_Setting(panel) : Panel_Linear_Setting() constructor { title = __txtx("preview_3d_settings", "3D SDF Preview Settings"); - - w = ui(380); preview_panel = panel; properties_default = [ @@ -11,14 +9,15 @@ function Panel_Preview_3D_SDF_Setting(panel) : Panel_Linear_Setting() constructo if(index == 0) preview_panel.d3_view_camera.view_near = value; else if(index == 1) preview_panel.d3_view_camera.view_far = value; }), - function( ) /*=>*/ {return [ preview_panel.d3_view_camera.view_near, preview_panel.d3_view_camera.view_far ]}, + function() /*=>*/ {return [ preview_panel.d3_view_camera.view_near, preview_panel.d3_view_camera.view_far ]}, function(val) /*=>*/ { preview_panel.d3_view_camera.view_near = val[0]; preview_panel.d3_view_camera.view_far = val[1] }, [ 0.01, 50 ], ), + new __Panel_Linear_Setting_Item( __txt("Draw BG"), new checkBox(function() /*=>*/ { preview_panel.d3_drawBG = !preview_panel.d3_drawBG; }), - function( ) /*=>*/ {return preview_panel.d3_drawBG}, + function() /*=>*/ {return preview_panel.d3_drawBG}, function(val) /*=>*/ { preview_panel.d3_drawBG = val; }, false, ), diff --git a/scripts/panel_preview_3d_setting/panel_preview_3d_setting.gml b/scripts/panel_preview_3d_setting/panel_preview_3d_setting.gml index d17ffad4d..5512d1dd8 100644 --- a/scripts/panel_preview_3d_setting/panel_preview_3d_setting.gml +++ b/scripts/panel_preview_3d_setting/panel_preview_3d_setting.gml @@ -1,7 +1,5 @@ function Panel_Preview_3D_Setting(panel) : Panel_Linear_Setting() constructor { title = __txtx("preview_3d_settings", "3D Preview Settings"); - - w = ui(380); preview_panel = panel; properties_default = [ diff --git a/scripts/panel_preview_grid_setting/panel_preview_grid_setting.gml b/scripts/panel_preview_grid_setting/panel_preview_grid_setting.gml index 4cd8c58fe..a86ffdf5a 100644 --- a/scripts/panel_preview_grid_setting/panel_preview_grid_setting.gml +++ b/scripts/panel_preview_grid_setting/panel_preview_grid_setting.gml @@ -1,59 +1,58 @@ function Panel_Preview_Grid_Setting() : Panel_Linear_Setting() constructor { title = __txtx("preview_grid_settings", "Grid Settings"); - w = ui(380); - - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txt("Pixel Grid"), - new checkBox(function() { PROJECT.previewGrid.pixel = !PROJECT.previewGrid.pixel; }), - function() { return PROJECT.previewGrid.pixel; }, - function(val) { PROJECT.previewGrid.pixel = val; }, - false, - ), - new __Panel_Linear_Setting_Item( - __txt("Enabled"), - new checkBox(function() { PROJECT.previewGrid.show = !PROJECT.previewGrid.show; }), - function() { return PROJECT.previewGrid.show; }, - function(val) { PROJECT.previewGrid.show = val; }, - false, - ), - new __Panel_Linear_Setting_Item( - __txtx("grid_snap", "Snap to grid"), - new checkBox(function() { PROJECT.previewGrid.snap = !PROJECT.previewGrid.snap; }), - function() { return PROJECT.previewGrid.snap; }, - function(val) { PROJECT.previewGrid.snap = val; }, - false, - ), - new __Panel_Linear_Setting_Item( - __txt("Grid size"), - new vectorBox(2, function(value, index) { - var _v = PROJECT.previewGrid.size[index]; - PROJECT.previewGrid.size[index] = max(1, value); - - return _v != max(1, value); - }).setLinkInactiveColor(COLORS._main_icon_light), - function() { return PROJECT.previewGrid.size; }, - function(val) { PROJECT.previewGrid.size = val; }, - [ 16, 16 ], - ), - new __Panel_Linear_Setting_Item( - __txt("Grid opacity"), - slider(0, 1, .05, function(str) { PROJECT.previewGrid.opacity = clamp(real(str), 0, 1); }), - function() { return PROJECT.previewGrid.opacity; }, - function(val) { PROJECT.previewGrid.opacity = val; }, - 0.5, - ), - new __Panel_Linear_Setting_Item( - __txt("Grid color"), - new buttonColor(function(color) { PROJECT.previewGrid.color = color; }, self), - function() { return PROJECT.previewGrid.color; }, - function(val) { PROJECT.previewGrid.color = val; }, - COLORS.panel_preview_grid, - ), - ]; - - setHeight(); - #endregion + properties = [ + new __Panel_Linear_Setting_Item( + __txt("Enabled"), + new checkBox(function() /*=>*/ { PROJECT.previewGrid.show = !PROJECT.previewGrid.show; }), + function() /*=>*/ {return PROJECT.previewGrid.show}, + function(val) /*=>*/ { PROJECT.previewGrid.show = val; }, + false, + ["Preview", "Toggle Grid"] + ), + new __Panel_Linear_Setting_Item( + __txt("Pixel Grid"), + new checkBox(function() /*=>*/ { PROJECT.previewGrid.pixel = !PROJECT.previewGrid.pixel; }), + function() /*=>*/ {return PROJECT.previewGrid.pixel}, + function(val) /*=>*/ { PROJECT.previewGrid.pixel = val; }, + false, + ["Preview", "Toggle Pixel Grid"] + ), + new __Panel_Linear_Setting_Item( + __txtx("grid_snap", "Snap to grid"), + new checkBox(function() /*=>*/ { PROJECT.previewGrid.snap = !PROJECT.previewGrid.snap; }), + function() /*=>*/ {return PROJECT.previewGrid.snap}, + function(val) /*=>*/ { PROJECT.previewGrid.snap = val; }, + false, + ["Preview", "Toggle Snap to Grid"] + ), + new __Panel_Linear_Setting_Item( + __txt("Grid size"), + new vectorBox(2, function(value, index) /*=>*/ { + var _v = PROJECT.previewGrid.size[index]; + PROJECT.previewGrid.size[index] = max(1, value); + + return _v != max(1, value); + }).setLinkInactiveColor(COLORS._main_icon_light), + function() /*=>*/ {return PROJECT.previewGrid.size}, + function(val) /*=>*/ { PROJECT.previewGrid.size = val; }, + [ 16, 16 ], + ), + new __Panel_Linear_Setting_Item( + __txt("Grid opacity"), + slider(0, 1, .05, function(str) /*=>*/ { PROJECT.previewGrid.opacity = clamp(real(str), 0, 1); }), + function() /*=>*/ {return PROJECT.previewGrid.opacity}, + function(val) /*=>*/ { PROJECT.previewGrid.opacity = val; }, + 0.5, + ), + new __Panel_Linear_Setting_Item( + __txt("Grid color"), + new buttonColor(function(color) /*=>*/ { PROJECT.previewGrid.color = color; }, self), + function() /*=>*/ {return PROJECT.previewGrid.color}, + function(val) /*=>*/ { PROJECT.previewGrid.color = val; }, + COLORS.panel_preview_grid, + ), + ]; + + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_preview_onion_setting/panel_preview_onion_setting.gml b/scripts/panel_preview_onion_setting/panel_preview_onion_setting.gml index a8844b3f7..af81db390 100644 --- a/scripts/panel_preview_onion_setting/panel_preview_onion_setting.gml +++ b/scripts/panel_preview_onion_setting/panel_preview_onion_setting.gml @@ -1,54 +1,52 @@ function Panel_Preview_Onion_Setting() : Panel_Linear_Setting() constructor { title = __txtx("preview_onion_skin_settings", "Onion skin Settings"); - w = ui(380); + properties = [ + new __Panel_Linear_Setting_Item( + __txt("Enabled"), + new checkBox(function() /*=>*/ { PROJECT.onion_skin.enabled = !PROJECT.onion_skin.enabled; }), + function() /*=>*/ {return PROJECT.onion_skin.enabled}, + function(val) /*=>*/ { PROJECT.onion_skin.enabled = val; }, + false, + ["Preview", "Toggle Onion Skin"] + ), + new __Panel_Linear_Setting_Item( + __txtx("onion_skin_top", "Draw on top"), + new checkBox(function() /*=>*/ { PROJECT.onion_skin.on_top = !PROJECT.onion_skin.on_top; }), + function() /*=>*/ {return PROJECT.onion_skin.on_top}, + function(val) /*=>*/ { PROJECT.onion_skin.on_top = val; }, + true, + ["Preview", "Toggle Onion Skin view"] + ), + new __Panel_Linear_Setting_Item( + __txtx("onion_skin_frame_step", "Frame step"), + new textBox(TEXTBOX_INPUT.number, function(str) /*=>*/ { PROJECT.onion_skin.step = max(1, round(real(str))); }), + function() /*=>*/ {return PROJECT.onion_skin.step}, + function(val) /*=>*/ { PROJECT.onion_skin.step = val; }, + 1, + ), + new __Panel_Linear_Setting_Item( + __txtx("onion_skin_pre_color", "Pre Color"), + new buttonColor(function(color) /*=>*/ { PROJECT.onion_skin.color[0] = color; }, self), + function() /*=>*/ {return PROJECT.onion_skin.color[0]}, + function(val) /*=>*/ { PROJECT.onion_skin.color[0] = val; }, + c_red, + ), + new __Panel_Linear_Setting_Item( + __txtx("onion_skin_post_color", "Post Color"), + new buttonColor(function(color) /*=>*/ { PROJECT.onion_skin.color[1] = color; }, self), + function() /*=>*/ {return PROJECT.onion_skin.color[1]}, + function(val) /*=>*/ { PROJECT.onion_skin.color[1] = val; }, + c_blue, + ), + new __Panel_Linear_Setting_Item( + __txt("Opacity"), + slider(0, 1, .05, function(str) /*=>*/ { PROJECT.onion_skin.alpha = clamp(real(str), 0, 1); }), + function() /*=>*/ {return PROJECT.onion_skin.alpha}, + function(val) /*=>*/ { PROJECT.onion_skin.alpha = val; }, + 0.5, + ), + ]; - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txt("Enabled"), - new checkBox(function() { PROJECT.onion_skin.enabled = !PROJECT.onion_skin.enabled; }), - function() { return PROJECT.onion_skin.enabled; }, - function(val) { PROJECT.onion_skin.enabled = val; }, - false - ), - new __Panel_Linear_Setting_Item( - __txtx("onion_skin_top", "Draw on top"), - new checkBox(function() { PROJECT.onion_skin.on_top = !PROJECT.onion_skin.on_top; }), - function() { return PROJECT.onion_skin.on_top; }, - function(val) { PROJECT.onion_skin.on_top = val; }, - true - ), - new __Panel_Linear_Setting_Item( - __txtx("onion_skin_frame_step", "Frame step"), - new textBox(TEXTBOX_INPUT.number, function(str) { PROJECT.onion_skin.step = max(1, round(real(str))); }), - function() { return PROJECT.onion_skin.step; }, - function(val) { PROJECT.onion_skin.step = val; }, - 1 - ), - new __Panel_Linear_Setting_Item( - __txtx("onion_skin_pre_color", "Pre Color"), - new buttonColor(function(color) { PROJECT.onion_skin.color[0] = color; }, self), - function() { return PROJECT.onion_skin.color[0]; }, - function(val) { PROJECT.onion_skin.color[0] = val; }, - c_red - ), - new __Panel_Linear_Setting_Item( - __txtx("onion_skin_post_color", "Post Color"), - new buttonColor(function(color) { PROJECT.onion_skin.color[1] = color; }, self), - function() { return PROJECT.onion_skin.color[1]; }, - function(val) { PROJECT.onion_skin.color[1] = val; }, - c_blue - ), - new __Panel_Linear_Setting_Item( - __txt("Opacity"), - slider(0, 1, .05, function(str) { PROJECT.onion_skin.alpha = clamp(real(str), 0, 1); }), - function() { return PROJECT.onion_skin.alpha; }, - function(val) { PROJECT.onion_skin.alpha = val; }, - 0.5 - ), - ]; - - setHeight(); - #endregion + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_preview_snap_setting/panel_preview_snap_setting.gml b/scripts/panel_preview_snap_setting/panel_preview_snap_setting.gml index 64dc9680d..9ed921b41 100644 --- a/scripts/panel_preview_snap_setting/panel_preview_snap_setting.gml +++ b/scripts/panel_preview_snap_setting/panel_preview_snap_setting.gml @@ -1,34 +1,30 @@ function Panel_Preview_Snap_Setting(panel) : Panel_Linear_Setting() constructor { title = __txtx("preview_snap_settings", "3D Snap Settings"); - - w = ui(380); preview_panel = panel; - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txt("Snap"), - new checkBox(function() { preview_panel.d3_tool_snap = !preview_panel.d3_tool_snap; }), - function() { return preview_panel.d3_tool_snap }, - function(val) { preview_panel.d3_tool_snap = val; }, - false, - ), - new __Panel_Linear_Setting_Item( - __txt("Linear"), - new textBox(TEXTBOX_INPUT.number, function(val) { preview_panel.d3_tool_snap_position = val; }), - function() { return preview_panel.d3_tool_snap_position }, - function(val) { preview_panel.d3_tool_snap_position = val; }, - 1, - ), - new __Panel_Linear_Setting_Item( - __txt("Rotation"), - new textBox(TEXTBOX_INPUT.number, function(val) { preview_panel.d3_tool_snap_rotation = val; }), - function() { return preview_panel.d3_tool_snap_rotation }, - function(val) { preview_panel.d3_tool_snap_rotation = val; }, - 15, - ), - ] - - setHeight(); - #endregion + properties = [ + new __Panel_Linear_Setting_Item( + __txt("Snap"), + new checkBox(function() { preview_panel.d3_tool_snap = !preview_panel.d3_tool_snap; }), + function() { return preview_panel.d3_tool_snap }, + function(val) { preview_panel.d3_tool_snap = val; }, + false, + ), + new __Panel_Linear_Setting_Item( + __txt("Linear"), + new textBox(TEXTBOX_INPUT.number, function(val) { preview_panel.d3_tool_snap_position = val; }), + function() { return preview_panel.d3_tool_snap_position }, + function(val) { preview_panel.d3_tool_snap_position = val; }, + 1, + ), + new __Panel_Linear_Setting_Item( + __txt("Rotation"), + new textBox(TEXTBOX_INPUT.number, function(val) { preview_panel.d3_tool_snap_rotation = val; }), + function() { return preview_panel.d3_tool_snap_rotation }, + function(val) { preview_panel.d3_tool_snap_rotation = val; }, + 15, + ), + ] + + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_preview_view_settings/panel_preview_view_settings.gml b/scripts/panel_preview_view_settings/panel_preview_view_settings.gml index cd1272cb4..b4d672043 100644 --- a/scripts/panel_preview_view_settings/panel_preview_view_settings.gml +++ b/scripts/panel_preview_view_settings/panel_preview_view_settings.gml @@ -1,27 +1,24 @@ function Panel_Preview_View_Setting(previewPanel) : Panel_Linear_Setting() constructor { title = __txtx("preview_view_settings", "View Settings"); - - w = ui(380); self.previewPanel = previewPanel; - #region data - properties = [ - new __Panel_Linear_Setting_Item( - __txt("Info"), - new checkBox(function() { previewPanel.show_info = !previewPanel.show_info; }), - function() { return previewPanel.show_info }, - function(val) { previewPanel.show_info = val; }, - true, - ), - new __Panel_Linear_Setting_Item( - __txt("View Control"), - new buttonGroup([ "None", "Left", "Right" ], function(val) { previewPanel.show_view_control = val; }), - function() { return previewPanel.show_view_control }, - function(val) { previewPanel.show_view_control = val; }, - 1, - ), - ]; - - setHeight(); - #endregion + properties = [ + new __Panel_Linear_Setting_Item( + __txt("Info"), + new checkBox(function() /*=>*/ { previewPanel.show_info = !previewPanel.show_info; }), + function() /*=>*/ {return previewPanel.show_info}, + function(val) /*=>*/ { previewPanel.show_info = val; }, + true, + ["Preview", "Toggle Show Info"] + ), + new __Panel_Linear_Setting_Item( + __txt("View Control"), + new buttonGroup([ "None", "Left", "Right" ], function(val) /*=>*/ { previewPanel.show_view_control = val; }), + function() /*=>*/ {return previewPanel.show_view_control}, + function(val) /*=>*/ { previewPanel.show_view_control = val; }, + 1, + ), + ]; + + setHeight(); } \ No newline at end of file diff --git a/scripts/panel_tunnels/panel_tunnels.gml b/scripts/panel_tunnels/panel_tunnels.gml index f2fd679c4..e1e26630e 100644 --- a/scripts/panel_tunnels/panel_tunnels.gml +++ b/scripts/panel_tunnels/panel_tunnels.gml @@ -1,57 +1,55 @@ function Panel_Tunnels() : PanelContent() constructor { title = __txt("Tunnels"); padding = 8; - - #region data - w = ui(320); - h = ui(480); - - build_x = 0; - build_y = 0; - + + w = ui(320); + h = ui(480); + + build_x = 0; + build_y = 0; + + tunnel_ins = []; + tunnel_select = noone; + tunnel_hover = noone; + + function scanNodes() { tunnel_ins = []; - tunnel_select = noone; - tunnel_hover = noone; - function scanNodes() { - tunnel_ins = []; + for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) { + var node = PROJECT.allNodes[i]; - for (var i = 0, n = array_length(PROJECT.allNodes); i < n; i++) { - var node = PROJECT.allNodes[i]; - - if(instanceof(node) == "Node_Tunnel_In") - array_push(tunnel_ins, node); - } + if(instanceof(node) == "Node_Tunnel_In") + array_push(tunnel_ins, node); } - scanNodes(); + } + scanNodes(); + + search_string = ""; + keyboard_lastchar = ""; + keyboard_lastkey = -1; + KEYBOARD_STRING = ""; + + search_res = []; + tb_search = new textBox(TEXTBOX_INPUT.text, function(str) { + search_string = string(str); + searchNodes(); + }); + + tb_search.align = fa_left; + tb_search.auto_update = true; + tb_search.boxColor = COLORS._main_icon_light; + WIDGET_CURRENT = tb_search; + + function searchNodes() { + search_res = []; + for( var i = 0, n = array_length(tunnel_ins); i < n; i++ ) { + var node = tunnel_ins[i]; + var key = node.inputs[0].getValue(0); - search_string = ""; - keyboard_lastchar = ""; - KEYBOARD_STRING = ""; - keyboard_lastkey = -1; - - search_res = []; - tb_search = new textBox(TEXTBOX_INPUT.text, function(str) { - search_string = string(str); - searchNodes(); - }); - - tb_search.align = fa_left; - tb_search.auto_update = true; - tb_search.boxColor = COLORS._main_icon_light; - WIDGET_CURRENT = tb_search; - - function searchNodes() { - search_res = []; - for( var i = 0, n = array_length(tunnel_ins); i < n; i++ ) { - var node = tunnel_ins[i]; - var key = node.inputs[0].getValue(0); - - if(string_pos(search_string, key) == 0) continue; - array_push(search_res, node); - } + if(string_pos(search_string, key) == 0) continue; + array_push(search_res, node); } - #endregion + } function onResize() { sc_tunnel.resize(w - ui(padding + padding), h - ui(padding + padding) - ui(28)); } diff --git a/scripts/scrollBox/scrollBox.gml b/scripts/scrollBox/scrollBox.gml index 48df9ca66..62b43a6bc 100644 --- a/scripts/scrollBox/scrollBox.gml +++ b/scripts/scrollBox/scrollBox.gml @@ -37,6 +37,7 @@ function scrollBox(_data, _onModify, update_hover = true) : widget() constructor var ind = array_find(data, curr_text); open = true; + FOCUS_BEFORE = FOCUS; with(dialogCall(horizontal? o_dialog_scrollbox_horizontal : o_dialog_scrollbox, x + open_rx, y + open_ry)) { initVal = ind; font = other.font; diff --git a/scripts/string_functions/string_functions.gml b/scripts/string_functions/string_functions.gml index 4fe4e5a76..f0b1b9bcc 100644 --- a/scripts/string_functions/string_functions.gml +++ b/scripts/string_functions/string_functions.gml @@ -40,8 +40,9 @@ function filename_name_only(name) { return string_replace(name, filename_ext(name), "") } -function string_to_var(str) { INLINE return string_replace_all(string_replace_all(string_lower(str), " ", "_"), "/", "_"); } -function string_quote(str) { INLINE return $"\"{str}\""; } +function string_to_var(str) { INLINE return string_replace_all(string_replace_all(string_lower(str), " ", "_"), "/", "_"); } +function string_to_var2(context, name) { INLINE return string_to_var(context == ""? name : $"{context} {name}"); } +function string_quote(str) { INLINE return $"\"{str}\""; } function array_to_string(arr) { if(!is_array(arr)) return string(arr); diff --git a/scripts/theme_definition/theme_definition.gml b/scripts/theme_definition/theme_definition.gml index 77ec3548a..042e5b9e0 100644 --- a/scripts/theme_definition/theme_definition.gml +++ b/scripts/theme_definition/theme_definition.gml @@ -38,6 +38,7 @@ function Theme() constructor { chat = s_chat; checkbox_on_start = s_checkbox_on_start; circle_16 = s_circle_16; + circle_hotkey = s_circle_hotkey; circle = s_circle_8; circle_toggle_8 = s_circle_toggle_8; code_show_auto = s_code_show_auto; diff --git a/scripts/tooltip_hotkey/tooltip_hotkey.gml b/scripts/tooltip_hotkey/tooltip_hotkey.gml index dbf7705a5..3d4ef9dae 100644 --- a/scripts/tooltip_hotkey/tooltip_hotkey.gml +++ b/scripts/tooltip_hotkey/tooltip_hotkey.gml @@ -32,4 +32,51 @@ function tooltipHotkey(text, context = "", name = "") constructor { var _hy = my + th / 2 + ui(10); hotkey_draw(keyStr, _hx, _hy); } +} + +function tooltipHotkey_assign(text, hotkey = "") constructor { + self.text = text; + self.hotkey = hotkey; + + static drawTooltip = function() { + var _uns = text == noone; + var _txt = _uns? [ __txt("Unassigned") ] : text; + + draw_set_font(f_p1); + var _w1 = string_width(hotkey); + + draw_set_font(f_p0); + var _w2 = 0; + var th = 0; + + for (var i = 0, n = array_length(_txt); i < n; i++) { + var _t = _txt[i]; + var _ts = is_string(_t)? _t : _t.name; + + _w2 = max(_w2, string_width(_ts)); + th += string_height(_ts); + } + + var tw = min(WIN_W - ui(32), _w1 + ui(24) + _w2); + var mx = min(mouse_mx + ui(16), WIN_W - (tw + ui(16))); + var my = min(mouse_my + ui(16), WIN_H - (th + ui(16))); + + draw_sprite_stretched(THEME.textbox, 3, mx, my, tw + ui(16), th + ui(16)); + draw_sprite_stretched(THEME.textbox, 0, mx, my, tw + ui(16), th + ui(16)); + + var txy = my + ui(8); + + draw_set_text(f_p0, fa_left, fa_top, _uns? COLORS._main_text_sub : COLORS._main_text); + for (var i = 0, n = array_length(_txt); i < n; i++) { + var _t = _txt[i]; + var _ts = is_string(_t)? _t : _t.name; + + draw_text(mx + ui(8), txy, _ts); + txy += string_height(_ts); + } + + var _hx = mx + tw + ui(6); + var _hy = my + line_get_height() / 2 + ui(10); + hotkey_draw(hotkey, _hx, _hy); + } } \ No newline at end of file diff --git a/sprites/s_circle_hotkey/54ca7373-f3a6-49dc-80a6-ba9f47977265.png b/sprites/s_circle_hotkey/54ca7373-f3a6-49dc-80a6-ba9f47977265.png new file mode 100644 index 000000000..6af50d8f2 Binary files /dev/null and b/sprites/s_circle_hotkey/54ca7373-f3a6-49dc-80a6-ba9f47977265.png differ diff --git a/sprites/s_circle_hotkey/8c2842ec-1261-4261-aa81-5b4e6589979c.png b/sprites/s_circle_hotkey/8c2842ec-1261-4261-aa81-5b4e6589979c.png new file mode 100644 index 000000000..d2b46990d Binary files /dev/null and b/sprites/s_circle_hotkey/8c2842ec-1261-4261-aa81-5b4e6589979c.png differ diff --git a/sprites/s_circle_hotkey/9a6e4559-d82b-498d-9a21-3f7c70d6193b.png b/sprites/s_circle_hotkey/9a6e4559-d82b-498d-9a21-3f7c70d6193b.png new file mode 100644 index 000000000..42087e5c6 Binary files /dev/null and b/sprites/s_circle_hotkey/9a6e4559-d82b-498d-9a21-3f7c70d6193b.png differ diff --git a/sprites/s_circle_hotkey/9d754822-f194-49ac-bcdd-0382b7106c1f.png b/sprites/s_circle_hotkey/9d754822-f194-49ac-bcdd-0382b7106c1f.png new file mode 100644 index 000000000..62db47bb1 Binary files /dev/null and b/sprites/s_circle_hotkey/9d754822-f194-49ac-bcdd-0382b7106c1f.png differ diff --git a/sprites/s_circle_hotkey/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8.png b/sprites/s_circle_hotkey/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8.png new file mode 100644 index 000000000..723667620 Binary files /dev/null and b/sprites/s_circle_hotkey/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8.png differ diff --git a/sprites/s_circle_hotkey/f1285d37-7d57-4c8b-9504-10402561d410.png b/sprites/s_circle_hotkey/f1285d37-7d57-4c8b-9504-10402561d410.png new file mode 100644 index 000000000..d102d4515 Binary files /dev/null and b/sprites/s_circle_hotkey/f1285d37-7d57-4c8b-9504-10402561d410.png differ diff --git a/sprites/s_circle_hotkey/layers/54ca7373-f3a6-49dc-80a6-ba9f47977265/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/54ca7373-f3a6-49dc-80a6-ba9f47977265/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..6af50d8f2 Binary files /dev/null and b/sprites/s_circle_hotkey/layers/54ca7373-f3a6-49dc-80a6-ba9f47977265/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/layers/8c2842ec-1261-4261-aa81-5b4e6589979c/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/8c2842ec-1261-4261-aa81-5b4e6589979c/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..d2b46990d Binary files /dev/null and b/sprites/s_circle_hotkey/layers/8c2842ec-1261-4261-aa81-5b4e6589979c/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/layers/9a6e4559-d82b-498d-9a21-3f7c70d6193b/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/9a6e4559-d82b-498d-9a21-3f7c70d6193b/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..42087e5c6 Binary files /dev/null and b/sprites/s_circle_hotkey/layers/9a6e4559-d82b-498d-9a21-3f7c70d6193b/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/layers/9d754822-f194-49ac-bcdd-0382b7106c1f/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/9d754822-f194-49ac-bcdd-0382b7106c1f/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..62db47bb1 Binary files /dev/null and b/sprites/s_circle_hotkey/layers/9d754822-f194-49ac-bcdd-0382b7106c1f/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/layers/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..723667620 Binary files /dev/null and b/sprites/s_circle_hotkey/layers/bf6e94ad-78c1-4f50-b0a0-4536e8e445d8/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/layers/f1285d37-7d57-4c8b-9504-10402561d410/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png b/sprites/s_circle_hotkey/layers/f1285d37-7d57-4c8b-9504-10402561d410/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png new file mode 100644 index 000000000..d102d4515 Binary files /dev/null and b/sprites/s_circle_hotkey/layers/f1285d37-7d57-4c8b-9504-10402561d410/6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e.png differ diff --git a/sprites/s_circle_hotkey/s_circle_hotkey.yy b/sprites/s_circle_hotkey/s_circle_hotkey.yy new file mode 100644 index 000000000..1483ed466 --- /dev/null +++ b/sprites/s_circle_hotkey/s_circle_hotkey.yy @@ -0,0 +1,110 @@ +{ + "$GMSprite":"", + "%Name":"s_circle_hotkey", + "bboxMode":0, + "bbox_bottom":3, + "bbox_left":0, + "bbox_right":3, + "bbox_top":0, + "collisionKind":1, + "collisionTolerance":0, + "DynamicTexturePage":false, + "edgeFiltering":false, + "For3D":false, + "frames":[ + {"$GMSpriteFrame":"","%Name":"f1285d37-7d57-4c8b-9504-10402561d410","name":"f1285d37-7d57-4c8b-9504-10402561d410","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + {"$GMSpriteFrame":"","%Name":"8c2842ec-1261-4261-aa81-5b4e6589979c","name":"8c2842ec-1261-4261-aa81-5b4e6589979c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + {"$GMSpriteFrame":"","%Name":"9d754822-f194-49ac-bcdd-0382b7106c1f","name":"9d754822-f194-49ac-bcdd-0382b7106c1f","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + {"$GMSpriteFrame":"","%Name":"54ca7373-f3a6-49dc-80a6-ba9f47977265","name":"54ca7373-f3a6-49dc-80a6-ba9f47977265","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + {"$GMSpriteFrame":"","%Name":"9a6e4559-d82b-498d-9a21-3f7c70d6193b","name":"9a6e4559-d82b-498d-9a21-3f7c70d6193b","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + {"$GMSpriteFrame":"","%Name":"bf6e94ad-78c1-4f50-b0a0-4536e8e445d8","name":"bf6e94ad-78c1-4f50-b0a0-4536e8e445d8","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + ], + "gridX":0, + "gridY":0, + "height":4, + "HTile":false, + "layers":[ + {"$GMImageLayer":"","%Name":"6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e","blendMode":0,"displayName":"default","isLocked":false,"name":"6840640d-5e89-4d5a-aab4-1fe5bbc0fa4e","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,}, + ], + "name":"s_circle_hotkey", + "nineSlice":null, + "origin":4, + "parent":{ + "name":"icon", + "path":"folders/theme/icon.yy", + }, + "preMultiplyAlpha":false, + "resourceType":"GMSprite", + "resourceVersion":"2.0", + "sequence":{ + "$GMSequence":"", + "%Name":"s_circle_hotkey", + "autoRecord":true, + "backdropHeight":768, + "backdropImageOpacity":0.5, + "backdropImagePath":"", + "backdropWidth":1366, + "backdropXOffset":0.0, + "backdropYOffset":0.0, + "events":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":6.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "name":"s_circle_hotkey", + "playback":1, + "playbackSpeed":30.0, + "playbackSpeedType":0, + "resourceType":"GMSequence", + "resourceVersion":"2.0", + "showBackdrop":true, + "showBackdropImage":false, + "timeUnits":1, + "tracks":[ + {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore":"","Keyframes":[ + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"f1285d37-7d57-4c8b-9504-10402561d410","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"99b33a02-c0a0-4b9f-8bcd-4241c6b1e6aa","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"8c2842ec-1261-4261-aa81-5b4e6589979c","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"54c14154-377f-44fa-9b06-ee6bb3d0fccf","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"9d754822-f194-49ac-bcdd-0382b7106c1f","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"0fea8ded-5900-4e21-a304-6f2e9bcd3d22","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"54ca7373-f3a6-49dc-80a6-ba9f47977265","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"205ee201-23dd-4366-afdb-e339411da0ea","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"9a6e4559-d82b-498d-9a21-3f7c70d6193b","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"33e5a7df-69b4-4215-a61b-0e81707b3acf","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"bf6e94ad-78c1-4f50-b0a0-4536e8e445d8","path":"sprites/s_circle_hotkey/s_circle_hotkey.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"535a7ff0-4305-4ea2-af7a-11ca0ea64a84","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + ],"resourceType":"KeyframeStore","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange":null, + "volume":1.0, + "xorigin":2, + "yorigin":2, + }, + "swatchColours":null, + "swfPrecision":0.5, + "textureGroupId":{ + "name":"Default", + "path":"texturegroups/Default", + }, + "type":0, + "VTile":false, + "width":4, +} \ No newline at end of file