@@ -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 {
@@ -2858,33 +2795,6 @@ impl NodeNetworkInterface {
28582795 let rect = Subpath :: < PointId > :: new_rect ( bounds[ 0 ] , bounds[ 1 ] ) ;
28592796 let all_nodes_bounding_box = rect. to_bezpath ( ) . to_svg ( ) ;
28602797
2861- let Some ( rounded_network_edge_distance) = self . rounded_network_edge_distance ( network_path) . cloned ( ) else {
2862- log:: error!( "Could not get rounded_network_edge_distance in collect_frontend_click_targets" ) ;
2863- return FrontendClickTargets :: default ( ) ;
2864- } ;
2865- let Some ( network_metadata) = self . network_metadata ( network_path) else {
2866- log:: error!( "Could not get nested network_metadata in collect_frontend_click_targets" ) ;
2867- return FrontendClickTargets :: default ( ) ;
2868- } ;
2869- let import_exports_viewport_top_left = rounded_network_edge_distance. imports_to_edge_distance ;
2870- let import_exports_viewport_bottom_right = rounded_network_edge_distance. exports_to_edge_distance ;
2871-
2872- let node_graph_top_left = network_metadata
2873- . persistent_metadata
2874- . navigation_metadata
2875- . node_graph_to_viewport
2876- . inverse ( )
2877- . transform_point2 ( import_exports_viewport_top_left) ;
2878- let node_graph_bottom_right = network_metadata
2879- . persistent_metadata
2880- . navigation_metadata
2881- . node_graph_to_viewport
2882- . inverse ( )
2883- . transform_point2 ( import_exports_viewport_bottom_right) ;
2884-
2885- let import_exports_target = Subpath :: < PointId > :: new_rect ( node_graph_top_left, node_graph_bottom_right) ;
2886- let import_exports_bounding_box = import_exports_target. to_bezpath ( ) . to_svg ( ) ;
2887-
28882798 let mut modify_import_export = Vec :: new ( ) ;
28892799 if let Some ( modify_import_export_click_targets) = self . modify_import_export ( network_path) {
28902800 for click_target in modify_import_export_click_targets
@@ -2903,7 +2813,6 @@ impl NodeNetworkInterface {
29032813 connector_click_targets,
29042814 icon_click_targets,
29052815 all_nodes_bounding_box,
2906- import_exports_bounding_box,
29072816 modify_import_export,
29082817 }
29092818 }
@@ -3357,13 +3266,12 @@ impl NodeNetworkInterface {
33573266 }
33583267
33593268 // This should be run whenever the pan ends, a zoom occurs, or the network is opened
3360- pub fn set_grid_aligned_edges ( & mut self , node_graph_top_right : DVec2 , network_path : & [ NodeId ] ) {
3269+ pub fn set_node_graph_width ( & mut self , node_graph_width : f64 , network_path : & [ NodeId ] ) {
33613270 let Some ( network_metadata) = self . network_metadata_mut ( network_path) else {
3362- log:: error!( "Could not get nested network_metadata in set_grid_aligned_edges " ) ;
3271+ log:: error!( "Could not get nested network in set_transform " ) ;
33633272 return ;
33643273 } ;
3365- network_metadata. persistent_metadata . navigation_metadata . node_graph_top_right = node_graph_top_right;
3366- self . unload_rounded_network_edge_distance ( network_path) ;
3274+ network_metadata. persistent_metadata . navigation_metadata . node_graph_width = node_graph_width;
33673275 self . unload_import_export_ports ( network_path) ;
33683276 self . unload_modify_import_export ( network_path) ;
33693277 }
@@ -6156,8 +6064,6 @@ pub struct NodeNetworkTransientMetadata {
61566064 pub import_export_ports : TransientMetadata < Ports > ,
61576065 /// Click targets for adding, removing, and moving import/export ports
61586066 pub modify_import_export : TransientMetadata < ModifyImportExportClickTarget > ,
6159- // Distance to the edges of the network, where the import/export ports are displayed. Rounded to nearest grid space when the panning ends.
6160- pub rounded_network_edge_distance : TransientMetadata < NetworkEdgeDistance > ,
61616067
61626068 // Wires from the exports
61636069 pub wires : Vec < TransientMetadata < WirePathUpdate > > ,
@@ -6556,29 +6462,18 @@ pub enum LayerClickTargetTypes {
65566462 // Preview,
65576463}
65586464
6559- #[ derive( Debug , Clone , PartialEq , serde:: Serialize , serde:: Deserialize ) ]
6465+ #[ derive( Debug , Clone , Default , PartialEq , serde:: Serialize , serde:: Deserialize ) ]
65606466pub struct NavigationMetadata {
65616467 /// The current pan, and zoom state of the viewport's view of the node graph.
65626468 /// Ensure `DocumentMessage::UpdateDocumentTransform` is called when the pan, zoom, or transform changes.
65636469 pub node_graph_ptz : PTZ ,
6564- // 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
6470+ // TODO: Eventually remove once te click targets are extracted from the native render
65656471 /// Transform from node graph space to viewport space.
65666472 pub node_graph_to_viewport : DAffine2 ,
6567- /// Top right of the node graph in viewport space
6473+ // TODO: Eventually remove once the import/export positions are extracted from the native render
6474+ /// The width of the node graph in viewport space
65686475 #[ serde( default ) ]
6569- pub node_graph_top_right : DVec2 ,
6570- }
6571-
6572- impl Default for NavigationMetadata {
6573- fn default ( ) -> NavigationMetadata {
6574- // Default PTZ and transform
6575- NavigationMetadata {
6576- node_graph_ptz : PTZ :: default ( ) ,
6577- node_graph_to_viewport : DAffine2 :: IDENTITY ,
6578- // TODO: Eventually replace with footprint
6579- node_graph_top_right : DVec2 :: ZERO ,
6580- }
6581- }
6476+ pub node_graph_width : f64 ,
65826477}
65836478
65846479// PartialEq required by message handlers
0 commit comments