from FadeAnimator.hpp:41
class FadeAnimator : public T
{
public:
FadeAnimator() :
T(),
fadeAnimationRunning(false),
fadeAnimationCounter(0),
fadeAnimationDelay(0),
fadeAnimationEndedCallback(0)
{
}
virtual ~FadeAnimator()
{
}
void setFadeAnimationEndedAction(GenericCallback<const FadeAnimator<T>& >& callback)
{
fadeAnimationEndedCallback = &callback;
}
void clearFadeAnimationEndedAction()
{
fadeAnimationEndedCallback = 0;
}
virtual void setFadeAnimationDelay(uint16_t delay)
{
fadeAnimationDelay = delay;
}
virtual uint16_t getFadeAnimationDelay() const
{
return fadeAnimationDelay;
}
virtual bool isRunning() const
{
return isFadeAnimationRunning();
}
virtual bool isFadeAnimationRunning() const
{
return fadeAnimationRunning;
}
void startFadeAnimation(uint8_t endAlpha, uint16_t duration, EasingEquation alphaProgressionEquation = &EasingEquations::linearEaseNone)
{
if (!fadeAnimationRunning)
{
Application::getInstance()->registerTimerWidget(this);
}
fadeAnimationCounter = 0;
fadeAnimationStartAlpha = T::getAlpha();
fadeAnimationEndAlpha = endAlpha;
fadeAnimationDuration = duration;
fadeAnimationAlphaEquation = alphaProgressionEquation;
fadeAnimationRunning = true;
if (fadeAnimationDelay == 0 && fadeAnimationDuration == 0)
{
nextFadeAnimationStep();
}
}
void cancelFadeAnimation()
{
if (fadeAnimationRunning)
{
Application::getInstance()->unregisterTimerWidget(this);
fadeAnimationRunning = false;
}
}
protected:
virtual void handleTickEvent()
{
T::handleTickEvent();
nextFadeAnimationStep();
}
void nextFadeAnimationStep()
{
if (fadeAnimationRunning)
{
if (fadeAnimationCounter < fadeAnimationDelay)
{
fadeAnimationCounter++;
}
else
{
if (fadeAnimationCounter <= (uint32_t)(fadeAnimationDelay + fadeAnimationDuration))
{
uint32_t actualAnimationCounter = fadeAnimationCounter - fadeAnimationDelay;
int16_t deltaAlpha = (int16_t)fadeAnimationAlphaEquation(actualAnimationCounter, 0, fadeAnimationEndAlpha - fadeAnimationStartAlpha, fadeAnimationDuration);
T::setAlpha(fadeAnimationStartAlpha + deltaAlpha);
T::invalidate();
fadeAnimationCounter++;
}
if (fadeAnimationCounter > (uint32_t)(fadeAnimationDelay + fadeAnimationDuration))
{
fadeAnimationRunning = false;
fadeAnimationDuration = 0;
Application::getInstance()->unregisterTimerWidget(this);
if (fadeAnimationEndedCallback && fadeAnimationEndedCallback->isValid())
{
fadeAnimationEndedCallback->execute(*this);
}
}
}
}
}
protected:
bool fadeAnimationRunning;
uint16_t fadeAnimationCounter;
uint16_t fadeAnimationDelay;
uint16_t fadeAnimationDuration;
int16_t fadeAnimationStartAlpha;
int16_t fadeAnimationEndAlpha;
EasingEquation fadeAnimationAlphaEquation;
GenericCallback<const FadeAnimator<T>& >* fadeAnimationEndedCallback;
};