wires and clip paths

This commit is contained in:
Adam
2025-09-08 19:36:00 -07:00
parent c5ab893f46
commit 3566fb8c10
10 changed files with 239 additions and 154 deletions
@@ -269,17 +269,7 @@ pub enum FrontendMessage {
UpdateMouseCursor {
cursor: MouseCursorIcon,
},
UpdateNodeGraphSvelteRender {
#[serde(rename = "nodesToRender")]
nodes_to_render: Vec<FrontendNodeToRender>,
open: bool,
opacity: f64,
#[serde(rename = "inSelectedNetwork")]
in_selected_network: bool,
// Displays a dashed border around the node
#[serde(rename = "previewedNode")]
previewed_node: Option<NodeId>,
},
RequestNativeNodeGraphRender,
UpdateShouldRenderSvelteNodes {
#[serde(rename = "shouldRenderSvelteNodes")]
should_render_svelte_nodes: bool,
@@ -20,9 +20,10 @@ pub fn generate_node_graph_overlay(node_graph_overlay_data: NodeGraphOverlayData
let merge_nodes_and_bg_id = NodeId::new();
let render_overlay_id = NodeId::new();
let send_overlay_id = NodeId::new();
let _cache_output_id = NodeId::new();
let cache_output_id = NodeId::new();
// TODO: Replace with new cache node
let memo_implementation = DocumentNodeImplementation::ProtoNode(graphene_std::ops::identity::IDENTIFIER);
let identity_implementation = DocumentNodeImplementation::ProtoNode(graphene_std::ops::identity::IDENTIFIER);
let memo_implementation = DocumentNodeImplementation::ProtoNode(graphene_std::memo::memo::IDENTIFIER);
DocumentNode {
inputs: vec![
@@ -32,7 +33,7 @@ pub fn generate_node_graph_overlay(node_graph_overlay_data: NodeGraphOverlayData
],
implementation: DocumentNodeImplementation::Network(NodeNetwork {
exports: vec![NodeInput::node(send_overlay_id, 0)],
exports: vec![NodeInput::node(cache_output_id, 0)],
nodes: vec![
// Create the nodes
(
@@ -50,7 +51,7 @@ pub fn generate_node_graph_overlay(node_graph_overlay_data: NodeGraphOverlayData
DocumentNode {
call_argument: concrete!(UIContext),
inputs: vec![NodeInput::node(generate_nodes_id, 0)],
implementation: memo_implementation.clone(),
implementation: identity_implementation.clone(),
..Default::default()
},
),
@@ -80,7 +81,7 @@ pub fn generate_node_graph_overlay(node_graph_overlay_data: NodeGraphOverlayData
DocumentNode {
call_argument: concrete!(UIContext),
inputs: vec![NodeInput::node(generate_node_graph_bg, 0)],
implementation: memo_implementation.clone(),
implementation: identity_implementation.clone(),
..Default::default()
},
),
@@ -114,16 +115,16 @@ pub fn generate_node_graph_overlay(node_graph_overlay_data: NodeGraphOverlayData
..Default::default()
},
),
// Cache the full node graph so its not rerendered when the artwork changes
// (
// cache_nodes_id,
// DocumentNode {
// call_argument: concrete!(UIContext),
// inputs: vec![NodeInput::node(send_overlay_id, 0)],
// implementation: memo_implementation.clone(),
// ..Default::default()
// },
// ),
// Cache the full node graph so its not rerendered when nothing changes
(
cache_output_id,
DocumentNode {
call_argument: concrete!(UIContext),
inputs: vec![NodeInput::node(send_overlay_id, 0)],
implementation: memo_implementation.clone(),
..Default::default()
},
),
]
.into_iter()
.collect(),
@@ -1622,26 +1622,13 @@ impl<'a> MessageHandler<NodeGraphMessage, NodeGraphMessageContext<'a>> for NodeG
responses.add(DocumentMessage::DocumentStructureChanged);
responses.add(PropertiesPanelMessage::Refresh);
responses.add(NodeGraphMessage::UpdateActionButtons);
let nodes_to_render = network_interface.collect_nodes(&self.node_graph_errors, preferences.graph_wire_style, breadcrumb_network_path);
self.frontend_nodes = nodes_to_render.iter().map(|node| node.metadata.node_id).collect();
let previewed_node = network_interface.previewed_node(breadcrumb_network_path);
if self.native_node_graph_render {
let node_graph_render_data = node_graph_overlay::types::NodeGraphOverlayData {
nodes_to_render,
open: graph_view_overlay_open,
in_selected_network: selection_network_path == breadcrumb_network_path,
previewed_node,
};
self.node_graph_overlay = Some(super::generate_node_graph_overlay::generate_node_graph_overlay(node_graph_render_data, graph_fade_artwork_percentage));
responses.add(PortfolioMessage::SubmitActiveGraphRender);
if !self.should_render_svelte_nodes {
// Generate and render node graph overlay network
} else {
responses.add(FrontendMessage::UpdateNodeGraphRender {
nodes_to_render,
open: graph_view_overlay_open,
opacity: graph_fade_artwork_percentage,
in_selected_network: selection_network_path == breadcrumb_network_path,
previewed_node,
});
let nodes_to_render = network_interface.collect_nodes(&self.node_graph_errors, preferences.graph_wire_style, breadcrumb_network_path);
self.frontend_nodes = nodes_to_render.iter().map(|node| node.metadata.node_id).collect();
let previewed_node = network_interface.previewed_node(breadcrumb_network_path);
}
responses.add(NodeGraphMessage::UpdateVisibleNodes);
@@ -111,7 +111,6 @@ impl NodeNetworkInterface {
self.upstream_output_connector(&InputConnector::node(node_id, input_index), network_path)
.is_some_and(|output| !matches!(output, OutputConnector::Import(_)))
})
.map(|path| path.to_svg())
.map(|wire| {
(
wire,
@@ -401,7 +400,7 @@ impl NodeNetworkInterface {
if exports.is_empty() {
exports.push(None);
}
let preview_wire = self.wire_to_root(graph_wire_style, network_path);
let preview_wire = self.wire_to_root(graph_wire_style, network_path).map(|wire| wire.to_svg());
FrontendExports { exports, preview_wire }
}
@@ -512,7 +511,7 @@ impl NodeNetworkInterface {
}
/// When previewing, there may be a second path to the root node.
pub fn wire_to_root(&mut self, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<String> {
pub fn wire_to_root(&mut self, graph_wire_style: GraphWireStyle, network_path: &[NodeId]) -> Option<BezPath> {
let input = InputConnector::Export(0);
let current_export = self.upstream_output_connector(&input, network_path)?;
@@ -536,6 +535,6 @@ impl NodeNetworkInterface {
let vertical_start = upstream_output.node_id().is_some_and(|node_id| self.is_layer(&node_id, network_path));
let vector_wire = build_vector_wire(output_position, input_position, vertical_start, false, graph_wire_style);
Some(vector_wire.to_svg())
Some(vector_wire)
}
}
+1 -7
View File
@@ -301,13 +301,7 @@ pub trait FrontendMessageTestUtils {
impl FrontendMessageTestUtils for FrontendMessage {
fn check_node_graph_error(&self) {
let FrontendMessage::UpdateNodeGraphSvelteRender { nodes_to_render, .. } = self else { return };
for node in nodes_to_render {
if let Some(error) = &node.metadata.errors {
panic!("error on {}: {}", node.metadata.display_name, error);
}
}
// TODO: Implement
}
}