summaryrefslogtreecommitdiff
path: root/crates/typst-pdf
diff options
context:
space:
mode:
authorHydroH <ixlesis@gmail.com>2024-07-22 22:24:29 +0800
committerGitHub <noreply@github.com>2024-07-22 14:24:29 +0000
commit1d74c8e8bfe47723f62eb0dbb3852c07a43be5fd (patch)
tree8db52750dd488ed3611a5328cd1407f302897c76 /crates/typst-pdf
parent684efa2e0eadcf5b5d7d216ab8f5f5b1c68a35a6 (diff)
Add `non-zero` and `even-odd` fill rules to `path` and `polygon` (#4580)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
Diffstat (limited to 'crates/typst-pdf')
-rw-r--r--crates/typst-pdf/src/content.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/crates/typst-pdf/src/content.rs b/crates/typst-pdf/src/content.rs
index d9830e43..e8876944 100644
--- a/crates/typst-pdf/src/content.rs
+++ b/crates/typst-pdf/src/content.rs
@@ -16,7 +16,8 @@ use typst::model::Destination;
use typst::text::{color::is_color_glyph, Font, TextItem, TextItemView};
use typst::utils::{Deferred, Numeric, SliceExt};
use typst::visualize::{
- FixedStroke, Geometry, Image, LineCap, LineJoin, Paint, Path, PathItem, Shape,
+ FillRule, FixedStroke, Geometry, Image, LineCap, LineJoin, Paint, Path, PathItem,
+ Shape,
};
use crate::color_font::ColorFontMap;
@@ -636,11 +637,13 @@ fn write_shape(ctx: &mut Builder, pos: Point, shape: &Shape) {
}
}
- match (&shape.fill, stroke) {
- (None, None) => unreachable!(),
- (Some(_), None) => ctx.content.fill_nonzero(),
- (None, Some(_)) => ctx.content.stroke(),
- (Some(_), Some(_)) => ctx.content.fill_nonzero_and_stroke(),
+ match (&shape.fill, &shape.fill_rule, stroke) {
+ (None, _, None) => unreachable!(),
+ (Some(_), FillRule::NonZero, None) => ctx.content.fill_nonzero(),
+ (Some(_), FillRule::EvenOdd, None) => ctx.content.fill_even_odd(),
+ (None, _, Some(_)) => ctx.content.stroke(),
+ (Some(_), FillRule::NonZero, Some(_)) => ctx.content.fill_nonzero_and_stroke(),
+ (Some(_), FillRule::EvenOdd, Some(_)) => ctx.content.fill_even_odd_and_stroke(),
};
}