diff --git a/src/library/image.rs b/src/library/image.rs index ea4f775c9..8b85a53fd 100644 --- a/src/library/image.rs +++ b/src/library/image.rs @@ -77,7 +77,7 @@ impl Layout for ImageNode { let mut frame = Frame::new(canvas, canvas.h); frame.clips = self.fit == ImageFit::Cover; frame.push( - Point::new((canvas.w - size.w) / 2.0, (canvas.h - size.h) / 2.0), + (canvas - size).to_point() / 2.0, Element::Image(self.id, size), ); diff --git a/src/library/page.rs b/src/library/page.rs index 6642de166..b760e76a7 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -106,7 +106,7 @@ impl PageNode { if let Some(fill) = self.fill { for frame in &mut frames { let element = Element::Geometry(Geometry::Rect(frame.size), fill); - Rc::make_mut(frame).prepend(Point::zero(), element) + Rc::make_mut(frame).prepend(Point::zero(), element); } } diff --git a/src/library/par.rs b/src/library/par.rs index 9d48ef057..ab4909e1c 100644 --- a/src/library/par.rs +++ b/src/library/par.rs @@ -644,6 +644,7 @@ impl<'a> LineStack<'a> { self.regions.next(); self.full = self.regions.current; self.cts = Constraints::new(self.regions.expand); + self.cts.base = self.regions.base.to_spec().map(Some); self.size = Size::zero(); } diff --git a/tests/typeset.rs b/tests/typeset.rs index a287638a6..11e0090fe 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -437,8 +437,13 @@ fn draw_frame( let h = frame.size.h.to_pt() as f32; let rect = sk::Rect::from_xywh(0.0, 0.0, w, h).unwrap(); let path = sk::PathBuilder::from_rect(rect).transform(ts).unwrap(); + let rule = sk::FillRule::default(); storage = mask.clone(); - storage.intersect_path(&path, sk::FillRule::default(), false); + if storage.intersect_path(&path, rule, false).is_none() { + // Fails if clipping rect is empty. In that case we just clip everything + // by returning. + return; + } &storage } else { mask