mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Implement overflow scroll support for different axes (#35414)
* layout: Add AxesScrollSensitivity to enable control of scroll in axis Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout_2013: Be compatible with AxesScrollSensitivity Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: update struct AxesScrollSensitivity to euclid::Vector2D Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * display_list: implement From<Overflow> for ScrollSensitivity Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: simplify and reuse scroll related logic Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout_2013: simplify and reuse scroll related logic Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout, layout_2013: revert AxesScrollSensitivity to pair struct Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: Reimport ComputedOverflow as #35103 depends on it Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: Add AxesOverflow to replace PhysicalVec Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: implement scroll of viewport for different axes Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * layout: explicitly handle overflow match Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> * Update components/shared/webrender/Cargo.toml Co-authored-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> --------- Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com> Co-authored-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
9b3e23633d
commit
03fc54e682
12 changed files with 111 additions and 63 deletions
|
@ -51,7 +51,7 @@ use webrender_api::{
|
|||
FilterOp, GlyphInstance, ImageRendering, LineStyle, NinePatchBorder, NinePatchBorderSource,
|
||||
NormalBorder, PropertyBinding, StickyOffsetBounds,
|
||||
};
|
||||
use webrender_traits::display_list::ScrollSensitivity;
|
||||
use webrender_traits::display_list::AxesScrollSensitivity;
|
||||
|
||||
use super::StackingContextId;
|
||||
use crate::block::BlockFlow;
|
||||
|
@ -2535,14 +2535,6 @@ impl BlockFlow {
|
|||
return;
|
||||
}
|
||||
|
||||
let sensitivity = if StyleOverflow::Hidden == self.fragment.style.get_box().overflow_x &&
|
||||
StyleOverflow::Hidden == self.fragment.style.get_box().overflow_y
|
||||
{
|
||||
ScrollSensitivity::Script
|
||||
} else {
|
||||
ScrollSensitivity::ScriptAndInputEvents
|
||||
};
|
||||
|
||||
let border_widths = self
|
||||
.fragment
|
||||
.style
|
||||
|
@ -2572,7 +2564,13 @@ impl BlockFlow {
|
|||
parent_index: self.clipping_and_scrolling().scrolling,
|
||||
clip,
|
||||
content_rect: Rect::new(content_box.origin, content_size).to_layout(),
|
||||
node_type: ClipScrollNodeType::ScrollFrame(sensitivity, external_id),
|
||||
node_type: ClipScrollNodeType::ScrollFrame(
|
||||
AxesScrollSensitivity {
|
||||
x: self.fragment.style.get_box().overflow_x.into(),
|
||||
y: self.fragment.style.get_box().overflow_y.into(),
|
||||
},
|
||||
external_id,
|
||||
),
|
||||
scroll_node_id: None,
|
||||
clip_chain_id: None,
|
||||
});
|
||||
|
|
|
@ -32,7 +32,7 @@ use webrender_api::{
|
|||
FilterOp, GlyphInstance, GradientStop, ImageKey, MixBlendMode, PrimitiveFlags, Shadow,
|
||||
SpatialId, StickyOffsetBounds, TransformStyle,
|
||||
};
|
||||
use webrender_traits::display_list::{ScrollSensitivity, ScrollTreeNodeId};
|
||||
use webrender_traits::display_list::{AxesScrollSensitivity, ScrollTreeNodeId};
|
||||
|
||||
use super::StackingContextId;
|
||||
|
||||
|
@ -353,7 +353,7 @@ pub enum ClipType {
|
|||
#[derive(Clone, Debug, PartialEq, Serialize)]
|
||||
pub enum ClipScrollNodeType {
|
||||
Placeholder,
|
||||
ScrollFrame(ScrollSensitivity, ExternalScrollId),
|
||||
ScrollFrame(AxesScrollSensitivity, ExternalScrollId),
|
||||
StickyFrame(StickyFrameData),
|
||||
Clip(ClipType),
|
||||
}
|
||||
|
|
|
@ -17,7 +17,8 @@ use webrender_api::{
|
|||
ReferenceFrameKind, SpaceAndClipInfo, SpatialId, SpatialTreeItemKey,
|
||||
};
|
||||
use webrender_traits::display_list::{
|
||||
CompositorDisplayListInfo, ScrollSensitivity, ScrollTreeNodeId, ScrollableNodeInfo,
|
||||
AxesScrollSensitivity, CompositorDisplayListInfo, ScrollSensitivity, ScrollTreeNodeId,
|
||||
ScrollableNodeInfo,
|
||||
};
|
||||
|
||||
use crate::display_list::items::{
|
||||
|
@ -167,7 +168,10 @@ impl DisplayList {
|
|||
content_size,
|
||||
webrender_pipeline,
|
||||
epoch,
|
||||
ScrollSensitivity::ScriptAndInputEvents,
|
||||
AxesScrollSensitivity {
|
||||
x: ScrollSensitivity::ScriptAndInputEvents,
|
||||
y: ScrollSensitivity::ScriptAndInputEvents,
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue