Fix Vello rendering bug with stroke alignment cropped by parent transformations (#3329)
Fix element transform for aligned stroke masks
This commit is contained in:
parent
4e65887b90
commit
0298f9a5ad
|
|
@ -871,10 +871,18 @@ impl Render for Table<Vector> {
|
||||||
let multiplied_transform = parent_transform * *row.transform;
|
let multiplied_transform = parent_transform * *row.transform;
|
||||||
let has_real_stroke = row.element.style.stroke().filter(|stroke| stroke.weight() > 0.);
|
let has_real_stroke = row.element.style.stroke().filter(|stroke| stroke.weight() > 0.);
|
||||||
let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.);
|
let set_stroke_transform = has_real_stroke.map(|stroke| stroke.transform).filter(|transform| transform.matrix2.determinant() != 0.);
|
||||||
let applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform);
|
let mut applied_stroke_transform = set_stroke_transform.unwrap_or(multiplied_transform);
|
||||||
let applied_stroke_transform = render_params.alignment_parent_transform.unwrap_or(applied_stroke_transform);
|
let mut element_transform = set_stroke_transform
|
||||||
let element_transform = set_stroke_transform.map(|stroke_transform| multiplied_transform * stroke_transform.inverse());
|
.map(|stroke_transform| multiplied_transform * stroke_transform.inverse())
|
||||||
let element_transform = element_transform.unwrap_or(DAffine2::IDENTITY);
|
.unwrap_or(DAffine2::IDENTITY);
|
||||||
|
if let Some(alignment_transform) = render_params.alignment_parent_transform {
|
||||||
|
applied_stroke_transform = alignment_transform;
|
||||||
|
element_transform = if alignment_transform.matrix2.determinant() != 0. {
|
||||||
|
multiplied_transform * alignment_transform.inverse()
|
||||||
|
} else {
|
||||||
|
multiplied_transform
|
||||||
|
};
|
||||||
|
}
|
||||||
let layer_bounds = row.element.bounding_box().unwrap_or_default();
|
let layer_bounds = row.element.bounding_box().unwrap_or_default();
|
||||||
|
|
||||||
let to_point = |p: DVec2| kurbo::Point::new(p.x, p.y);
|
let to_point = |p: DVec2| kurbo::Point::new(p.x, p.y);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue