mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-02-10 12:16:24 +01:00
Add raw input capture for different input methods (e.g. Microsoft Pinyin).
This commit is contained in:
parent
174cdcf18e
commit
352c88af5d
13 changed files with 121 additions and 38 deletions
Binary file not shown.
|
@ -243,7 +243,8 @@ event_inherited();
|
|||
for( var i = 0, n = array_length(_new_node.outputs); i < n; i++ )
|
||||
array_push(_outputs, _new_node.outputs[i]);
|
||||
|
||||
PANEL_INSPECTOR.setInspecting(_new_node);
|
||||
if(PANEL_INSPECTOR) PANEL_INSPECTOR.setInspecting(_new_node);
|
||||
if(PANEL_GRAPH) PANEL_GRAPH.selectDragNode(_new_node, PREFERENCES.node_add_select);
|
||||
|
||||
} else if(is_instanceof(_node, NodeAction)) { // NOT IMPLEMENTED
|
||||
var _dat = _node.build(node_target_x, node_target_y,, _param);
|
||||
|
|
|
@ -3,14 +3,16 @@ kb_hkey = vk_nokey;
|
|||
if(kb_hkey < 0 && keyboard_key > 0) kb_hkey = keyboard_key;
|
||||
if(kb_hkey < 0 && keyboard_lastkey > 0) kb_hkey = keyboard_lastkey;
|
||||
|
||||
if(kb_hkey <= 0) for(var i = 2; i < 320; i++) if(keyboard_check_pressed(i)) { kb_hkey = i; break; }
|
||||
if(kb_hkey <= 0 && PREFERENCES.keyboard_check_sweep) for(var i = 2; i < 320; i++) if(keyboard_check_pressed(i)) { kb_hkey = i; break; }
|
||||
|
||||
kb_time = 0;
|
||||
kb_hold = false;
|
||||
KEYBOARD_PRESSED = kb_hkey;
|
||||
|
||||
if(keyboard_check(vk_backspace)) KEYBOARD_STRING = string_copy(KEYBOARD_STRING, 1, string_length(KEYBOARD_STRING) - 1);
|
||||
else KEYBOARD_STRING += keyboard_lastchar;
|
||||
if(!PREFERENCES.keyboard_capture_raw) {
|
||||
if(keyboard_check(vk_backspace)) KEYBOARD_STRING = string_copy(KEYBOARD_STRING, 1, string_length(KEYBOARD_STRING) - 1);
|
||||
else KEYBOARD_STRING += keyboard_lastchar;
|
||||
}
|
||||
|
||||
if(KEYBOARD_PRESSED == -1) {
|
||||
for( var i = 0, n = array_length(global.KEYS_VK); i < n; i++ ) {
|
||||
|
|
|
@ -17,8 +17,10 @@ if(!trigger) exit;
|
|||
|
||||
KEYBOARD_PRESSED = kb_hkey;
|
||||
|
||||
if(keyboard_check(vk_backspace)) KEYBOARD_STRING = string_copy(KEYBOARD_STRING, 1, string_length(KEYBOARD_STRING) - 1);
|
||||
else KEYBOARD_STRING += keyboard_lastchar;
|
||||
if(!PREFERENCES.keyboard_capture_raw) {
|
||||
if(keyboard_check(vk_backspace)) KEYBOARD_STRING = string_copy(KEYBOARD_STRING, 1, string_length(KEYBOARD_STRING) - 1);
|
||||
else KEYBOARD_STRING += keyboard_lastchar;
|
||||
}
|
||||
|
||||
if(WIDGET_CURRENT && is_instanceof(WIDGET_CURRENT, textInput))
|
||||
WIDGET_CURRENT.onKey(KEYBOARD_PRESSED);
|
|
@ -13,6 +13,13 @@ _HOVERING_ELEMENT = noone;
|
|||
FILE_DROPPED = _FILE_DROPPED;
|
||||
_FILE_DROPPED = false;
|
||||
|
||||
#region keybord captures
|
||||
if(PREFERENCES.keyboard_capture_raw && keyboard_string != "") {
|
||||
KEYBOARD_STRING = keyboard_string;
|
||||
keyboard_string = "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region minimize
|
||||
if(winMan_isMinimized()) {
|
||||
if(!minimized) game_set_speed(1, gamespeed_fps);
|
||||
|
|
|
@ -1334,12 +1334,12 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
}
|
||||
|
||||
for( var i = 0, n = array_length(inputs); i < n; i++ ) {
|
||||
var _in = inputs[i];
|
||||
if(_in.bypass_junc == noone || !_in.bypass_junc.visible) continue;
|
||||
var _in = inputs[i].bypass_junc;
|
||||
if(_in == noone || !_in.visible) continue;
|
||||
|
||||
for( var j = 0, m = array_length(_in.value_to); j < m; j++ ) {
|
||||
var _jto = _in.value_to[j];
|
||||
if(_jto.value_from != _ot || !_jto.node.active) continue;
|
||||
if(_jto.value_from != _in || !_jto.node.active) continue;
|
||||
array_push(nodes, _jto.node);
|
||||
}
|
||||
}
|
||||
|
@ -1373,7 +1373,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
|
||||
for(var i = 0; i < array_length(inputs); i++) {
|
||||
var _in = inputs[i];
|
||||
if(_in.bypass_junc == noone) continue;
|
||||
// if(_in.bypass_junc == noone) continue;
|
||||
|
||||
var _tos = _in.bypass_junc.getJunctionTo();
|
||||
for( var j = 0; j < array_length(_tos); j++ )
|
||||
|
|
|
@ -8,7 +8,8 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
|||
.setVisible(true, true);
|
||||
|
||||
newInput(1, nodeValue_Path("Font", self, ""))
|
||||
.setDisplay(VALUE_DISPLAY.path_font);
|
||||
.setDisplay(VALUE_DISPLAY.path_font)
|
||||
.setVisible(true, false);
|
||||
|
||||
newInput(2, nodeValue_Int("Size", self, 16));
|
||||
|
||||
|
@ -96,9 +97,7 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
|||
|
||||
if(!file_exists_empty(_path)) return;
|
||||
|
||||
if(font != f_p0 && font_exists(font))
|
||||
font_delete(font);
|
||||
|
||||
if(font != f_p0 && font_exists(font)) font_delete(font);
|
||||
font_add_enable_aa(_aa);
|
||||
font = font_add(_path, _size, false, false, 0, 127);
|
||||
}
|
||||
|
|
|
@ -2334,6 +2334,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
|||
if(!globalExtractable()) return noone;
|
||||
|
||||
var _key = $"{node.getDisplayName()}_{name}";
|
||||
_key = string_to_var(_key);
|
||||
var _glb = node.project.globalNode;
|
||||
|
||||
if(_glb.inputExist(_key))
|
||||
|
@ -2456,7 +2457,7 @@ function checkJuncConnection(from, to, params) {
|
|||
var cx = round((frx + jx) / 2 + shx);
|
||||
var cy = round((fry + jy) / 2 + shy);
|
||||
var th = max(1, PROJECT.graphConnection.line_width * _s);
|
||||
var hover, hovDist = max(th * 2, 6);
|
||||
var hover, hovDist = max(th * 2, 12);
|
||||
|
||||
var _fin = from.draw_line_shift_e > -1? from.draw_line_shift_e : from.drawLineIndex;
|
||||
var _tin = to.draw_line_shift_e > -1? to.draw_line_shift_e : to.drawLineIndex;
|
||||
|
@ -2509,7 +2510,7 @@ function checkJuncConnection(from, to, params) {
|
|||
return hover? self : noone;
|
||||
}
|
||||
|
||||
function drawJuncConnection(from, to, params, _thick = false) {
|
||||
function drawJuncConnection(from, to, params, _hover = 0) {
|
||||
if(from == noone || to == noone) return noone;
|
||||
|
||||
static drawParam = {
|
||||
|
@ -2537,7 +2538,7 @@ function drawJuncConnection(from, to, params, _thick = false) {
|
|||
var shy = to.draw_line_shift_y * _s;
|
||||
var cx = round((frx + jx) / 2 + shx);
|
||||
var cy = round((fry + jy) / 2 + shy);
|
||||
var th = max(1, PROJECT.graphConnection.line_width * _s) * (1 + _thick);
|
||||
var th = max(1, PROJECT.graphConnection.line_width * _s) * (1 + _hover);
|
||||
|
||||
#region draw parameters
|
||||
var corner = PROJECT.graphConnection.line_corner * _s;
|
||||
|
|
|
@ -382,6 +382,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
node_drag_sy = 0;
|
||||
node_drag_ox = 0;
|
||||
node_drag_oy = 0;
|
||||
node_drag_add = false;
|
||||
|
||||
selection_block = 0;
|
||||
nodes_selecting = [];
|
||||
|
@ -1558,9 +1559,10 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
if(connection_draw_update || pHOVER) {
|
||||
surface_set_target(connection_surface_cc);
|
||||
if(connection_draw_update) { DRAW_CLEAR }
|
||||
|
||||
var hoverable = !bool(node_dragging) && pHOVER;
|
||||
|
||||
|
||||
var hoverable = pHOVER;
|
||||
hoverable &= !node_dragging || node_drag_add;
|
||||
|
||||
connection_param.active = hoverable;
|
||||
connection_param.setPos(gr_x, gr_y, graph_s, mx, my);
|
||||
connection_param.setBoundary(-64, -64, w + 64, h + 64);
|
||||
|
@ -1580,8 +1582,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
DRAW_CLEAR
|
||||
|
||||
draw_surface(connection_surface_cc, 0, 0);
|
||||
|
||||
if(hov) drawJuncConnection(hov.value_from, hov, connection_param, true);
|
||||
if(hov) drawJuncConnection(hov.value_from, hov, connection_param, 1 + (node_drag_add && node_dragging));
|
||||
|
||||
if(value_dragging && connection_draw_mouse != noone && !key_mod_press(SHIFT)) {
|
||||
var _cmx = connection_draw_mouse[0];
|
||||
|
@ -1675,14 +1676,46 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
printIf(log, $"Draw node: {get_timer() - t}"); t = get_timer();
|
||||
|
||||
// dragging
|
||||
if(mouse_press(mb_left))
|
||||
node_dragging = noone;
|
||||
if(mouse_press(mb_left)) {
|
||||
|
||||
if(node_drag_add && node_dragging && junction_hovering != noone) {
|
||||
var _jfr = junction_hovering.value_from;
|
||||
var _jto = junction_hovering;
|
||||
var _shy = undefined;
|
||||
|
||||
for( var i = 0, n = array_length(node_dragging.inputs); i < n; i++ ) {
|
||||
var _inp = node_dragging.inputs[i];
|
||||
if((value_bit(_inp.type) & value_bit(_jfr.type) != 0) && _inp.setFrom(_jfr)) {
|
||||
_shy = _jfr.node.y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for( var i = 0, n = array_length(node_dragging.outputs); i < n; i++ ) {
|
||||
if(_jto.setFrom(node_dragging.outputs[i])) {
|
||||
_shy = _shy == undefined? _jto.node.y : (_shy + _jto.node.y) / 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(_shy != undefined) {
|
||||
node_dragging.x -= node_dragging.w / 2;
|
||||
node_dragging.y = _shy;
|
||||
}
|
||||
}
|
||||
|
||||
if(node_dragging) nodes_selecting = [ node_dragging ];
|
||||
node_dragging = noone;
|
||||
node_drag_add = false;
|
||||
}
|
||||
|
||||
for(var i = 0; i < array_length(nodes_list); i++)
|
||||
nodes_list[i].groupCheck(gr_x, gr_y, graph_s, mx, my);
|
||||
|
||||
if(node_dragging && !key_mod_press(ALT)) {
|
||||
addKeyOverlay("Dragging node(s)", [[ "Ctrl", "Disable snapping" ]]);
|
||||
connection_draw_update = true;
|
||||
node_surface_update = true;
|
||||
|
||||
var _mgx = mouse_graph_x;
|
||||
var _mgy = mouse_graph_y;
|
||||
|
@ -1742,7 +1775,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
}
|
||||
}
|
||||
|
||||
if(mouse_release(mb_left))
|
||||
if(!node_drag_add && mouse_release(mb_left))
|
||||
node_dragging = noone;
|
||||
|
||||
printIf(log, $"Drag node time : {get_timer() - t}"); t = get_timer();
|
||||
|
@ -1847,7 +1880,6 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
drag_locking = false;
|
||||
}
|
||||
|
||||
|
||||
printIf(log, $"Draw selection frame : {get_timer() - t}"); t = get_timer();
|
||||
}
|
||||
|
||||
|
@ -3255,6 +3287,23 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
return false;
|
||||
}
|
||||
|
||||
function selectDragNode(_node, _add = false) {
|
||||
nodes_selecting = [ _node ];
|
||||
node_dragging = _node;
|
||||
|
||||
_node.x = mouse_graph_x
|
||||
_node.y = mouse_graph_y
|
||||
|
||||
node_drag_mx = mouse_graph_x;
|
||||
node_drag_my = mouse_graph_y;
|
||||
node_drag_sx = _node.x;
|
||||
node_drag_sy = _node.y;
|
||||
node_drag_ox = -1;
|
||||
node_drag_oy = -1;
|
||||
|
||||
node_drag_add = _add;
|
||||
}
|
||||
|
||||
static checkDropItem = function() { //
|
||||
var node = noone;
|
||||
|
||||
|
|
|
@ -1133,29 +1133,41 @@ function Panel_Inspector() : PanelContent() constructor {
|
|||
array_push(_menuItem, -1);
|
||||
}
|
||||
|
||||
array_push(_menuItem, jun.expUse? menu_junc_expression_dis : menu_junc_expression_ena);
|
||||
if(jun.globalExtractable()) array_push(_menuItem, menu_junc_extract_global);
|
||||
if(_inp) array_push(_menuItem, menu_junc_bypass_toggle);
|
||||
|
||||
array_push(_menuItem, jun.expUse? menu_junc_expression_dis : menu_junc_expression_ena);
|
||||
if(jun.globalExtractable()) {
|
||||
|
||||
array_push(_menuItem, menuItemShelf(__txtx("panel_inspector_use_global", "Use Globalvar"), function(_dat) /*=>*/ {
|
||||
var arr = [];
|
||||
for( var i = 0, n = array_length(PROJECT.globalNode.inputs); i < n; i++ ) {
|
||||
var _glInp = PROJECT.globalNode.inputs[i];
|
||||
if(!typeCompatible(_glInp.type, __dialog_junction.type)) continue;
|
||||
array_push(arr, menuItem(_glInp.name, function(d) /*=>*/ { __dialog_junction.setExpression(d.name); }, noone, noone, noone, { name : _glInp.name }));
|
||||
}
|
||||
return submenuCall(_dat, arr);
|
||||
}));
|
||||
|
||||
array_push(_menuItem, menu_junc_extract_global);
|
||||
}
|
||||
|
||||
array_push(_menuItem, -1, menu_junc_copy);
|
||||
if(_inp) array_push(_menuItem, menu_junc_paste);
|
||||
|
||||
if(_inp && jun.extract_node != "") {
|
||||
if(is_array(jun.extract_node)) {
|
||||
var ext = menuItemShelf(__txtx("panel_inspector_extract_multiple", "Extract to..."), function(_dat) {
|
||||
array_push(_menuItem, menuItemShelf(__txtx("panel_inspector_extract_multiple", "Extract to..."), function(_dat) /*=>*/ {
|
||||
var arr = [];
|
||||
for(var i = 0; i < array_length(__dialog_junction.extract_node); i++) {
|
||||
var _rec = __dialog_junction.extract_node[i];
|
||||
var _nod = ALL_NODES[$ _rec];
|
||||
|
||||
array_push(arr, menuItem(_nod.name, function(_dat) /*=>*/ { __dialog_junction.extractNode(_dat.name); }, noone, noone, noone, { name : _rec }));
|
||||
array_push(arr, menuItem(ALL_NODES[$ _rec].name,
|
||||
function(d) /*=>*/ { __dialog_junction.extractNode(d.name); }, noone, noone, noone, { name : _rec }));
|
||||
}
|
||||
|
||||
return submenuCall(_dat, arr);
|
||||
});
|
||||
array_push(_menuItem, ext);
|
||||
} else
|
||||
array_push(_menuItem, menu_junc_extract);
|
||||
}));
|
||||
|
||||
} else array_push(_menuItem, menu_junc_extract);
|
||||
}
|
||||
|
||||
var dia = menuCall("inspector_value_menu", _menuItem);
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
|
||||
registerFunction("", "Reload theme", vk_f10, MOD_KEY.ctrl | MOD_KEY.shift, global_theme_reload ).setMenu("reload_theme", )
|
||||
|
||||
registerFunction("", "Addons Menu", "", MOD_KEY.none, function(_dat) /*=>*/ {
|
||||
registerFunction("", "Addons", "", MOD_KEY.none, function(_dat) /*=>*/ {
|
||||
var arr = [
|
||||
MENU_ITEMS.addons,
|
||||
menuItem(__txtx("panel_menu_addons_key", "Key displayer"), function() /*=>*/ { if(instance_exists(addon_key_displayer)) return; instance_create_depth(0, 0, 0, addon_key_displayer); }),
|
||||
|
|
|
@ -123,6 +123,12 @@ function Panel_Preference() : PanelContent() constructor {
|
|||
slider(0, 1, 0.01, function(val) /*=>*/ { PREFERENCES.keyboard_repeat_speed = val; PREF_SAVE(); })
|
||||
));
|
||||
|
||||
ds_list_add(pref_global, new __Panel_Linear_Setting_Item_Preference(
|
||||
__txtx("pref_keyboard_check_sweep", "Keyboard check sweep"),
|
||||
"keyboard_check_sweep",
|
||||
new checkBox(function() /*=>*/ { PREFERENCES.keyboard_check_sweep = !PREFERENCES.keyboard_check_sweep; PREF_SAVE(); })
|
||||
));
|
||||
|
||||
ds_list_add(pref_global, new __Panel_Linear_Setting_Item_Preference(
|
||||
__txtx("pref_expand_hovering_panel", "Expand hovering panel"),
|
||||
"expand_hover",
|
||||
|
|
|
@ -50,6 +50,8 @@
|
|||
PREFERENCES.keyboard_repeat_start = 0.50;
|
||||
PREFERENCES.keyboard_repeat_speed = 0.10;
|
||||
PREFERENCES.keyboard_double_delay = 0.25;
|
||||
PREFERENCES.keyboard_check_sweep = true;
|
||||
PREFERENCES.keyboard_capture_raw = true;
|
||||
|
||||
PREFERENCES.file_watcher_delay = 0.1;
|
||||
|
||||
|
@ -121,7 +123,9 @@
|
|||
#endregion
|
||||
|
||||
#region //////////////////////////////////////////////////////////////////////// NODES /////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
PREFERENCES.node_add_select = true;
|
||||
|
||||
PREFERENCES.node_param_show = false;
|
||||
PREFERENCES.node_param_width = 192;
|
||||
PREFERENCES.node_3d_preview_size = 256;
|
||||
|
|
Loading…
Reference in a new issue