mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-30 03:01:54 +00:00
feat: Target alignment when right clicking a specific node
This commit is contained in:
@@ -10342,14 +10342,25 @@ LGraphNode.prototype.executeAction = function(action)
|
|||||||
*
|
*
|
||||||
* @param {LGraphNode[]} nodes a list of nodes
|
* @param {LGraphNode[]} nodes a list of nodes
|
||||||
* @param {"top"|"bottom"|"left"|"right"} direction Direction to align the nodes
|
* @param {"top"|"bottom"|"left"|"right"} direction Direction to align the nodes
|
||||||
|
* @param {LGraphNode?} align_to Node to align to (if null, align to the furthest node in the given direction)
|
||||||
*/
|
*/
|
||||||
LGraphCanvas.alignNodes = function (nodes, direction) {
|
LGraphCanvas.alignNodes = function (nodes, direction, align_to) {
|
||||||
if (!nodes) {
|
if (!nodes) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const canvas = LGraphCanvas.active_canvas;
|
const canvas = LGraphCanvas.active_canvas;
|
||||||
const boundaryNodes = LGraphCanvas.getBoundaryNodes(nodes)
|
let boundaryNodes = []
|
||||||
|
if (align_to === undefined) {
|
||||||
|
boundaryNodes = LGraphCanvas.getBoundaryNodes(nodes)
|
||||||
|
} else {
|
||||||
|
boundaryNodes = {
|
||||||
|
"top": align_to,
|
||||||
|
"right": align_to,
|
||||||
|
"bottom": align_to,
|
||||||
|
"left": align_to
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (const [_, node] of Object.entries(canvas.selected_nodes)) {
|
for (const [_, node] of Object.entries(canvas.selected_nodes)) {
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
@@ -10372,6 +10383,18 @@ LGraphNode.prototype.executeAction = function(action)
|
|||||||
canvas.dirty_bgcanvas = true;
|
canvas.dirty_bgcanvas = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
LGraphCanvas.onNodeAlign = function(value, options, event, prev_menu, node) {
|
||||||
|
new LiteGraph.ContextMenu(["Top", "Bottom", "Left", "Right"], {
|
||||||
|
event: event,
|
||||||
|
callback: inner_clicked,
|
||||||
|
parentMenu: prev_menu,
|
||||||
|
});
|
||||||
|
|
||||||
|
function inner_clicked(value) {
|
||||||
|
LGraphCanvas.alignNodes(LGraphCanvas.active_canvas.selected_nodes, value.toLowerCase(), node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LGraphCanvas.onGroupAlign = function(value, options, event, prev_menu) {
|
LGraphCanvas.onGroupAlign = function(value, options, event, prev_menu) {
|
||||||
new LiteGraph.ContextMenu(["Top", "Bottom", "Left", "Right"], {
|
new LiteGraph.ContextMenu(["Top", "Bottom", "Left", "Right"], {
|
||||||
event: event,
|
event: event,
|
||||||
@@ -13106,6 +13129,14 @@ LGraphNode.prototype.executeAction = function(action)
|
|||||||
callback: LGraphCanvas.onMenuNodeToSubgraph
|
callback: LGraphCanvas.onMenuNodeToSubgraph
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (Object.keys(this.selected_nodes).length > 1) {
|
||||||
|
options.push({
|
||||||
|
content: "Align Selected To",
|
||||||
|
has_submenu: true,
|
||||||
|
callback: LGraphCanvas.onNodeAlign,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
options.push(null, {
|
options.push(null, {
|
||||||
content: "Remove",
|
content: "Remove",
|
||||||
disabled: !(node.removable !== false && !node.block_delete ),
|
disabled: !(node.removable !== false && !node.block_delete ),
|
||||||
|
|||||||
Reference in New Issue
Block a user