Command Palette

This commit is contained in:
Tanasart 2024-09-14 10:36:18 +07:00
parent 482878b245
commit a9e1a56b67
8 changed files with 213 additions and 73 deletions

View file

@ -61,6 +61,8 @@ event_inherited();
var match = string_partial_match(_fname, search_lower);
if(match == -9999) continue;
if(_cnxt == "New node") match -= 1000;
ds_priority_add(pr_list, _menu, match);
}
@ -78,9 +80,10 @@ event_inherited();
sc_content = new scrollPane(dialog_w - ui(4), dialog_h - ui(32), function(_y, _m) {
draw_clear_alpha(COLORS.panel_bg_clear, 1);
var hght = line_get_height(f_p2, item_pad);
var _dw = sc_content.surface_w;
var _h = 0;
var _h = array_length(data) * hght;
var _ly = _y;
draw_set_color(CDEF.main_mdblack);
@ -90,23 +93,29 @@ event_inherited();
if(mouse_move) keyboard_trigger = false;
for(var i = 0; i < array_length(data); i++) {
if(_ly < -hght) {
_ly += hght;
continue;
}
var _menu = data[i];
var _menuItem = _menu.menu;
var _key = _menu.hotkey;
var _hasKey = struct_has(_menu, "hotkey");
var _mhover = mouse_move && point_in_rectangle(_m[0], _m[1], 0, _ly, _dw, _ly + hght - 1);
if(selecting == i) {
draw_sprite_stretched_ext(THEME.textbox, 3, 0, _ly, dialog_w, hght, COLORS.dialog_menubox_highlight, 1);
draw_sprite_stretched_ext(THEME.textbox, 3, 0, _ly, _dw, hght, COLORS.dialog_menubox_highlight, 1);
if(sc_content.active) {
if((!keyboard_trigger && mouse_press(mb_left)) || keyboard_check_pressed(vk_enter)) {
_menu.action();
call(_menu.action, _menu.params);
array_push(RECENT_COMMANDS, _menu);
instance_destroy();
}
if(mouse_press(mb_right)) {
if(_hasKey && mouse_press(mb_right)) {
var _key = _menu.hotkey;
selecting_hotkey = _key;
var _loadKey = _key.full_name();
@ -147,41 +156,50 @@ event_inherited();
draw_set_text(f_p2, fa_left, fa_center, COLORS._main_icon_light);
draw_text_match_ext(_tx, _ty, _name, _dw, search_string);
if(_menuItem != noone && _menuItem.spr != noone) {
var spr = is_array(_menuItem.spr)? _menuItem.spr[0] : _menuItem.spr;
var ind = is_array(_menuItem.spr)? _menuItem.spr[1] : 0;
draw_sprite_ui(spr, ind, ui(16), _ty, .75, .75, 0, COLORS._main_icon, 0.75);
var _spr = _menu.spr;
if(_menuItem != noone) _spr = _menuItem.spr;
if(_spr != noone) {
var spr = is_array(_spr)? _spr[0] : _spr;
var ind = is_array(_spr)? _spr[1] : 0;
var _ss = hght / max(sprite_get_width(spr), sprite_get_height(spr)) * .7;
draw_sprite_ext(spr, ind, ui(16), _ty, _ss, _ss, 0, COLORS._main_icon);
}
if(is_instanceof(_key, hotkeyObject)) {
var _hx = _dw - ui(6);
var _hy = _ty + ui(1);
if(_hasKey) {
var _key = _menu.hotkey;
draw_set_text(f_p2, fa_right, fa_center, COLORS._main_accent);
var _ktxt = key_get_name(_key.key, _key.modi);
var _tw = string_width(_ktxt);
var _th = line_get_height();
var _bx = _hx - _tw - ui(4);
var _by = _hy - _th / 2 - ui(2);
var _bw = _tw + ui(8);
var _bh = _th + ui(2);
if(hk_editing == _key) {
draw_set_color(COLORS._main_accent);
// draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, COLORS._main_text_accent);
if(is_instanceof(_key, hotkeyObject)) {
var _hx = _dw - ui(6);
var _hy = _ty + ui(1);
} else if(_ktxt != "") {
draw_set_color(COLORS._main_text_sub);
// draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, CDEF.main_dkgrey);
draw_set_text(f_p2, fa_right, fa_center, COLORS._main_accent);
var _ktxt = key_get_name(_key.key, _key.modi);
var _tw = string_width(_ktxt);
var _th = line_get_height();
var _bx = _hx - _tw - ui(4);
var _by = _hy - _th / 2 - ui(2);
var _bw = _tw + ui(8);
var _bh = _th + ui(2);
if(hk_editing == _key) {
draw_set_color(COLORS._main_accent);
// draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, COLORS._main_text_accent);
} else if(_ktxt != "") {
draw_set_color(COLORS._main_text_sub);
// draw_sprite_stretched_ext(THEME.ui_panel, 1, _bx, _by, _bw, _bh, CDEF.main_dkgrey);
}
draw_text_add(_hx, _hy, _ktxt);
}
draw_text_add(_hx, _hy, _ktxt);
}
_ly += hght;
_h += hght;
if(_ly > sc_content.h) break;
}
if(hk_editing != noone) {

View file

@ -5,6 +5,7 @@ event_inherited();
dialog_w = min(WIN_W - ui(16), ui(1000));
dialog_h = min(WIN_H - ui(16), ui(700));
page_width = ui(160);
// title_height = 8;
destroy_on_click_out = true;
destroy_on_escape = false;
@ -109,7 +110,6 @@ event_inherited();
return hh;
});
sp_page.show_scroll = false;
#endregion
@ -235,7 +235,7 @@ event_inherited();
function( ) /*=>*/ { return PRESIST_PREF.path; },
function(val) /*=>*/ { PRESIST_PREF.path = val; json_save_struct(APP_DIRECTORY + "persistPreference.json", PRESIST_PREF); },
APP_DIRECTORY,
));
).setKey("main_dir_path"));
ds_list_add(pref_global, new __Panel_Linear_Setting_Item_Preference(
__txtx("pref_directory_temp", "Temp directory path*"),
@ -313,7 +313,7 @@ event_inherited();
resetScale(PREFERENCES._display_scaling, true); should_restart = true;
},
1,
));
).setKey("ui_scale"));
ds_list_add(pref_appr, new __Panel_Linear_Setting_Item_Preference(
__txtx("pref_ui_frame_rate", "UI frame rate"),
@ -470,7 +470,7 @@ event_inherited();
__txtx("pref_pan_key", "Panning key"),
new scrollBox([ "Middle Mouse", "Mouse 4", "Mouse 5" ], function(val) /*=>*/ { PREFERENCES.pan_mouse_key = val + 3; PREF_SAVE(); }),
function() /*=>*/ { return PREFERENCES.pan_mouse_key - 3; },
));
).setKey("panning_key"));
ds_list_add(pref_appr, __txt("Preview")); ////////////////////////////////////////////////////////////////////// Preview
@ -861,12 +861,13 @@ event_inherited();
sp_pref = new scrollPane(panel_width, panel_height, function(_y, _m, _r) {
draw_clear_alpha(COLORS.panel_bg_clear_inner, 1);
var hh = 0;
var th = line_get_height(font, 6);
var x1 = sp_pref.surface_w;
var yy = _y + ui(8);
var padd = ui(6);
var ind = 0;
var ww = sp_pref.surface_w;
var hh = 0;
var th = line_get_height(font, 6);
var x1 = sp_pref.surface_w;
var yy = _y + ui(8);
var padd = ui(6);
var ind = 0;
for(var i = 0; i < ds_list_size(current_list); i++) {
var _pref = current_list[| i];
@ -905,7 +906,14 @@ 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 - padd, sp_pref.surface_w, max(_pref.editWidget.h, 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, ww, max(_pref.editWidget.h, th) + padd * 2, COLORS.dialog_preference_prop_bg, 1);
if(goto_item == _pref) {
if(goto_item_highlight == 2) sp_pref.setScroll(-hh);
if(goto_item_highlight == 0) goto_item = noone;
draw_sprite_stretched_add(THEME.ui_panel_bg, 0, 0, yy - padd, ww, max(_pref.editWidget.h, th) + padd * 2, COLORS._main_accent, min(1, goto_item_highlight) * 0.5);
}
draw_set_text(font, fa_left, fa_center, COLORS._main_text);
draw_text_add(ui(24), yy + th / 2, name);
@ -965,6 +973,7 @@ event_inherited();
}
sections[page_current] = sect;
goto_item_highlight = lerp_float(goto_item_highlight, 0, 30);
return hh;
});
@ -975,4 +984,29 @@ event_inherited();
tb_search.align = fa_left;
search_text = "";
contents = {};
goto_item = noone;
goto_item_highlight = 0;
var _pref_lists = [ pref_global, pref_appr, pref_node ];
for (var j = 0, m = array_length(_pref_lists); j < m; j++)
for (var i = 0, n = ds_list_size(_pref_lists[j]); i < n; i++) {
var _pr = _pref_lists[j][| i];
if(!is_struct(_pr)) continue;
contents[$ _pr.key] = { page: j, item: _pr };
}
function goto(_tag) {
if(!struct_has(contents, _tag)) return self;
var _it = contents[$ _tag];
if(page_current != _it.page)
page_current = _it.page;
goto_item = _it.item;
goto_item_highlight = 2;
return self;
}
#endregion

