diff options
-rw-r--r-- | components/layout/webrender_helpers.rs | 25 | ||||
-rw-r--r-- | tests/html/nested-fixed-position.html | 7 |
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> |