diff --git a/Cargo.lock b/Cargo.lock index ac510db413e..1d7a325766c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3620,7 +3620,7 @@ dependencies = [ [[package]] name = "webrender" version = "0.52.1" -source = "git+https://github.com/servo/webrender#6a7b5381b21805f4e3a15cda3bbe8466bc916485" +source = "git+https://github.com/servo/webrender#37d531900bcb8e7c09c01759af12493abed8c0e3" dependencies = [ "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3648,7 +3648,7 @@ dependencies = [ [[package]] name = "webrender_api" version = "0.52.1" -source = "git+https://github.com/servo/webrender#6a7b5381b21805f4e3a15cda3bbe8466bc916485" +source = "git+https://github.com/servo/webrender#37d531900bcb8e7c09c01759af12493abed8c0e3" dependencies = [ "app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs index f1727b8fa86..3d7343435dc 100644 --- a/components/gfx/display_list/mod.rs +++ b/components/gfx/display_list/mod.rs @@ -875,9 +875,7 @@ pub struct BoxShadowDisplayItem { pub spread_radius: Au, /// The border radius of this shadow. - /// - /// TODO(pcwalton): Elliptical radii; different radii for each corner. - pub border_radius: Au, + pub border_radius: BorderRadii, /// How we should clip the result. pub clip_mode: BoxShadowClipMode, diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index 6118bfaa8ce..f908a32d227 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -71,8 +71,8 @@ use style_traits::CSSPixel; use style_traits::ToCss; use style_traits::cursor::Cursor; use table_cell::CollapsedBordersForCell; -use webrender_api::{ClipAndScrollInfo, ClipId, ColorF, ComplexClipRegion, GradientStop, LineStyle}; -use webrender_api::{LocalClip, RepeatMode, ScrollPolicy, ScrollSensitivity, StickyFrameInfo}; +use webrender_api::{ClipAndScrollInfo, ClipId, ClipMode, ColorF, ComplexClipRegion, GradientStop}; +use webrender_api::{LineStyle, LocalClip, RepeatMode, ScrollPolicy, ScrollSensitivity, StickyFrameInfo}; use webrender_api::StickySideConstraint; use webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle}; @@ -980,6 +980,7 @@ impl FragmentDisplayListBuilding for Fragment { LocalClip::RoundedRect(bounds.to_rectf(), ComplexClipRegion::new( bounds.to_rectf(), border_radii.to_border_radius(), + ClipMode::Clip, )) } else { LocalClip::Rect(bounds.to_rectf()) @@ -1479,6 +1480,7 @@ impl FragmentDisplayListBuilding for Fragment { self.node, style.get_cursor(Cursor::Default), display_list_section); + let border_radius = build_border_radius(absolute_bounds, style.get_border()); state.add_display_item(DisplayItem::BoxShadow(Box::new(BoxShadowDisplayItem { base: base, box_bounds: *absolute_bounds, @@ -1487,9 +1489,7 @@ impl FragmentDisplayListBuilding for Fragment { Au::from(box_shadow.base.vertical)), blur_radius: Au::from(box_shadow.base.blur), spread_radius: Au::from(box_shadow.spread), - border_radius: model::specified_border_radius(style.get_border() - .border_top_left_radius, - absolute_bounds.size).width, + border_radius, clip_mode: if box_shadow.inset { BoxShadowClipMode::Inset } else { @@ -2013,6 +2013,7 @@ impl FragmentDisplayListBuilding for Fragment { stacking_relative_border_box.to_rectf(), ComplexClipRegion::new(stacking_relative_content_box.to_rectf(), radii.to_border_radius(), + ClipMode::Clip, )) } else { LocalClip::Rect(stacking_relative_border_box.to_rectf()) diff --git a/components/layout/webrender_helpers.rs b/components/layout/webrender_helpers.rs index c43ce6a9ad7..1855c63db0a 100644 --- a/components/layout/webrender_helpers.rs +++ b/components/layout/webrender_helpers.rs @@ -16,7 +16,7 @@ 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, ClipAndScrollInfo, ComplexClipRegion, DisplayListBuilder}; -use webrender_api::{ExtendMode, LayoutTransform}; +use webrender_api::{ClipMode, ExtendMode, LayoutTransform}; pub trait WebRenderDisplayListConverter { fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder; @@ -447,7 +447,7 @@ impl WebRenderDisplayItemConverter for DisplayItem { item.color, item.blur_radius.to_f32_px(), item.spread_radius.to_f32_px(), - item.border_radius.to_f32_px(), + item.border_radius.to_border_radius(), item.clip_mode.to_clip_mode()); } DisplayItem::PushTextShadow(ref item) => { @@ -528,6 +528,7 @@ impl ToWebRenderClip for ClippingRegion { ComplexClipRegion::new( complex_clipping_region.rect.to_rectf(), complex_clipping_region.radii.to_border_radius(), + ClipMode::Clip, ) }).collect() } diff --git a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/css-box-shadow-001.htm.ini b/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/css-box-shadow-001.htm.ini deleted file mode 100644 index 46e9e63f977..00000000000 --- a/tests/wpt/metadata-css/css-backgrounds-3_dev/html4/css-box-shadow-001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[css-box-shadow-001.htm] - type: reftest - expected: FAIL