void ImageResource::EvaluateAnimation() { if (!mAnimating && ShouldAnimate()) { nsresult rv = StartAnimation(); mAnimating = NS_SUCCEEDED(rv); } else if (mAnimating && !ShouldAnimate()) { StopAnimation(); } }
nsresult RasterImage::StartAnimation() { if (mError) { return NS_ERROR_FAILURE; } MOZ_ASSERT(ShouldAnimate(), "Should not animate!"); // If we're not ready to animate, then set mPendingAnimation, which will cause // us to start animating if and when we do become ready. mPendingAnimation = !mAnimationState || mAnimationState->KnownFrameCount() < 1; if (mPendingAnimation) { return NS_OK; } // Don't bother to animate if we're displaying the first frame forever. if (mAnimationState->GetCurrentAnimationFrameIndex() == 0 && mAnimationState->FirstFrameTimeout() == FrameTimeout::Forever()) { mAnimationFinished = true; return NS_ERROR_ABORT; } // We need to set the time that this initial frame was first displayed, as // this is used in AdvanceFrame(). mAnimationState->InitAnimationFrameTimeIfNecessary(); return NS_OK; }
void CCyclerSprite::Think( void ) { if ( ShouldAnimate() ) Animate( pev->framerate * (gpGlobals->time - m_lastTime) ); pev->nextthink = gpGlobals->time + 0.1; m_lastTime = gpGlobals->time; }
void CCyclerSprite::Think( void ) { if( ShouldAnimate() ) Animate( GetFrameRate() * ( gpGlobals->time - m_lastTime ) ); SetNextThink( gpGlobals->time + 0.1 ); m_lastTime = gpGlobals->time; }
/* <cd0ef> ../cstrike/dlls/h_cycler.cpp:305 */ void CCyclerSprite::__MAKE_VHOOK(Think)() { if (ShouldAnimate()) { Animate(pev->framerate * (gpGlobals->time - m_lastTime)); } pev->nextthink = gpGlobals->time + 0.1f; m_lastTime = gpGlobals->time; }
nsresult VectorImage::StartAnimation() { if (mError) return NS_ERROR_FAILURE; NS_ABORT_IF_FALSE(ShouldAnimate(), "Should not animate!"); mSVGDocumentWrapper->StartAnimation(); return NS_OK; }
nsresult VectorImage::StartAnimation() { if (mError) { return NS_ERROR_FAILURE; } MOZ_ASSERT(ShouldAnimate(), "Should not animate!"); mSVGDocumentWrapper->StartAnimation(); return NS_OK; }
VectorImage::RequestRefresh(const TimeStamp& aTime) { if (HadRecentRefresh(aTime)) { return; } PendingAnimationTracker* tracker = mSVGDocumentWrapper->GetDocument()->GetPendingAnimationTracker(); if (tracker && ShouldAnimate()) { tracker->TriggerPendingAnimationsOnNextTick(aTime); } EvaluateAnimation(); mSVGDocumentWrapper->TickRefreshDriver(); if (mHasPendingInvalidation) { mHasPendingInvalidation = false; SendInvalidationNotifications(); } }
void RasterImage::NotifyProgress(Progress aProgress, const IntRect& aInvalidRect /* = IntRect() */, const Maybe<uint32_t>& aFrameCount /* = Nothing() */, DecoderFlags aDecoderFlags /* = DefaultDecoderFlags() */, SurfaceFlags aSurfaceFlags /* = DefaultSurfaceFlags() */) { MOZ_ASSERT(NS_IsMainThread()); // Ensure that we stay alive long enough to finish notifying. RefPtr<RasterImage> image = this; const bool wasDefaultFlags = aSurfaceFlags == DefaultSurfaceFlags(); if (!aInvalidRect.IsEmpty() && wasDefaultFlags) { // Update our image container since we're invalidating. UpdateImageContainer(); } if (!(aDecoderFlags & DecoderFlags::FIRST_FRAME_ONLY)) { // We may have decoded new animation frames; update our animation state. MOZ_ASSERT_IF(aFrameCount && *aFrameCount > 1, mAnimationState || mError); if (mAnimationState && aFrameCount) { mAnimationState->UpdateKnownFrameCount(*aFrameCount); } // If we should start animating right now, do so. if (mAnimationState && aFrameCount == Some(1u) && mPendingAnimation && ShouldAnimate()) { StartAnimation(); } } // Tell the observers what happened. image->mProgressTracker->SyncNotifyProgress(aProgress, aInvalidRect); }