aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-08-19 05:45:53 -0500
committerGitHub <noreply@github.com>2017-08-19 05:45:53 -0500
commit0b45a4f65174a436986c9bfd0ef99a629ab569b3 (patch)
tree70b7908bbb39323f5c729efac65495e2db0fde63
parentd7b7e7aea8b839c77bc17487cb571176bcb2366b (diff)
parent4e0b1071e7bc5b7382bdf629e1b2d3373d317974 (diff)
downloadservo-0b45a4f65174a436986c9bfd0ef99a629ab569b3.tar.gz
servo-0b45a4f65174a436986c9bfd0ef99a629ab569b3.zip
Auto merge of #18136 - upsuper:shadow-color, r=emilio
Use Option<RGBA> for color in shadow This fixes [bug 1390697](https://bugzilla.mozilla.org/show_bug.cgi?id=1390697) by downgrading the support of currentcolor in shadow to what Gecko currently supports. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18136) <!-- Reviewable:end -->
-rw-r--r--components/layout/display_list_builder.rs4
-rw-r--r--components/style/gecko_bindings/sugar/ns_css_shadow_item.rs16
-rw-r--r--components/style/values/animated/effects.rs8
-rw-r--r--components/style/values/computed/effects.rs6
-rw-r--r--components/style/values/specified/effects.rs18
5 files changed, 26 insertions, 26 deletions
diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs
index 75e288e4826..5ec71dd09a3 100644
--- a/components/layout/display_list_builder.rs
+++ b/components/layout/display_list_builder.rs
@@ -1411,7 +1411,7 @@ impl FragmentDisplayListBuilding for Fragment {
state.add_display_item(DisplayItem::BoxShadow(box BoxShadowDisplayItem {
base: base,
box_bounds: *absolute_bounds,
- color: style.resolve_color(box_shadow.base.color).to_gfx_color(),
+ color: box_shadow.base.color.unwrap_or(style.get_color().color).to_gfx_color(),
offset: Vector2D::new(box_shadow.base.horizontal, box_shadow.base.vertical),
blur_radius: box_shadow.base.blur.0,
spread_radius: box_shadow.spread,
@@ -2133,7 +2133,7 @@ impl FragmentDisplayListBuilding for Fragment {
base: base.clone(),
blur_radius: shadow.blur.0,
offset: Vector2D::new(shadow.horizontal, shadow.vertical),
- color: self.style().resolve_color(shadow.color).to_gfx_color(),
+ color: shadow.color.unwrap_or(self.style().get_color().color).to_gfx_color(),
}));
}
diff --git a/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs b/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs
index 13f5b249389..d6258809c36 100644
--- a/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs
+++ b/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs
@@ -7,7 +7,7 @@
use app_units::Au;
use gecko::values::{convert_rgba_to_nscolor, convert_nscolor_to_rgba};
use gecko_bindings::structs::nsCSSShadowItem;
-use values::computed::Color;
+use values::computed::RGBAColor;
use values::computed::effects::{BoxShadow, SimpleShadow};
impl nsCSSShadowItem {
@@ -37,23 +37,23 @@ impl nsCSSShadowItem {
self.mRadius = shadow.blur.value();
self.mSpread = 0;
self.mInset = false;
- if shadow.color.is_currentcolor() {
+ if let Some(color) = shadow.color {
+ self.mHasColor = true;
+ self.mColor = convert_rgba_to_nscolor(&color);
+ } else {
// TODO handle currentColor
// https://bugzilla.mozilla.org/show_bug.cgi?id=760345
self.mHasColor = false;
self.mColor = 0;
- } else {
- self.mHasColor = true;
- self.mColor = convert_rgba_to_nscolor(&shadow.color.color);
}
}
#[inline]
- fn extract_color(&self) -> Color {
+ fn extract_color(&self) -> Option<RGBAColor> {
if self.mHasColor {
- Color::rgba(convert_nscolor_to_rgba(self.mColor))
+ Some(convert_nscolor_to_rgba(self.mColor))
} else {
- Color::currentcolor()
+ None
}
}
diff --git a/components/style/values/animated/effects.rs b/components/style/values/animated/effects.rs
index f969aef0c39..3806af7dc1f 100644
--- a/components/style/values/animated/effects.rs
+++ b/components/style/values/animated/effects.rs
@@ -12,7 +12,7 @@ use std::cmp;
#[cfg(not(feature = "gecko"))]
use values::Impossible;
use values::animated::{ToAnimatedValue, ToAnimatedZero};
-use values::animated::color::Color;
+use values::animated::color::RGBA;
use values::computed::{Angle, NonNegativeNumber};
use values::computed::length::{Length, NonNegativeLength};
use values::distance::{ComputeSquaredDistance, SquaredDistance};
@@ -34,7 +34,7 @@ pub type TextShadowList = ShadowList<SimpleShadow>;
pub struct ShadowList<Shadow>(Vec<Shadow>);
/// An animated value for a single `box-shadow`.
-pub type BoxShadow = GenericBoxShadow<Color, Length, NonNegativeLength, Length>;
+pub type BoxShadow = GenericBoxShadow<Option<RGBA>, Length, NonNegativeLength, Length>;
/// An animated value for the `filter` property.
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
@@ -50,7 +50,7 @@ pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, Sim
pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, Impossible>;
/// An animated value for the `drop-shadow()` filter.
-pub type SimpleShadow = GenericSimpleShadow<Color, Length, NonNegativeLength>;
+pub type SimpleShadow = GenericSimpleShadow<Option<RGBA>, Length, NonNegativeLength>;
impl ToAnimatedValue for ComputedBoxShadowList {
type AnimatedValue = BoxShadowList;
@@ -245,7 +245,7 @@ impl ToAnimatedZero for SimpleShadow {
#[inline]
fn to_animated_zero(&self) -> Result<Self, ()> {
Ok(SimpleShadow {
- color: Color::transparent(),
+ color: Some(RGBA::transparent()),
horizontal: self.horizontal.to_animated_zero()?,
vertical: self.vertical.to_animated_zero()?,
blur: self.blur.to_animated_zero()?,
diff --git a/components/style/values/computed/effects.rs b/components/style/values/computed/effects.rs
index fb87c58bf6f..92e91f163f0 100644
--- a/components/style/values/computed/effects.rs
+++ b/components/style/values/computed/effects.rs
@@ -7,14 +7,14 @@
#[cfg(not(feature = "gecko"))]
use values::Impossible;
use values::computed::{Angle, NonNegativeNumber};
-use values::computed::color::Color;
+use values::computed::color::RGBAColor;
use values::computed::length::{Length, NonNegativeLength};
use values::generics::effects::BoxShadow as GenericBoxShadow;
use values::generics::effects::Filter as GenericFilter;
use values::generics::effects::SimpleShadow as GenericSimpleShadow;
/// A computed value for a single shadow of the `box-shadow` property.
-pub type BoxShadow = GenericBoxShadow<Color, Length, NonNegativeLength, Length>;
+pub type BoxShadow = GenericBoxShadow<Option<RGBAColor>, Length, NonNegativeLength, Length>;
/// A computed value for a single `filter`.
#[cfg(feature = "gecko")]
@@ -25,4 +25,4 @@ pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, Sim
pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, Impossible>;
/// A computed value for the `drop-shadow()` filter.
-pub type SimpleShadow = GenericSimpleShadow<Color, Length, NonNegativeLength>;
+pub type SimpleShadow = GenericSimpleShadow<Option<RGBAColor>, Length, NonNegativeLength>;
diff --git a/components/style/values/specified/effects.rs b/components/style/values/specified/effects.rs
index 27bf0f531aa..977067be582 100644
--- a/components/style/values/specified/effects.rs
+++ b/components/style/values/specified/effects.rs
@@ -17,13 +17,14 @@ use values::generics::effects::BoxShadow as GenericBoxShadow;
use values::generics::effects::Filter as GenericFilter;
use values::generics::effects::SimpleShadow as GenericSimpleShadow;
use values::specified::{Angle, NumberOrPercentage};
-use values::specified::color::Color;
+use values::specified::color::RGBAColor;
use values::specified::length::{Length, NonNegativeLength};
#[cfg(feature = "gecko")]
use values::specified::url::SpecifiedUrl;
/// A specified value for a single shadow of the `box-shadow` property.
-pub type BoxShadow = GenericBoxShadow<Option<Color>, Length, Option<NonNegativeLength>, Option<Length>>;
+pub type BoxShadow = GenericBoxShadow<Option<RGBAColor>, Length,
+ Option<NonNegativeLength>, Option<Length>>;
/// A specified value for a single `filter`.
#[cfg(feature = "gecko")]
@@ -67,7 +68,7 @@ impl ToComputedValue for Factor {
}
/// A specified value for the `drop-shadow()` filter.
-pub type SimpleShadow = GenericSimpleShadow<Option<Color>, Length, Option<NonNegativeLength>>;
+pub type SimpleShadow = GenericSimpleShadow<Option<RGBAColor>, Length, Option<NonNegativeLength>>;
impl Parse for BoxShadow {
fn parse<'i, 't>(
@@ -104,7 +105,7 @@ impl Parse for BoxShadow {
}
}
if color.is_none() {
- if let Ok(value) = input.try(|i| Color::parse(context, i)) {
+ if let Ok(value) = input.try(|i| RGBAColor::parse(context, i)) {
color = Some(value);
continue;
}
@@ -184,11 +185,11 @@ impl Parse for SimpleShadow {
context: &ParserContext,
input: &mut Parser<'i, 't>
) -> Result<Self, ParseError<'i>> {
- let color = input.try(|i| Color::parse(context, i)).ok();
+ let color = input.try(|i| RGBAColor::parse(context, i)).ok();
let horizontal = Length::parse(context, input)?;
let vertical = Length::parse(context, input)?;
let blur = input.try(|i| Length::parse_non_negative(context, i)).ok();
- let color = color.or_else(|| input.try(|i| Color::parse(context, i)).ok());
+ let color = color.or_else(|| input.try(|i| RGBAColor::parse(context, i)).ok());
Ok(SimpleShadow {
color: color,
horizontal: horizontal,
@@ -204,8 +205,7 @@ impl ToComputedValue for SimpleShadow {
#[inline]
fn to_computed_value(&self, context: &Context) -> Self::ComputedValue {
ComputedSimpleShadow {
- color:
- self.color.as_ref().unwrap_or(&Color::CurrentColor).to_computed_value(context),
+ color: self.color.to_computed_value(context),
horizontal: self.horizontal.to_computed_value(context),
vertical: self.vertical.to_computed_value(context),
blur:
@@ -216,7 +216,7 @@ impl ToComputedValue for SimpleShadow {
#[inline]
fn from_computed_value(computed: &Self::ComputedValue) -> Self {
SimpleShadow {
- color: Some(ToComputedValue::from_computed_value(&computed.color)),
+ color: ToComputedValue::from_computed_value(&computed.color),
horizontal: ToComputedValue::from_computed_value(&computed.horizontal),
vertical: ToComputedValue::from_computed_value(&computed.vertical),
blur: Some(ToComputedValue::from_computed_value(&computed.blur)),