aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/webrender_helpers.rs25
-rw-r--r--tests/html/nested-fixed-position.html7
2 files changed, 24 insertions, 8 deletions
diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs
index fcf0e204a0d..1d21ab4e462 100644
--- a/components/layout/webrender_helpers.rs
+++ b/components/layout/webrender_helpers.rs
@@ -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)
}
}
diff --git a/tests/html/nested-fixed-position.html b/tests/html/nested-fixed-position.html
new file mode 100644
index 00000000000..2810dbf8599
--- /dev/null
+++ b/tests/html/nested-fixed-position.html
@@ -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>