Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make filter property animatable. #17288

Merged
merged 5 commits into from Jun 19, 2017

Add compute distance for Filter.

  • Loading branch information
mantaroh committed Jun 19, 2017
commit b9f6994dccfc550259a220fa4630e4536fa5c72d
@@ -3353,6 +3353,27 @@ fn add_weighted_filter_function(from: Option<<&IntermediateFilter>,
}
}

fn compute_filter_square_distance(from: &IntermediateFilter,
to: &IntermediateFilter)
-> Result<f64, ()> {
match (from, to) {
% for func in FILTER_FUNCTIONS :
(&IntermediateFilter::${func}(f),
&IntermediateFilter::${func}(t)) => {
Ok(try!(f.compute_squared_distance(&t)))
},
% endfor
% if product == "gecko":
(&IntermediateFilter::DropShadow(f),
&IntermediateFilter::DropShadow(t)) => {
Ok(try!(f.compute_squared_distance(&t)))
},
% endif
_ => {
Err(())
}
}
}

impl Animatable for IntermediateFilters {
#[inline]
@@ -3387,4 +3408,44 @@ impl Animatable for IntermediateFilters {
vec![&from_list[..], &to_list[..]].concat();
Ok(filters)
}

#[inline]
fn compute_distance(&self, other: &Self) -> Result<f64, ()> {
self.compute_squared_distance(other).map(|sd| sd.sqrt())
}

#[inline]
fn compute_squared_distance(&self, other: &Self) -> Result<f64, ()> {
let mut square_distance: f64 = 0.0;
let mut from_iter = self.iter();
let mut to_iter = (&other).iter();

let mut from = from_iter.next();
let mut to = to_iter.next();
while (from,to) != (None, None) {
let current_square_distance: f64 ;
if from == None {
let none = try!(add_weighted_filter_function(to, to, 0.0, 0.0));
current_square_distance =
compute_filter_square_distance(&none, &(to.unwrap())).unwrap();

to = to_iter.next();
} else if to == None {
let none = try!(add_weighted_filter_function(from, from, 0.0, 0.0));
current_square_distance =
compute_filter_square_distance(&none, &(from.unwrap())).unwrap();

from = from_iter.next();
} else {
current_square_distance =
compute_filter_square_distance(&(from.unwrap()),
&(to.unwrap())).unwrap();

from = from_iter.next();
to = to_iter.next();
}
square_distance += current_square_distance;
}
Ok(square_distance.sqrt())
}
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.