aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2017-07-24 14:36:42 +0200
committerGlenn Watson <github@intuitionlibrary.com>2017-07-26 09:58:33 +1000
commit537025800fdcbaafdf1db991977558d193b37454 (patch)
tree68387de44e04c3af834f06dada8cc3344d2bfa6a
parent316878b4898f5a3f3e23c513d8f95540f497971a (diff)
downloadservo-537025800fdcbaafdf1db991977558d193b37454.tar.gz
servo-537025800fdcbaafdf1db991977558d193b37454.zip
Allow overflow:hidden to scroll via script
-rw-r--r--components/gfx/display_list/mod.rs4
-rw-r--r--components/layout/display_list_builder.rs38
-rw-r--r--components/layout/webrender_helpers.rs11
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-1.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-2.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-3.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-4.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-5.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-6.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-2.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-5.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-scroll-positioning-1.htm.ini3
-rw-r--r--tests/wpt/metadata-css/css-backgrounds-3_dev/html4/scroll-positioned-multiple-background-images.htm.ini3
13 files changed, 20 insertions, 63 deletions
diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs
index 22d37d05cc3..ba34abea28d 100644
--- a/components/gfx/display_list/mod.rs
+++ b/components/gfx/display_list/mod.rs
@@ -34,7 +34,7 @@ use style_traits::cursor::Cursor;
use text::TextRun;
use text::glyph::ByteIndex;
use webrender_api::{self, ClipId, ColorF, GradientStop, LocalClip, MixBlendMode, ScrollPolicy};
-use webrender_api::{TransformStyle, WebGLContextId};
+use webrender_api::{ScrollSensitivity, TransformStyle, WebGLContextId};
pub use style::dom::OpaqueNode;
@@ -559,7 +559,7 @@ impl fmt::Debug for StackingContext {
#[derive(Clone, Debug, HeapSizeOf, Deserialize, Serialize)]
pub enum ScrollRootType {
- ScrollFrame,
+ ScrollFrame(ScrollSensitivity),
Clip,
}
diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs
index f585d32eb8e..55dc56a06f0 100644
--- a/components/layout/display_list_builder.rs
+++ b/components/layout/display_list_builder.rs
@@ -71,7 +71,7 @@ use style_traits::CSSPixel;
use style_traits::cursor::Cursor;
use table_cell::CollapsedBordersForCell;
use webrender_api::{ClipId, ColorF, ComplexClipRegion, GradientStop, LocalClip, RepeatMode};
-use webrender_api::{LineStyle, ScrollPolicy, TransformStyle};
+use webrender_api::{LineStyle, ScrollPolicy, ScrollSensitivity, TransformStyle};
use webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle};
trait ResolvePercentage {
@@ -2257,7 +2257,6 @@ pub trait BlockFlowDisplayListBuilding {
-> ClipId;
fn setup_scroll_root_for_overflow(&mut self,
state: &mut DisplayListBuildState,
- preserved_state: &mut PreservedDisplayListState,
border_box: &Rect<Au>);
fn setup_scroll_root_for_css_clip(&mut self,
state: &mut DisplayListBuildState,
@@ -2483,7 +2482,7 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
self.transform_clip_to_coordinate_space(state, preserved_state);
}
- self.setup_scroll_root_for_overflow(state, preserved_state, &stacking_relative_border_box);
+ self.setup_scroll_root_for_overflow(state, &stacking_relative_border_box);
self.setup_scroll_root_for_css_clip(state, preserved_state, &stacking_relative_border_box);
self.base.clip = state.clip_stack.last().cloned().unwrap_or_else(max_rect);
@@ -2498,7 +2497,6 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
fn setup_scroll_root_for_overflow(&mut self,
state: &mut DisplayListBuildState,
- preserved_state: &mut PreservedDisplayListState,
border_box: &Rect<Au>) {
if !self.overflow_style_may_require_scroll_root() {
return;
@@ -2526,27 +2524,12 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
return;
}
- let overflow_x = self.fragment.style.get_box().overflow_x;
- let overflow_y = self.fragment.style.get_box().overflow_y;
-
- let content_size = self.base.overflow.scroll.origin + self.base.overflow.scroll.size;
- let mut content_size = Size2D::new(content_size.x, content_size.y);
- if overflow_x::T::hidden == overflow_x {
- content_size.width = content_box.size.width;
- }
-
- if overflow_x::T::hidden == overflow_y {
- content_size.height = content_box.size.height;
- }
-
- if overflow_x::T::hidden == overflow_y || overflow_x::T::hidden == overflow_x {
- preserved_state.push_clip(state, &border_box, self.positioning());
- }
-
- let mut root_type = ScrollRootType::ScrollFrame;
- if overflow_x::T::hidden == overflow_y && overflow_x::T::hidden == overflow_x {
- root_type = ScrollRootType::Clip;
- }
+ let sensitivity = if overflow_x::T::hidden == self.fragment.style.get_box().overflow_x &&
+ overflow_x::T::hidden == self.fragment.style.get_box().overflow_y {
+ ScrollSensitivity::Script
+ } else {
+ ScrollSensitivity::ScriptAndInputEvents
+ };
let clip_rect = build_inner_border_box_for_border_rect(&border_box, &self.fragment.style);
let mut clip = ClippingRegion::from_rect(&clip_rect);
@@ -2555,6 +2538,9 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
clip.intersect_with_rounded_rect(&clip_rect, &radii)
}
+ let content_size = self.base.overflow.scroll.origin + self.base.overflow.scroll.size;
+ let content_size = Size2D::new(content_size.x, content_size.y);
+
let parent_id = self.scroll_root_id(state.layout_context.id);
state.add_scroll_root(
ScrollRoot {
@@ -2562,7 +2548,7 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
parent_id: parent_id,
clip: clip,
content_rect: Rect::new(content_box.origin, content_size),
- root_type,
+ root_type: ScrollRootType::ScrollFrame(sensitivity),
},
self.base.stacking_context_id
);
diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs
index 889ee087b0b..d33638d08d2 100644
--- a/components/layout/webrender_helpers.rs
+++ b/components/layout/webrender_helpers.rs
@@ -16,8 +16,8 @@ use msg::constellation_msg::PipelineId;
use style::computed_values::{image_rendering, mix_blend_mode, transform_style};
use style::values::computed::{BorderStyle, Filter};
use style::values::generics::effects::Filter as GenericFilter;
-use webrender_api::{self, ComplexClipRegion, DisplayListBuilder, ExtendMode};
-use webrender_api::{LayoutTransform, ClipId};
+use webrender_api::{self, ClipId, ComplexClipRegion, DisplayListBuilder, ExtendMode};
+use webrender_api::LayoutTransform;
pub trait WebRenderDisplayListConverter {
fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder;
@@ -190,7 +190,7 @@ impl ToFilterOps for Vec<Filter> {
let mut result = Vec::with_capacity(self.len());
for filter in self.iter() {
match *filter {
- GenericFilter::Blur(radius) => result.push(webrender_api::FilterOp::Blur(radius)),
+ GenericFilter::Blur(radius) => result.push(webrender_api::FilterOp::Blur(radius.to_f32_px())),
GenericFilter::Brightness(amount) => result.push(webrender_api::FilterOp::Brightness(amount)),
GenericFilter::Contrast(amount) => result.push(webrender_api::FilterOp::Contrast(amount)),
GenericFilter::Grayscale(amount) => result.push(webrender_api::FilterOp::Grayscale(amount)),
@@ -506,12 +506,13 @@ impl WebRenderDisplayItemConverter for DisplayItem {
item.scroll_root.clip.get_complex_clips(),
None)
}
- ScrollRootType::ScrollFrame => {
+ ScrollRootType::ScrollFrame(scroll_sensitivity) => {
builder.define_scroll_frame(Some(our_id),
item.scroll_root.content_rect.to_rectf(),
item.scroll_root.clip.main.to_rectf(),
item.scroll_root.clip.get_complex_clips(),
- None)
+ None,
+ scroll_sensitivity)
}
};
debug_assert!(our_id == webrender_id);
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-1.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-1.htm.ini
deleted file mode 100644
index 8b92d2cee28..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-1.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-1.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-2.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-2.htm.ini
deleted file mode 100644
index ccfa81e106b..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-2.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-2.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-3.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-3.htm.ini
deleted file mode 100644
index 650a371c595..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-3.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-3.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-4.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-4.htm.ini
deleted file mode 100644
index 5d6a3d38484..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-4.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-4.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-5.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-5.htm.ini
deleted file mode 100644
index 176412407e3..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-5.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-5.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-6.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-6.htm.ini
deleted file mode 100644
index c58b15efad7..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-clipping-image-6.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-clipping-image-6.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-2.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-2.htm.ini
deleted file mode 100644
index 294802ca0c9..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-2.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-positioning-2.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-5.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-5.htm.ini
deleted file mode 100644
index 94f0d1bdfc9..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-local-positioning-5.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-local-positioning-5.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-scroll-positioning-1.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-scroll-positioning-1.htm.ini
deleted file mode 100644
index c01b934ef28..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/attachment-scroll-positioning-1.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[attachment-scroll-positioning-1.htm]
- type: reftest
- expected: FAIL
diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/scroll-positioned-multiple-background-images.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/scroll-positioned-multiple-background-images.htm.ini
deleted file mode 100644
index e4b266d8a0d..00000000000
--- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/scroll-positioned-multiple-background-images.htm.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[scroll-positioned-multiple-background-images.htm]
- type: reftest
- expected: FAIL