View file

@ -6,9 +6,11 @@ function __Panel_Linear_Setting_Item(name, editWidget, data, onEdit = noone, get
self.onEdit = onEdit;
self.getDefault = getDefault;
self.action = action == noone? noone : struct_try_get(FUNCTIONS, string_to_var2(action[0], action[1]), noone);
key = "";
self.is_patreon = false;
static setKey = function(_key) { self.key = _key; return self; }
static patreon = function() { is_patreon = true; return self; }
}

View file

@ -29,24 +29,40 @@
__fnInit_Presets();
__fnInit_Notification();
__fnInit_Preview_Window();
__fnInit_Preference();
}
#endregion
function registerFunction(_context, _name, _key, _mod, _action) { return new functionObject(_context, _name, _key, _mod, _action); }
function functionObject(_context, _name, _key, _mod, _action) constructor {
function registerFunctionLite(_context, _name, _action, _param = noone) { return new functionObjectLite(_context, _name, _action, _param); }
function functionObjectLite(_context, _name, _action, _param = noone) constructor {
context = _context;
name = _name;
action = _action;
params = _param;
fnName = string_to_var2(_context, _name);
menu = noone;
spr = noone;
FUNCTIONS[$ fnName] = self;
}
function registerFunction(_context, _name, _key, _mod, _action, _param = noone) { return new functionObject(_context, _name, _key, _mod, _action, _param); }
function functionObject(_context, _name, _key, _mod, _action, _param = noone) constructor {
hotkey = addHotkey(_context, _name, _key, _mod, _action);
context = _context;
name = _name;
dkey = _key;
dmod = _mod;
action = _action;
params = _param;
hide = false;
fnName = string_to_var2(_context, _name);
menu = noone;
spr = noone;
FUNCTIONS[$ fnName] = self;
CMD_FUNCTIONS[$ fnName] = { action: _action, args: [] };
@ -89,27 +105,34 @@ function callFunction(name, args) {
INLINE
var _f = CMD_FUNCTIONS[$ name];
switch(array_length(_f.args)) {
case 0 : _f.fn(); break;
case 1 : _f.fn(args[0]); break;
case 2 : _f.fn(args[0], args[1]); break;
case 3 : _f.fn(args[0], args[1], args[2]); break;
case 4 : _f.fn(args[0], args[1], args[2], args[3]); break;
case 5 : _f.fn(args[0], args[1], args[2], args[3], args[4]); break;
case 6 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5]); break;
case 7 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
case 8 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
case 9 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); break;
case 10 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]); break;
case 11 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]); break;
case 12 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]); break;
case 13 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]); break;
case 14 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]); break;
case 15 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14]); break;
case 16 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); break;
}
call(_f.fn, args);
return true;
}
function call(fn, args) {
if(!is_array(args)) {
fn();
return;
}
switch(array_length(args)) {
case 0 : fn(); break;
case 1 : fn(args[0]); break;
case 2 : fn(args[0], args[1]); break;
case 3 : fn(args[0], args[1], args[2]); break;
case 4 : fn(args[0], args[1], args[2], args[3]); break;
case 5 : fn(args[0], args[1], args[2], args[3], args[4]); break;
case 6 : fn(args[0], args[1], args[2], args[3], args[4], args[5]); break;
case 7 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
case 8 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
case 9 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); break;
case 10 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]); break;
case 11 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]); break;
case 12 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]); break;
case 13 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]); break;
case 14 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]); break;
case 15 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14]); break;
case 16 : fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); break;
}
}

