diff options
| author | HydroH <ixlesis@gmail.com> | 2024-07-22 22:24:29 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-22 14:24:29 +0000 |
| commit | 1d74c8e8bfe47723f62eb0dbb3852c07a43be5fd (patch) | |
| tree | 8db52750dd488ed3611a5328cd1407f302897c76 /crates/typst-pdf/src | |
| parent | 684efa2e0eadcf5b5d7d216ab8f5f5b1c68a35a6 (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/src')
| -rw-r--r-- | crates/typst-pdf/src/content.rs | 15 |
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(), }; } |
