mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
Update to support new clipping coordinates change
This commit is contained in:
parent
8d8fea0b4b
commit
39600f9f4e
3 changed files with 17 additions and 12 deletions
|
@ -510,8 +510,8 @@ pub struct ScrollRoot {
|
||||||
/// The position of this scroll root's frame in the parent stacking context.
|
/// The position of this scroll root's frame in the parent stacking context.
|
||||||
pub clip: Rect<Au>,
|
pub clip: Rect<Au>,
|
||||||
|
|
||||||
/// The size of the contents that can be scrolled inside of the scroll root.
|
/// The rect of the contents that can be scrolled inside of the scroll root.
|
||||||
pub size: Size2D<Au>,
|
pub content_rect: Rect<Au>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ScrollRoot {
|
impl ScrollRoot {
|
||||||
|
|
|
@ -1963,24 +1963,29 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
|
||||||
&self.base.early_absolute_position_info.relative_containing_block_size,
|
&self.base.early_absolute_position_info.relative_containing_block_size,
|
||||||
self.base.early_absolute_position_info.relative_containing_block_mode,
|
self.base.early_absolute_position_info.relative_containing_block_mode,
|
||||||
coordinate_system);
|
coordinate_system);
|
||||||
let clip = self.fragment.stacking_relative_content_box(&border_box);
|
let content_box = self.fragment.stacking_relative_content_box(&border_box);
|
||||||
|
|
||||||
let has_scrolling_overflow = self.base.overflow.scroll.origin != Point2D::zero() ||
|
// If we don't overflow our box at all, we can avoid creating a scroll root.
|
||||||
self.base.overflow.scroll.size.width > clip.size.width ||
|
if self.base.overflow.scroll.origin == Point2D::zero() &&
|
||||||
self.base.overflow.scroll.size.height > clip.size.height;
|
self.base.overflow.scroll.size.width <= content_box.size.width &&
|
||||||
self.mark_scrolling_overflow(has_scrolling_overflow);
|
self.base.overflow.scroll.size.height <= content_box.size.height {
|
||||||
if !has_scrolling_overflow {
|
self.mark_scrolling_overflow(false);
|
||||||
return containing_scroll_root_id;
|
return containing_scroll_root_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.mark_scrolling_overflow(true);
|
||||||
|
|
||||||
let new_scroll_root_id = ScrollRootId::new_of_type(self.fragment.node.id() as usize,
|
let new_scroll_root_id = ScrollRootId::new_of_type(self.fragment.node.id() as usize,
|
||||||
self.fragment.fragment_type());
|
self.fragment.fragment_type());
|
||||||
|
|
||||||
|
let content_size = self.base.overflow.scroll.origin + self.base.overflow.scroll.size;
|
||||||
state.add_scroll_root(
|
state.add_scroll_root(
|
||||||
ScrollRoot {
|
ScrollRoot {
|
||||||
id: new_scroll_root_id,
|
id: new_scroll_root_id,
|
||||||
parent_id: containing_scroll_root_id,
|
parent_id: containing_scroll_root_id,
|
||||||
clip: clip,
|
clip: Rect::new(Point2D::zero(), content_box.size),
|
||||||
size: self.base.overflow.scroll.size,
|
content_rect: Rect::new(content_box.origin,
|
||||||
|
Size2D::new(content_size.x, content_size.y)),
|
||||||
},
|
},
|
||||||
self.base.stacking_context_id
|
self.base.stacking_context_id
|
||||||
);
|
);
|
||||||
|
|
|
@ -425,8 +425,8 @@ impl WebRenderDisplayItemConverter for DisplayItem {
|
||||||
None);
|
None);
|
||||||
|
|
||||||
let provided_id = ScrollLayerId::new(item.scroll_root.id.0 as u64, builder.pipeline_id);
|
let provided_id = ScrollLayerId::new(item.scroll_root.id.0 as u64, builder.pipeline_id);
|
||||||
let id = builder.define_clip(clip,
|
let id = builder.define_clip(item.scroll_root.content_rect.to_rectf(),
|
||||||
item.scroll_root.size.to_sizef(),
|
clip,
|
||||||
Some(provided_id));
|
Some(provided_id));
|
||||||
debug_assert!(provided_id == id);
|
debug_assert!(provided_id == id);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue