Skip to content

Commit 0298f9a

Browse files
Fix Vello rendering bug with stroke alignment cropped by parent transformations (#3329)
Fix element transform for aligned stroke masks
1 parent 4e65887 commit 0298f9a

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

node-graph/gsvg-renderer/src/renderer.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -871,10 +871,18 @@ impl Render for Table<Vector> {
871871
let multiplied_transform = parent_transform * *row.transform;
872872
let has_real_stroke = row.element.style.stroke().filter(|stroke| stroke.weight() > 0.);
873873
let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.);
874-
let applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform);
875-
let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform);
876-
let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse());
877-
let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY);
874+
let mut applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform);
875+
let mut element_transform = set_stroke_transform
876+
.map(|stroke_transform| multiplied_transform * stroke_transform.inverse())
877+
.unwrap_or(DAffine2::IDENTITY);
878+
if let Some(alignment_transform) = render_params.alignment_parent_transform {
879+
applied_stroke_transform = alignment_transform;
880+
element_transform = if alignment_transform.matrix2.determinant() != 0. {
881+
multiplied_transform * alignment_transform.inverse()
882+
} else {
883+
multiplied_transform
884+
};
885+
}
878886
let layer_bounds = row.element.bounding_box().unwrap_or_default();
879887

880888
let to_point = |p: DVec2| kurbo::Point::new(p.x, p.y);

0 commit comments

Comments
 (0)