summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien d'Herbais de Thun <sebastien.d.herbais@gmail.com>2023-12-04 14:24:05 +0100
committerGitHub <noreply@github.com>2023-12-04 14:24:05 +0100
commitf5c90c8714413507c93068ba1bd6a035838e9beb (patch)
treea188ed2e3b2751d91ffc6437cbad5c009f2de840
parentb8b1a92151c4d092bbc6ec732483d72b86e8dd86 (diff)
Fix PDF transform (#2850)
-rw-r--r--crates/typst-pdf/src/pattern.rs6
-rw-r--r--tests/ref/visualize/pattern-simple.pngbin0 -> 343 bytes
-rw-r--r--tests/typ/visualize/pattern-simple.typ18
3 files changed, 22 insertions, 2 deletions
diff --git a/crates/typst-pdf/src/pattern.rs b/crates/typst-pdf/src/pattern.rs
index 965ce370..90610066 100644
--- a/crates/typst-pdf/src/pattern.rs
+++ b/crates/typst-pdf/src/pattern.rs
@@ -1,7 +1,7 @@
use ecow::eco_format;
use pdf_writer::types::{ColorSpaceOperand, PaintType, TilingType};
use pdf_writer::{Filter, Finish, Name, Rect};
-use typst::layout::{Abs, Transform};
+use typst::layout::{Abs, Ratio, Transform};
use typst::util::Numeric;
use typst::visualize::{Pattern, RelativeTo};
@@ -73,7 +73,9 @@ pub(crate) fn write_patterns(ctx: &mut PdfContext) {
resources_map.finish();
tiling_pattern
- .matrix(transform_to_array(*transform))
+ .matrix(transform_to_array(
+ transform.post_concat(Transform::scale(Ratio::one(), -Ratio::one())),
+ ))
.filter(Filter::FlateDecode);
}
}
diff --git a/tests/ref/visualize/pattern-simple.png b/tests/ref/visualize/pattern-simple.png
new file mode 100644
index 00000000..ac473a75
--- /dev/null
+++ b/tests/ref/visualize/pattern-simple.png
Binary files differ
diff --git a/tests/typ/visualize/pattern-simple.typ b/tests/typ/visualize/pattern-simple.typ
new file mode 100644
index 00000000..9c41067d
--- /dev/null
+++ b/tests/typ/visualize/pattern-simple.typ
@@ -0,0 +1,18 @@
+// Tests that simple patterns work.
+
+---
+#set page(width: auto, height: auto, margin: 0pt)
+#let pat = pattern(size: (10pt, 10pt), line(stroke: 4pt, start: (0%, 0%), end: (100%, 100%)))
+#rect(width: 50pt, height: 50pt, fill: pat)
+
+---
+#set page(width: auto, height: auto, margin: 0pt)
+
+#let pat = pattern(size: (10pt, 10pt), {
+ place(line(stroke: 4pt, start: (0%, 0%), end: (100%, 100%)))
+ place(line(stroke: 4pt, start: (100%,0%), end: (200%, 100%)))
+ place(line(stroke: 4pt, start: (0%,100%), end: (100%, 200%)))
+ place(line(stroke: 4pt, start: (-100%,0%), end: (0%, 100%)))
+ place(line(stroke: 4pt, start: (0%,-100%), end: (100%, 0%)))
+})
+#rect(width: 50pt, height: 50pt, fill: pat)