atrooney-online-2/src/screenslidetimer.cpp
TrickyLeifa a714bacd1a Added screen slide timer
* Added screen slide timer
  * Added so that the animation becomes interruptible.
2024-06-03 18:11:17 +02:00

87 lines
1.6 KiB
C++

#include "screenslidetimer.h"
#include <QDebug>
namespace kal
{
ScreenSlideTimer::ScreenSlideTimer(QObject *parent)
: QObject(parent)
{
m_pause = new QTimer(this);
m_pause->setInterval(TRANSITION_BOOKEND_DELAY);
m_pause->setSingleShot(true);
m_group = new QParallelAnimationGroup(this);
connect(m_pause, &QTimer::timeout, this, &ScreenSlideTimer::startNextState);
connect(m_group, &QParallelAnimationGroup::finished, this, &ScreenSlideTimer::startNextState);
}
ScreenSlideTimer::~ScreenSlideTimer()
{
m_group->disconnect(this);
m_pause->disconnect(this);
stop();
}
void ScreenSlideTimer::addAnimation(QAbstractAnimation *animation)
{
if (m_running)
{
qWarning() << "Cannot add animations while transition is in progress";
return;
}
m_group->addAnimation(animation);
}
void ScreenSlideTimer::start()
{
if (m_running)
{
qWarning() << "Transition already in progress";
return;
}
m_running = true;
startNextState();
}
void ScreenSlideTimer::stop()
{
if (m_running)
{
m_running = false;
m_state = NoTransition;
m_group->stop();
m_group->clear();
m_pause->stop();
}
}
void ScreenSlideTimer::startNextState()
{
switch (m_state)
{
case NoTransition:
m_state = PreTransition;
Q_EMIT started();
m_pause->start();
return;
case PreTransition:
m_state = GroupTransition;
m_group->start();
break;
case GroupTransition:
m_state = PostTransition;
m_pause->start();
break;
case PostTransition:
stop();
Q_EMIT finished();
break;
}
}
} // namespace kal