servo: Merge #8276 - Snap fragment scroll points to pixel boundaries (from mrobinson:fragment-ticks); r=mbrubeck

These don't match hardware pixels, but work well enough when the device
pixel ratio is a whole number.

Source-Repo: https://github.com/servo/servo
Source-Revision: 84bf368c3bb8ec3550fe158a874e68e02bb0d2be
This commit is contained in:
Martin Robinson 2015-10-31 05:19:00 +05:01
Родитель 0520aa1bd3
Коммит fcd7ccb3e0
1 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -1669,12 +1669,21 @@ impl ScriptTask {
}
fn scroll_fragment_point(&self, pipeline_id: PipelineId, element: &Element) {
let rect = element.upcast::<Node>().get_bounding_content_box();
let point = Point2D::new(rect.origin.x.to_f32_px(), rect.origin.y.to_f32_px());
// FIXME(#2003, pcwalton): This is pretty bogus when multiple layers are involved.
// FIXME(#8275, pcwalton): This is pretty bogus when multiple layers are involved.
// Really what needs to happen is that this needs to go through layout to ask which
// layer the element belongs to, and have it send the scroll message to the
// compositor.
let rect = element.upcast::<Node>().get_bounding_content_box();
// In order to align with element edges, we snap to unscaled pixel boundaries, since the
// paint task currently does the same for drawing elements. This is important for pages
// that require pixel perfect scroll positioning for proper display (like Acid2). Since we
// don't have the device pixel ratio here, this might not be accurate, but should work as
// long as the ratio is a whole number. Once #8275 is fixed this should actually take into
// account the real device pixel ratio.
let point = Point2D::new(rect.origin.x.to_nearest_px() as f32,
rect.origin.y.to_nearest_px() as f32);
self.compositor.borrow_mut().send(ScriptToCompositorMsg::ScrollFragmentPoint(
pipeline_id, LayerId::null(), point, false)).unwrap();
}