Update WR (box shadows + per-corner radii, elliptical clips).

This commit is contained in:
Glenn Watson 2017-10-20 07:36:19 +10:00
parent fe16c1d5c3
commit aaaf644c91
5 changed files with 12 additions and 15 deletions

4
Cargo.lock generated
View file

@ -3620,7 +3620,7 @@ dependencies = [
[[package]] [[package]]
name = "webrender" name = "webrender"
version = "0.52.1" version = "0.52.1"
source = "git+https://github.com/servo/webrender#6a7b5381b21805f4e3a15cda3bbe8466bc916485" source = "git+https://github.com/servo/webrender#37d531900bcb8e7c09c01759af12493abed8c0e3"
dependencies = [ dependencies = [
"app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3648,7 +3648,7 @@ dependencies = [
[[package]] [[package]]
name = "webrender_api" name = "webrender_api"
version = "0.52.1" version = "0.52.1"
source = "git+https://github.com/servo/webrender#6a7b5381b21805f4e3a15cda3bbe8466bc916485" source = "git+https://github.com/servo/webrender#37d531900bcb8e7c09c01759af12493abed8c0e3"
dependencies = [ dependencies = [
"app_units 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "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)", "bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",

View file

@ -875,9 +875,7 @@ pub struct BoxShadowDisplayItem {
pub spread_radius: Au, pub spread_radius: Au,
/// The border radius of this shadow. /// The border radius of this shadow.
/// pub border_radius: BorderRadii<Au>,
/// TODO(pcwalton): Elliptical radii; different radii for each corner.
pub border_radius: Au,
/// How we should clip the result. /// How we should clip the result.
pub clip_mode: BoxShadowClipMode, pub clip_mode: BoxShadowClipMode,

View file

@ -71,8 +71,8 @@ use style_traits::CSSPixel;
use style_traits::ToCss; use style_traits::ToCss;
use style_traits::cursor::Cursor; use style_traits::cursor::Cursor;
use table_cell::CollapsedBordersForCell; use table_cell::CollapsedBordersForCell;
use webrender_api::{ClipAndScrollInfo, ClipId, ColorF, ComplexClipRegion, GradientStop, LineStyle}; use webrender_api::{ClipAndScrollInfo, ClipId, ClipMode, ColorF, ComplexClipRegion, GradientStop};
use webrender_api::{LocalClip, RepeatMode, ScrollPolicy, ScrollSensitivity, StickyFrameInfo}; use webrender_api::{LineStyle, LocalClip, RepeatMode, ScrollPolicy, ScrollSensitivity, StickyFrameInfo};
use webrender_api::StickySideConstraint; use webrender_api::StickySideConstraint;
use webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle}; use webrender_helpers::{ToBorderRadius, ToMixBlendMode, ToRectF, ToTransformStyle};
@ -980,6 +980,7 @@ impl FragmentDisplayListBuilding for Fragment {
LocalClip::RoundedRect(bounds.to_rectf(), ComplexClipRegion::new( LocalClip::RoundedRect(bounds.to_rectf(), ComplexClipRegion::new(
bounds.to_rectf(), bounds.to_rectf(),
border_radii.to_border_radius(), border_radii.to_border_radius(),
ClipMode::Clip,
)) ))
} else { } else {
LocalClip::Rect(bounds.to_rectf()) LocalClip::Rect(bounds.to_rectf())
@ -1479,6 +1480,7 @@ impl FragmentDisplayListBuilding for Fragment {
self.node, self.node,
style.get_cursor(Cursor::Default), style.get_cursor(Cursor::Default),
display_list_section); display_list_section);
let border_radius = build_border_radius(absolute_bounds, style.get_border());
state.add_display_item(DisplayItem::BoxShadow(Box::new(BoxShadowDisplayItem { state.add_display_item(DisplayItem::BoxShadow(Box::new(BoxShadowDisplayItem {
base: base, base: base,
box_bounds: *absolute_bounds, box_bounds: *absolute_bounds,
@ -1487,9 +1489,7 @@ impl FragmentDisplayListBuilding for Fragment {
Au::from(box_shadow.base.vertical)), Au::from(box_shadow.base.vertical)),
blur_radius: Au::from(box_shadow.base.blur), blur_radius: Au::from(box_shadow.base.blur),
spread_radius: Au::from(box_shadow.spread), spread_radius: Au::from(box_shadow.spread),
border_radius: model::specified_border_radius(style.get_border() border_radius,
.border_top_left_radius,
absolute_bounds.size).width,
clip_mode: if box_shadow.inset { clip_mode: if box_shadow.inset {
BoxShadowClipMode::Inset BoxShadowClipMode::Inset
} else { } else {
@ -2013,6 +2013,7 @@ impl FragmentDisplayListBuilding for Fragment {
stacking_relative_border_box.to_rectf(), stacking_relative_border_box.to_rectf(),
ComplexClipRegion::new(stacking_relative_content_box.to_rectf(), ComplexClipRegion::new(stacking_relative_content_box.to_rectf(),
radii.to_border_radius(), radii.to_border_radius(),
ClipMode::Clip,
)) ))
} else { } else {
LocalClip::Rect(stacking_relative_border_box.to_rectf()) LocalClip::Rect(stacking_relative_border_box.to_rectf())

View file

@ -16,7 +16,7 @@ use style::computed_values::{image_rendering, mix_blend_mode, transform_style};
use style::values::computed::{BorderStyle, Filter}; use style::values::computed::{BorderStyle, Filter};
use style::values::generics::effects::Filter as GenericFilter; use style::values::generics::effects::Filter as GenericFilter;
use webrender_api::{self, ClipAndScrollInfo, ComplexClipRegion, DisplayListBuilder}; use webrender_api::{self, ClipAndScrollInfo, ComplexClipRegion, DisplayListBuilder};
use webrender_api::{ExtendMode, LayoutTransform}; use webrender_api::{ClipMode, ExtendMode, LayoutTransform};
pub trait WebRenderDisplayListConverter { pub trait WebRenderDisplayListConverter {
fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder; fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder;
@ -447,7 +447,7 @@ impl WebRenderDisplayItemConverter for DisplayItem {
item.color, item.color,
item.blur_radius.to_f32_px(), item.blur_radius.to_f32_px(),
item.spread_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()); item.clip_mode.to_clip_mode());
} }
DisplayItem::PushTextShadow(ref item) => { DisplayItem::PushTextShadow(ref item) => {
@ -528,6 +528,7 @@ impl ToWebRenderClip for ClippingRegion {
ComplexClipRegion::new( ComplexClipRegion::new(
complex_clipping_region.rect.to_rectf(), complex_clipping_region.rect.to_rectf(),
complex_clipping_region.radii.to_border_radius(), complex_clipping_region.radii.to_border_radius(),
ClipMode::Clip,
) )
}).collect() }).collect()
} }

View file

@ -1,3 +0,0 @@
[css-box-shadow-001.htm]
type: reftest
expected: FAIL