aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/gecko_bindings/sugar/ns_css_shadow_item.rs12
-rw-r--r--components/style/properties/gecko.mako.rs6
-rw-r--r--components/style/values/animated/effects.rs86
-rw-r--r--components/style/values/computed/effects.rs24
-rw-r--r--components/style/values/mod.rs14
-rw-r--r--components/style/values/specified/effects.rs64
6 files changed, 74 insertions, 132 deletions
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 45072ba2eb2..c186945a47c 100644
--- a/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs
+++ b/components/style/gecko_bindings/sugar/ns_css_shadow_item.rs
@@ -8,7 +8,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, Shadow};
-use values::computed::effects::DropShadow;
+use values::computed::effects::SimpleShadow;
impl nsCSSShadowItem {
/// Set this item to the given shadow value.
@@ -41,9 +41,9 @@ impl nsCSSShadowItem {
}
}
- /// Sets this item from the given drop shadow.
+ /// Sets this item from the given simple shadow.
#[inline]
- pub fn set_from_drop_shadow(&mut self, shadow: DropShadow) {
+ pub fn set_from_simple_shadow(&mut self, shadow: SimpleShadow) {
self.mXOffset = shadow.horizontal.0;
self.mYOffset = shadow.vertical.0;
self.mRadius = shadow.blur.0;
@@ -60,12 +60,12 @@ impl nsCSSShadowItem {
}
}
- /// Returns this item as a drop shadow.
+ /// Returns this item as a simple shadow.
#[inline]
- pub fn to_drop_shadow(&self) -> DropShadow {
+ pub fn to_simple_shadow(&self) -> SimpleShadow {
debug_assert_eq!(self.mSpread, 0);
debug_assert_eq!(self.mInset, false);
- DropShadow {
+ SimpleShadow {
color: Color::rgba(convert_nscolor_to_rgba(self.mColor)),
horizontal: Au(self.mXOffset),
vertical: Au(self.mYOffset),
diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs
index 4ff4ca4d06a..83c41e407dd 100644
--- a/components/style/properties/gecko.mako.rs
+++ b/components/style/properties/gecko.mako.rs
@@ -3508,7 +3508,7 @@ fn static_assert() {
}
let mut gecko_shadow = init_shadow(gecko_filter);
- gecko_shadow.mArray[0].set_from_drop_shadow(shadow);
+ gecko_shadow.mArray[0].set_from_simple_shadow(shadow);
},
Url(ref url) => {
unsafe {
@@ -3561,7 +3561,9 @@ fn static_assert() {
},
NS_STYLE_FILTER_DROP_SHADOW => {
filters.push(unsafe {
- Filter::DropShadow((**filter.__bindgen_anon_1.mDropShadow.as_ref()).mArray[0].to_drop_shadow())
+ Filter::DropShadow(
+ (**filter.__bindgen_anon_1.mDropShadow.as_ref()).mArray[0].to_simple_shadow(),
+ )
});
},
NS_STYLE_FILTER_URL => {
diff --git a/components/style/values/animated/effects.rs b/components/style/values/animated/effects.rs
index f6de998ec3e..d53afdfc90b 100644
--- a/components/style/values/animated/effects.rs
+++ b/components/style/values/animated/effects.rs
@@ -4,13 +4,15 @@
//! Animated types for CSS values related to effects.
-use properties::animated_properties::Animatable;
-#[cfg(feature = "gecko")]
-use properties::animated_properties::IntermediateColor;
+use properties::animated_properties::{Animatable, IntermediateColor};
+#[cfg(not(feature = "gecko"))]
+use values::Impossible;
use values::computed::{Angle, Number};
-use values::computed::effects::DropShadow as ComputedDropShadow;
+#[cfg(feature = "gecko")]
use values::computed::effects::Filter as ComputedFilter;
+#[cfg(feature = "gecko")]
use values::computed::effects::FilterList as ComputedFilterList;
+use values::computed::effects::SimpleShadow as ComputedSimpleShadow;
use values::computed::length::Length;
use values::generics::effects::Filter as GenericFilter;
use values::generics::effects::FilterList as GenericFilterList;
@@ -19,29 +21,20 @@ use values::generics::effects::FilterList as GenericFilterList;
pub type FilterList = GenericFilterList<Filter>;
/// An animated value for a single `filter`.
-pub type Filter = GenericFilter<
- Angle,
- // FIXME: Should be `NumberOrPercentage`.
- Number,
- Length,
- DropShadow
->;
+#[cfg(feature = "gecko")]
+pub type Filter = GenericFilter<Angle, Number, Length, SimpleShadow>;
-/// An animated value for the `drop-shadow()` filter.
-///
-/// Currently unsupported outside of Gecko.
+/// An animated value for a single `filter`.
#[cfg(not(feature = "gecko"))]
-#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-#[derive(Clone, Debug, PartialEq)]
-pub enum DropShadow {}
+pub type Filter = GenericFilter<Angle, Number, Length, Impossible>;
/// An animated value for the `drop-shadow()` filter.
///
/// Contrary to the canonical order from the spec, the color is serialised
/// first, like in Gecko and Webkit.
-#[cfg(feature = "gecko")]
+#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Debug, PartialEq)]
-pub struct DropShadow {
+pub struct SimpleShadow {
/// Color.
pub color: IntermediateColor,
/// Horizontal radius.
@@ -52,6 +45,7 @@ pub struct DropShadow {
pub blur: Length,
}
+#[cfg(feature = "gecko")]
impl From<ComputedFilterList> for FilterList {
#[inline]
fn from(filters: ComputedFilterList) -> Self {
@@ -59,6 +53,7 @@ impl From<ComputedFilterList> for FilterList {
}
}
+#[cfg(feature = "gecko")]
impl From<FilterList> for ComputedFilterList {
#[inline]
fn from(filters: FilterList) -> Self {
@@ -66,6 +61,7 @@ impl From<FilterList> for ComputedFilterList {
}
}
+#[cfg(feature = "gecko")]
impl From<ComputedFilter> for Filter {
#[inline]
fn from(filter: ComputedFilter) -> Self {
@@ -88,6 +84,7 @@ impl From<ComputedFilter> for Filter {
}
}
+#[cfg(feature = "gecko")]
impl From<Filter> for ComputedFilter {
#[inline]
fn from(filter: Filter) -> Self {
@@ -110,17 +107,10 @@ impl From<Filter> for ComputedFilter {
}
}
-impl From<ComputedDropShadow> for DropShadow {
- #[cfg(not(feature = "gecko"))]
+impl From<ComputedSimpleShadow> for SimpleShadow {
#[inline]
- fn from(shadow: ComputedDropShadow) -> Self {
- match shadow {}
- }
-
- #[cfg(feature = "gecko")]
- #[inline]
- fn from(shadow: ComputedDropShadow) -> Self {
- DropShadow {
+ fn from(shadow: ComputedSimpleShadow) -> Self {
+ SimpleShadow {
color: shadow.color.into(),
horizontal: shadow.horizontal,
vertical: shadow.vertical,
@@ -129,17 +119,10 @@ impl From<ComputedDropShadow> for DropShadow {
}
}
-impl From<DropShadow> for ComputedDropShadow {
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn from(shadow: DropShadow) -> Self {
- match shadow {}
- }
-
- #[cfg(feature = "gecko")]
+impl From<SimpleShadow> for ComputedSimpleShadow {
#[inline]
- fn from(shadow: DropShadow) -> Self {
- ComputedDropShadow {
+ fn from(shadow: SimpleShadow) -> Self {
+ ComputedSimpleShadow {
color: shadow.color.into(),
horizontal: shadow.horizontal,
vertical: shadow.vertical,
@@ -148,14 +131,7 @@ impl From<DropShadow> for ComputedDropShadow {
}
}
-impl Animatable for DropShadow {
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn add_weighted(&self, _other: &Self, _self_portion: f64, _other_portion: f64) -> Result<Self, ()> {
- match *self {}
- }
-
- #[cfg(feature = "gecko")]
+impl Animatable for SimpleShadow {
#[inline]
fn add_weighted(&self, other: &Self, self_portion: f64, other_portion: f64) -> Result<Self, ()> {
let color = self.color.add_weighted(&other.color, self_portion, other_portion)?;
@@ -163,7 +139,7 @@ impl Animatable for DropShadow {
let vertical = self.vertical.add_weighted(&other.vertical, self_portion, other_portion)?;
let blur = self.blur.add_weighted(&other.blur, self_portion, other_portion)?;
- Ok(DropShadow {
+ Ok(SimpleShadow {
color: color,
horizontal: horizontal,
vertical: vertical,
@@ -171,25 +147,11 @@ impl Animatable for DropShadow {
})
}
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn compute_distance(&self, _other: &Self) -> Result<f64, ()> {
- match *self {}
- }
-
- #[cfg(feature = "gecko")]
#[inline]
fn compute_distance(&self, other: &Self) -> Result<f64, ()> {
self.compute_squared_distance(other).map(|sd| sd.sqrt())
}
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn compute_squared_distance(&self, _other: &Self) -> Result<f64, ()> {
- match *self {}
- }
-
- #[cfg(feature = "gecko")]
#[inline]
fn compute_squared_distance(&self, other: &Self) -> Result<f64, ()> {
Ok(
diff --git a/components/style/values/computed/effects.rs b/components/style/values/computed/effects.rs
index 4fae8656bb1..8db3c3880a3 100644
--- a/components/style/values/computed/effects.rs
+++ b/components/style/values/computed/effects.rs
@@ -4,8 +4,9 @@
//! Computed types for CSS values related to effects.
+#[cfg(not(feature = "gecko"))]
+use values::Impossible;
use values::computed::{Angle, Number};
-#[cfg(feature = "gecko")]
use values::computed::color::Color;
use values::computed::length::Length;
use values::generics::effects::Filter as GenericFilter;
@@ -15,29 +16,20 @@ use values::generics::effects::FilterList as GenericFilterList;
pub type FilterList = GenericFilterList<Filter>;
/// A computed value for a single `filter`.
-pub type Filter = GenericFilter<
- Angle,
- // FIXME: Should be `NumberOrPercentage`.
- Number,
- Length,
- DropShadow,
->;
+#[cfg(feature = "gecko")]
+pub type Filter = GenericFilter<Angle, Number, Length, SimpleShadow>;
-/// A computed value for the `drop-shadow()` filter.
-///
-/// Currently unsupported outside of Gecko.
+/// A computed value for a single `filter`.
#[cfg(not(feature = "gecko"))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Clone, Debug, PartialEq, ToCss)]
-pub enum DropShadow {}
+pub type Filter = GenericFilter<Angle, Number, Length, Impossible>;
/// A computed value for the `drop-shadow()` filter.
///
/// Contrary to the canonical order from the spec, the color is serialised
/// first, like in Gecko and Webkit.
-#[cfg(feature = "gecko")]
+#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Debug, PartialEq, ToCss)]
-pub struct DropShadow {
+pub struct SimpleShadow {
/// Color.
pub color: Color,
/// Horizontal radius.
diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs
index 65d6baa6362..631295dc435 100644
--- a/components/style/values/mod.rs
+++ b/components/style/values/mod.rs
@@ -36,6 +36,20 @@ define_keyword_type!(None_, "none");
define_keyword_type!(Auto, "auto");
define_keyword_type!(Normal, "normal");
+/// Convenience void type to disable some properties and values through types.
+#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
+#[derive(Clone, Copy, Debug, HasViewportPercentage, PartialEq, ToComputedValue, ToCss)]
+pub enum Impossible {}
+
+impl Parse for Impossible {
+ fn parse<'i, 't>(
+ _context: &ParserContext,
+ _input: &mut Parser<'i, 't>)
+ -> Result<Self, ParseError<'i>> {
+ Err(StyleParseError::UnspecifiedError.into())
+ }
+}
+
/// A struct representing one of two kinds of values.
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Copy, HasViewportPercentage, PartialEq, ToCss)]
diff --git a/components/style/values/specified/effects.rs b/components/style/values/specified/effects.rs
index 7987ddc8169..7dd8763da9a 100644
--- a/components/style/values/specified/effects.rs
+++ b/components/style/values/specified/effects.rs
@@ -8,13 +8,12 @@ use cssparser::{BasicParseError, Parser, Token};
use parser::{Parse, ParserContext};
use style_traits::ParseError;
#[cfg(not(feature = "gecko"))]
-use style_traits::StyleParseError;
+use values::Impossible;
use values::computed::{Context, Number as ComputedNumber, ToComputedValue};
-use values::computed::effects::DropShadow as ComputedDropShadow;
+use values::computed::effects::SimpleShadow as ComputedSimpleShadow;
use values::generics::effects::Filter as GenericFilter;
use values::generics::effects::FilterList as GenericFilterList;
use values::specified::{Angle, Percentage};
-#[cfg(feature = "gecko")]
use values::specified::color::Color;
use values::specified::length::Length;
#[cfg(feature = "gecko")]
@@ -24,12 +23,17 @@ use values::specified::url::SpecifiedUrl;
pub type FilterList = GenericFilterList<Filter>;
/// A specified value for a single `filter`.
-pub type Filter = GenericFilter<Angle, Factor, Length, DropShadow>;
+#[cfg(feature = "gecko")]
+pub type Filter = GenericFilter<Angle, Factor, Length, SimpleShadow>;
+
+/// A specified value for a single `filter`.
+#[cfg(not(feature = "gecko"))]
+pub type Filter = GenericFilter<Angle, Factor, Length, Impossible>;
/// A value for the `<factor>` parts in `Filter`.
///
/// FIXME: Should be `NumberOrPercentage`, but Gecko doesn't support that yet.
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
+#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
pub enum Factor {
/// Literal number.
@@ -40,19 +44,11 @@ pub enum Factor {
/// A specified value for the `drop-shadow()` filter.
///
-/// Currently unsupported outside of Gecko.
-#[cfg(not(feature = "gecko"))]
-#[cfg_attr(feature = "servo", derive(Deserialize, HeapSizeOf, Serialize))]
-#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
-pub enum DropShadow {}
-
-/// A specified value for the `drop-shadow()` filter.
-///
/// Contrary to the canonical order from the spec, the color is serialised
/// first, like in Gecko's computed values and in all Webkit's values.
-#[cfg(feature = "gecko")]
+#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[derive(Clone, Debug, HasViewportPercentage, PartialEq, ToCss)]
-pub struct DropShadow {
+pub struct SimpleShadow {
/// Color.
pub color: Option<Color>,
/// Horizontal radius.
@@ -104,7 +100,7 @@ impl Parse for Filter {
"opacity" => Ok(GenericFilter::Opacity(Factor::parse(context, i)?)),
"saturate" => Ok(GenericFilter::Saturate(Factor::parse(context, i)?)),
"sepia" => Ok(GenericFilter::Sepia(Factor::parse(context, i)?)),
- "drop-shadow" => Ok(GenericFilter::DropShadow(DropShadow::parse(context, i)?)),
+ "drop-shadow" => Ok(GenericFilter::DropShadow(Parse::parse(context, i)?)),
}
})
}
@@ -147,17 +143,7 @@ impl ToComputedValue for Factor {
}
}
-impl Parse for DropShadow {
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn parse<'i, 't>(
- _context: &ParserContext,
- _input: &mut Parser<'i, 't>
- ) -> Result<Self, ParseError<'i>> {
- Err(StyleParseError::UnspecifiedError.into())
- }
-
- #[cfg(feature = "gecko")]
+impl Parse for SimpleShadow {
#[inline]
fn parse<'i, 't>(
context: &ParserContext,
@@ -168,7 +154,7 @@ impl Parse for DropShadow {
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());
- Ok(DropShadow {
+ Ok(SimpleShadow {
color: color,
horizontal: horizontal,
vertical: vertical,
@@ -177,19 +163,12 @@ impl Parse for DropShadow {
}
}
-impl ToComputedValue for DropShadow {
- type ComputedValue = ComputedDropShadow;
-
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn to_computed_value(&self, _context: &Context) -> Self::ComputedValue {
- match *self {}
- }
+impl ToComputedValue for SimpleShadow {
+ type ComputedValue = ComputedSimpleShadow;
- #[cfg(feature = "gecko")]
#[inline]
fn to_computed_value(&self, context: &Context) -> Self::ComputedValue {
- ComputedDropShadow {
+ ComputedSimpleShadow {
color:
self.color.as_ref().unwrap_or(&Color::CurrentColor).to_computed_value(context),
horizontal: self.horizontal.to_computed_value(context),
@@ -199,16 +178,9 @@ impl ToComputedValue for DropShadow {
}
}
- #[cfg(not(feature = "gecko"))]
- #[inline]
- fn from_computed_value(computed: &Self::ComputedValue) -> Self {
- match *computed {}
- }
-
- #[cfg(feature = "gecko")]
#[inline]
fn from_computed_value(computed: &Self::ComputedValue) -> Self {
- DropShadow {
+ SimpleShadow {
color: Some(ToComputedValue::from_computed_value(&computed.color)),
horizontal: ToComputedValue::from_computed_value(&computed.horizontal),
vertical: ToComputedValue::from_computed_value(&computed.vertical),