Expand DisplayList layer bounds to whole pixels

Before passing these layers to the paint task, expand them to pixel
boundaries. This ensures that subpixel edges of the layer will not be
clipped away and helps prevent rounding issues with layer contents.

Fixes #8166.
This commit is contained in:
Martin Robinson 2015-10-27 15:57:33 -07:00
parent 9501564e01
commit a7a58e47a0
8 changed files with 106 additions and 30 deletions

View file

@ -107,3 +107,20 @@ pub fn au_rect_to_f32_rect(rect: Rect<Au>) -> Rect<f32> {
Rect::new(Point2D::new(rect.origin.x.to_f32_px(), rect.origin.y.to_f32_px()),
Size2D::new(rect.size.width.to_f32_px(), rect.size.height.to_f32_px()))
}
pub trait ExpandToPixelBoundaries {
fn expand_to_px_boundaries(&self) -> Self;
}
impl ExpandToPixelBoundaries for Rect<Au> {
fn expand_to_px_boundaries(&self) -> Rect<Au> {
let bottom_right = self.bottom_right();
let bottom_right = Point2D::new(Au::from_px(bottom_right.x.ceil_to_px()),
Au::from_px(bottom_right.y.ceil_to_px()));
let new_origin = Point2D::new(Au::from_px(self.origin.x.to_px()),
Au::from_px(self.origin.y.to_px()));
Rect::new(new_origin,
Size2D::new(bottom_right.x - new_origin.x,
bottom_right.y - new_origin.y))
}
}