View file

@ -19,6 +19,9 @@ function NodeObject(_name, _spr, _node, _create, tooltip = "", tags = []) constr
is_patreon_extra = false;
_fn = registerFunctionLite("New node", _name, function(_node) { PANEL_GRAPH.createNodeHotkey(_node); }, [ _node ]);
_fn.spr = _spr;
if(!IS_CMD) {
var pth = DIRECTORY + $"Nodes/Tooltip/{node}.png";
if(file_exists_empty(pth)) tooltip_spr = sprite_add(pth, 0, false, false, 0, 0);
@ -69,6 +72,7 @@ function NodeObject(_name, _spr, _node, _create, tooltip = "", tags = []) constr
if(IS_CMD) return self;
show_in_recent = false;
variable_struct_remove(FUNCTIONS, _fn.fnName);
return self;
}
@ -257,7 +261,7 @@ function addNodeObject(_list, _name, _spr, _node, _fun, _tag = [], tooltip = "")
ds_list_add(_list, _n);
return _n;
}
var _n = new NodeObject(_name, _spr, _node, _fun, tooltip, _tag);
ALL_NODES[? _node] = _n;

View file

@ -401,3 +401,65 @@
}
}
#endregion
#region command palette
//!#mfunc __regFnPref {"args":["name"," key"],"order":[0,1]}
#macro __regFnPref_mf0 { registerFunctionLite("Preference",
#macro __regFnPref_mf1 , function() { dialogCall(o_dialog_preference).goto(
#macro __regFnPref_mf2 ); }); }
function __fnInit_Preference() {
__regFnPref_mf0 __txtx("pref_double_click_delay", "Double click delay") __regFnPref_mf1 "double_click_delay" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_mouse_wheel_speed", "Scroll speed") __regFnPref_mf1 "mouse_wheel_speed" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_keyboard_hold_start", "Keyboard hold start") __regFnPref_mf1 "keyboard_repeat_start" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_keyboard_repeat_delay", "Keyboard repeat delay") __regFnPref_mf1 "keyboard_repeat_speed" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_expand_hovering_panel", "Expand hovering panel") __regFnPref_mf1 "expand_hover" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_expand_lock_mouse_slider", "Lock mouse when sliding") __regFnPref_mf1 "slider_lock_mouse" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_pen_pool_delay", "Pen leave delay") __regFnPref_mf1 "pen_pool_delay" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_auto_save_time", "Autosave delay (-1 to disable)") __regFnPref_mf1 "auto_save_time" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_save_layout", "Save layout") __regFnPref_mf1 "save_layout" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_save_file_minify", "Minify save file") __regFnPref_mf1 "save_file_minify" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_save_backups", "Backup saves") __regFnPref_mf1 "save_backup" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_legacy_exception", "Use legacy exception handler") __regFnPref_mf1 "use_legacy_exception" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_crash_dialog", "Show dialog after crash") __regFnPref_mf1 "show_crash_dialog" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_clear_temp", "Clear temp file on close") __regFnPref_mf1 "clear_temp_on_close" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_enable_test_mode", "Enable developer mode*") __regFnPref_mf1 "test_mode" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_exp_popup_dialog", "Pop-up Dialog") __regFnPref_mf1 "multi_window" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_gui_scaling", "GUI scaling") __regFnPref_mf1 "ui_scale" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_frame_rate", "UI frame rate") __regFnPref_mf1 "ui_framerate" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_frame_rate", "UI inactive frame rate") __regFnPref_mf1 "ui_framerate_non_focus" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_interface_language", "Interface Language*") __regFnPref_mf1 "local" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_font", "Overwrite UI font") + "*" __regFnPref_mf1 "font_overwrite" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_windows_control", "Use Windows style window control.") __regFnPref_mf1 "panel_menu_right_control" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_fix_window_size", "Fix Window size on start") __regFnPref_mf1 "window_fix" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_fix_width", "Fix width") __regFnPref_mf1 "window_fix_width" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_ui_fix_height", "Fix height") __regFnPref_mf1 "window_fix_height" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_supporter_icon", "Show supporter icon") __regFnPref_mf1 "show_supporter_icon" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_add_node_remember", "Remember add node position") __regFnPref_mf1 "add_node_remember" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_connection_type", "Connection type") __regFnPref_mf1 "curve_connection_line" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_connection_thickness", "Connection thickness") __regFnPref_mf1 "connection_line_width" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_connection_curve_smoothness", "Connection curve smoothness") __regFnPref_mf1 "connection_line_sample" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_connection_aa", "Connection anti aliasing") __regFnPref_mf1 "connection_line_aa" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_connection_anim", "Connection line animation") __regFnPref_mf1 "connection_line_transition" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_graph_group_in_tab", "Open group in new tab") __regFnPref_mf1 "graph_open_group_in_tab" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_graph_zoom_smoothing", "Graph zoom smoothing") __regFnPref_mf1 "graph_zoom_smoooth" __regFnPref_mf2;
__regFnPref_mf0 __txtx("panel_graph_group_require_shift", "Hold Shift to enter group") __regFnPref_mf1 "panel_graph_group_require_shift" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_use_alt", "Use ALT for") __regFnPref_mf1 "alt_picker" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_preview_show_real_fps", "Show real fps") __regFnPref_mf1 "panel_preview_show_real_fps" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_inspector_focus_on_double_click", "Focus on double click") __regFnPref_mf1 "inspector_focus_on_double_click" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_collection_preview_speed", "Collection preview speed") __regFnPref_mf1 "collection_preview_speed" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_warning_notification_time", "Warning notification time") __regFnPref_mf1 "notification_time" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_widget_autocomplete_delay", "Code Autocomplete delay") __regFnPref_mf1 "widget_autocomplete_delay" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_widget_textbox_shake", "Textbox shake") __regFnPref_mf1 "textbox_shake" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_widget_textbox_particles", "Textbox particles") __regFnPref_mf1 "textbox_particle" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_node_param_show", "Show paramater on new node") __regFnPref_mf1 "node_param_show" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_node_param_width", "Default param width") __regFnPref_mf1 "node_param_width" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_node_3d_preview", "Preview surface size") __regFnPref_mf1 "node_3d_preview_size" __regFnPref_mf2;
__regFnPref_mf0 __txtx("pref_file_watcher_delay", "File watcher delay (s)") __regFnPref_mf1 "file_watcher_delay" __regFnPref_mf2;
}
#endregion

View file

@ -41,10 +41,7 @@ function scrollPane(_w, _h, ondraw) : widget() constructor {
surface_h = _h;
}
static setScroll = function(_scroll_y) {
INLINE
scroll_y_to = clamp(_scroll_y, -content_h, 0);
}
static setScroll = function(_scroll_y) { INLINE scroll_y_to = _scroll_y; }
static draw = function(x, y, mx = mouse_mx - x, my = mouse_my - y) {
self.x = x;

View file

@ -114,7 +114,7 @@ function string_partial_match(str, key) {
consec++;
conMax = max(conMax, consec);
run++;
if(run > string_length(key)) return conMax - misMatch;
if(run > string_length(key)) return conMax - misMatch - (amo - i);
kchr = string_char_at(key, run);
} else {