Skip to content

Commit d8e6118

Browse files
authored
Merge branch 'master' into restructure-node-crates
2 parents f9738bc + 12453d2 commit d8e6118

File tree

24 files changed

+78
-218
lines changed

24 files changed

+78
-218
lines changed

editor/src/messages/portfolio/document/document_message_handler.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
473473
responses.add(NodeGraphMessage::UnloadWires);
474474
responses.add(NodeGraphMessage::SendGraph);
475475
responses.add(DocumentMessage::ZoomCanvasToFitAll);
476-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
476+
responses.add(NodeGraphMessage::UpdateNodeGraphWidth);
477477
}
478478
DocumentMessage::Escape => {
479479
if self.node_graph_handler.drag_start.is_some() {
@@ -506,7 +506,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
506506
responses.add(NodeGraphMessage::UnloadWires);
507507
responses.add(NodeGraphMessage::SendGraph);
508508
responses.add(DocumentMessage::PTZUpdate);
509-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
509+
responses.add(NodeGraphMessage::UpdateNodeGraphWidth);
510510
}
511511
DocumentMessage::FlipSelectedLayers { flip_axis } => {
512512
let scale = match flip_axis {
@@ -576,10 +576,10 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
576576
responses.add(ToolMessage::DeactivateTools);
577577
responses.add(OverlaysMessage::Draw); // Clear the overlays
578578
responses.add(NavigationMessage::CanvasTiltSet { angle_radians: 0. });
579-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
580579
responses.add(NodeGraphMessage::UpdateGraphBarRight);
581580
responses.add(NodeGraphMessage::SendGraph);
582581
responses.add(NodeGraphMessage::UpdateHints);
582+
responses.add(NodeGraphMessage::UpdateEdges);
583583
} else {
584584
responses.add(ToolMessage::ActivateTool { tool_type: *current_tool });
585585
responses.add(OverlaysMessage::Draw); // Redraw overlays when graph is closed
@@ -1972,7 +1972,6 @@ impl DocumentMessageHandler {
19721972

19731973
// TODO: Remove once the footprint is used to load the imports/export distances from the edge
19741974
responses.add(NodeGraphMessage::UnloadWires);
1975-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
19761975

19771976
Some(previous_network)
19781977
}

editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
180180
NavigationMessage::CanvasPanMouseWheel { use_y_as_x } => {
181181
let delta = if use_y_as_x { (-ipp.mouse.scroll_delta.y, 0.).into() } else { -ipp.mouse.scroll_delta.as_dvec2() } * VIEWPORT_SCROLL_RATE;
182182
responses.add(NavigationMessage::CanvasPan { delta });
183-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
184183
}
185184
NavigationMessage::CanvasTiltResetAndZoomTo100Percent => {
186185
let Some(ptz) = get_ptz_mut(document_ptz, network_interface, graph_view_overlay_open, breadcrumb_network_path) else {
@@ -195,7 +194,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
195194
responses.add(PortfolioMessage::UpdateDocumentWidgets);
196195
}
197196
responses.add(DocumentMessage::PTZUpdate);
198-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
199197
}
200198
NavigationMessage::CanvasTiltSet { angle_radians } => {
201199
let Some(ptz) = get_ptz_mut(document_ptz, network_interface, graph_view_overlay_open, breadcrumb_network_path) else {
@@ -274,7 +272,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
274272
responses.add(PortfolioMessage::UpdateDocumentWidgets);
275273
}
276274
responses.add(DocumentMessage::PTZUpdate);
277-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
278275
}
279276
NavigationMessage::CanvasFlip => {
280277
if graph_view_overlay_open {
@@ -322,7 +319,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
322319
} else {
323320
responses.add(PortfolioMessage::UpdateDocumentWidgets);
324321
}
325-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
326322
// Reset the navigation operation now that it's done
327323
self.navigation_operation = NavigationOperation::None;
328324

@@ -384,7 +380,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
384380
responses.add(PortfolioMessage::UpdateDocumentWidgets);
385381
}
386382
responses.add(DocumentMessage::PTZUpdate);
387-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
388383
}
389384
// Fully zooms in on the selected
390385
NavigationMessage::FitViewportToSelection => {
@@ -479,7 +474,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
479474
};
480475

481476
responses.add(NavigationMessage::CanvasZoomSet { zoom_factor: ptz.zoom() });
482-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
483477
}
484478
}
485479

