aboutsummaryrefslogtreecommitdiff
path: root/src/screenslidetimer.cpp
diff options
context:
space:
mode:
authorTrickyLeifa <date.epoch@gmail.com>2024-06-03 18:11:17 +0200
committerTrickyLeifa <date.epoch@gmail.com>2024-06-03 18:11:17 +0200
commita714bacd1aba3e54bf485580d112b42385788c50 (patch)
tree252ce858a688d2025fcdba92036bd6a935a5608f /src/screenslidetimer.cpp
parent5af9dce21481e1d402df701b91593ccde4049c4b (diff)
Added screen slide timer
* Added screen slide timer * Added so that the animation becomes interruptible.
Diffstat (limited to 'src/screenslidetimer.cpp')
-rw-r--r--src/screenslidetimer.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/screenslidetimer.cpp b/src/screenslidetimer.cpp
new file mode 100644
index 00000000..2bfd0cd5
--- /dev/null
+++ b/src/screenslidetimer.cpp
@@ -0,0 +1,86 @@
+#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