diff --git a/objects/o_dialog_preference/Create_0.gml b/objects/o_dialog_preference/Create_0.gml index 63bbaff95..2f7c5dadd 100644 --- a/objects/o_dialog_preference/Create_0.gml +++ b/objects/o_dialog_preference/Create_0.gml @@ -737,15 +737,16 @@ event_inherited(); draw_set_text(f_p0, fa_left, fa_top); - var yy = _y + ui(8); - var ind = 0; + var yy = _y + ui(8); + var th = line_get_height(f_p0); + var ind = 0; var sect = []; var psect = ""; for( var i = 0, n = ds_list_size(pref_hot); i < n; i++ ) { var _pref = pref_hot[| i]; - var th = line_get_height(); + var _yy = yy + hh; var name = _pref[0]; var val = _pref[1]; val = is_method(val)? val() : PREFERENCES[$ val]; @@ -753,12 +754,11 @@ event_inherited(); if(search_text != "" && string_pos(string_lower(search_text), string_lower(name)) == 0) continue; - if(ind % 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); + if(ind++ % 2 == 0) + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, _yy - 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, _pref[0]); + draw_text_add(ui(24), _yy, _pref[0]); _pref[2].setFocusHover(sFOCUS, sHOVER && sp_hotkey.hover); @@ -766,15 +766,17 @@ event_inherited(); var widget_h = th + (padd - ui(4)) * 2; var widget_x = x1 - ui(4) - widget_w; - var widget_y = yy + hh - ui(4); + var widget_y = _yy - ui(4); var params = new widgetParam(widget_x, widget_y, widget_w, widget_h, val, {}, _m, sp_hotkey.x, sp_hotkey.y); - var th = _pref[2].drawParam(params) ?? 0; + var _th = _pref[2].drawParam(params) ?? 0; - hh += th + padd + ui(8); - ind++; + hh += _th + padd + ui(8); } - + + th = line_get_height(f_p1); + ind = 0; + for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) { var ll = HOTKEYS[? HOTKEY_CONTEXT[| j]]; @@ -787,6 +789,7 @@ event_inherited(); var dkey = key.dKey; var dmod = key.dModi; + var _yy = yy + hh; if(search_text != "" && string_pos(string_lower(search_text), string_lower(name)) == 0) continue; @@ -796,76 +799,38 @@ event_inherited(); var _grp = group == ""? __txt("Global") : group; draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); - draw_text_add(ui(8), yy + hh, _grp); + draw_text_add(ui(8), _yy, _grp); array_push(sect, [ _grp, sp_hotkey, hh + ui(12) ]); - if(yy + hh >= 0 && section_current == "") + if(_yy >= 0 && section_current == "") section_current = psect; psect = _grp; - hh += string_height("l") + ui(16); + ind = 0; + hh += string_height("l") + ui(16); currGroup = group; } - if(i % 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); - } + var _yy = yy + hh; - var _lb_y = yy + hh + ui(4); - draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); + if(ind++ % 2 == 0) + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, _yy - padd, sp_hotkey.surface_w, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); + + var _lb_y = _yy; + draw_set_text(f_p1, 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); if(hk_editing == key) { - var _mod_prs = 0; - - if(keyboard_check(vk_control)) _mod_prs |= MOD_KEY.ctrl; - if(keyboard_check(vk_shift)) _mod_prs |= MOD_KEY.shift; - if(keyboard_check(vk_alt)) _mod_prs |= MOD_KEY.alt; - - if(keyboard_check_pressed(vk_escape)) { - key.key = 0; - key.modi = 0; - - PREF_SAVE(); - } else if(keyboard_check_pressed(vk_anykey)) { - key.modi = _mod_prs; - key.key = 0; - var press = false; - - for(var a = 0; a < array_length(vk_list); a++) { - if(!keyboard_check_pressed(vk_list[a])) continue; - key.key = vk_list[a]; - press = true; - break; - } - - if(!press) { - 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); - continue; - } - key.key = k; - press = true; - break; - } - } - - PREF_SAVE(); - } - dk = key_get_name(key.key, key.modi); kw = string_width(dk); - draw_sprite_stretched(THEME.button_hide, 2, key_x1 - ui(40) - kw, yy + hh, kw + ui(32), th); + draw_sprite_stretched(THEME.button_hide, 2, key_x1 - ui(40) - kw, _yy, kw + ui(32), th); + } else { var bx = key_x1 - ui(40) - kw; - var by = yy + hh; + var by = _yy; if(buttonInstant(THEME.button_hide, bx, by, kw + ui(32), th, _m, sFOCUS, sHOVER && sp_hotkey.hover) == 2) { hk_editing = key; keyboard_lastchar = pkey; @@ -875,15 +840,15 @@ event_inherited(); var cc = (key.key == 0 && key.modi == MOD_KEY.none)? 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_set_text(f_p1, fa_right, fa_top, cc); draw_text_add(key_x1 - ui(24), _lb_y, dk); if(key.key != dkey || key.modi != dmod) { modified = true; var bx = x1 - ui(32); - var by = yy + hh; + var by = _yy; if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset"), THEME.refresh_16) == 2) { - key.key = dkey; + key.key = dkey; key.modi = dmod; PREF_SAVE(); @@ -901,33 +866,34 @@ event_inherited(); var keys = struct_get_names(HOTKEYS_CUSTOM); for( var i = 0, n = array_length(keys); i < n; i++ ) { - var _key = keys[i]; + var _key = keys[i]; var hotkeys = struct_get_names(HOTKEYS_CUSTOM[$ _key]); - - var _key_t = string_title(string_replace(_key, "Node_", "")); + var _key_t = string_title(string_replace(_key, "Node_", "")); + var _yy = yy + hh; draw_set_text(f_p0b, fa_left, fa_top, COLORS._main_text_sub); - draw_text_add(ui(8), yy + hh, _key_t); + draw_text_add(ui(8), _yy, _key_t); array_push(sect, [ "- " + _key_t, sp_hotkey, hh + ui(12) ]); - if(yy + hh >= 0 && section_current == "") + + if(_yy >= 0 && section_current == "") section_current = psect; psect = "- " + _key_t; hh += string_height("l") + ui(16); - + ind = 0; + 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; + var name = __txt(_hotkey); + var pkey = hotkey.getName(); + var _yy = yy + hh; - 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); - } + if(ind++ % 2 == 0) + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, _yy - padd, sp_hotkey.surface_w, th + padd * 2, COLORS.dialog_preference_prop_bg, 1); - var _lb_y = yy + hh + ui(4); - draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text); + var _lb_y = _yy; + draw_set_text(f_p1, fa_left, fa_top, COLORS._main_text); draw_text_add(ui(24), _lb_y, name); var kw = string_width(pkey); @@ -935,36 +901,31 @@ event_inherited(); 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, kw + ui(32), th); - draw_sprite_stretched(THEME.button_hide, 2, key_x1 - ui(40) - kw, yy + hh, kw + ui(32), th); } else { var bx = key_x1 - ui(40) - kw; - var by = yy + hh; + var by = _yy; if(buttonInstant(THEME.button_hide, bx, by, kw + ui(32), th, _m, sFOCUS, sHOVER && sp_hotkey.hover) == 2) { hk_editing = key; - keyboard_lastchar = pkey; + keyboard_lastchar = key.key; } } 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_set_text(f_p1, fa_right, fa_top, cc); draw_text_add(key_x1 - ui(24), _lb_y, pkey); - if(key.key != key.dkey) { + if(key.key != key.dKey || key.modi != key.dModi) { modified = true; var bx = x1 - ui(32); - var by = yy + hh; + var by = _yy; + if(buttonInstant(THEME.button_hide, bx, by, ui(24), ui(24), _m, sFOCUS, sHOVER && sp_hotkey.hover, __txt("Reset"), THEME.refresh_16) == 2) { - key.key = key.dkey; + key.key = key.dKey; + key.modi = key.dModi; PREF_SAVE(); } @@ -974,6 +935,48 @@ event_inherited(); } } + if(hk_editing != noone) { + var _mod_prs = 0; + + if(keyboard_check(vk_control)) _mod_prs |= MOD_KEY.ctrl; + if(keyboard_check(vk_shift)) _mod_prs |= MOD_KEY.shift; + if(keyboard_check(vk_alt)) _mod_prs |= MOD_KEY.alt; + + if(keyboard_check_pressed(vk_escape)) { + hk_editing.key = 0; + hk_editing.modi = 0; + + PREF_SAVE(); + } else if(keyboard_check_pressed(vk_anykey)) { + hk_editing.modi = _mod_prs; + hk_editing.key = 0; + var press = false; + + for(var a = 0; a < array_length(vk_list); a++) { + if(!keyboard_check_pressed(vk_list[a])) continue; + hk_editing.key = vk_list[a]; + press = true; + break; + } + + if(!press) { + 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); + continue; + } + hk_editing.key = k; + press = true; + break; + } + } + + PREF_SAVE(); + } + } + //if(modified) { // var bx = x1 - ui(32); // var by = yy + ui(2); diff --git a/objects/o_main/Other_2.gml b/objects/o_main/Other_2.gml index 4c80aebf0..5b4b9c862 100644 --- a/objects/o_main/Other_2.gml +++ b/objects/o_main/Other_2.gml @@ -54,7 +54,9 @@ #region Set up var t = current_time; - PREF_LOAD(); + + if(!IS_CMD) { __initHotKey(); log_message("SESSION", $"> init Hotkeys | complete in {get_timer() - t}"); t = get_timer(); } + PREF_LOAD(); log_message("SESSION", $"> init Preferences | complete in {get_timer() - t}"); t = get_timer(); var dir = string(DIRECTORY) + "log"; directory_verify(dir); diff --git a/scripts/canvas_tool_brush/canvas_tool_brush.gml b/scripts/canvas_tool_brush/canvas_tool_brush.gml index 2c4030e95..b54a5c248 100644 --- a/scripts/canvas_tool_brush/canvas_tool_brush.gml +++ b/scripts/canvas_tool_brush/canvas_tool_brush.gml @@ -43,15 +43,6 @@ function canvas_tool_brush(brush, eraser = false) : canvas_tool() constructor { mouse_cur_x = mouse_pre_draw_x + _ddx - sign(_ddx); mouse_cur_y = mouse_pre_draw_y + _ddy - sign(_ddy); - - // var aa = point_direction(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); - // var dd = point_distance(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y); - - // var _a = round(aa / 45) * 45; - // dd = dd * dcos(_a - aa); - - // mouse_cur_x = mouse_pre_draw_x + lengthdir_x(dd, _a); - // mouse_cur_y = mouse_pre_draw_y + lengthdir_y(dd, _a); } } diff --git a/scripts/hotkey_data/hotkey_data.gml b/scripts/hotkey_data/hotkey_data.gml index 663563150..5292f4a88 100644 --- a/scripts/hotkey_data/hotkey_data.gml +++ b/scripts/hotkey_data/hotkey_data.gml @@ -1,77 +1,110 @@ #region globalvar HOTKEYS_CUSTOM; - HOTKEYS_CUSTOM = { - "Node_Canvas": { - "Selection": new hotkeySimple("S"), - "Magic Selection": new hotkeySimple("W"), - "Pencil": new hotkeySimple("B"), - "Eraser": new hotkeySimple("E"), - "Rectangle": new hotkeySimple("N"), - "Ellipse": new hotkeySimple("M"), - "Fill": new hotkeySimple("G"), - "Freeform": new hotkeySimple("Q"), - }, - "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"), - }, - }; - function getToolHotkey(_group, _key, _def = "") { + function __initHotKey() { + HOTKEYS_CUSTOM = { + "Node_Canvas": { + "Selection": new hotkeySimple("S"), + "Magic Selection": new hotkeySimple("W"), + "Pencil": new hotkeySimple("B"), + "Eraser": new hotkeySimple("E"), + "Rectangle": new hotkeySimple("N"), + "Ellipse": new hotkeySimple("M"), + "Curve": new hotkeySimple(""), + "Freeform": new hotkeySimple("Q"), + "Fill": new hotkeySimple("G"), + + "Outline": new hotkeySimple("O", MOD_KEY.shift), + "Extrude": new hotkeySimple("E", MOD_KEY.shift), + "Inset": new hotkeySimple("I", MOD_KEY.shift), + "Skew": new hotkeySimple("S", MOD_KEY.shift), + }, + + "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"), + }, + + }; + } + + function getToolHotkey(_group, _key) { INLINE - if(!struct_has(HOTKEYS_CUSTOM, _group)) return _def; + if(!struct_has(HOTKEYS_CUSTOM, _group)) return noone; var _grp = HOTKEYS_CUSTOM[$ _group]; - if(!struct_has(_grp, _key)) return _def; - return _grp[$ _key].key; + if(!struct_has(_grp, _key)) return noone; + + return _grp[$ _key]; } + #endregion #region hotkeys - function hotkeySimple(_key) constructor { - self.key = _key; - dkey = _key; + function hotkeySimple(_key, modi = MOD_KEY.none) constructor { + self.key = key_get_index(_key); + self.modi = modi; + + dKey = key; + dModi = modi; + + static isPressing = function() { + if(is_string(key)) key = key_get_index(key); + return key == noone? false : key_press(key, modi); + } + + static getName = function() { + if(is_string(key)) key = key_get_index(key); + return key_get_name(key, modi); + } } function hotkeyObject(_context, _name, _key, _mod = MOD_KEY.none, _action = noone) constructor { @@ -97,10 +130,8 @@ } function addHotkey(_context, _name, _key, _mod, _action) { - if(is_string(_key)) { - var ind = key_get_index(_key); - _key = ind? ind : ord(_key); - } + if(is_string(_key)) + _key = key_get_index(_key); var key = new hotkeyObject(_context, _name, _key, _mod, _action); diff --git a/scripts/key_press/key_press.gml b/scripts/key_press/key_press.gml index 141080790..7a89b3f0d 100644 --- a/scripts/key_press/key_press.gml +++ b/scripts/key_press/key_press.gml @@ -73,18 +73,21 @@ global.KEY_STRING_MAP[? 223] = "`" // actually ` but that needs to be escaped function key_get_index(key) { + if(key == "") return noone; + var k = ds_map_find_first(global.KEY_STRING_MAP); repeat(ds_map_size(global.KEY_STRING_MAP)) { if(global.KEY_STRING_MAP[? k] == key) return k; k = ds_map_find_next(global.KEY_STRING_MAP, k); } - return false; + + return ord(key); } #endregion #region get name function key_get_name(_key, _mod) { - if(_key == 0 && _mod == MOD_KEY.none) + if(_key <= 0 && _mod == MOD_KEY.none) return ""; var dk = ""; @@ -120,11 +123,11 @@ case vk_f10 : dk += "F10"; break; case vk_f11 : dk += "F11"; break; case vk_f12 : dk += "F12"; break; - case -1 : break; + default : - if(ds_map_exists(global.KEY_STRING_MAP, _key)) + if(ds_map_exists(global.KEY_STRING_MAP, _key)) dk += global.KEY_STRING_MAP[? _key]; - else + else if(_key > 0) dk += ansi_char(_key); break; } diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index 84e7d48d4..ff1419e88 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -366,10 +366,10 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor rightTools_not_selection = [ -1, - new NodeTool( "Outline", THEME.canvas_tools_outline, self ).setToolObject( new canvas_tool_with_selector(rightTools_selection[3]) ), - new NodeTool( "Extrude", THEME.canvas_tools_extrude, self ).setToolObject( new canvas_tool_with_selector(rightTools_selection[4]) ), - new NodeTool( "Inset", THEME.canvas_tools_inset, self ).setToolObject( new canvas_tool_with_selector(rightTools_selection[5]) ), - new NodeTool( "Skew", THEME.canvas_tools_skew, self ).setToolObject( new canvas_tool_with_selector(rightTools_selection[6]) ), + new NodeTool( "Outline", THEME.canvas_tools_outline).setContext(self).setToolObject( new canvas_tool_with_selector(rightTools_selection[3]) ), + new NodeTool( "Extrude", THEME.canvas_tools_extrude).setContext(self).setToolObject( new canvas_tool_with_selector(rightTools_selection[4]) ), + new NodeTool( "Inset", THEME.canvas_tools_inset ).setContext(self).setToolObject( new canvas_tool_with_selector(rightTools_selection[5]) ), + new NodeTool( "Skew", THEME.canvas_tools_skew ).setContext(self).setToolObject( new canvas_tool_with_selector(rightTools_selection[6]) ), ]; rightTools_brush = [ @@ -975,9 +975,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor if(_bgDim) { var _bgDim = _bg; if(is_array(_bgDim) && !array_empty(_bgDim)) _bgDim = _bg[0]; - - if(is_surface(_bgDim)) - _dim = [ surface_get_width_safe(_bgDim), surface_get_height_safe(_bgDim) ]; + if(is_surface(_bgDim)) _dim = surface_get_dimension(_bgDim); } attributes.dimension = _dim; apply_surfaces(); diff --git a/scripts/node_tool/node_tool.gml b/scripts/node_tool/node_tool.gml index 85bf9fd93..6cf4320f6 100644 --- a/scripts/node_tool/node_tool.gml +++ b/scripts/node_tool/node_tool.gml @@ -1,5 +1,7 @@ -function NodeTool(name, spr, context = instanceof(other)) constructor { - ctx = context; +function NodeTool(name, spr, contextString = instanceof(other)) constructor { + ctx = contextString; + context = noone; + self.name = name; self.spr = spr; @@ -12,12 +14,9 @@ function NodeTool(name, spr, context = instanceof(other)) constructor { toolFn = noone; toolFnParam = {}; - static checkHotkey = function() { - INLINE - - return getToolHotkey(ctx, name); - } + static checkHotkey = function() { INLINE return getToolHotkey(ctx, name); } + static setContext = function(context) { self.context = context; return self; } static setToolObject = function(toolObject) { self.toolObject = toolObject; return self; } static setToolFn = function(toolFn) { self.toolFn = toolFn; return self; } @@ -29,7 +28,8 @@ function NodeTool(name, spr, context = instanceof(other)) constructor { var _nme = getName(index); var _key = checkHotkey(); - return _key == ""? _nme : new tooltipHotkey(_nme).setKey(_key); + if(_key == noone) return _nme; + return new tooltipHotkey(_nme).setKey(_key.getName()); } static setSetting = function(sets) { array_push(settings, sets); return self; } @@ -55,8 +55,8 @@ function NodeTool(name, spr, context = instanceof(other)) constructor { static toggle = function(index = 0) { if(toolFn != noone) { - if(subtools == 0) toolFn(ctx); - else toolFn[index](ctx); + if(subtools == 0) toolFn(context); + else toolFn[index](context); return; } @@ -76,18 +76,23 @@ function NodeTool(name, spr, context = instanceof(other)) constructor { onToggle(); var _obj = getToolObject(); - if(_obj) _obj.init(ctx); + if(_obj) _obj.init(context); } static toggleKeyboard = function() { + HOTKEY_BLOCK = true; + if(subtools == 0) { PANEL_PREVIEW.tool_current = PANEL_PREVIEW.tool_current == self? noone : self; + } else if(PANEL_PREVIEW.tool_current != self) { PANEL_PREVIEW.tool_current = self; selecting = 0; + } else if(selecting == subtools - 1) { PANEL_PREVIEW.tool_current = noone; selecting = 0; + } else selecting++; diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 958e1625e..7d89aa6ba 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -1601,7 +1601,7 @@ function Panel_Preview() : PanelContent() constructor { if(thov && point_in_rectangle(_mx, _my, _x0, _y0 + 1, _x1, _y1 - 1)) tool_hovering = tool; - if(tool.subtools > 0 && _tool == tool) { #region subtools + if(tool.subtools > 0 && _tool == tool) { #region hovering subtools var s_ww = tool_size * tool.subtools; var s_hh = tool_size; draw_sprite_stretched(THEME.menu_bg, 0, _x0 - pd, _y0 - pd, s_ww + pd * 2, s_hh + pd * 2); @@ -1636,6 +1636,7 @@ function Panel_Preview() : PanelContent() constructor { if(point_in_rectangle(_mx, _my, _x0, _y0 + 1, _x0 + s_ww, _y1 - 1)) tool_hovering = tool; #endregion + } 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); @@ -1648,7 +1649,7 @@ function Panel_Preview() : PanelContent() constructor { if(pFOCUS && WIDGET_CURRENT == noone) { var _key = tool.checkHotkey(); - if(keyboard_check_pressed(ord(string(i + 1))) || (_key != "" && keyboard_check_pressed(ord(_key)))) + if(keyboard_check_pressed(ord(string(i + 1))) || (_key != noone && _key.isPressing())) tool.toggleKeyboard(); } @@ -1712,7 +1713,7 @@ function Panel_Preview() : PanelContent() constructor { if(thov && point_in_rectangle(_mx, _my, _x0, _y0 + 1, _x1, _y1 - 1)) tool_hovering = tool; - if(tool.subtools > 0 && _tool == tool) { #region subtools + if(tool.subtools > 0 && _tool == tool) { #region hovering subtools var stool = tool.spr; var s_ww = tool_size * tool.subtools; @@ -1760,6 +1761,12 @@ function Panel_Preview() : PanelContent() constructor { tool.toggle(); } + if(pFOCUS && WIDGET_CURRENT == noone) { + var _key = tool.checkHotkey(); + if(keyboard_check_pressed(ord(string(i + 1))) || (_key != noone && _key.isPressing())) + tool.toggleKeyboard(); + } + if(tool_current == tool) { draw_sprite_stretched_ext(THEME.button_hide, 2, _x0 + pd, _y0 + pd, tool_size - pd * 2, tool_size - pd * 2, COLORS.panel_preview_grid, 1); draw_sprite_stretched_ext(THEME.button_hide, 3, _x0 + pd, _y0 + pd, tool_size - pd * 2, tool_size - pd * 2, COLORS._main_accent, 1); diff --git a/scripts/tooltip_hotkey/tooltip_hotkey.gml b/scripts/tooltip_hotkey/tooltip_hotkey.gml index 0dfb1305a..b2745bc00 100644 --- a/scripts/tooltip_hotkey/tooltip_hotkey.gml +++ b/scripts/tooltip_hotkey/tooltip_hotkey.gml @@ -2,7 +2,7 @@ function tooltipHotkey(text, context = "", name = "") constructor { self.text = text; self.hotkey = find_hotkey(context, name); - keyStr = hotkey? key_get_name(hotkey.key, hotkey.modi) : ""; + keyStr = hotkey? key_get_name(hotkey.key, hotkey.modi) : ""; static setKey = function(key) { keyStr = key; return self; }