Skip to content

Commit e529f74

Browse files
authored
Fix click target metadata not propagating through intermediate wrapper table rows (#3967)
1 parent 36366b3 commit e529f74

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

node-graph/libraries/rendering/src/renderer.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -730,11 +730,14 @@ impl Render for Table<Graphic> {
730730

731731
fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option<NodeId>) {
732732
for row in self.iter() {
733-
if let Some(element_id) = row.source_node_id {
734-
let mut footprint = footprint;
735-
footprint.transform *= *row.transform;
733+
let mut footprint = footprint;
734+
footprint.transform *= *row.transform;
736735

736+
if let Some(element_id) = row.source_node_id {
737737
row.element.collect_metadata(metadata, footprint, Some(*element_id));
738+
} else {
739+
// Recurse through anonymous wrapper rows to reach nested content with source_node_ids
740+
row.element.collect_metadata(metadata, footprint, None);
738741
}
739742
}
740743

@@ -1229,12 +1232,20 @@ impl Render for Table<Vector> {
12291232
}
12301233
}
12311234

1232-
fn collect_metadata(&self, metadata: &mut RenderMetadata, mut footprint: Footprint, element_id: Option<NodeId>) {
1235+
fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, caller_element_id: Option<NodeId>) {
12331236
for row in self.iter() {
12341237
let transform = *row.transform;
12351238
let vector = row.element;
12361239

1237-
if let Some(element_id) = element_id {
1240+
if let Some(element_id) = caller_element_id.or(*row.source_node_id) {
1241+
// When recovering element_id from the row's source_node_id (because the caller
1242+
// passed None), also store the transform metadata that Graphic::collect_metadata
1243+
// normally provides but skipped due to the None element_id.
1244+
if caller_element_id.is_none() {
1245+
metadata.upstream_footprints.entry(element_id).or_insert(footprint);
1246+
metadata.local_transforms.entry(element_id).or_insert(transform);
1247+
}
1248+
12381249
let stroke_width = vector.style.stroke().as_ref().map_or(0., Stroke::effective_width);
12391250
let filled = vector.style.fill() != &Fill::None;
12401251
let fill = |mut subpath: Subpath<_>| {
@@ -1269,8 +1280,9 @@ impl Render for Table<Vector> {
12691280
}
12701281

12711282
if let Some(upstream_nested_layers) = &vector.upstream_data {
1272-
footprint.transform *= transform;
1273-
upstream_nested_layers.collect_metadata(metadata, footprint, None);
1283+
let mut upstream_footprint = footprint;
1284+
upstream_footprint.transform *= transform;
1285+
upstream_nested_layers.collect_metadata(metadata, upstream_footprint, None);
12741286
}
12751287
}
12761288
}

0 commit comments

Comments
 (0)