mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01: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,
|
pipeline_id: webrender_traits::PipelineId,
|
||||||
epoch: webrender_traits::Epoch,
|
epoch: webrender_traits::Epoch,
|
||||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||||
|
scroll_policy: ScrollPolicy,
|
||||||
frame_builder: &mut WebRenderFrameBuilder)
|
frame_builder: &mut WebRenderFrameBuilder)
|
||||||
-> webrender_traits::StackingContextId;
|
-> webrender_traits::StackingContextId;
|
||||||
|
|
||||||
|
@ -37,6 +38,7 @@ trait WebRenderStackingContextConverter {
|
||||||
pipeline_id: webrender_traits::PipelineId,
|
pipeline_id: webrender_traits::PipelineId,
|
||||||
epoch: webrender_traits::Epoch,
|
epoch: webrender_traits::Epoch,
|
||||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||||
|
scroll_policy: ScrollPolicy,
|
||||||
builder: &mut webrender_traits::DisplayListBuilder,
|
builder: &mut webrender_traits::DisplayListBuilder,
|
||||||
frame_builder: &mut WebRenderFrameBuilder,
|
frame_builder: &mut WebRenderFrameBuilder,
|
||||||
force_positioned_stacking_level: bool);
|
force_positioned_stacking_level: bool);
|
||||||
|
@ -276,6 +278,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||||
pipeline_id: webrender_traits::PipelineId,
|
pipeline_id: webrender_traits::PipelineId,
|
||||||
epoch: webrender_traits::Epoch,
|
epoch: webrender_traits::Epoch,
|
||||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||||
|
scroll_policy: ScrollPolicy,
|
||||||
builder: &mut webrender_traits::DisplayListBuilder,
|
builder: &mut webrender_traits::DisplayListBuilder,
|
||||||
frame_builder: &mut WebRenderFrameBuilder,
|
frame_builder: &mut WebRenderFrameBuilder,
|
||||||
force_positioned_stacking_level: bool) {
|
force_positioned_stacking_level: bool) {
|
||||||
|
@ -295,6 +298,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
epoch,
|
epoch,
|
||||||
None,
|
None,
|
||||||
|
scroll_policy,
|
||||||
frame_builder);
|
frame_builder);
|
||||||
builder.push_stacking_context(child.web_render_stacking_level(),
|
builder.push_stacking_context(child.web_render_stacking_level(),
|
||||||
stacking_context_id);
|
stacking_context_id);
|
||||||
|
@ -304,6 +308,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
epoch,
|
epoch,
|
||||||
scroll_layer_id,
|
scroll_layer_id,
|
||||||
|
scroll_policy,
|
||||||
builder,
|
builder,
|
||||||
frame_builder,
|
frame_builder,
|
||||||
true);
|
true);
|
||||||
|
@ -323,19 +328,21 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||||
pipeline_id: webrender_traits::PipelineId,
|
pipeline_id: webrender_traits::PipelineId,
|
||||||
epoch: webrender_traits::Epoch,
|
epoch: webrender_traits::Epoch,
|
||||||
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
scroll_layer_id: Option<webrender_traits::ScrollLayerId>,
|
||||||
|
mut scroll_policy: ScrollPolicy,
|
||||||
frame_builder: &mut WebRenderFrameBuilder)
|
frame_builder: &mut WebRenderFrameBuilder)
|
||||||
-> webrender_traits::StackingContextId {
|
-> webrender_traits::StackingContextId {
|
||||||
let scroll_policy = self.layer_info
|
if let Some(ref layer_info) = self.layer_info {
|
||||||
.map_or(webrender_traits::ScrollPolicy::Scrollable, |info| {
|
scroll_policy = layer_info.scroll_policy
|
||||||
match info.scroll_policy {
|
}
|
||||||
ScrollPolicy::Scrollable => webrender_traits::ScrollPolicy::Scrollable,
|
|
||||||
ScrollPolicy::FixedPosition => webrender_traits::ScrollPolicy::Fixed,
|
let webrender_scroll_policy = match scroll_policy {
|
||||||
}
|
ScrollPolicy::Scrollable => webrender_traits::ScrollPolicy::Scrollable,
|
||||||
});
|
ScrollPolicy::FixedPosition => webrender_traits::ScrollPolicy::Fixed,
|
||||||
|
};
|
||||||
|
|
||||||
let mut sc =
|
let mut sc =
|
||||||
webrender_traits::StackingContext::new(scroll_layer_id,
|
webrender_traits::StackingContext::new(scroll_layer_id,
|
||||||
scroll_policy,
|
webrender_scroll_policy,
|
||||||
self.bounds.to_rectf(),
|
self.bounds.to_rectf(),
|
||||||
self.overflow.to_rectf(),
|
self.overflow.to_rectf(),
|
||||||
self.z_index,
|
self.z_index,
|
||||||
|
@ -351,6 +358,7 @@ impl WebRenderStackingContextConverter for StackingContext {
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
epoch,
|
epoch,
|
||||||
scroll_layer_id,
|
scroll_layer_id,
|
||||||
|
scroll_policy,
|
||||||
&mut builder,
|
&mut builder,
|
||||||
frame_builder,
|
frame_builder,
|
||||||
false);
|
false);
|
||||||
|
@ -386,6 +394,7 @@ impl WebRenderDisplayListConverter for DisplayList {
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
epoch,
|
epoch,
|
||||||
scroll_layer_id,
|
scroll_layer_id,
|
||||||
|
ScrollPolicy::Scrollable,
|
||||||
frame_builder)
|
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