aboutsummaryrefslogtreecommitdiff
#include <chrono>
#include <thread>

#include "transitionworkerthread.h"

// The full duration (usecs) of the restoration animation
static const double DURATION = 250000;

// The amount to increase 't' per time step
static const double TICK_SIZE = 1.0 / 60.0;

// The time to wait (usecs) before the next animation tick
static const std::chrono::microseconds TICK_TIME(DURATION * TICK_SIZE);

TransitionWorkerThread::TransitionWorkerThread(TransitionControl *control)
    : m_control(control)
{
}

TransitionWorkerThread::TransitionWorkerThread(TransitionControl *control,
                                               const QEasingCurve &easing)
    : m_control(control)
    , m_easing(easing)
{
}

void TransitionWorkerThread::run()
{
    double t = m_control->t();

    while (t + TICK_SIZE < 1.0) {
        t += TICK_SIZE;
        m_control->setT(m_easing.valueForProgress(t));
        std::this_thread::sleep_for(TICK_TIME);
    }

    m_control->setT(1.0);
}