feat: shortcuts for zoom in/out (#3410)
* feat: shortcuts for zoom in/out * feat: pen support for canvas zoom ctrl + LMB + vertical drag * Ctrl+LMB+Drag -> ctrl+Shift+LMB+Drag --------- Co-authored-by: Lt.Dr.Data <lt.dr.data@gmail.com>
This commit is contained in:
parent
c61eadf69a
commit
d7fa417bfa
49
README.md
49
README.md
|
@ -41,29 +41,32 @@ Workflow examples can be found on the [Examples page](https://comfyanonymous.git
|
||||||
|
|
||||||
## Shortcuts
|
## Shortcuts
|
||||||
|
|
||||||
| Keybind | Explanation |
|
| Keybind | Explanation |
|
||||||
|---------------------------|--------------------------------------------------------------------------------------------------------------------|
|
|------------------------------------|--------------------------------------------------------------------------------------------------------------------|
|
||||||
| Ctrl + Enter | Queue up current graph for generation |
|
| Ctrl + Enter | Queue up current graph for generation |
|
||||||
| Ctrl + Shift + Enter | Queue up current graph as first for generation |
|
| Ctrl + Shift + Enter | Queue up current graph as first for generation |
|
||||||
| Ctrl + Z/Ctrl + Y | Undo/Redo |
|
| Ctrl + Z/Ctrl + Y | Undo/Redo |
|
||||||
| Ctrl + S | Save workflow |
|
| Ctrl + S | Save workflow |
|
||||||
| Ctrl + O | Load workflow |
|
| Ctrl + O | Load workflow |
|
||||||
| Ctrl + A | Select all nodes |
|
| Ctrl + A | Select all nodes |
|
||||||
| Alt + C | Collapse/uncollapse selected nodes |
|
| Alt + C | Collapse/uncollapse selected nodes |
|
||||||
| Ctrl + M | Mute/unmute selected nodes |
|
| Ctrl + M | Mute/unmute selected nodes |
|
||||||
| Ctrl + B | Bypass selected nodes (acts like the node was removed from the graph and the wires reconnected through) |
|
| Ctrl + B | Bypass selected nodes (acts like the node was removed from the graph and the wires reconnected through) |
|
||||||
| Delete/Backspace | Delete selected nodes |
|
| Delete/Backspace | Delete selected nodes |
|
||||||
| Ctrl + Delete/Backspace | Delete the current graph |
|
| Ctrl + Delete/Backspace | Delete the current graph |
|
||||||
| Space | Move the canvas around when held and moving the cursor |
|
| Space | Move the canvas around when held and moving the cursor |
|
||||||
| Ctrl/Shift + Click | Add clicked node to selection |
|
| Ctrl/Shift + Click | Add clicked node to selection |
|
||||||
| Ctrl + C/Ctrl + V | Copy and paste selected nodes (without maintaining connections to outputs of unselected nodes) |
|
| Ctrl + C/Ctrl + V | Copy and paste selected nodes (without maintaining connections to outputs of unselected nodes) |
|
||||||
| Ctrl + C/Ctrl + Shift + V | Copy and paste selected nodes (maintaining connections from outputs of unselected nodes to inputs of pasted nodes) |
|
| Ctrl + C/Ctrl + Shift + V | Copy and paste selected nodes (maintaining connections from outputs of unselected nodes to inputs of pasted nodes) |
|
||||||
| Shift + Drag | Move multiple selected nodes at the same time |
|
| Shift + Drag | Move multiple selected nodes at the same time |
|
||||||
| Ctrl + D | Load default graph |
|
| Ctrl + D | Load default graph |
|
||||||
| Q | Toggle visibility of the queue |
|
| Alt + `+` | Canvas Zoom in |
|
||||||
| H | Toggle visibility of history |
|
| Alt + `-` | Canvas Zoom out |
|
||||||
| R | Refresh graph |
|
| Ctrl + Shift + LMB + Vertical drag | Canvas Zoom in/out |
|
||||||
| Double-Click LMB | Open node quick search palette |
|
| Q | Toggle visibility of the queue |
|
||||||
|
| H | Toggle visibility of history |
|
||||||
|
| R | Refresh graph |
|
||||||
|
| Double-Click LMB | Open node quick search palette |
|
||||||
|
|
||||||
Ctrl can also be replaced with Cmd instead for macOS users
|
Ctrl can also be replaced with Cmd instead for macOS users
|
||||||
|
|
||||||
|
|
|
@ -953,6 +953,12 @@ export class ComfyApp {
|
||||||
|
|
||||||
const origProcessMouseDown = LGraphCanvas.prototype.processMouseDown;
|
const origProcessMouseDown = LGraphCanvas.prototype.processMouseDown;
|
||||||
LGraphCanvas.prototype.processMouseDown = function(e) {
|
LGraphCanvas.prototype.processMouseDown = function(e) {
|
||||||
|
// prepare for ctrl+shift drag: zoom start
|
||||||
|
if(e.ctrlKey && e.shiftKey && e.buttons) {
|
||||||
|
self.zoom_drag_start = [e.x, e.y, this.ds.scale];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const res = origProcessMouseDown.apply(this, arguments);
|
const res = origProcessMouseDown.apply(this, arguments);
|
||||||
|
|
||||||
this.selected_group_moving = false;
|
this.selected_group_moving = false;
|
||||||
|
@ -973,6 +979,26 @@ export class ComfyApp {
|
||||||
|
|
||||||
const origProcessMouseMove = LGraphCanvas.prototype.processMouseMove;
|
const origProcessMouseMove = LGraphCanvas.prototype.processMouseMove;
|
||||||
LGraphCanvas.prototype.processMouseMove = function(e) {
|
LGraphCanvas.prototype.processMouseMove = function(e) {
|
||||||
|
// handle ctrl+shift drag
|
||||||
|
if(e.ctrlKey && e.shiftKey && self.zoom_drag_start) {
|
||||||
|
// stop canvas zoom action
|
||||||
|
if(!e.buttons) {
|
||||||
|
self.zoom_drag_start = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate delta
|
||||||
|
let deltaY = e.y - self.zoom_drag_start[1];
|
||||||
|
let startScale = self.zoom_drag_start[2];
|
||||||
|
|
||||||
|
let scale = startScale - deltaY/100;
|
||||||
|
|
||||||
|
this.ds.changeScale(scale, [this.ds.element.width/2, this.ds.element.height/2]);
|
||||||
|
this.graph.change();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const orig_selected_group = this.selected_group;
|
const orig_selected_group = this.selected_group;
|
||||||
|
|
||||||
if (this.selected_group && !this.selected_group_resizing && !this.selected_group_moving) {
|
if (this.selected_group && !this.selected_group_resizing && !this.selected_group_moving) {
|
||||||
|
@ -1059,6 +1085,20 @@ export class ComfyApp {
|
||||||
// Trigger onPaste
|
// Trigger onPaste
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((e.key === '+') && e.altKey) {
|
||||||
|
block_default = true;
|
||||||
|
let scale = this.ds.scale * 1.1;
|
||||||
|
this.ds.changeScale(scale, [this.ds.element.width/2, this.ds.element.height/2]);
|
||||||
|
this.graph.change();
|
||||||
|
}
|
||||||
|
|
||||||
|
if((e.key === '-') && e.altKey) {
|
||||||
|
block_default = true;
|
||||||
|
let scale = this.ds.scale * 1 / 1.1;
|
||||||
|
this.ds.changeScale(scale, [this.ds.element.width/2, this.ds.element.height/2]);
|
||||||
|
this.graph.change();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.graph.change();
|
this.graph.change();
|
||||||
|
|
Loading…
Reference in New Issue