mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
layout: Make child stacking contexts of fixed position stacking contexts
also fixed position. Improves YouTube. Improves the Washington Post. Closes #10526.
This commit is contained in:
parent
b214205ba9
commit
8cc3e0660b
2 changed files with 24 additions and 8 deletions
|
@ -28,6 +28,7 @@ trait WebRenderStackingContextConverter {
|
|||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
scroll_policy: ScrollPolicy,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId;
|
||||
|
||||
|
@ -37,6 +38,7 @@ trait WebRenderStackingContextConverter {
|
|||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
scroll_policy: ScrollPolicy,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
force_positioned_stacking_level: bool);
|
||||
|
@ -276,6 +278,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
scroll_policy: ScrollPolicy,
|
||||
builder: &mut webrender_traits::DisplayListBuilder,
|
||||
frame_builder: &mut WebRenderFrameBuilder,
|
||||
force_positioned_stacking_level: bool) {
|
||||
|
@ -295,6 +298,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
pipeline_id,
|
||||
epoch,
|
||||
None,
|
||||
scroll_policy,
|
||||
frame_builder);
|
||||
builder.push_stacking_context(child.web_render_stacking_level(),
|
||||
stacking_context_id);
|
||||
|
@ -304,6 +308,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id,
|
||||
scroll_policy,
|
||||
builder,
|
||||
frame_builder,
|
||||
true);
|
||||
|
@ -323,19 +328,21 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
pipeline_id: webrender_traits::PipelineId,
|
||||
epoch: webrender_traits::Epoch,
|
||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||
mut scroll_policy: ScrollPolicy,
|
||||
frame_builder: &mut WebRenderFrameBuilder)
|
||||
-> webrender_traits::StackingContextId {
|
||||
let scroll_policy = self.layer_info
|
||||
.map_or(webrender_traits::ScrollPolicy::Scrollable, |info| {
|
||||
match info.scroll_policy {
|
||||
ScrollPolicy::Scrollable => webrender_traits::ScrollPolicy::Scrollable,
|
||||
ScrollPolicy::FixedPosition => webrender_traits::ScrollPolicy::Fixed,
|
||||
}
|
||||
});
|
||||
if let Some(ref layer_info) = self.layer_info {
|
||||
scroll_policy = layer_info.scroll_policy
|
||||
}
|
||||
|
||||
let webrender_scroll_policy = match scroll_policy {
|
||||
ScrollPolicy::Scrollable => webrender_traits::ScrollPolicy::Scrollable,
|
||||
ScrollPolicy::FixedPosition => webrender_traits::ScrollPolicy::Fixed,
|
||||
};
|
||||
|
||||
let mut sc =
|
||||
webrender_traits::StackingContext::new(scroll_layer_id,
|
||||
scroll_policy,
|
||||
webrender_scroll_policy,
|
||||
self.bounds.to_rectf(),
|
||||
self.overflow.to_rectf(),
|
||||
self.z_index,
|
||||
|
@ -351,6 +358,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
|||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id,
|
||||
scroll_policy,
|
||||
&mut builder,
|
||||
frame_builder,
|
||||
false);
|
||||
|
@ -386,6 +394,7 @@ impl WebRenderDisplayListConverter for DisplayList {
|
|||
pipeline_id,
|
||||
epoch,
|
||||
scroll_layer_id,
|
||||
ScrollPolicy::Scrollable,
|
||||
frame_builder)
|
||||
}
|
||||
}
|
||||
|
|
7
tests/html/nested-fixed-position.html
Normal file
7
tests/html/nested-fixed-position.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<body style="height: 2000px; background: linear-gradient(to bottom, white, black)">
|
||||
<div style="position: fixed; top: 0; right: 0; left: 0;">
|
||||
<div style="position: absolute; left: 0; right: 0; height: 40px; overflow: hidden;">
|
||||
This text should <em>not</em> scroll.
|
||||
</div>
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue