mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
layout: Store scroll offsets in the ScrollTree
(#37428)
There are currently five places that scroll offsets are stored: - DOM: A set of scroll offsets used for script. - Layout: An array of scroll offsets that is used for tracking layout-side scroll offsets. - Layout: The scroll offsets stored in the `ScrollTree`. These are currently unset and unused. - Compositor: The scroll offsets stored in the `ScrollTree` mirrored from layout. - WebRender: The scrolled offsets stored in the WebRender spatial tree. This change is the first step in combining the first three into the layout `ScrollTree`. It eliminates the extra array of scroll offsets stored in layout in favor of the storing them in the `ScrollTree`. A followup change will eliminate the ones stored in the DOM. - In addition the `ScrollState` data structure is eliminated as these are now stored in a `HashMap` everywhere when passing them via IPC. - The offsests stored in layout can now never scroll past the boundaries of the scrolled content. Testing: This should not change behavior and is thus covered by existing WPT tests. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: stevennovaryo <steven.novaryo@gmail.com>
This commit is contained in:
parent
6cac782fb1
commit
f451dccd0b
11 changed files with 182 additions and 122 deletions
|
@ -24,7 +24,7 @@ use canvas_traits::webgl::WebGLChan;
|
|||
use compositing_traits::CrossProcessCompositorApi;
|
||||
use constellation_traits::{
|
||||
DocumentState, LoadData, LoadOrigin, NavigationHistoryBehavior, ScriptToConstellationChan,
|
||||
ScriptToConstellationMessage, ScrollState, StructuredSerializedData, WindowSizeType,
|
||||
ScriptToConstellationMessage, StructuredSerializedData, WindowSizeType,
|
||||
};
|
||||
use crossbeam_channel::{Sender, unbounded};
|
||||
use cssparser::SourceLocation;
|
||||
|
@ -2097,10 +2097,7 @@ impl Window {
|
|||
// TODO(mrobinson, #18709): Add smooth scrolling support to WebRender so that we can
|
||||
// properly process ScrollBehavior here.
|
||||
self.reflow(
|
||||
ReflowGoal::UpdateScrollNode(ScrollState {
|
||||
scroll_id,
|
||||
scroll_offset: Vector2D::new(-x, -y),
|
||||
}),
|
||||
ReflowGoal::UpdateScrollNode(scroll_id, Vector2D::new(-x, -y)),
|
||||
can_gc,
|
||||
);
|
||||
}
|
||||
|
@ -3234,7 +3231,7 @@ fn should_move_clip_rect(clip_rect: UntypedRect<Au>, new_viewport: UntypedRect<f
|
|||
fn debug_reflow_events(id: PipelineId, reflow_goal: &ReflowGoal) {
|
||||
let goal_string = match *reflow_goal {
|
||||
ReflowGoal::UpdateTheRendering => "\tFull",
|
||||
ReflowGoal::UpdateScrollNode(_) => "\tUpdateScrollNode",
|
||||
ReflowGoal::UpdateScrollNode(..) => "\tUpdateScrollNode",
|
||||
ReflowGoal::LayoutQuery(ref query_msg) => match *query_msg {
|
||||
QueryMsg::ContentBox => "\tContentBoxQuery",
|
||||
QueryMsg::ContentBoxes => "\tContentBoxesQuery",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue