@@ -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