Apply accumulate composite mode when compositing animations

This commit is contained in:
Brian Birtles 2017-05-23 15:16:30 +09:00
parent 744290e6de
commit 795d8ad767

View file

@ -372,9 +372,13 @@ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMa
let from_value = if !segment.mFromValue.mServo.mRawPtr.is_null() { let from_value = if !segment.mFromValue.mServo.mRawPtr.is_null() {
raw_from_value = unsafe { &*segment.mFromValue.mServo.mRawPtr }; raw_from_value = unsafe { &*segment.mFromValue.mServo.mRawPtr };
match segment.mFromComposite { match segment.mFromComposite {
CompositeOperation::Add => { CompositeOperation::Add | CompositeOperation::Accumulate => {
let value_to_composite = AnimationValue::as_arc(&raw_from_value).as_ref(); let value_to_composite = AnimationValue::as_arc(&raw_from_value).as_ref();
from_composite_result = underlying_value.as_ref().unwrap().add(value_to_composite); from_composite_result = if segment.mFromComposite == CompositeOperation::Add {
underlying_value.as_ref().unwrap().add(value_to_composite)
} else {
underlying_value.as_ref().unwrap().accumulate(value_to_composite, 1)
};
from_composite_result.as_ref().unwrap_or(value_to_composite) from_composite_result.as_ref().unwrap_or(value_to_composite)
} }
_ => { AnimationValue::as_arc(&raw_from_value) } _ => { AnimationValue::as_arc(&raw_from_value) }
@ -388,9 +392,13 @@ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMa
let to_value = if !segment.mToValue.mServo.mRawPtr.is_null() { let to_value = if !segment.mToValue.mServo.mRawPtr.is_null() {
raw_to_value = unsafe { &*segment.mToValue.mServo.mRawPtr }; raw_to_value = unsafe { &*segment.mToValue.mServo.mRawPtr };
match segment.mToComposite { match segment.mToComposite {
CompositeOperation::Add => { CompositeOperation::Add | CompositeOperation::Accumulate => {
let value_to_composite = AnimationValue::as_arc(&raw_to_value).as_ref(); let value_to_composite = AnimationValue::as_arc(&raw_to_value).as_ref();
to_composite_result = underlying_value.as_ref().unwrap().add(value_to_composite); to_composite_result = if segment.mToComposite == CompositeOperation::Add {
underlying_value.as_ref().unwrap().add(value_to_composite)
} else {
underlying_value.as_ref().unwrap().accumulate(value_to_composite, 1)
};
to_composite_result.as_ref().unwrap_or(value_to_composite) to_composite_result.as_ref().unwrap_or(value_to_composite)
} }
_ => { AnimationValue::as_arc(&raw_to_value) } _ => { AnimationValue::as_arc(&raw_to_value) }