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(); }