Use the Separator trait for the filter property

This commit is contained in:
Anthony Ramine 2017-06-27 13:48:34 +02:00
parent 813883e1bd
commit 395f6be0a6
13 changed files with 66 additions and 131 deletions

View file

@ -60,7 +60,7 @@ use std::ptr;
use stylearc::Arc;
use std::cmp;
use values::{Auto, CustomIdent, Either, KeyframesName};
use values::computed::Shadow;
use values::computed::{Filter, Shadow};
use values::specified::length::Percentage;
use computed_values::border_style;
@ -3300,7 +3300,11 @@ fn static_assert() {
'Opacity', 'Saturate', 'Sepia' ]
%>
pub fn set_filter(&mut self, v: longhands::filter::computed_value::T) {
pub fn set_filter<I>(&mut self, v: I)
where
I: IntoIterator<Item = Filter>,
I::IntoIter: ExactSizeIterator,
{
use values::generics::effects::Filter::*;
use gecko_bindings::structs::nsCSSShadowArray;
use gecko_bindings::structs::nsStyleFilter;
@ -3320,12 +3324,13 @@ fn static_assert() {
gecko_filter.mFilterParameter.set_value(value);
}
let v = v.into_iter();
unsafe {
Gecko_ResetFilters(&mut self.gecko, v.0.len());
Gecko_ResetFilters(&mut self.gecko, v.len());
}
debug_assert!(v.0.len() == self.gecko.mFilters.len());
debug_assert_eq!(v.len(), self.gecko.mFilters.len());
for (servo, gecko_filter) in v.0.into_vec().into_iter().zip(self.gecko.mFilters.iter_mut()) {
for (servo, gecko_filter) in v.zip(self.gecko.mFilters.iter_mut()) {
match servo {
% for func in FILTER_FUNCTIONS:
${func}(factor) => fill_filter(NS_STYLE_FILTER_${func.upper()},
@ -3372,7 +3377,7 @@ fn static_assert() {
}
pub fn clone_filter(&self) -> longhands::filter::computed_value::T {
use values::generics::effects::{Filter, FilterList};
use values::generics::effects::Filter;
use values::specified::url::SpecifiedUrl;
use gecko_bindings::structs::NS_STYLE_FILTER_BLUR;
use gecko_bindings::structs::NS_STYLE_FILTER_BRIGHTNESS;
@ -3422,7 +3427,7 @@ fn static_assert() {
_ => {},
}
}
FilterList(filters.into_boxed_slice())
longhands::filter::computed_value::T(filters)
}
</%self:impl_trait>
@ -3942,10 +3947,9 @@ clip-path
}
pub fn clone_stroke_dasharray(&self) -> longhands::stroke_dasharray::computed_value::T {
use smallvec::SmallVec;
use values::computed::LengthOrPercentage;
let mut vec = SmallVec::new();
let mut vec = vec![];
for gecko in self.gecko.mStrokeDasharray.iter() {
match gecko.as_value() {
CoordDataValue::Factor(number) => vec.push(Either::First(number)),

View file

@ -88,7 +88,7 @@
use std::fmt;
#[allow(unused_imports)]
use style_traits::HasViewportPercentage;
use style_traits::ToCss;
use style_traits::{Separator, ToCss};
pub mod single_value {
#[allow(unused_imports)]
@ -186,7 +186,7 @@
% endif
}
for i in iter {
dest.write_str(", ")?;
dest.write_str(::style_traits::${separator}::separator())?;
i.to_css(dest)?;
}
Ok(())
@ -213,7 +213,7 @@
% endif
}
for i in iter {
dest.write_str(", ")?;
dest.write_str(::style_traits::${separator}::separator())?;
i.to_css(dest)?;
}
Ok(())

View file

@ -3340,11 +3340,11 @@ impl Animatable for AnimatedFilterList {
}
}
Ok(filters.into())
Ok(AnimatedFilterList(filters))
}
fn add(&self, other: &Self) -> Result<Self, ()> {
Ok(self.0.iter().chain(other.0.iter()).cloned().collect::<Vec<_>>().into())
Ok(AnimatedFilterList(self.0.iter().chain(other.0.iter()).cloned().collect()))
}
#[inline]

View file

@ -43,8 +43,10 @@ ${helpers.predefined_type("clip",
${helpers.predefined_type(
"filter",
"FilterList",
"computed::FilterList::none()",
"Filter",
None,
vector=True,
separator="Space",
animation_value_type="AnimatedFilterList",
extra_prefixes="webkit",
flags="CREATES_STACKING_CONTEXT FIXPOS_CB",