| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 // in the next loop and then toss the ones that didn't get marked. | 82 // in the next loop and then toss the ones that didn't get marked. |
| 83 CSSPropertyTransitionsMap::const_iterator end = m_transitions.end(); | 83 CSSPropertyTransitionsMap::const_iterator end = m_transitions.end(); |
| 84 for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); i
t != end; ++it) | 84 for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); i
t != end; ++it) |
| 85 it->value->setActive(false); | 85 it->value->setActive(false); |
| 86 | 86 |
| 87 RefPtr<RenderStyle> modifiedCurrentStyle; | 87 RefPtr<RenderStyle> modifiedCurrentStyle; |
| 88 | 88 |
| 89 // Check to see if we need to update the active transitions | 89 // Check to see if we need to update the active transitions |
| 90 if (targetStyle->transitions()) { | 90 if (targetStyle->transitions()) { |
| 91 for (size_t i = 0; i < targetStyle->transitions()->size(); ++i) { | 91 for (size_t i = 0; i < targetStyle->transitions()->size(); ++i) { |
| 92 const CSSAnimationData* anim = targetStyle->transitions()->animation
(i); | 92 const StyleAnimationData* anim = targetStyle->transitions()->animati
on(i); |
| 93 bool isActiveTransition = anim->duration() || anim->delay() > 0; | 93 bool isActiveTransition = anim->duration() || anim->delay() > 0; |
| 94 | 94 |
| 95 CSSAnimationData::AnimationMode mode = anim->animationMode(); | 95 StyleAnimationData::AnimationMode mode = anim->animationMode(); |
| 96 if (mode == CSSAnimationData::AnimateNone) | 96 if (mode == StyleAnimationData::AnimateNone) |
| 97 continue; | 97 continue; |
| 98 | 98 |
| 99 CSSPropertyID prop = anim->property(); | 99 CSSPropertyID prop = anim->property(); |
| 100 | 100 |
| 101 bool all = mode == CSSAnimationData::AnimateAll; | 101 bool all = mode == StyleAnimationData::AnimateAll; |
| 102 | 102 |
| 103 // Handle both the 'all' and single property cases. For the single p
rop case, we make only one pass | 103 // Handle both the 'all' and single property cases. For the single p
rop case, we make only one pass |
| 104 // through the loop. | 104 // through the loop. |
| 105 for (int propertyIndex = 0; propertyIndex < CSSPropertyAnimation::ge
tNumProperties(); ++propertyIndex) { | 105 for (int propertyIndex = 0; propertyIndex < CSSPropertyAnimation::ge
tNumProperties(); ++propertyIndex) { |
| 106 if (all) { | 106 if (all) { |
| 107 // Get the next property which is not a shorthand. | 107 // Get the next property which is not a shorthand. |
| 108 bool isShorthand; | 108 bool isShorthand; |
| 109 prop = CSSPropertyAnimation::getPropertyAtIndex(propertyInde
x, isShorthand); | 109 prop = CSSPropertyAnimation::getPropertyAtIndex(propertyInde
x, isShorthand); |
| 110 if (isShorthand) | 110 if (isShorthand) |
| 111 continue; | 111 continue; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 // We need to start a transition if it is active and the pro
perties don't match | 156 // We need to start a transition if it is active and the pro
perties don't match |
| 157 equal = !isActiveTransition || CSSPropertyAnimation::propert
iesEqual(prop, fromStyle, targetStyle); | 157 equal = !isActiveTransition || CSSPropertyAnimation::propert
iesEqual(prop, fromStyle, targetStyle); |
| 158 } | 158 } |
| 159 | 159 |
| 160 // We can be in this loop with an inactive transition (!isActive
Transition). We need | 160 // We can be in this loop with an inactive transition (!isActive
Transition). We need |
| 161 // to do that to check to see if we are canceling a transition.
But we don't want to | 161 // to do that to check to see if we are canceling a transition.
But we don't want to |
| 162 // start one of the inactive transitions. So short circuit that
here. (See | 162 // start one of the inactive transitions. So short circuit that
here. (See |
| 163 // <https://bugs.webkit.org/show_bug.cgi?id=24787> | 163 // <https://bugs.webkit.org/show_bug.cgi?id=24787> |
| 164 if (!equal && isActiveTransition) { | 164 if (!equal && isActiveTransition) { |
| 165 // Add the new transition | 165 // Add the new transition |
| 166 m_transitions.set(prop, ImplicitAnimation::create(const_cast
<CSSAnimationData*>(anim), prop, renderer, this, modifiedCurrentStyle ? modified
CurrentStyle.get() : fromStyle)); | 166 m_transitions.set(prop, ImplicitAnimation::create(const_cast
<StyleAnimationData*>(anim), prop, renderer, this, modifiedCurrentStyle ? modifi
edCurrentStyle.get() : fromStyle)); |
| 167 } | 167 } |
| 168 | 168 |
| 169 // We only need one pass for the single prop case | 169 // We only need one pass for the single prop case |
| 170 if (!all) | 170 if (!all) |
| 171 break; | 171 break; |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 | 175 |
| 176 // Make a list of transitions to be removed | 176 // Make a list of transitions to be removed |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 | 213 |
| 214 // Toss the animation order map. | 214 // Toss the animation order map. |
| 215 m_keyframeAnimationOrderMap.clear(); | 215 m_keyframeAnimationOrderMap.clear(); |
| 216 | 216 |
| 217 DEFINE_STATIC_LOCAL(const AtomicString, none, ("none", AtomicString::Con
structFromLiteral)); | 217 DEFINE_STATIC_LOCAL(const AtomicString, none, ("none", AtomicString::Con
structFromLiteral)); |
| 218 | 218 |
| 219 // Now mark any still active animations as active and add any new animat
ions. | 219 // Now mark any still active animations as active and add any new animat
ions. |
| 220 if (targetStyle->animations()) { | 220 if (targetStyle->animations()) { |
| 221 int numAnims = targetStyle->animations()->size(); | 221 int numAnims = targetStyle->animations()->size(); |
| 222 for (int i = 0; i < numAnims; ++i) { | 222 for (int i = 0; i < numAnims; ++i) { |
| 223 const CSSAnimationData* anim = targetStyle->animations()->animat
ion(i); | 223 const StyleAnimationData* anim = targetStyle->animations()->anim
ation(i); |
| 224 AtomicString animationName(anim->name()); | 224 AtomicString animationName(anim->name()); |
| 225 | 225 |
| 226 if (!anim->isValidAnimation()) | 226 if (!anim->isValidAnimation()) |
| 227 continue; | 227 continue; |
| 228 | 228 |
| 229 // See if there is a current animation for this name. | 229 // See if there is a current animation for this name. |
| 230 RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.ge
t(animationName.impl()); | 230 RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.ge
t(animationName.impl()); |
| 231 | 231 |
| 232 if (keyframeAnim) { | 232 if (keyframeAnim) { |
| 233 // If this animation is postActive, skip it so it gets remov
ed at the end of this function. | 233 // If this animation is postActive, skip it so it gets remov
ed at the end of this function. |
| 234 if (keyframeAnim->postActive()) | 234 if (keyframeAnim->postActive()) |
| 235 continue; | 235 continue; |
| 236 | 236 |
| 237 // This one is still active. | 237 // This one is still active. |
| 238 | 238 |
| 239 // Animations match, but play states may differ. Update if n
eeded. | 239 // Animations match, but play states may differ. Update if n
eeded. |
| 240 keyframeAnim->updatePlayState(anim->playState()); | 240 keyframeAnim->updatePlayState(anim->playState()); |
| 241 | 241 |
| 242 // Set the saved animation to this new one, just in case the
play state has changed. | 242 // Set the saved animation to this new one, just in case the
play state has changed. |
| 243 keyframeAnim->setAnimation(anim); | 243 keyframeAnim->setAnimation(anim); |
| 244 keyframeAnim->setIndex(i); | 244 keyframeAnim->setIndex(i); |
| 245 } else if ((anim->duration() || anim->delay()) && anim->iteratio
nCount() && animationName != none) { | 245 } else if ((anim->duration() || anim->delay()) && anim->iteratio
nCount() && animationName != none) { |
| 246 keyframeAnim = KeyframeAnimation::create(const_cast<CSSAnima
tionData*>(anim), renderer, i, this, targetStyle); | 246 keyframeAnim = KeyframeAnimation::create(const_cast<StyleAni
mationData*>(anim), renderer, i, this, targetStyle); |
| 247 m_keyframeAnimations.set(keyframeAnim->name().impl(), keyfra
meAnim); | 247 m_keyframeAnimations.set(keyframeAnim->name().impl(), keyfra
meAnim); |
| 248 } | 248 } |
| 249 | 249 |
| 250 // Add this to the animation order map. | 250 // Add this to the animation order map. |
| 251 if (keyframeAnim) | 251 if (keyframeAnim) |
| 252 m_keyframeAnimationOrderMap.append(keyframeAnim->name().impl
()); | 252 m_keyframeAnimationOrderMap.append(keyframeAnim->name().impl
()); |
| 253 } | 253 } |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 | 256 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 | 476 |
| 477 bool CompositeAnimation::pauseAnimationAtTime(const AtomicString& name, double t
) | 477 bool CompositeAnimation::pauseAnimationAtTime(const AtomicString& name, double t
) |
| 478 { | 478 { |
| 479 m_keyframeAnimations.checkConsistency(); | 479 m_keyframeAnimations.checkConsistency(); |
| 480 | 480 |
| 481 RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(name.impl(
)); | 481 RefPtr<KeyframeAnimation> keyframeAnim = m_keyframeAnimations.get(name.impl(
)); |
| 482 if (!keyframeAnim || !keyframeAnim->running()) | 482 if (!keyframeAnim || !keyframeAnim->running()) |
| 483 return false; | 483 return false; |
| 484 | 484 |
| 485 double count = keyframeAnim->m_animation->iterationCount(); | 485 double count = keyframeAnim->m_animation->iterationCount(); |
| 486 if ((t >= 0.0) && ((count == CSSAnimationData::IterationCountInfinite) || (t
<= count * keyframeAnim->duration()))) { | 486 if ((t >= 0.0) && ((count == StyleAnimationData::IterationCountInfinite) ||
(t <= count * keyframeAnim->duration()))) { |
| 487 keyframeAnim->freezeAtTime(t); | 487 keyframeAnim->freezeAtTime(t); |
| 488 return true; | 488 return true; |
| 489 } | 489 } |
| 490 | 490 |
| 491 return false; | 491 return false; |
| 492 } | 492 } |
| 493 | 493 |
| 494 bool CompositeAnimation::pauseTransitionAtTime(CSSPropertyID property, double t) | 494 bool CompositeAnimation::pauseTransitionAtTime(CSSPropertyID property, double t) |
| 495 { | 495 { |
| 496 if ((property < firstCSSProperty) || (property >= firstCSSProperty + numCSSP
roperties)) | 496 if ((property < firstCSSProperty) || (property >= firstCSSProperty + numCSSP
roperties)) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 ImplicitAnimation* anim = it->value.get(); | 541 ImplicitAnimation* anim = it->value.get(); |
| 542 if (anim->running()) | 542 if (anim->running()) |
| 543 ++count; | 543 ++count; |
| 544 } | 544 } |
| 545 } | 545 } |
| 546 | 546 |
| 547 return count; | 547 return count; |
| 548 } | 548 } |
| 549 | 549 |
| 550 } // namespace WebCore | 550 } // namespace WebCore |
| OLD | NEW |