mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-03 13:02:20 +00:00
Fix Vello rendering of transforms for nested graphic groups (#1871)
Fix transforms for nested graphic groups
This commit is contained in:
parent
5b1d3a0ae4
commit
5087a2b0f8
1 changed files with 7 additions and 6 deletions
|
@ -269,17 +269,18 @@ impl GraphicElementRendered for GraphicGroup {
|
|||
|
||||
#[cfg(feature = "vello")]
|
||||
fn render_to_vello(&self, scene: &mut Scene, transform: DAffine2) {
|
||||
let kurbo_transform = kurbo::Affine::new((transform * self.transform).to_cols_array());
|
||||
let Some(bounds) = self.bounding_box(DAffine2::IDENTITY) else { return };
|
||||
let child_transform = transform * self.transform;
|
||||
|
||||
let Some(bounds) = self.bounding_box(transform) else { return };
|
||||
let blending = vello::peniko::BlendMode::new(self.alpha_blending.blend_mode.into(), vello::peniko::Compose::SrcOver);
|
||||
scene.push_layer(
|
||||
blending,
|
||||
self.alpha_blending.opacity,
|
||||
kurbo_transform,
|
||||
kurbo::Affine::IDENTITY,
|
||||
&vello::kurbo::Rect::new(bounds[0].x, bounds[0].y, bounds[1].x, bounds[1].y),
|
||||
);
|
||||
for element in self.iter() {
|
||||
element.render_to_vello(scene, transform * self.transform);
|
||||
element.render_to_vello(scene, child_transform);
|
||||
}
|
||||
scene.pop_layer();
|
||||
}
|
||||
|
@ -327,7 +328,7 @@ impl GraphicElementRendered for VectorData {
|
|||
let stroke_width = self.style.stroke().map(|s| s.weight()).unwrap_or_default();
|
||||
let scale = transform.decompose_scale();
|
||||
let offset = DVec2::splat(stroke_width * scale.x.max(scale.y) / 2.);
|
||||
self.bounding_box_with_transform(self.transform * transform).map(|[a, b]| [a - offset, b + offset])
|
||||
self.bounding_box_with_transform(transform * self.transform).map(|[a, b]| [a - offset, b + offset])
|
||||
}
|
||||
|
||||
fn add_click_targets(&self, click_targets: &mut Vec<ClickTarget>) {
|
||||
|
@ -513,7 +514,7 @@ impl GraphicElementRendered for Artboard {
|
|||
if self.clip {
|
||||
scene.push_layer(blend_mode, 1., kurbo::Affine::new(transform.to_cols_array()), &rect);
|
||||
}
|
||||
self.graphic_group.render_to_vello(scene, transform * self.transform());
|
||||
self.graphic_group.render_to_vello(scene, transform);
|
||||
if self.clip {
|
||||
scene.pop_layer();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue