mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 02:08:11 +08:00
wires and clip paths
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
+3
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user