From de889d9c132d397115b80ccff04ec03bf0e7dd6c Mon Sep 17 00:00:00 2001 From: Laurenz Stampfl <47084093+LaurenzV@users.noreply.github.com> Date: Sat, 14 Dec 2024 23:14:26 +0100 Subject: [PATCH] Add support for group clips --- crates/typst-pdf/src/krilla.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/typst-pdf/src/krilla.rs b/crates/typst-pdf/src/krilla.rs index 979b50d44..b19fc4421 100644 --- a/crates/typst-pdf/src/krilla.rs +++ b/crates/typst-pdf/src/krilla.rs @@ -235,8 +235,26 @@ pub fn handle_group( fc.push(); fc.state_mut().transform(group.transform); + let clip_path = group + .clip_path + .as_ref() + .and_then(|p| { + let mut builder = PathBuilder::new(); + convert_path(p, &mut builder); + builder.finish() + }) + .and_then(|p| p.transform(fc.state().transform.as_krilla())); + + if let Some(clip_path) = &clip_path { + surface.push_clip_path(clip_path, &krilla::path::FillRule::NonZero); + } + process_frame(fc, &group.frame, None, surface, context); + if clip_path.is_some() { + surface.pop(); + } + fc.pop(); }