editor/src/messages/portfolio/document/node_graph/node_graph_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ pub enum NodeGraphMessage {
113113
shift: Key,
114114
},
115115
ShakeNode,
116+
UpdateNodeGraphWidth,
116117
RemoveImport {
117118
import_index: usize,
118119
},
@@ -144,7 +145,6 @@ pub enum NodeGraphMessage {
144145
SendWires,
145146
UpdateVisibleNodes,
146147
SendGraph,
147-
SetGridAlignedEdges,
148148
SetInputValue {
149149
node_id: NodeId,
150150
input_index: usize,

editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::messages::tool::common_functionality::graph_modification_utils::{self
2020
use crate::messages::tool::common_functionality::utility_functions::make_path_editable_is_allowed;
2121
use crate::messages::tool::tool_messages::tool_prelude::{Key, MouseMotion};
2222
use crate::messages::tool::utility_types::{HintData, HintGroup, HintInfo};
23-
use crate::messages::viewport::{Position, Rect};
23+
use crate::messages::viewport::Position;
2424
use glam::{DAffine2, DVec2, IVec2};
2525
use graph_craft::document::{DocumentNodeImplementation, NodeId, NodeInput};
2626
use graph_craft::proto::GraphErrors;
@@ -1543,6 +1543,10 @@ impl<'a> MessageHandler<NodeGraphMessage, NodeGraphMessageContext<'a>> for NodeG
15431543
responses.add(NodeGraphMessage::RunDocumentGraph);
15441544
responses.add(NodeGraphMessage::SendGraph);
15451545
}
1546+
NodeGraphMessage::UpdateNodeGraphWidth => {
1547+
network_interface.set_node_graph_width(viewport.size().x(), breadcrumb_network_path);
1548+
responses.add(NodeGraphMessage::UpdateImportsExports);
1549+
}
15461550
NodeGraphMessage::RemoveImport { import_index: usize } => {
15471551
network_interface.remove_import(usize, selection_network_path);
15481552
responses.add(NodeGraphMessage::UpdateImportsExports);
@@ -1659,14 +1663,6 @@ impl<'a> MessageHandler<NodeGraphMessage, NodeGraphMessageContext<'a>> for NodeG
16591663
self.update_node_graph_hints(responses);
16601664
}
16611665
}
1662-
NodeGraphMessage::SetGridAlignedEdges => {
1663-
if graph_view_overlay_open {
1664-
let viewport_bounds = viewport.bounds();
1665-
network_interface.set_grid_aligned_edges(DVec2::new(viewport_bounds.x() - viewport_bounds.width(), 0.), breadcrumb_network_path);
1666-
// Send the new edges to the frontend
1667-
responses.add(NodeGraphMessage::UpdateImportsExports);
1668-
}
1669-
}
16701666
NodeGraphMessage::SetInputValue { node_id, input_index, value } => {
16711667
let input = NodeInput::value(value, false);
16721668
responses.add(NodeGraphMessage::SetInput {

editor/src/messages/portfolio/document/node_graph/utility_types.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,6 @@ pub struct FrontendClickTargets {
196196
pub icon_click_targets: Vec<String>,
197197
#[serde(rename = "allNodesBoundingBox")]
198198
pub all_nodes_bounding_box: String,
199-
#[serde(rename = "importExportsBoundingBox")]
200-
pub import_exports_bounding_box: String,
201199
#[serde(rename = "modifyImportExport")]
202200
pub modify_import_export: Vec<String>,
203201
}

editor/src/messages/portfolio/document/utility_types/network_interface.rs

Lines changed: 14 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -856,19 +856,18 @@ impl NodeNetworkInterface {
856856
let import_top_left = DVec2::new(top_left_inner_bound.x.min(bounding_box_top_left.x), top_left_inner_bound.y.min(bounding_box_top_left.y));
857857
let rounded_import_top_left = DVec2::new((import_top_left.x / 24.).round() * 24., (import_top_left.y / 24.).round() * 24.);
858858

859-
let viewport_top_right = network_metadata.persistent_metadata.navigation_metadata.node_graph_top_right;
860-
let target_viewport_top_right = DVec2::new(
861-
viewport_top_right.x - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64,
862-
viewport_top_right.y + EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64,
863-
);
859+
let viewport_width = network_metadata.persistent_metadata.navigation_metadata.node_graph_width;
860+
861+
let target_viewport_top_right = DVec2::new(viewport_width - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64, EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64);
864862

865863
// An offset from the right edge in viewport pixels
866864
let node_graph_pixel_offset_top_right = node_graph_to_viewport.inverse().transform_point2(target_viewport_top_right);
867865

868866
// A 5x5 grid offset from the right corner
869-
let node_graph_grid_space_offset_top_right = node_graph_to_viewport.inverse().transform_point2(viewport_top_right) + DVec2::new(-5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64);
867+
let node_graph_grid_space_offset_top_right = node_graph_to_viewport.inverse().transform_point2(DVec2::new(viewport_width, 0.)) + DVec2::new(-5. * GRID_SIZE as f64, 4. * GRID_SIZE as f64);
870868

871-
// The inner bound of the export is the highest/furthest right of the two offsets
869+
// The inner bound of the export is the highest/furthest right of the two offsets.
870+
// When zoomed out this keeps it a constant grid space away from the edge, but when zoomed in it prevents the exports from getting too far in
872871
let top_right_inner_bound = DVec2::new(
873872
node_graph_pixel_offset_top_right.x.max(node_graph_grid_space_offset_top_right.x),
874873
node_graph_pixel_offset_top_right.y.min(node_graph_grid_space_offset_top_right.y),
@@ -2249,68 +2248,6 @@ impl NodeNetworkInterface {
22492248
network_metadata.transient_metadata.modify_import_export.unload();
22502249
}
22512250

2252-
pub fn rounded_network_edge_distance(&mut self, network_path: &[NodeId]) -> Option<&NetworkEdgeDistance> {
2253-
let Some(network_metadata) = self.network_metadata(network_path) else {
2254-
log::error!("Could not get nested network_metadata in rounded_network_edge_distance");
2255-
return None;
2256-
};
2257-
if !network_metadata.transient_metadata.rounded_network_edge_distance.is_loaded() {
2258-
self.load_rounded_network_edge_distance(network_path);
2259-
}
2260-
let Some(network_metadata) = self.network_metadata(network_path) else {
2261-
log::error!("Could not get nested network_metadata in rounded_network_edge_distance");
2262-
return None;
2263-
};
2264-
let TransientMetadata::Loaded(rounded_network_edge_distance) = &network_metadata.transient_metadata.rounded_network_edge_distance else {
2265-
log::error!("could not load import rounded_network_edge_distance");
2266-
return None;
2267-
};
2268-
Some(rounded_network_edge_distance)
2269-
}
2270-
2271-
fn load_rounded_network_edge_distance(&mut self, network_path: &[NodeId]) {
2272-
let Some(network_metadata) = self.network_metadata_mut(network_path) else {
2273-
log::error!("Could not get nested network in set_grid_aligned_edges");
2274-
return;
2275-
};
2276-
// When setting the edges to be grid aligned, update the pixel offset to ensure the next pan starts from the snapped import/export position
2277-
let node_graph_to_viewport = network_metadata.persistent_metadata.navigation_metadata.node_graph_to_viewport;
2278-
// TODO: Eventually replace node graph top right with the footprint when trying to get the network edge distance
2279-
let node_graph_top_right = network_metadata.persistent_metadata.navigation_metadata.node_graph_top_right;
2280-
let target_exports_distance = node_graph_to_viewport.inverse().transform_point2(DVec2::new(
2281-
node_graph_top_right.x - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64,
2282-
node_graph_top_right.y + EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64,
2283-
));
2284-
2285-
let target_imports_distance = node_graph_to_viewport
2286-
.inverse()
2287-
.transform_point2(DVec2::new(IMPORTS_TO_LEFT_EDGE_PIXEL_GAP as f64, IMPORTS_TO_TOP_EDGE_PIXEL_GAP as f64));
2288-
2289-
let rounded_exports_distance = DVec2::new((target_exports_distance.x / 24. + 0.5).floor() * 24., (target_exports_distance.y / 24. + 0.5).floor() * 24.);
2290-
let rounded_imports_distance = DVec2::new((target_imports_distance.x / 24. + 0.5).floor() * 24., (target_imports_distance.y / 24. + 0.5).floor() * 24.);
2291-
2292-
let rounded_viewport_exports_distance = node_graph_to_viewport.transform_point2(rounded_exports_distance);
2293-
let rounded_viewport_imports_distance = node_graph_to_viewport.transform_point2(rounded_imports_distance);
2294-
2295-
let network_edge_distance = NetworkEdgeDistance {
2296-
exports_to_edge_distance: rounded_viewport_exports_distance,
2297-
imports_to_edge_distance: rounded_viewport_imports_distance,
2298-
};
2299-
let Some(network_metadata) = self.network_metadata_mut(network_path) else {
2300-
log::error!("Could not get current network in load_export_ports");
2301-
return;
2302-
};
2303-
network_metadata.transient_metadata.rounded_network_edge_distance = TransientMetadata::Loaded(network_edge_distance);
2304-
}
2305-
2306-
fn unload_rounded_network_edge_distance(&mut self, network_path: &[NodeId]) {
2307-
let Some(network_metadata) = self.network_metadata_mut(network_path) else {
2308-
log::error!("Could not get nested network_metadata in unload_export_ports");
2309-
return;
2310-
};
2311-
network_metadata.transient_metadata.rounded_network_edge_distance.unload();
2312-
}
2313-
23142251
fn owned_nodes(&self, node_id: &NodeId, network_path: &[NodeId]) -> Option<&HashSet<NodeId>> {
23152252
let layer_node = self.node_metadata(node_id, network_path)?;
23162253
let NodeTypePersistentMetadata::Layer(LayerPersistentMetadata { owned_nodes, .. }) = &layer_node.persistent_metadata.node_type_metadata else {
@@ -3155,33 +3092,6 @@ impl NodeNetworkInterface {
31553092
let rect = Subpath::<PointId>::new_rect(bounds[0], bounds[1]);
31563093
let all_nodes_bounding_box = rect.to_bezpath().to_svg();
31573094

3158-
let Some(rounded_network_edge_distance) = self.rounded_network_edge_distance(network_path).cloned() else {
3159-
log::error!("Could not get rounded_network_edge_distance in collect_frontend_click_targets");
3160-
return FrontendClickTargets::default();
3161-
};
3162-
let Some(network_metadata) = self.network_metadata(network_path) else {
3163-
log::error!("Could not get nested network_metadata in collect_frontend_click_targets");
3164-
return FrontendClickTargets::default();
3165-
};
3166-
let import_exports_viewport_top_left = rounded_network_edge_distance.imports_to_edge_distance;
3167-
let import_exports_viewport_bottom_right = rounded_network_edge_distance.exports_to_edge_distance;
3168-
3169-
let node_graph_top_left = network_metadata
3170-
.persistent_metadata
3171-
.navigation_metadata
3172-
.node_graph_to_viewport
3173-
.inverse()
3174-
.transform_point2(import_exports_viewport_top_left);
3175-
let node_graph_bottom_right = network_metadata
3176-
.persistent_metadata
3177-
.navigation_metadata
3178-
.node_graph_to_viewport
3179-
.inverse()
3180-
.transform_point2(import_exports_viewport_bottom_right);
3181-
3182-
let import_exports_target = Subpath::<PointId>::new_rect(node_graph_top_left, node_graph_bottom_right);
3183-
let import_exports_bounding_box = import_exports_target.to_bezpath().to_svg();
3184-
31853095
let mut modify_import_export = Vec::new();
31863096
if let Some(modify_import_export_click_targets) = self.modify_import_export(network_path) {
31873097
for click_target in modify_import_export_click_targets
@@ -3200,7 +3110,6 @@ impl NodeNetworkInterface {
32003110
connector_click_targets,
32013111
icon_click_targets,
32023112
all_nodes_bounding_box,
3203-
import_exports_bounding_box,
32043113
modify_import_export,
32053114
}
32063115
}
@@ -3654,13 +3563,12 @@ impl NodeNetworkInterface {
36543563
}
36553564

36563565
// This should be run whenever the pan ends, a zoom occurs, or the network is opened
3657-
pub fn set_grid_aligned_edges(&mut self, node_graph_top_right: DVec2, network_path: &[NodeId]) {
3566+
pub fn set_node_graph_width(&mut self, node_graph_width: f64, network_path: &[NodeId]) {
36583567
let Some(network_metadata) = self.network_metadata_mut(network_path) else {
3659-
log::error!("Could not get nested network_metadata in set_grid_aligned_edges");
3568+
log::error!("Could not get nested network in set_transform");
36603569
return;
36613570
};
3662-
network_metadata.persistent_metadata.navigation_metadata.node_graph_top_right = node_graph_top_right;
3663-
self.unload_rounded_network_edge_distance(network_path);
3571+
network_metadata.persistent_metadata.navigation_metadata.node_graph_width = node_graph_width;
36643572
self.unload_import_export_ports(network_path);
36653573
self.unload_modify_import_export(network_path);
36663574
}
@@ -6463,8 +6371,6 @@ pub struct NodeNetworkTransientMetadata {
64636371
pub import_export_ports: TransientMetadata<Ports>,
64646372
/// Click targets for adding, removing, and moving import/export ports
64656373
pub modify_import_export: TransientMetadata<ModifyImportExportClickTarget>,
6466-
// Distance to the edges of the network, where the import/export ports are displayed. Rounded to nearest grid space when the panning ends.
6467-
pub rounded_network_edge_distance: TransientMetadata<NetworkEdgeDistance>,
64686374

64696375
// Wires from the exports
64706376
pub wires: Vec<TransientMetadata<WirePathUpdate>>,
@@ -6863,29 +6769,18 @@ pub enum LayerClickTargetTypes {
68636769
// Preview,
68646770
}
68656771

6866-
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
6772+
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
68676773
pub struct NavigationMetadata {
68686774
/// The current pan, and zoom state of the viewport's view of the node graph.
68696775
/// Ensure `DocumentMessage::UpdateDocumentTransform` is called when the pan, zoom, or transform changes.
68706776
pub node_graph_ptz: PTZ,
6871-
// TODO: Remove and replace with calculate_offset_transform from the node_graph_ptz. This will be difficult since it requires both the navigation message handler and the IPP
6777+
// TODO: Eventually remove once te click targets are extracted from the native render
68726778
/// Transform from node graph space to viewport space.
68736779
pub node_graph_to_viewport: DAffine2,
6874-
/// Top right of the node graph in viewport space
6780+
// TODO: Eventually remove once the import/export positions are extracted from the native render
6781+
/// The width of the node graph in viewport space
68756782
#[serde(default)]
6876-
pub node_graph_top_right: DVec2,
6877-
}
6878-
6879-
impl Default for NavigationMetadata {
6880-
fn default() -> NavigationMetadata {
6881-
// Default PTZ and transform
6882-
NavigationMetadata {
6883-
node_graph_ptz: PTZ::default(),
6884-
node_graph_to_viewport: DAffine2::IDENTITY,
6885-
// TODO: Eventually replace with footprint
6886-
node_graph_top_right: DVec2::ZERO,
6887-
}
6888-
}
6783+
pub node_graph_width: f64,
68896784
}
68906785

68916786
// PartialEq required by message handlers

editor/src/messages/viewport/viewport_message_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ impl MessageHandler<ViewportMessage, ()> for ViewportMessageHandler {
3333
offset: Point { x, y },
3434
size: Point { x: width, y: height },
3535
};
36+
responses.add(NodeGraphMessage::UpdateNodeGraphWidth);
3637
}
3738
ViewportMessage::RepropagateUpdate => {}
3839
}
@@ -49,7 +50,6 @@ impl MessageHandler<ViewportMessage, ()> for ViewportMessageHandler {
4950
}
5051

5152
responses.add(NavigationMessage::CanvasPan { delta: DVec2::ZERO });
52-
responses.add(NodeGraphMessage::SetGridAlignedEdges);
5353

5454
responses.add(DeferMessage::AfterGraphRun {
5555
messages: vec![

frontend/src/components/Editor.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
});
6262
</script>
6363

64-
<MainWindow platform={$appWindow.platform} maximized={$appWindow.maximized} viewportHolePunch={$appWindow.viewportHolePunch} />
64+
<MainWindow />
6565

6666
<style lang="scss" global>
6767
// Disable the spinning loading indicator

frontend/src/components/panels/Document.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,6 @@
592592
thumbPosition={scrollbarPos.x}
593593
on:trackShift={({ detail }) => editor.handle.panCanvasByFraction(detail, 0)}
594594
on:thumbPosition={({ detail }) => panCanvasX(detail)}
595-
on:thumbDragEnd={() => editor.handle.setGridAlignedEdges()}
596595
on:thumbDragStart={() => editor.handle.panCanvasAbortPrepare(true)}
597596
on:thumbDragAbort={() => editor.handle.panCanvasAbort(true)}
598597
/>

0 commit comments

Comments
 (0)