diff options
-rw-r--r-- | components/style/gecko_bindings/sugar/ns_css_shadow_item.rs | 12 | ||||
-rw-r--r-- | components/style/properties/gecko.mako.rs | 6 | ||||
-rw-r--r-- | components/style/values/animated/effects.rs | 86 | ||||
-rw-r--r-- | components/style/values/computed/effects.rs | 24 | ||||
-rw-r--r-- | components/style/values/mod.rs | 14 | ||||
-rw-r--r-- | components/style/values/specified/effects.rs | 64 |
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), |