@@ -581,19 +581,18 @@ impl NodeNetworkInterface {
581581 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 ) ) ;
582582 let rounded_import_top_left = DVec2 :: new ( ( import_top_left. x / 24. ) . round ( ) * 24. , ( import_top_left. y / 24. ) . round ( ) * 24. ) ;
583583
584- let viewport_top_right = network_metadata. persistent_metadata . navigation_metadata . node_graph_top_right ;
585- let target_viewport_top_right = DVec2 :: new (
586- viewport_top_right. x - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64 ,
587- viewport_top_right. y + EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64 ,
588- ) ;
584+ let viewport_width = network_metadata. persistent_metadata . navigation_metadata . node_graph_width ;
585+
586+ 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 ) ;
589587
590588 // An offset from the right edge in viewport pixels
591589 let node_graph_pixel_offset_top_right = node_graph_to_viewport. inverse ( ) . transform_point2 ( target_viewport_top_right) ;
592590
593591 // A 5x5 grid offset from the right corner
594- 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 ) ;
592+ 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 ) ;
595593
596- // The inner bound of the export is the highest/furthest right of the two offsets
594+ // The inner bound of the export is the highest/furthest right of the two offsets.
595+ // 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
597596 let top_right_inner_bound = DVec2 :: new (
598597 node_graph_pixel_offset_top_right. x . max ( node_graph_grid_space_offset_top_right. x ) ,
599598 node_graph_pixel_offset_top_right. y . min ( node_graph_grid_space_offset_top_right. y ) ,
@@ -1950,68 +1949,6 @@ impl NodeNetworkInterface {
19501949 network_metadata. transient_metadata . modify_import_export . unload ( ) ;
19511950 }
19521951
1953- pub fn rounded_network_edge_distance ( & mut self , network_path : & [ NodeId ] ) -> Option < & NetworkEdgeDistance > {
1954- let Some ( network_metadata) = self . network_metadata ( network_path) else {
1955- log:: error!( "Could not get nested network_metadata in rounded_network_edge_distance" ) ;
1956- return None ;
1957- } ;
1958- if !network_metadata. transient_metadata . rounded_network_edge_distance . is_loaded ( ) {
1959- self . load_rounded_network_edge_distance ( network_path) ;
1960- }
1961- let Some ( network_metadata) = self . network_metadata ( network_path) else {
1962- log:: error!( "Could not get nested network_metadata in rounded_network_edge_distance" ) ;
1963- return None ;
1964- } ;
1965- let TransientMetadata :: Loaded ( rounded_network_edge_distance) = & network_metadata. transient_metadata . rounded_network_edge_distance else {
1966- log:: error!( "could not load import rounded_network_edge_distance" ) ;
1967- return None ;
1968- } ;
1969- Some ( rounded_network_edge_distance)
1970- }
1971-
1972- fn load_rounded_network_edge_distance ( & mut self , network_path : & [ NodeId ] ) {
1973- let Some ( network_metadata) = self . network_metadata_mut ( network_path) else {
1974- log:: error!( "Could not get nested network in set_grid_aligned_edges" ) ;
1975- return ;
1976- } ;
1977- // When setting the edges to be grid aligned, update the pixel offset to ensure the next pan starts from the snapped import/export position
1978- let node_graph_to_viewport = network_metadata. persistent_metadata . navigation_metadata . node_graph_to_viewport ;
1979- // TODO: Eventually replace node graph top right with the footprint when trying to get the network edge distance
1980- let node_graph_top_right = network_metadata. persistent_metadata . navigation_metadata . node_graph_top_right ;
1981- let target_exports_distance = node_graph_to_viewport. inverse ( ) . transform_point2 ( DVec2 :: new (
1982- node_graph_top_right. x - EXPORTS_TO_RIGHT_EDGE_PIXEL_GAP as f64 ,
1983- node_graph_top_right. y + EXPORTS_TO_TOP_EDGE_PIXEL_GAP as f64 ,
1984- ) ) ;
1985-
1986- let target_imports_distance = node_graph_to_viewport
1987- . inverse ( )
1988- . transform_point2 ( DVec2 :: new ( IMPORTS_TO_LEFT_EDGE_PIXEL_GAP as f64 , IMPORTS_TO_TOP_EDGE_PIXEL_GAP as f64 ) ) ;
1989-
1990- let rounded_exports_distance = DVec2 :: new ( ( target_exports_distance. x / 24. + 0.5 ) . floor ( ) * 24. , ( target_exports_distance. y / 24. + 0.5 ) . floor ( ) * 24. ) ;
1991- let rounded_imports_distance = DVec2 :: new ( ( target_imports_distance. x / 24. + 0.5 ) . floor ( ) * 24. , ( target_imports_distance. y / 24. + 0.5 ) . floor ( ) * 24. ) ;
1992-
1993- let rounded_viewport_exports_distance = node_graph_to_viewport. transform_point2 ( rounded_exports_distance) ;
1994- let rounded_viewport_imports_distance = node_graph_to_viewport. transform_point2 ( rounded_imports_distance) ;
1995-
1996- let network_edge_distance = NetworkEdgeDistance {
1997- exports_to_edge_distance : rounded_viewport_exports_distance,
1998- imports_to_edge_distance : rounded_viewport_imports_distance,
1999- } ;
2000- let Some ( network_metadata) = self . network_metadata_mut ( network_path) else {
2001- log:: error!( "Could not get current network in load_export_ports" ) ;
2002- return ;
2003- } ;
2004- network_metadata. transient_metadata . rounded_network_edge_distance = TransientMetadata :: Loaded ( network_edge_distance) ;
2005- }
2006-
2007- fn unload_rounded_network_edge_distance ( & mut self , network_path : & [ NodeId ] ) {
2008- let Some ( network_metadata) = self . network_metadata_mut ( network_path) else {
2009- log:: error!( "Could not get nested network_metadata in unload_export_ports" ) ;
2010- return ;
2011- } ;
2012- network_metadata. transient_metadata . rounded_network_edge_distance . unload ( ) ;
2013- }
2014-
20151952 fn owned_nodes ( & self , node_id : & NodeId , network_path : & [ NodeId ] ) -> Option < & HashSet < NodeId > > {
20161953 let layer_node = self . node_metadata ( node_id, network_path) ?;
20171954 let NodeTypePersistentMetadata :: Layer ( LayerPersistentMetadata { owned_nodes, .. } ) = & layer_node. persistent_metadata . node_type_metadata else {
@@ -2861,33 +2798,6 @@ impl NodeNetworkInterface {
28612798 let rect = Subpath :: < PointId > :: new_rect ( bounds[ 0 ] , bounds[ 1 ] ) ;
28622799 let all_nodes_bounding_box = rect. to_bezpath ( ) . to_svg ( ) ;
28632800
2864- let Some ( rounded_network_edge_distance) = self . rounded_network_edge_distance ( network_path) . cloned ( ) else {
2865- log:: error!( "Could not get rounded_network_edge_distance in collect_frontend_click_targets" ) ;
2866- return FrontendClickTargets :: default ( ) ;
2867- } ;
2868- let Some ( network_metadata) = self . network_metadata ( network_path) else {
2869- log:: error!( "Could not get nested network_metadata in collect_frontend_click_targets" ) ;
2870- return FrontendClickTargets :: default ( ) ;
2871- } ;
2872- let import_exports_viewport_top_left = rounded_network_edge_distance. imports_to_edge_distance ;
2873- let import_exports_viewport_bottom_right = rounded_network_edge_distance. exports_to_edge_distance ;
2874-
2875- let node_graph_top_left = network_metadata
2876- . persistent_metadata
2877- . navigation_metadata
2878- . node_graph_to_viewport
2879- . inverse ( )
2880- . transform_point2 ( import_exports_viewport_top_left) ;
2881- let node_graph_bottom_right = network_metadata
2882- . persistent_metadata
2883- . navigation_metadata
2884- . node_graph_to_viewport
2885- . inverse ( )
2886- . transform_point2 ( import_exports_viewport_bottom_right) ;
2887-
2888- let import_exports_target = Subpath :: < PointId > :: new_rect ( node_graph_top_left, node_graph_bottom_right) ;
2889- let import_exports_bounding_box = import_exports_target. to_bezpath ( ) . to_svg ( ) ;
2890-
28912801 let mut modify_import_export = Vec :: new ( ) ;
28922802 if let Some ( modify_import_export_click_targets) = self . modify_import_export ( network_path) {
28932803 for click_target in modify_import_export_click_targets
@@ -2906,7 +2816,6 @@ impl NodeNetworkInterface {
29062816 connector_click_targets,
29072817 icon_click_targets,
29082818 all_nodes_bounding_box,
2909- import_exports_bounding_box,
29102819 modify_import_export,
29112820 }
29122821 }
@@ -3360,13 +3269,12 @@ impl NodeNetworkInterface {
33603269 }
33613270
33623271 // This should be run whenever the pan ends, a zoom occurs, or the network is opened
3363- pub fn set_grid_aligned_edges ( & mut self , node_graph_top_right : DVec2 , network_path : & [ NodeId ] ) {
3272+ pub fn set_node_graph_width ( & mut self , node_graph_width : f64 , network_path : & [ NodeId ] ) {
33643273 let Some ( network_metadata) = self . network_metadata_mut ( network_path) else {
3365- log:: error!( "Could not get nested network_metadata in set_grid_aligned_edges " ) ;
3274+ log:: error!( "Could not get nested network in set_transform " ) ;
33663275 return ;
33673276 } ;
3368- network_metadata. persistent_metadata . navigation_metadata . node_graph_top_right = node_graph_top_right;
3369- self . unload_rounded_network_edge_distance ( network_path) ;
3277+ network_metadata. persistent_metadata . navigation_metadata . node_graph_width = node_graph_width;
33703278 self . unload_import_export_ports ( network_path) ;
33713279 self . unload_modify_import_export ( network_path) ;
33723280 }
@@ -6159,8 +6067,6 @@ pub struct NodeNetworkTransientMetadata {
61596067 pub import_export_ports : TransientMetadata < Ports > ,
61606068 /// Click targets for adding, removing, and moving import/export ports
61616069 pub modify_import_export : TransientMetadata < ModifyImportExportClickTarget > ,
6162- // Distance to the edges of the network, where the import/export ports are displayed. Rounded to nearest grid space when the panning ends.
6163- pub rounded_network_edge_distance : TransientMetadata < NetworkEdgeDistance > ,
61646070
61656071 // Wires from the exports
61666072 pub wires : Vec < TransientMetadata < WirePathUpdate > > ,
@@ -6559,29 +6465,18 @@ pub enum LayerClickTargetTypes {
65596465 // Preview,
65606466}
65616467
6562- #[ derive( Debug , Clone , PartialEq , serde:: Serialize , serde:: Deserialize ) ]
6468+ #[ derive( Debug , Clone , Default , PartialEq , serde:: Serialize , serde:: Deserialize ) ]
65636469pub struct NavigationMetadata {
65646470 /// The current pan, and zoom state of the viewport's view of the node graph.
65656471 /// Ensure `DocumentMessage::UpdateDocumentTransform` is called when the pan, zoom, or transform changes.
65666472 pub node_graph_ptz : PTZ ,
6567- // 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
6473+ // TODO: Eventually remove once te click targets are extracted from the native render
65686474 /// Transform from node graph space to viewport space.
65696475 pub node_graph_to_viewport : DAffine2 ,
6570- /// Top right of the node graph in viewport space
6476+ // TODO: Eventually remove once the import/export positions are extracted from the native render
6477+ /// The width of the node graph in viewport space
65716478 #[ serde( default ) ]
6572- pub node_graph_top_right : DVec2 ,
6573- }
6574-
6575- impl Default for NavigationMetadata {
6576- fn default ( ) -> NavigationMetadata {
6577- // Default PTZ and transform
6578- NavigationMetadata {
6579- node_graph_ptz : PTZ :: default ( ) ,
6580- node_graph_to_viewport : DAffine2 :: IDENTITY ,
6581- // TODO: Eventually replace with footprint
6582- node_graph_top_right : DVec2 :: ZERO ,
6583- }
6584- }
6479+ pub node_graph_width : f64 ,
65856480}
65866481
65876482// PartialEq required by message handlers
0 commit comments