| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "sky/engine/config.h" | 31 #include "sky/engine/config.h" |
| 32 #include "sky/engine/core/animation/css/CSSAnimations.h" | 32 #include "sky/engine/core/animation/css/CSSAnimations.h" |
| 33 | 33 |
| 34 #include "gen/sky/core/StylePropertyShorthand.h" | 34 #include "gen/sky/core/StylePropertyShorthand.h" |
| 35 #include "sky/engine/core/animation/ActiveAnimations.h" | 35 #include "sky/engine/core/animation/ActiveAnimations.h" |
| 36 #include "sky/engine/core/animation/AnimationTimeline.h" | 36 #include "sky/engine/core/animation/AnimationTimeline.h" |
| 37 #include "sky/engine/core/animation/CompositorAnimations.h" | |
| 38 #include "sky/engine/core/animation/KeyframeEffectModel.h" | 37 #include "sky/engine/core/animation/KeyframeEffectModel.h" |
| 39 #include "sky/engine/core/animation/LegacyStyleInterpolation.h" | 38 #include "sky/engine/core/animation/LegacyStyleInterpolation.h" |
| 40 #include "sky/engine/core/animation/css/CSSAnimatableValueFactory.h" | 39 #include "sky/engine/core/animation/css/CSSAnimatableValueFactory.h" |
| 41 #include "sky/engine/core/animation/css/CSSPropertyEquality.h" | 40 #include "sky/engine/core/animation/css/CSSPropertyEquality.h" |
| 42 #include "sky/engine/core/css/CSSKeyframeRule.h" | 41 #include "sky/engine/core/css/CSSKeyframeRule.h" |
| 43 #include "sky/engine/core/css/CSSPropertyMetadata.h" | 42 #include "sky/engine/core/css/CSSPropertyMetadata.h" |
| 44 #include "sky/engine/core/css/CSSValueList.h" | 43 #include "sky/engine/core/css/CSSValueList.h" |
| 45 #include "sky/engine/core/css/resolver/CSSToStyleMap.h" | 44 #include "sky/engine/core/css/resolver/CSSToStyleMap.h" |
| 46 #include "sky/engine/core/css/resolver/StyleResolver.h" | 45 #include "sky/engine/core/css/resolver/StyleResolver.h" |
| 47 #include "sky/engine/core/dom/Element.h" | 46 #include "sky/engine/core/dom/Element.h" |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 // lazily. However, we need the new state to know what the from state shoud | 328 // lazily. However, we need the new state to know what the from state shoud |
| 330 // be when transitions are retargeted. Instead of triggering complete style | 329 // be when transitions are retargeted. Instead of triggering complete style |
| 331 // recalculation, we find these cases by searching for new transitions that | 330 // recalculation, we find these cases by searching for new transitions that |
| 332 // have matching cancelled animation property IDs on the compositor. | 331 // have matching cancelled animation property IDs on the compositor. |
| 333 HashMap<CSSPropertyID, std::pair<RefPtr<Animation>, double> > retargetedComp
ositorTransitions; | 332 HashMap<CSSPropertyID, std::pair<RefPtr<Animation>, double> > retargetedComp
ositorTransitions; |
| 334 for (HashSet<CSSPropertyID>::iterator iter = update->cancelledTransitions().
begin(); iter != update->cancelledTransitions().end(); ++iter) { | 333 for (HashSet<CSSPropertyID>::iterator iter = update->cancelledTransitions().
begin(); iter != update->cancelledTransitions().end(); ++iter) { |
| 335 CSSPropertyID id = *iter; | 334 CSSPropertyID id = *iter; |
| 336 ASSERT(m_transitions.contains(id)); | 335 ASSERT(m_transitions.contains(id)); |
| 337 | 336 |
| 338 RefPtr<AnimationPlayer> player = m_transitions.take(id).player; | 337 RefPtr<AnimationPlayer> player = m_transitions.take(id).player; |
| 339 Animation* animation = toAnimation(player->source()); | |
| 340 if (animation->hasActiveAnimationsOnCompositor(id) && update->newTransit
ions().find(id) != update->newTransitions().end()) | |
| 341 retargetedCompositorTransitions.add(id, std::pair<RefPtr<Animation>,
double>(animation, player->startTimeInternal())); | |
| 342 player->cancel(); | 338 player->cancel(); |
| 343 player->update(TimingUpdateOnDemand); | 339 player->update(TimingUpdateOnDemand); |
| 344 } | 340 } |
| 345 | 341 |
| 346 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update->new
Transitions().begin(); iter != update->newTransitions().end(); ++iter) { | 342 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update->new
Transitions().begin(); iter != update->newTransitions().end(); ++iter) { |
| 347 const CSSAnimationUpdate::NewTransition& newTransition = iter->value; | 343 const CSSAnimationUpdate::NewTransition& newTransition = iter->value; |
| 348 | 344 |
| 349 RunningTransition runningTransition; | 345 RunningTransition runningTransition; |
| 350 runningTransition.from = newTransition.from; | 346 runningTransition.from = newTransition.from; |
| 351 runningTransition.to = newTransition.to; | 347 runningTransition.to = newTransition.to; |
| 352 | 348 |
| 353 CSSPropertyID id = newTransition.id; | 349 CSSPropertyID id = newTransition.id; |
| 354 InertAnimation* inertAnimation = newTransition.animation.get(); | 350 InertAnimation* inertAnimation = newTransition.animation.get(); |
| 355 OwnPtr<TransitionEventDelegate> eventDelegate = adoptPtr(new TransitionE
ventDelegate(element, newTransition.eventId)); | 351 OwnPtr<TransitionEventDelegate> eventDelegate = adoptPtr(new TransitionE
ventDelegate(element, newTransition.eventId)); |
| 356 | 352 |
| 357 RefPtr<AnimationEffect> effect = inertAnimation->effect(); | 353 RefPtr<AnimationEffect> effect = inertAnimation->effect(); |
| 358 | |
| 359 if (retargetedCompositorTransitions.contains(id)) { | |
| 360 const std::pair<RefPtr<Animation>, double>& oldTransition = retarget
edCompositorTransitions.get(id); | |
| 361 RefPtr<Animation> oldAnimation = oldTransition.first; | |
| 362 double oldStartTime = oldTransition.second; | |
| 363 double inheritedTime = isNull(oldStartTime) ? 0 : element->document(
).timeline().currentTimeInternal() - oldStartTime; | |
| 364 | |
| 365 AnimatableValueKeyframeEffectModel* oldEffect = toAnimatableValueKey
frameEffectModel(inertAnimation->effect()); | |
| 366 const KeyframeVector& frames = oldEffect->getFrames(); | |
| 367 | |
| 368 AnimatableValueKeyframeVector newFrames; | |
| 369 newFrames.append(toAnimatableValueKeyframe(frames[0]->clone().get())
); | |
| 370 newFrames.append(toAnimatableValueKeyframe(frames[1]->clone().get())
); | |
| 371 | |
| 372 newFrames[0]->clearPropertyValue(id); | |
| 373 RefPtr<InertAnimation> inertAnimationForSampling = InertAnimation::c
reate(oldAnimation->effect(), oldAnimation->specifiedTiming(), false); | |
| 374 OwnPtr<Vector<RefPtr<Interpolation> > > sample = inertAnimationForSa
mpling->sample(inheritedTime); | |
| 375 ASSERT(sample->size() == 1); | |
| 376 newFrames[0]->setPropertyValue(id, toLegacyStyleInterpolation(sample
->at(0).get())->currentValue()); | |
| 377 | |
| 378 effect = AnimatableValueKeyframeEffectModel::create(newFrames); | |
| 379 } | |
| 380 | |
| 381 RefPtr<Animation> transition = Animation::create(element, effect, inertA
nimation->specifiedTiming(), Animation::TransitionPriority, eventDelegate.releas
e()); | 354 RefPtr<Animation> transition = Animation::create(element, effect, inertA
nimation->specifiedTiming(), Animation::TransitionPriority, eventDelegate.releas
e()); |
| 382 RefPtr<AnimationPlayer> player = element->document().timeline().createAn
imationPlayer(transition.get()); | 355 RefPtr<AnimationPlayer> player = element->document().timeline().createAn
imationPlayer(transition.get()); |
| 383 player->update(TimingUpdateOnDemand); | 356 player->update(TimingUpdateOnDemand); |
| 384 runningTransition.player = player; | 357 runningTransition.player = player; |
| 385 m_transitions.set(id, runningTransition); | 358 m_transitions.set(id, runningTransition); |
| 386 ASSERT(id != CSSPropertyInvalid); | 359 ASSERT(id != CSSPropertyInvalid); |
| 387 } | 360 } |
| 388 } | 361 } |
| 389 | 362 |
| 390 void CSSAnimations::calculateTransitionUpdateForProperty(CSSPropertyID id, CSSPr
opertyID eventId, const CSSTransitionData& transitionData, size_t transitionInde
x, const RenderStyle& oldStyle, const RenderStyle& style, const TransitionMap* a
ctiveTransitions, CSSAnimationUpdate* update, const Element* element) | 363 void CSSAnimations::calculateTransitionUpdateForProperty(CSSPropertyID id, CSSPr
opertyID eventId, const CSSTransitionData& transitionData, size_t transitionInde
x, const RenderStyle& oldStyle, const RenderStyle& style, const TransitionMap* a
ctiveTransitions, CSSAnimationUpdate* update, const Element* element) |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 case CSSPropertyWebkitTransitionDuration: | 655 case CSSPropertyWebkitTransitionDuration: |
| 683 case CSSPropertyWebkitTransitionProperty: | 656 case CSSPropertyWebkitTransitionProperty: |
| 684 case CSSPropertyWebkitTransitionTimingFunction: | 657 case CSSPropertyWebkitTransitionTimingFunction: |
| 685 return false; | 658 return false; |
| 686 default: | 659 default: |
| 687 return true; | 660 return true; |
| 688 } | 661 } |
| 689 } | 662 } |
| 690 | 663 |
| 691 } // namespace blink | 664 } // namespace blink |
| OLD | NEW |