@@ -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 ) ]
68676773pub 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
0 commit comments