From dea4227d4524bb18c4be4492f9850ed107ebb96f Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Sun, 7 Jun 2026 19:15:52 -0700 Subject: [PATCH] Fix new nodes being added in the wrong place near graph edges --- .../document/node_graph/node_graph_message_handler.rs | 2 ++ .../messages/portfolio/document/node_graph/utility_types.rs | 5 ++++- frontend/src/components/views/Graph.svelte | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs index dc9879f3a4..3ac4622911 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs @@ -876,6 +876,7 @@ impl<'a> MessageHandler> for NodeG self.context_menu = Some(ContextMenuInformation { context_menu_coordinates: (node_graph_point + node_graph_shift).as_ivec2().into(), + node_creation_coordinates: node_graph_point.as_ivec2().into(), context_menu_data, }); @@ -1315,6 +1316,7 @@ impl<'a> MessageHandler> for NodeG self.context_menu = Some(ContextMenuInformation { context_menu_coordinates: (point + node_graph_shift).as_ivec2().into(), + node_creation_coordinates: point.as_ivec2().into(), context_menu_data: ContextMenuData::CreateNode { compatible_type }, }); diff --git a/editor/src/messages/portfolio/document/node_graph/utility_types.rs b/editor/src/messages/portfolio/document/node_graph/utility_types.rs index 6d27c9c98e..6f58d551da 100644 --- a/editor/src/messages/portfolio/document/node_graph/utility_types.rs +++ b/editor/src/messages/portfolio/document/node_graph/utility_types.rs @@ -162,9 +162,12 @@ pub enum ContextMenuData { #[cfg_attr(feature = "wasm", derive(tsify::Tsify))] #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] pub struct ContextMenuInformation { - // Stores whether the context menu is open and its position in graph coordinates + // The menu's display position in graph coordinates, which may be shifted from the click point to keep the menu on-screen #[serde(rename = "contextMenuCoordinates")] pub context_menu_coordinates: (i32, i32), + // The click point in graph coordinates, where a node created from the menu is placed (unshifted, unlike the display position) + #[serde(rename = "nodeCreationCoordinates")] + pub node_creation_coordinates: (i32, i32), #[serde(rename = "contextMenuData")] pub context_menu_data: ContextMenuData, } diff --git a/frontend/src/components/views/Graph.svelte b/frontend/src/components/views/Graph.svelte index 7d84645c70..1bce166f6e 100644 --- a/frontend/src/components/views/Graph.svelte +++ b/frontend/src/components/views/Graph.svelte @@ -139,7 +139,7 @@ function createNode(identifier: string) { if ($nodeGraph.contextMenuInformation === undefined) return; - editor.createNode(identifier, $nodeGraph.contextMenuInformation.contextMenuCoordinates[0], $nodeGraph.contextMenuInformation.contextMenuCoordinates[1]); + editor.createNode(identifier, $nodeGraph.contextMenuInformation.nodeCreationCoordinates[0], $nodeGraph.contextMenuInformation.nodeCreationCoordinates[1]); } function nodeBorderMask(nodeWidth: number, primaryInputExists: boolean, exposedSecondaryInputs: number, primaryOutputExists: boolean, exposedSecondaryOutputs: number): string {