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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 case CSSPropertyWebkitTransformOriginX: | 74 case CSSPropertyWebkitTransformOriginX: |
75 case CSSPropertyWebkitTransformOriginY: | 75 case CSSPropertyWebkitTransformOriginY: |
76 case CSSPropertyWebkitTransformOriginZ: | 76 case CSSPropertyWebkitTransformOriginZ: |
77 return CSSPropertyTransformOrigin; | 77 return CSSPropertyTransformOrigin; |
78 default: | 78 default: |
79 break; | 79 break; |
80 } | 80 } |
81 return property; | 81 return property; |
82 } | 82 } |
83 | 83 |
84 static void resolveKeyframes(StyleResolver* resolver, Element* element, const El
ement& parentElement, const RenderStyle& style, RenderStyle* parentStyle, const
AtomicString& name, TimingFunction* defaultTimingFunction, | 84 static void resolveKeyframes(StyleResolver* resolver, const Element* animatingEl
ement, Element& element, const RenderStyle& style, RenderStyle* parentStyle, con
st AtomicString& name, TimingFunction* defaultTimingFunction, |
85 AnimatableValueKeyframeVector& keyframes) | 85 AnimatableValueKeyframeVector& keyframes) |
86 { | 86 { |
87 // When the element is null, use its parent for scoping purposes. | 87 // When the animating element is null, use its parent for scoping purposes. |
88 const Element* elementForScoping = element ? element : &parentElement; | 88 const Element* elementForScoping = animatingElement ? animatingElement : &el
ement; |
89 const StyleRuleKeyframes* keyframesRule = CSSAnimations::matchScopedKeyframe
sRule(resolver, elementForScoping, name.impl()); | 89 const StyleRuleKeyframes* keyframesRule = CSSAnimations::matchScopedKeyframe
sRule(resolver, elementForScoping, name.impl()); |
90 if (!keyframesRule) | 90 if (!keyframesRule) |
91 return; | 91 return; |
92 | 92 |
93 const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& styleKeyframes =
keyframesRule->keyframes(); | 93 const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& styleKeyframes =
keyframesRule->keyframes(); |
94 if (styleKeyframes.isEmpty()) | 94 if (styleKeyframes.isEmpty()) |
95 return; | 95 return; |
96 | 96 |
97 // Construct and populate the style for each keyframe | 97 // Construct and populate the style for each keyframe |
98 PropertySet specifiedPropertiesForUseCounter; | 98 PropertySet specifiedPropertiesForUseCounter; |
99 for (size_t i = 0; i < styleKeyframes.size(); ++i) { | 99 for (size_t i = 0; i < styleKeyframes.size(); ++i) { |
100 const StyleKeyframe* styleKeyframe = styleKeyframes[i].get(); | 100 const StyleKeyframe* styleKeyframe = styleKeyframes[i].get(); |
101 // It's OK to pass a null element here. | |
102 RefPtr<RenderStyle> keyframeStyle = resolver->styleForKeyframe(element,
style, parentStyle, styleKeyframe, name); | 101 RefPtr<RenderStyle> keyframeStyle = resolver->styleForKeyframe(element,
style, parentStyle, styleKeyframe, name); |
103 RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = AnimatableValueKe
yframe::create(); | 102 RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = AnimatableValueKe
yframe::create(); |
104 const Vector<double>& offsets = styleKeyframe->keys(); | 103 const Vector<double>& offsets = styleKeyframe->keys(); |
105 ASSERT(!offsets.isEmpty()); | 104 ASSERT(!offsets.isEmpty()); |
106 keyframe->setOffset(offsets[0]); | 105 keyframe->setOffset(offsets[0]); |
107 keyframe->setEasing(defaultTimingFunction); | 106 keyframe->setEasing(defaultTimingFunction); |
108 const StylePropertySet& properties = styleKeyframe->properties(); | 107 const StylePropertySet& properties = styleKeyframe->properties(); |
109 for (unsigned j = 0; j < properties.propertyCount(); j++) { | 108 for (unsigned j = 0; j < properties.propertyCount(); j++) { |
110 specifiedPropertiesForUseCounter.add(properties.propertyAt(j).id()); | 109 specifiedPropertiesForUseCounter.add(properties.propertyAt(j).id()); |
111 CSSPropertyID property = propertyForAnimation(properties.propertyAt(
j).id()); | 110 CSSPropertyID property = propertyForAnimation(properties.propertyAt(
j).id()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 if (const StyleRuleKeyframes* keyframesRule = stack.at(i)->keyframeStyle
sForAnimation(animationName)) | 213 if (const StyleRuleKeyframes* keyframesRule = stack.at(i)->keyframeStyle
sForAnimation(animationName)) |
215 return keyframesRule; | 214 return keyframesRule; |
216 } | 215 } |
217 return 0; | 216 return 0; |
218 } | 217 } |
219 | 218 |
220 CSSAnimations::CSSAnimations() | 219 CSSAnimations::CSSAnimations() |
221 { | 220 { |
222 } | 221 } |
223 | 222 |
224 PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> CSSAnimations::calculateUpdate(Elemen
t* element, const Element& parentElement, const RenderStyle& style, RenderStyle*
parentStyle, StyleResolver* resolver) | 223 PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> CSSAnimations::calculateUpdate(const
Element* animatingElement, Element& element, const RenderStyle& style, RenderSty
le* parentStyle, StyleResolver* resolver) |
225 { | 224 { |
226 OwnPtrWillBeRawPtr<CSSAnimationUpdate> update = adoptPtrWillBeNoop(new CSSAn
imationUpdate()); | 225 OwnPtrWillBeRawPtr<CSSAnimationUpdate> update = adoptPtrWillBeNoop(new CSSAn
imationUpdate()); |
227 calculateAnimationUpdate(update.get(), element, parentElement, style, parent
Style, resolver); | 226 calculateAnimationUpdate(update.get(), animatingElement, element, style, par
entStyle, resolver); |
228 calculateAnimationActiveInterpolations(update.get(), element, parentElement.
document().timeline().currentTimeInternal()); | 227 calculateAnimationActiveInterpolations(update.get(), animatingElement, eleme
nt.document().timeline().currentTimeInternal()); |
229 calculateTransitionUpdate(update.get(), element, style); | 228 calculateTransitionUpdate(update.get(), animatingElement, style); |
230 calculateTransitionActiveInterpolations(update.get(), element, parentElement
.document().timeline().currentTimeInternal()); | 229 calculateTransitionActiveInterpolations(update.get(), animatingElement, elem
ent.document().timeline().currentTimeInternal()); |
231 return update->isEmpty() ? nullptr : update.release(); | 230 return update->isEmpty() ? nullptr : update.release(); |
232 } | 231 } |
233 | 232 |
234 void CSSAnimations::calculateAnimationUpdate(CSSAnimationUpdate* update, Element
* element, const Element& parentElement, const RenderStyle& style, RenderStyle*
parentStyle, StyleResolver* resolver) | 233 void CSSAnimations::calculateAnimationUpdate(CSSAnimationUpdate* update, const E
lement* animatingElement, Element& element, const RenderStyle& style, RenderStyl
e* parentStyle, StyleResolver* resolver) |
235 { | 234 { |
236 const ActiveAnimations* activeAnimations = element ? element->activeAnimatio
ns() : 0; | 235 const ActiveAnimations* activeAnimations = animatingElement ? animatingEleme
nt->activeAnimations() : 0; |
237 | 236 |
238 #if !ENABLE(ASSERT) | 237 #if !ENABLE(ASSERT) |
239 // If we're in an animation style change, no animations can have started, be
en cancelled or changed play state. | 238 // If we're in an animation style change, no animations can have started, be
en cancelled or changed play state. |
240 // When ASSERT is enabled, we verify this optimization. | 239 // When ASSERT is enabled, we verify this optimization. |
241 if (activeAnimations && activeAnimations->isAnimationStyleChange()) | 240 if (activeAnimations && activeAnimations->isAnimationStyleChange()) |
242 return; | 241 return; |
243 #endif | 242 #endif |
244 | 243 |
245 const CSSAnimationData* animationData = style.animations(); | 244 const CSSAnimationData* animationData = style.animations(); |
246 const CSSAnimations* cssAnimations = activeAnimations ? &activeAnimations->c
ssAnimations() : 0; | 245 const CSSAnimations* cssAnimations = activeAnimations ? &activeAnimations->c
ssAnimations() : 0; |
(...skipping 24 matching lines...) Expand all Loading... |
271 update->toggleAnimationPaused(animationName); | 270 update->toggleAnimationPaused(animationName); |
272 } | 271 } |
273 continue; | 272 continue; |
274 } | 273 } |
275 } | 274 } |
276 | 275 |
277 Timing timing = animationData->convertToTiming(i); | 276 Timing timing = animationData->convertToTiming(i); |
278 RefPtr<TimingFunction> keyframeTimingFunction = timing.timingFunctio
n; | 277 RefPtr<TimingFunction> keyframeTimingFunction = timing.timingFunctio
n; |
279 timing.timingFunction = Timing::defaults().timingFunction; | 278 timing.timingFunction = Timing::defaults().timingFunction; |
280 AnimatableValueKeyframeVector resolvedKeyframes; | 279 AnimatableValueKeyframeVector resolvedKeyframes; |
281 resolveKeyframes(resolver, element, parentElement, style, parentStyl
e, animationName, keyframeTimingFunction.get(), resolvedKeyframes); | 280 resolveKeyframes(resolver, animatingElement, element, style, parentS
tyle, animationName, keyframeTimingFunction.get(), resolvedKeyframes); |
282 if (!resolvedKeyframes.isEmpty()) { | 281 if (!resolvedKeyframes.isEmpty()) { |
283 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleC
hange()); | 282 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleC
hange()); |
284 update->startAnimation(animationName, InertAnimation::create(Ani
matableValueKeyframeEffectModel::create(resolvedKeyframes), timing, isPaused)); | 283 update->startAnimation(animationName, InertAnimation::create(Ani
matableValueKeyframeEffectModel::create(resolvedKeyframes), timing, isPaused)); |
285 } | 284 } |
286 } | 285 } |
287 } | 286 } |
288 | 287 |
289 ASSERT(inactive.isEmpty() || cssAnimations); | 288 ASSERT(inactive.isEmpty() || cssAnimations); |
290 for (HashSet<AtomicString>::const_iterator iter = inactive.begin(); iter !=
inactive.end(); ++iter) { | 289 for (HashSet<AtomicString>::const_iterator iter = inactive.begin(); iter !=
inactive.end(); ++iter) { |
291 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleChange())
; | 290 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleChange())
; |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 RefPtrWillBeRawPtr<AnimatableValueKeyframe> endKeyframe = AnimatableValueKey
frame::create(); | 442 RefPtrWillBeRawPtr<AnimatableValueKeyframe> endKeyframe = AnimatableValueKey
frame::create(); |
444 endKeyframe->setPropertyValue(id, to.get()); | 443 endKeyframe->setPropertyValue(id, to.get()); |
445 endKeyframe->setOffset(1); | 444 endKeyframe->setOffset(1); |
446 keyframes.append(endKeyframe); | 445 keyframes.append(endKeyframe); |
447 | 446 |
448 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(keyframes); | 447 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa
lueKeyframeEffectModel::create(keyframes); |
449 update->startTransition(id, eventId, from.get(), to.get(), InertAnimation::c
reate(effect, timing, false)); | 448 update->startTransition(id, eventId, from.get(), to.get(), InertAnimation::c
reate(effect, timing, false)); |
450 ASSERT(!element->activeAnimations() || !element->activeAnimations()->isAnima
tionStyleChange()); | 449 ASSERT(!element->activeAnimations() || !element->activeAnimations()->isAnima
tionStyleChange()); |
451 } | 450 } |
452 | 451 |
453 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate* update, const
Element* element, const RenderStyle& style) | 452 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate* update, const
Element* animatingElement, const RenderStyle& style) |
454 { | 453 { |
455 if (!element) | 454 if (!animatingElement) |
456 return; | 455 return; |
457 | 456 |
458 ActiveAnimations* activeAnimations = element->activeAnimations(); | 457 ActiveAnimations* activeAnimations = animatingElement->activeAnimations(); |
459 const TransitionMap* activeTransitions = activeAnimations ? &activeAnimation
s->cssAnimations().m_transitions : 0; | 458 const TransitionMap* activeTransitions = activeAnimations ? &activeAnimation
s->cssAnimations().m_transitions : 0; |
460 const CSSTransitionData* transitionData = style.transitions(); | 459 const CSSTransitionData* transitionData = style.transitions(); |
461 | 460 |
462 #if ENABLE(ASSERT) | 461 #if ENABLE(ASSERT) |
463 // In debug builds we verify that it would have been safe to avoid populatin
g and testing listedProperties if the style recalc is due to animation. | 462 // In debug builds we verify that it would have been safe to avoid populatin
g and testing listedProperties if the style recalc is due to animation. |
464 const bool animationStyleRecalc = false; | 463 const bool animationStyleRecalc = false; |
465 #else | 464 #else |
466 // In release builds we avoid the cost of checking for new and interrupted t
ransitions if the style recalc is due to animation. | 465 // In release builds we avoid the cost of checking for new and interrupted t
ransitions if the style recalc is due to animation. |
467 const bool animationStyleRecalc = activeAnimations && activeAnimations->isAn
imationStyleChange(); | 466 const bool animationStyleRecalc = activeAnimations && activeAnimations->isAn
imationStyleChange(); |
468 #endif | 467 #endif |
469 | 468 |
470 BitArray<numCSSProperties> listedProperties; | 469 BitArray<numCSSProperties> listedProperties; |
471 bool anyTransitionHadTransitionAll = false; | 470 bool anyTransitionHadTransitionAll = false; |
472 const RenderObject* renderer = element->renderer(); | 471 const RenderObject* renderer = animatingElement->renderer(); |
473 if (!animationStyleRecalc && style.display() != NONE && renderer && renderer
->style() && transitionData) { | 472 if (!animationStyleRecalc && style.display() != NONE && renderer && renderer
->style() && transitionData) { |
474 const RenderStyle& oldStyle = *renderer->style(); | 473 const RenderStyle& oldStyle = *renderer->style(); |
475 | 474 |
476 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { | 475 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { |
477 const CSSTransitionData::TransitionProperty& transitionProperty = tr
ansitionData->propertyList()[i]; | 476 const CSSTransitionData::TransitionProperty& transitionProperty = tr
ansitionData->propertyList()[i]; |
478 CSSTransitionData::TransitionPropertyType mode = transitionProperty.
propertyType; | 477 CSSTransitionData::TransitionPropertyType mode = transitionProperty.
propertyType; |
479 CSSPropertyID property = transitionProperty.propertyId; | 478 CSSPropertyID property = transitionProperty.propertyId; |
480 if (mode == CSSTransitionData::TransitionNone || mode == CSSTransiti
onData::TransitionUnknown) | 479 if (mode == CSSTransitionData::TransitionNone || mode == CSSTransiti
onData::TransitionUnknown) |
481 continue; | 480 continue; |
482 | 481 |
(...skipping 12 matching lines...) Expand all Loading... |
495 if (CSSPropertyMetadata::isAnimatableProperty(id)) | 494 if (CSSPropertyMetadata::isAnimatableProperty(id)) |
496 listedProperties.set(id); | 495 listedProperties.set(id); |
497 else | 496 else |
498 continue; | 497 continue; |
499 } | 498 } |
500 | 499 |
501 // FIXME: We should transition if an !important property changes
even when an animation is running, | 500 // FIXME: We should transition if an !important property changes
even when an animation is running, |
502 // but this is a bit hard to do with the current applyMatchedPro
perties system. | 501 // but this is a bit hard to do with the current applyMatchedPro
perties system. |
503 if (!update->activeInterpolationsForAnimations().contains(id) | 502 if (!update->activeInterpolationsForAnimations().contains(id) |
504 && (!activeAnimations || !activeAnimations->cssAnimations().
m_previousActiveInterpolationsForAnimations.contains(id))) { | 503 && (!activeAnimations || !activeAnimations->cssAnimations().
m_previousActiveInterpolationsForAnimations.contains(id))) { |
505 calculateTransitionUpdateForProperty(id, eventId, *transitio
nData, i, oldStyle, style, activeTransitions, update, element); | 504 calculateTransitionUpdateForProperty(id, eventId, *transitio
nData, i, oldStyle, style, activeTransitions, update, animatingElement); |
506 } | 505 } |
507 } | 506 } |
508 } | 507 } |
509 } | 508 } |
510 | 509 |
511 if (activeTransitions) { | 510 if (activeTransitions) { |
512 for (TransitionMap::const_iterator iter = activeTransitions->begin(); it
er != activeTransitions->end(); ++iter) { | 511 for (TransitionMap::const_iterator iter = activeTransitions->begin(); it
er != activeTransitions->end(); ++iter) { |
513 const AnimationPlayer& player = *iter->value.player; | 512 const AnimationPlayer& player = *iter->value.player; |
514 CSSPropertyID id = iter->key; | 513 CSSPropertyID id = iter->key; |
515 if (player.finishedInternal() || (!anyTransitionHadTransitionAll &&
!animationStyleRecalc && !listedProperties.get(id))) { | 514 if (player.finishedInternal() || (!anyTransitionHadTransitionAll &&
!animationStyleRecalc && !listedProperties.get(id))) { |
(...skipping 15 matching lines...) Expand all Loading... |
531 for (TransitionMap::iterator iter = m_transitions.begin(); iter != m_transit
ions.end(); ++iter) { | 530 for (TransitionMap::iterator iter = m_transitions.begin(); iter != m_transit
ions.end(); ++iter) { |
532 iter->value.player->cancel(); | 531 iter->value.player->cancel(); |
533 iter->value.player->update(TimingUpdateOnDemand); | 532 iter->value.player->update(TimingUpdateOnDemand); |
534 } | 533 } |
535 | 534 |
536 m_animations.clear(); | 535 m_animations.clear(); |
537 m_transitions.clear(); | 536 m_transitions.clear(); |
538 m_pendingUpdate = nullptr; | 537 m_pendingUpdate = nullptr; |
539 } | 538 } |
540 | 539 |
541 void CSSAnimations::calculateAnimationActiveInterpolations(CSSAnimationUpdate* u
pdate, const Element* element, double timelineCurrentTime) | 540 void CSSAnimations::calculateAnimationActiveInterpolations(CSSAnimationUpdate* u
pdate, const Element* animatingElement, double timelineCurrentTime) |
542 { | 541 { |
543 ActiveAnimations* activeAnimations = element ? element->activeAnimations() :
0; | 542 ActiveAnimations* activeAnimations = animatingElement ? animatingElement->ac
tiveAnimations() : 0; |
544 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau
ltStack() : 0; | 543 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau
ltStack() : 0; |
545 | 544 |
546 if (update->newAnimations().isEmpty() && update->cancelledAnimationAnimation
Players().isEmpty()) { | 545 if (update->newAnimations().isEmpty() && update->cancelledAnimationAnimation
Players().isEmpty()) { |
547 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > act
iveInterpolationsForAnimations(AnimationStack::activeInterpolations(animationSta
ck, 0, 0, Animation::DefaultPriority, timelineCurrentTime)); | 546 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > act
iveInterpolationsForAnimations(AnimationStack::activeInterpolations(animationSta
ck, 0, 0, Animation::DefaultPriority, timelineCurrentTime)); |
548 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAn
imations); | 547 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAn
imations); |
549 return; | 548 return; |
550 } | 549 } |
551 | 550 |
552 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newAnimations; | 551 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newAnimations; |
553 for (size_t i = 0; i < update->newAnimations().size(); ++i) { | 552 for (size_t i = 0; i < update->newAnimations().size(); ++i) { |
554 newAnimations.append(update->newAnimations()[i].animation.get()); | 553 newAnimations.append(update->newAnimations()[i].animation.get()); |
555 } | 554 } |
556 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI
nterpolationsForAnimations(AnimationStack::activeInterpolations(animationStack,
&newAnimations, &update->cancelledAnimationAnimationPlayers(), Animation::Defaul
tPriority, timelineCurrentTime)); | 555 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI
nterpolationsForAnimations(AnimationStack::activeInterpolations(animationStack,
&newAnimations, &update->cancelledAnimationAnimationPlayers(), Animation::Defaul
tPriority, timelineCurrentTime)); |
557 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAnimat
ions); | 556 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAnimat
ions); |
558 } | 557 } |
559 | 558 |
560 void CSSAnimations::calculateTransitionActiveInterpolations(CSSAnimationUpdate*
update, const Element* element, double timelineCurrentTime) | 559 void CSSAnimations::calculateTransitionActiveInterpolations(CSSAnimationUpdate*
update, const Element* animatingElement, double timelineCurrentTime) |
561 { | 560 { |
562 ActiveAnimations* activeAnimations = element ? element->activeAnimations() :
0; | 561 ActiveAnimations* activeAnimations = animatingElement ? animatingElement->ac
tiveAnimations() : 0; |
563 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau
ltStack() : 0; | 562 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau
ltStack() : 0; |
564 | 563 |
565 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI
nterpolationsForTransitions; | 564 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI
nterpolationsForTransitions; |
566 if (update->newTransitions().isEmpty() && update->cancelledTransitions().isE
mpty()) { | 565 if (update->newTransitions().isEmpty() && update->cancelledTransitions().isE
mpty()) { |
567 activeInterpolationsForTransitions = AnimationStack::activeInterpolation
s(animationStack, 0, 0, Animation::TransitionPriority, timelineCurrentTime); | 566 activeInterpolationsForTransitions = AnimationStack::activeInterpolation
s(animationStack, 0, 0, Animation::TransitionPriority, timelineCurrentTime); |
568 } else { | 567 } else { |
569 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newTransitions; | 568 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newTransitions; |
570 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update-
>newTransitions().begin(); iter != update->newTransitions().end(); ++iter) | 569 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update-
>newTransitions().begin(); iter != update->newTransitions().end(); ++iter) |
571 newTransitions.append(iter->value.animation.get()); | 570 newTransitions.append(iter->value.animation.get()); |
572 | 571 |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 #if ENABLE(OILPAN) | 729 #if ENABLE(OILPAN) |
731 visitor->trace(m_newTransitions); | 730 visitor->trace(m_newTransitions); |
732 visitor->trace(m_activeInterpolationsForAnimations); | 731 visitor->trace(m_activeInterpolationsForAnimations); |
733 visitor->trace(m_activeInterpolationsForTransitions); | 732 visitor->trace(m_activeInterpolationsForTransitions); |
734 visitor->trace(m_newAnimations); | 733 visitor->trace(m_newAnimations); |
735 visitor->trace(m_cancelledAnimationPlayers); | 734 visitor->trace(m_cancelledAnimationPlayers); |
736 #endif | 735 #endif |
737 } | 736 } |
738 | 737 |
739 } // namespace blink | 738 } // namespace blink |
OLD | NEW |