diff --git a/crates/typst-pdf/src/paint.rs b/crates/typst-pdf/src/paint.rs index e03d0e94..c994e0e2 100644 --- a/crates/typst-pdf/src/paint.rs +++ b/crates/typst-pdf/src/paint.rs @@ -152,11 +152,12 @@ fn convert_gradient( RelativeTo::Parent => state.container_size(), }; - let angle = gradient.angle().unwrap_or_else(Angle::zero); + let mut angle = gradient.angle().unwrap_or_else(Angle::zero); let base_transform = correct_transform(state, gradient.unwrap_relative(on_text)); let stops = convert_gradient_stops(gradient); match &gradient { Gradient::Linear(_) => { + angle = Gradient::correct_aspect_ratio(angle, size.aspect_ratio()); let (x1, y1, x2, y2) = { let (mut sin, mut cos) = (angle.sin(), angle.cos()); diff --git a/tests/ref/issue-6680-gradient-linear-with-aspect-correction.png b/tests/ref/issue-6680-gradient-linear-with-aspect-correction.png new file mode 100644 index 00000000..38769ed9 Binary files /dev/null and b/tests/ref/issue-6680-gradient-linear-with-aspect-correction.png differ diff --git a/tests/suite/visualize/gradient.typ b/tests/suite/visualize/gradient.typ index 8446ca03..0071dd91 100644 --- a/tests/suite/visualize/gradient.typ +++ b/tests/suite/visualize/gradient.typ @@ -692,3 +692,6 @@ $ A = mat( (blue, 100%), ) ) + +--- issue-6680-gradient-linear-with-aspect-correction --- +#set page(width: 200pt, height: auto, margin: 10pt, fill: gradient.linear(red, blue, angle: 45deg).sharp(2))