From cb3566cee712365663d597738fc245d811598263 Mon Sep 17 00:00:00 2001 From: MakhamDev Date: Wed, 4 Oct 2023 12:21:45 +0700 Subject: [PATCH] Preference section, tools delay/hotkeys. --- objects/o_dialog_preference/Create_0.gml | 190 +++++++++++++++--- objects/o_dialog_preference/Draw_64.gml | 46 +---- scripts/__node_3d_object/__node_3d_object.gml | 6 +- scripts/hotkey_data/hotkey_data.gml | 52 ++++- scripts/node_canvas/node_canvas.gml | 20 +- scripts/node_data/node_data.gml | 4 +- scripts/node_path/node_path.gml | 2 +- scripts/node_tool/node_tool.gml | 12 +- scripts/panel_preview/panel_preview.gml | 19 +- scripts/preferences/preferences.gml | 5 + scripts/scrollPane/scrollPane.gml | 3 +- scripts/string_splice/string_splice.gml | 1 + 12 files changed, 264 insertions(+), 96 deletions(-) diff --git a/objects/o_dialog_preference/Create_0.gml b/objects/o_dialog_preference/Create_0.gml index 727ba56f9..6a556a82f 100644 --- a/objects/o_dialog_preference/Create_0.gml +++ b/objects/o_dialog_preference/Create_0.gml @@ -16,6 +16,8 @@ event_inherited(); dialog_h_min = ui(480); onResize = function() { + sp_page.resize(page_width - ui(4), dialog_h - ui(title_height + padding)); + sp_pref.resize(dialog_w - ui(padding + padding + page_width), dialog_h - ui(title_height + padding)); sp_hotkey.resize(dialog_w - ui(padding + padding + page_width), dialog_h - ui(title_height + padding)); sp_colors.resize(dialog_w - ui(padding + padding + page_width), dialog_h - (title_height + ui(padding + 40))); @@ -31,6 +33,64 @@ event_inherited(); section_current = ""; sections = array_create(array_length(page)); + + sp_page = new scrollPane(page_width - ui(4), dialog_h - ui(title_height + padding), function(_y, _m, _r) { + draw_clear_alpha(COLORS.panel_bg_clear, 0); + var ww = sp_page.surface_w; + var hh = 0; + + var yl = _y; + var hg = line_get_height(f_p0, 16); + var hs = line_get_height(f_p1, 8); + + for(var i = 0; i < array_length(page); i++) { + draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); + if(i == page_current) { + draw_sprite_stretched(THEME.ui_panel_bg, 0, 0, yl, ww, hg); + } else if(sHOVER && point_in_rectangle(_m[0], _m[1], 0, yl, ww, yl + hg)) { + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, yl, ww, hg, c_white, 0.75); + if(mouse_click(mb_left, sFOCUS)) + page_current = i; + } + + draw_text_add(ui(8), yl + hg / 2, page[i]); + yl += hg; + hh += hg; + + if(i == page_current && sections[i] != 0) { + for( var j = 0, m = array_length(sections[i]); j < m; j++ ) { + var sect = sections[i][j]; + + draw_set_text(f_p1, fa_left, fa_center, section_current == sect[0]? COLORS._main_text : COLORS._main_text_sub); + + if(sHOVER && point_in_rectangle(_m[0], _m[1], 0, yl, ww, yl + hs - 1)) { + if(mouse_press(mb_left, sFOCUS)) + sect[1].scroll_y_to = -sect[2]; + + draw_set_color(COLORS._main_text); + } + + var _xx = ui(8 + 16); + var sect_title = sect[0]; + var sp = string_split(sect_title, " "); + if(sp[0] == "-") { + _xx += ui(16); + sect_title = string_replace(sect_title, "- ", ""); + } + + draw_text_add(_xx, yl + hs / 2, sect_title); + + yl += hs; + hh += hs; + } + } + } + + return hh; + }); + + sp_page.always_scroll = true; + sp_page.show_scroll = false; #endregion #region general @@ -357,6 +417,7 @@ event_inherited(); var category = ""; var sect = []; + var psect = ""; for( var i = 0, n = array_length(COLOR_KEYS); i < n; i++ ) { var key = COLOR_KEYS[i]; @@ -373,11 +434,12 @@ event_inherited(); var _sect = string_title(category); draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); - draw_text(ui(16), yy, _sect); + draw_text_add(ui(8), yy - ui(4), _sect); - array_push(sect, [ _sect, sp_colors, hh ]); - if(yy > 0 && section_current == "") - section_current = _sect; + array_push(sect, [ _sect, sp_colors, hh + ui(12) ]); + if(yy >= 0 && section_current == "") + section_current = psect; + psect = _sect; yy += string_height(category) + ui(8); hh += string_height(category) + ui(8); @@ -392,7 +454,7 @@ event_inherited(); keyStr = string_title(keyStr); draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(ui(8), yy + th / 2, keyStr); + draw_text_add(ui(24), yy + th / 2, keyStr); var b = buttonInstant(THEME.button, cx, yy + ui(2), cw, ch, _m, sFOCUS, sHOVER && sp_colors.hover); draw_sprite_stretched_ext(THEME.color_picker_sample, 0, cx + ui(2), yy + ui(2 + 2), cw - ui(4), ch - ui(4), val, 1); @@ -457,7 +519,8 @@ event_inherited(); var yy = _y + ui(8); var ind = 0; - var sect = []; + var sect = []; + var psect = ""; for( var i = 0, n = ds_list_size(pref_hot); i < n; i++ ) { var _pref = pref_hot[| i]; @@ -475,7 +538,7 @@ event_inherited(); sp_hotkey.surface_w, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); - draw_text(ui(16), yy + hh, _pref[0]); + draw_text_add(ui(24), yy + hh, _pref[0]); _pref[2].setFocusHover(sFOCUS, sHOVER && sp_hotkey.hover); @@ -513,11 +576,12 @@ event_inherited(); var _grp = group == ""? __txt("Global") : group; draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); - draw_text(ui(16), yy + hh, _grp); + draw_text_add(ui(8), yy + hh, _grp); - array_push(sect, [ _grp, sp_hotkey, hh ]); - if(yy > 0 && section_current == "") - section_current = _grp; + array_push(sect, [ _grp, sp_hotkey, hh + ui(12) ]); + if(yy + hh >= 0 && section_current == "") + section_current = psect; + psect = _grp; hh += string_height("l") + ui(16); currGroup = group; @@ -529,7 +593,7 @@ event_inherited(); } draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); - draw_text(ui(16), yy + hh, name); + draw_text_add(ui(24), yy + hh, name); var dk = key_get_name(key.key, key.modi); var kw = string_width(dk); @@ -600,6 +664,8 @@ event_inherited(); if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset"), THEME.refresh_s) == 2) { key.key = dkey; key.modi = dmod; + + PREF_SAVE(); } } @@ -607,22 +673,100 @@ event_inherited(); } } - if(modified) { - var bx = x1 - ui(32); - var by = yy + ui(2); - if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset all"), THEME.refresh_s) == 2) { - for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) { - var ll = HOTKEYS[? HOTKEY_CONTEXT[| j]]; - for(var i = 0; i < ds_list_size(ll); i++) { - var key = ll[| i]; - key.key = key.dKey; - key.modi = key.dModi; + draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); + draw_text_add(ui(8), yy + hh, "Nodes (Single key only)"); + array_push(sect, [ "Nodes", sp_hotkey, hh + ui(12) ]); + hh += string_height("l") + ui(16); + + var keys = struct_get_names(HOTKEYS_CUSTOM); + for( var i = 0, n = array_length(keys); i < n; i++ ) { + var _key = keys[i]; + var hotkeys = struct_get_names(HOTKEYS_CUSTOM[$ _key]); + + var _key_t = string_title(string_replace(_key, "Node_", "")); + + draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); + draw_text_add(ui(8), yy + hh, _key_t); + array_push(sect, [ "- " + _key_t, sp_hotkey, hh + ui(12) ]); + if(yy + hh >= 0 && section_current == "") + section_current = psect; + psect = "- " + _key_t; + hh += string_height("l") + ui(16); + + for( var j = 0, m = array_length(hotkeys); j < m; j++ ) { + var _hotkey = hotkeys[j]; + var hotkey = HOTKEYS_CUSTOM[$ _key][$ _hotkey]; + + var name = __txt(_hotkey); + var pkey = hotkey.key; + if(pkey == "") pkey = "None"; + + if(j % 2 == 0) + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, yy + hh - padd, sp_hotkey.surface_w, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); + + draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); + draw_text_add(ui(24), yy + hh, name); + + var kw = string_width(pkey); + var bx = key_x1 - ui(40) - kw; + var key = hotkey; + + if(hk_editing == key) { + if(keyboard_check_pressed(vk_escape)) { + key.key = ""; + PREF_SAVE(); + } else if(keyboard_check_pressed(vk_anykey)) { + key.key = string_upper(keyboard_lastchar); + PREF_SAVE(); + } + + draw_sprite_stretched(THEME.button_hide, 2, key_x1 - ui(40) - kw, yy + hh - ui(6), kw + ui(32), th + ui(12)); + } else { + var bx = key_x1 - ui(40) - kw; + var by = yy + hh - ui(6); + if(buttonInstant(THEME.button_hide, bx, by, kw + ui(32), th + ui(12), _m, sFOCUS, sHOVER && sp_hotkey.hover) == 2) { + hk_editing = key; + keyboard_lastchar = pkey; } } + + var cc = (hotkey.key == "")? COLORS._main_text_sub : COLORS._main_text; + if(hk_editing == key) cc = COLORS._main_text_accent; + + draw_set_text(f_p0, fa_right, fa_top, cc); + draw_text(key_x1 - ui(24), yy + hh, pkey); + + if(key.key != key.dkey) { + modified = true; + var bx = x1 - ui(32); + var by = yy + hh; + if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset"), THEME.refresh_s) == 2) { + key.key = key.dkey; + + PREF_SAVE(); + } + } + + hh += th + padd * 2; } } - + //if(modified) { + // var bx = x1 - ui(32); + // var by = yy + ui(2); + // if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset all"), THEME.refresh_s) == 2) { + // for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) { + // var ll = HOTKEYS[? HOTKEY_CONTEXT[| j]]; + // for(var i = 0; i < ds_list_size(ll); i++) { + // var key = ll[| i]; + // key.key = key.dKey; + // key.modi = key.dModi; + + // PREF_SAVE(); + // } + // } + // } + //} sections[3] = sect; diff --git a/objects/o_dialog_preference/Draw_64.gml b/objects/o_dialog_preference/Draw_64.gml index 08cf0231f..b064fc0bc 100644 --- a/objects/o_dialog_preference/Draw_64.gml +++ b/objects/o_dialog_preference/Draw_64.gml @@ -17,44 +17,8 @@ if !ready exit; #endregion #region page - var xx = dialog_x + ui(padding + 8); - var yy = dialog_y + ui(title_height); - var yl = yy - ui(8); - var hg = line_get_height(f_p0, 16); - var hs = line_get_height(f_p1, 8); - - for(var i = 0; i < array_length(page); i++) { - draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); - if(i == page_current) { - draw_sprite_stretched(THEME.ui_panel_bg, 0, dialog_x + ui(padding) - ui(8), yl, page_width + ui(8), hg); - } else if(sHOVER && point_in_rectangle(mouse_mx, mouse_my, dialog_x, yl, dialog_x + page_width + ui(padding + 8), yl + hg)) { - draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, dialog_x + ui(padding) - ui(8), yl, page_width + ui(8), hg, c_white, 0.5); - if(mouse_click(mb_left, sFOCUS)) - page_current = i; - } - - draw_text(xx, yl + hg / 2, page[i]); - yl += hg; - - if(i == page_current && sections[i] != 0) { - for( var j = 0, m = array_length(sections[i]); j < m; j++ ) { - var sect = sections[i][j]; - - draw_set_text(f_p1, fa_left, fa_center, section_current == sect[0]? COLORS._main_text : COLORS._main_text_sub); - - if(sHOVER && point_in_rectangle(mouse_mx, mouse_my, dialog_x, yl, dialog_x + page_width + ui(padding + 8), yl + hs - 1)) { - if(mouse_press(mb_left, sFOCUS)) - sect[1].scroll_y_to = -sect[2]; - - draw_set_color(COLORS._main_text); - } - - draw_text(xx + ui(16), yl + hs / 2, sect[0]); - - yl += hs; - } - } - } + sp_page.setFocusHover(sFOCUS, sHOVER); + sp_page.draw(dialog_x + ui(padding), dialog_y + ui(title_height)); #endregion #region draw @@ -89,7 +53,7 @@ if !ready exit; var _x = dialog_x + dialog_w - ui(8); var bx = _x - ui(48); var _txt = __txtx("pref_reset_color", "Reset colors"); - var b = buttonInstant(THEME.button_hide, bx, yy, ui(32), ui(32), mouse_ui, sFOCUS, sHOVER, _txt, THEME.refresh); + var b = buttonInstant(THEME.button_hide, bx, py, ui(32), ui(32), mouse_ui, sFOCUS, sHOVER, _txt, THEME.refresh); if(b == 2) { var path = DIRECTORY + "themes/" + PREF_MAP[? "theme"] + "/override.json"; if(file_exists(path)) file_delete(path); @@ -100,9 +64,9 @@ if !ready exit; var x2 = _x - ui(32); draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(x1 + ui(8), yy + _h / 2, __txt("Theme")); + draw_text(x1 + ui(8), py + _h / 2, __txt("Theme")); sb_theme.setFocusHover(sFOCUS, sHOVER); - sb_theme.draw(x2 - ui(24) - _w, yy, _w, _h, PREF_MAP[? "theme"]); + sb_theme.draw(x2 - ui(24) - _w, py, _w, _h, PREF_MAP[? "theme"]); sp_colors.setFocusHover(sFOCUS, sHOVER); sp_colors.draw(px, py + ui(40)); diff --git a/scripts/__node_3d_object/__node_3d_object.gml b/scripts/__node_3d_object/__node_3d_object.gml index fee5fab9a..0902fc7b0 100644 --- a/scripts/__node_3d_object/__node_3d_object.gml +++ b/scripts/__node_3d_object/__node_3d_object.gml @@ -39,9 +39,9 @@ function Node_3D_Object(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr #endregion #region ---- tools ---- - tool_pos = new NodeTool( "Transform", THEME.tools_3d_transform ); - tool_rot = new NodeTool( "Rotate", THEME.tools_3d_rotate ); - tool_sca = new NodeTool( "Scale", THEME.tools_3d_scale ); + tool_pos = new NodeTool( "Transform", THEME.tools_3d_transform, "Node_3D_Object" ); + tool_rot = new NodeTool( "Rotate", THEME.tools_3d_rotate, "Node_3D_Object" ); + tool_sca = new NodeTool( "Scale", THEME.tools_3d_scale, "Node_3D_Object" ); tools = [ tool_pos, tool_rot, tool_sca ]; tool_axis_edit = new scrollBox([ "local", "global" ], function(val) { tool_attribute.context = val; }); diff --git a/scripts/hotkey_data/hotkey_data.gml b/scripts/hotkey_data/hotkey_data.gml index a99085935..162f8442e 100644 --- a/scripts/hotkey_data/hotkey_data.gml +++ b/scripts/hotkey_data/hotkey_data.gml @@ -8,13 +8,58 @@ "Rectangle": new hotkeySimple("N"), "Ellipse": new hotkeySimple("M"), "Fill": new hotkeySimple("F"), - } + }, + "Node_Mesh_Warp": { + "Edit control point": new hotkeySimple("V"), + "Pin mesh": new hotkeySimple("P"), + "Mesh edit": new hotkeySimple("M"), + "Anchor remove": new hotkeySimple("E"), + }, + "Node_Armature": { + "Move": new hotkeySimple("V"), + "Scale": new hotkeySimple("S"), + "Add bones": new hotkeySimple("A"), + "Remove bones": new hotkeySimple("E"), + "Detach bones": new hotkeySimple("D"), + "IK": new hotkeySimple("K"), + }, + "Node_Path": { + "Transform": new hotkeySimple("T"), + "Anchor add / remove": new hotkeySimple("A"), + "Edit Control point": new hotkeySimple("C"), + "Draw path": new hotkeySimple("B"), + "Rectangle path": new hotkeySimple("N"), + "Circle path": new hotkeySimple("M"), + }, + "Node_Rigid_Object": { + "Mesh edit": new hotkeySimple("A"), + "Anchor remove": new hotkeySimple("E"), + }, + "Node_Strand_Create": { + "Push": new hotkeySimple("P"), + "Comb": new hotkeySimple("C"), + "Stretch": new hotkeySimple("S"), + "Shorten": new hotkeySimple("D"), + "Grab": new hotkeySimple("G"), + }, + "Node_Path_Anchor": { + "Adjust control point": new hotkeySimple("A"), + }, + "Node_3D_Object": { + "Transform": new hotkeySimple("G"), + "Rotate": new hotkeySimple("R"), + "Scale": new hotkeySimple("S"), + }, + "Node_3D_Camera": { + "Move Target": new hotkeySimple("T"), + }, }; #endregion #region hotkeys function hotkeySimple(_key) constructor { self.key = _key; + dkey = _key; } function hotkeyObject(_context, _name, _key, _mod = MOD_KEY.none, _action = noone) constructor { @@ -76,9 +121,10 @@ function getHotkey(_group, _key, _def = "") { gml_pragma("forceinline"); - if(!struct_has(HOTKEYS_CUSTOM, _group)) return def; + if(!struct_has(HOTKEYS_CUSTOM, _group)) return _def; var _grp = HOTKEYS_CUSTOM[$ _group]; - return struct_try_get(_grp, _key, _def); + if(!struct_has(_grp, _key)) return _def; + return _grp[$ _key].key; } #endregion \ No newline at end of file diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index dd0b3b85a..712f74900 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -408,7 +408,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor mouse_holding = false; - static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region mouse_cur_x = round((_mx - _x) / _s - 0.5); mouse_cur_y = round((_my - _y) / _s - 0.5); @@ -758,9 +758,9 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor draw_rectangle(_x0, _y0, _x1 - 1, _y1 - 1, true); previewing = 1; - } + } #endregion - static update = function(frame = PROJECT.animator.current_frame) { + static update = function(frame = PROJECT.animator.current_frame) { #region var _dim = getInputData(0); var _bg = getInputData(8); var _bga = getInputData(9); @@ -779,17 +779,17 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor surface_reset_shader(); outputs[| 0].setValue(_outSurf); - } + } #endregion - static doSerialize = function(_map) { + static doSerialize = function(_map) { #region surface_store_buffer(); var comp = buffer_compress(canvas_buffer, 0, buffer_get_size(canvas_buffer)); var enc = buffer_base64_encode(comp, 0, buffer_get_size(comp)); _map.surface = enc; - } + } #endregion - static doApplyDeserialize = function() { + static doApplyDeserialize = function() { #region if(!struct_has(load_map, "surface")) return; var buff = buffer_base64_decode(load_map.surface); canvas_buffer = buffer_decompress(buff); @@ -800,9 +800,9 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor canvas_surface = surface_create_from_buffer(_dim[0], _dim[1], canvas_buffer); apply_surface(); - } + } #endregion - static onCleanUp = function() { + static onCleanUp = function() { #region surface_free(canvas_surface); - } + } #endregion } \ No newline at end of file diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index f616635dc..657105940 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -1278,10 +1278,10 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x return false; var _tool = PANEL_PREVIEW.tool_current; - if(_tool == noone) + if(_tool == noone) //not using any tool return false; - if(index == undefined) + if(index == undefined) //using any tool return true; if(is_real(index) && _tool != tools[index]) diff --git a/scripts/node_path/node_path.gml b/scripts/node_path/node_path.gml index d4ea1f143..9880641a9 100644 --- a/scripts/node_path/node_path.gml +++ b/scripts/node_path/node_path.gml @@ -49,7 +49,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { tools = [ new NodeTool( "Transform", THEME.path_tools_transform ), - new NodeTool( "Anchor add / remove (+ Shift)", THEME.path_tools_add ), + new NodeTool( "Anchor add / remove", THEME.path_tools_add ), new NodeTool( "Edit Control point", THEME.path_tools_anchor ), tool_pathDrawer, new NodeTool( "Rectangle path", THEME.path_tools_rectangle ), diff --git a/scripts/node_tool/node_tool.gml b/scripts/node_tool/node_tool.gml index 49d912e9e..99fd318ae 100644 --- a/scripts/node_tool/node_tool.gml +++ b/scripts/node_tool/node_tool.gml @@ -1,5 +1,5 @@ -function NodeTool(name, spr) constructor { - node = other; +function NodeTool(name, spr, context = instanceof(other)) constructor { + ctx = context; self.name = name; self.spr = spr; @@ -11,13 +11,17 @@ function NodeTool(name, spr) constructor { static checkHotkey = function() { gml_pragma("forceinline"); - return getHotkey(instanceof(node), name); + return getHotkey(ctx, name); } static getName = function(index = 0) { + return is_array(name)? array_safe_get(name, index, "") : name; + } + + static getDisplayName = function(index = 0) { var _key = checkHotkey(); - var _nme = is_array(name)? array_safe_get(name, index, "") : name; + var _nme = getName(index); if(_key != "") _nme += $" ({_key})"; return _nme; diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 3eb8c8ad0..ff6242598 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -57,8 +57,9 @@ function Panel_Preview() : PanelContent() constructor { _preview_sequence = preview_sequence; preview_rate = 10; - right_menu_y = 8; - mouse_on_preview = false; + right_menu_y = 8; + mouse_on_preview = 0; + _mouse_on_preview = 0; resetViewOnDoubleClick = true; @@ -1003,7 +1004,7 @@ function Panel_Preview() : PanelContent() constructor { var _xx = tool_side_drawing * ui(40); var xx = _xx + preview_x + ui(8); var yy = h - toolbar_height - prev_size - ui(8); - if(my > yy) mouse_on_preview = false; + if(my > yy) mouse_on_preview = 0; var hoverable = pHOVER && point_in_rectangle(mx, my, _xx, ui(32), w, h - toolbar_height); for(var i = 0; i < array_length(pseq); i++) { @@ -1070,7 +1071,7 @@ function Panel_Preview() : PanelContent() constructor { function drawNodeTools(active, _node) { #region var _mx = mx; var _my = my; - var isHover = pHOVER && mouse_on_preview; + var isHover = pHOVER && mouse_on_preview == 1; var tool_width = ui(40); var tool_size = ui(32); @@ -1082,7 +1083,7 @@ function Panel_Preview() : PanelContent() constructor { if(_node.tools != -1 && point_in_rectangle(_mx, _my, 0, 0, tool_width, h)) { isHover = false; - mouse_on_preview = false; + mouse_on_preview = 0; } var overlayHover = tool_hovering == noone; @@ -1152,7 +1153,7 @@ function Panel_Preview() : PanelContent() constructor { var _sy1 = _syy + tool_size / 2; if(point_in_rectangle(_mx, _my, _sx0, _sy0 + 1, _sx1, _sy1 - 1)) { - TOOLTIP = tool.getName(j); + TOOLTIP = tool.getDisplayName(j); draw_sprite_stretched(THEME.button_hide, 1, _sx0 + pd, _sy0 + pd, tool_size - pd * 2, tool_size - pd * 2); if(mouse_press(mb_left, pFOCUS)) @@ -1173,7 +1174,7 @@ function Panel_Preview() : PanelContent() constructor { } else { #region single tools if(tool_hovering == tool) { draw_sprite_stretched(THEME.button_hide, 1, _x0 + pd, _y0 + pd, tool_size - pd * 2, tool_size - pd * 2); - TOOLTIP = tool.getName(); + TOOLTIP = tool.getDisplayName(); if(mouse_press(mb_left, pFOCUS)) tool.toggle(); @@ -1387,6 +1388,7 @@ function Panel_Preview() : PanelContent() constructor { function drawContent(panel) { #region >>>>>>>>>>>>>>>>>>>> MAIN DRAW <<<<<<<<<<<<<<<<<<<< mouse_on_preview = pHOVER && point_in_rectangle(mx, my, 0, toolbar_height, w, h - toolbar_height); + var _prev_node = getNodePreview(); d3_active = _prev_node != noone && _prev_node.is_3D; @@ -1422,9 +1424,10 @@ function Panel_Preview() : PanelContent() constructor { var tool = noone; if(inspect_node) { tool = inspect_node.getTool(); - if(tool) drawNodeTools(pFOCUS, tool); + if(tool) drawNodeTools(_mouse_on_preview, tool); } else tool_current = noone; + _mouse_on_preview = pFOCUS; if(do_fullView) { do_fullView = false; diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index e42274626..6c17ed8cc 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -167,6 +167,8 @@ json_save_struct(DIRECTORY + "Nodes/fav.json", global.FAV_NODES); json_save_struct(DIRECTORY + "Nodes/recent.json", global.RECENT_NODES); + + json_save_struct(DIRECTORY + "key_nodes.json", HOTKEYS_CUSTOM); } function PREF_LOAD() { @@ -197,6 +199,9 @@ if(!directory_exists(DIRECTORY + "Themes/" + PREF_MAP[? "theme"])) PREF_MAP[? "theme"] = "default"; + + var f = json_load_struct(DIRECTORY + "key_nodes.json"); + struct_override(HOTKEYS_CUSTOM, f); } function PREF_APPLY() { diff --git a/scripts/scrollPane/scrollPane.gml b/scripts/scrollPane/scrollPane.gml index fac094943..aeebb111d 100644 --- a/scripts/scrollPane/scrollPane.gml +++ b/scripts/scrollPane/scrollPane.gml @@ -16,6 +16,7 @@ function scrollPane(_w, _h, ondraw) : widget() constructor { content_h = 0; is_scroll = true; always_scroll = false; + show_scroll = true; scroll_step = 64; @@ -58,7 +59,7 @@ function scrollPane(_w, _h, ondraw) : widget() constructor { if(mouse_wheel_up()) scroll_y_to += scroll_step * SCROLL_SPEED; } - if(abs(content_h) > 0 || always_scroll) { + if(show_scroll && (abs(content_h) > 0 || always_scroll)) { var scr_w = sprite_get_width(THEME.ui_scrollbar); draw_scroll(x + w - scr_w, y + ui(6), true, surface_h - ui(12), -scroll_y / content_h, surface_h / (surface_h + content_h), COLORS.scrollbar_bg, COLORS.scrollbar_idle, COLORS.scrollbar_hover, x + _mx, y + _my); diff --git a/scripts/string_splice/string_splice.gml b/scripts/string_splice/string_splice.gml index d44fd63e6..592776df7 100644 --- a/scripts/string_splice/string_splice.gml +++ b/scripts/string_splice/string_splice.gml @@ -30,6 +30,7 @@ function string_splice(str, delim = " ", keep = false) { } function string_title(str) { + str = string_replace_all(str, "_", " "); var ch = string_char_at(str, 1); ch = string_upper(ch); var rs = string_copy(str, 2, string_length(str) - 1);