@@ -1588,7 +1588,18 @@ impl Render for Table<Raster<CPU>> {
15881588 metadata. upstream_footprints . insert ( element_id, footprint) ;
15891589 // TODO: Find a way to handle more than one row of the raster table
15901590 if !self . is_empty ( ) {
1591- metadata. local_transforms . insert ( element_id, self . attribute_cloned_or_default ( "transform" , 0 ) ) ;
1591+ let transform: DAffine2 = self . attribute_cloned_or_default ( "transform" , 0 ) ;
1592+ metadata. local_transforms . insert ( element_id, transform) ;
1593+
1594+ // If this raster carries a snapshot of upstream graphic content (e.g. it was produced by Rasterize,
1595+ // which destructively merges its inputs into pixels), recurse into that snapshot so the editor can
1596+ // surface the original child layers' click targets (the same mechanism Boolean Operation uses).
1597+ // The snapshot was captured before Rasterize shifted its input transforms to align with the rasterization
1598+ // area, so the children are already in the coordinate space matching `footprint` here — we must NOT
1599+ // multiply in `transform` (which is the rasterization area, not a layer-stack transform).
1600+ if let Some ( upstream_nested_layers) = self . attribute_cloned_or_default :: < Option < Table < Graphic > > > ( "upstream_data" , 0 ) {
1601+ upstream_nested_layers. collect_metadata ( metadata, footprint, None ) ;
1602+ }
15921603 }
15931604 }
15941605
@@ -1666,7 +1677,18 @@ impl Render for Table<Raster<GPU>> {
16661677 metadata. upstream_footprints . insert ( element_id, footprint) ;
16671678 // TODO: Find a way to handle more than one row of the raster table
16681679 if !self . is_empty ( ) {
1669- metadata. local_transforms . insert ( element_id, self . attribute_cloned_or_default ( "transform" , 0 ) ) ;
1680+ let transform: DAffine2 = self . attribute_cloned_or_default ( "transform" , 0 ) ;
1681+ metadata. local_transforms . insert ( element_id, transform) ;
1682+
1683+ // If this raster carries a snapshot of upstream graphic content (e.g. it was produced by Rasterize,
1684+ // which destructively merges its inputs into pixels), recurse into that snapshot so the editor can
1685+ // surface the original child layers' click targets (the same mechanism Boolean Operation uses).
1686+ // The snapshot was captured before Rasterize shifted its input transforms to align with the rasterization
1687+ // area, so the children are already in the coordinate space matching `footprint` here — we must NOT
1688+ // multiply in `transform` (which is the rasterization area, not a layer-stack transform).
1689+ if let Some ( upstream_nested_layers) = self . attribute_cloned_or_default :: < Option < Table < Graphic > > > ( "upstream_data" , 0 ) {
1690+ upstream_nested_layers. collect_metadata ( metadata, footprint, None ) ;
1691+ }
16701692 }
16711693 }
16721694
0 commit comments