void CommonAnimationManager::AddStyleUpdatesTo(RestyleTracker& aTracker) { TimeStamp now = mPresContext->RefreshDriver()->MostRecentRefresh(); PRCList* next = PR_LIST_HEAD(&mElementCollections); while (next != &mElementCollections) { AnimationPlayerCollection* collection = static_cast<AnimationPlayerCollection*>(next); next = PR_NEXT_LINK(next); if (!collection->mNeedsRefreshes) { continue; } collection->EnsureStyleRuleFor(now, EnsureStyleRule_IsNotThrottled); dom::Element* elementToRestyle = collection->GetElementToRestyle(); if (elementToRestyle) { nsRestyleHint rshint = collection->IsForTransitions() ? eRestyle_CSSTransitions : eRestyle_CSSAnimations; aTracker.AddPendingRestyle(elementToRestyle, rshint, nsChangeHint(0)); } } }
nsIStyleRule* CommonAnimationManager::GetAnimationRule(mozilla::dom::Element* aElement, nsCSSPseudoElements::Type aPseudoType) { MOZ_ASSERT( aPseudoType == nsCSSPseudoElements::ePseudo_NotPseudoElement || aPseudoType == nsCSSPseudoElements::ePseudo_before || aPseudoType == nsCSSPseudoElements::ePseudo_after, "forbidden pseudo type"); if (!mPresContext->IsDynamic()) { // For print or print preview, ignore animations. return nullptr; } AnimationPlayerCollection* collection = GetAnimations(aElement, aPseudoType, false); if (!collection) { return nullptr; } RestyleManager* restyleManager = mPresContext->RestyleManager(); if (restyleManager->SkipAnimationRules()) { return nullptr; } collection->EnsureStyleRuleFor( mPresContext->RefreshDriver()->MostRecentRefresh(), EnsureStyleRule_IsNotThrottled); return collection->mStyleRule; }
nsIStyleRule* CommonAnimationManager::GetAnimationRule(mozilla::dom::Element* aElement, nsCSSPseudoElements::Type aPseudoType) { MOZ_ASSERT( aPseudoType == nsCSSPseudoElements::ePseudo_NotPseudoElement || aPseudoType == nsCSSPseudoElements::ePseudo_before || aPseudoType == nsCSSPseudoElements::ePseudo_after, "forbidden pseudo type"); if (!mPresContext->IsDynamic()) { // For print or print preview, ignore animations. return nullptr; } AnimationPlayerCollection* collection = GetAnimationPlayers(aElement, aPseudoType, false); if (!collection) { return nullptr; } RestyleManager* restyleManager = mPresContext->RestyleManager(); if (restyleManager->SkipAnimationRules()) { // During the non-animation part of processing restyles, we don't // add the animation rule. if (collection->mStyleRule && restyleManager->PostAnimationRestyles()) { collection->PostRestyleForAnimation(mPresContext); } return nullptr; } // Animations should already be refreshed, but transitions may not be. // Note that this is temporary, we would like both animations and transitions // to both be refreshed by this point. if (IsAnimationManager()) { NS_WARN_IF_FALSE(!collection->mNeedsRefreshes || collection->mStyleRuleRefreshTime == mPresContext->RefreshDriver()->MostRecentRefresh(), "should already have refreshed style rule"); } else { // FIXME: Remove this assignment. See bug 1061364. collection->mNeedsRefreshes = true; collection->EnsureStyleRuleFor( mPresContext->RefreshDriver()->MostRecentRefresh(), EnsureStyleRule_IsNotThrottled); } return collection->mStyleRule; }