C

Qt Quick Ultralite Thermostat Demo

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#include "flickControl.h"

#include <platforminterface/platforminterface.h>
#include <qul/qul.h>

#ifdef QUL_DEMO_BENCHMARK_MODE
static int flickCount = 0;
static Qul::PlatformInterface::TouchPoint touchPoint;

struct Functor
{
    void operator()()
    {
        FlickControl::instance().continueFlick();
        if (++flickCount >= 50) {
            flickCount = 0;
            FlickControl::instance().endFlick();
        }
    }
};

void FlickControl::startFlick(int x, int y, int dx, int dy)
{
    touchPoint.positionX = x;
    touchPoint.positionY = y;
    _dx = dx;
    _dy = dy;
    touchPoint.state = Qul::PlatformInterface::TouchPoint::Pressed;
    Qul::PlatformInterface::handleTouchEvent(nullptr /* screen */,
                                             Qul::Platform::getPlatformInstance()->currentTimestamp(),
                                             &touchPoint,
                                             1);
    flickInProgress = true;
    timer.onTimeout(Functor());
    timer.setSingleShot(false);
    timer.start(5);
}

void FlickControl::continueFlick()
{
    touchPoint.positionX -= _dx;
    touchPoint.positionY -= _dy;
    touchPoint.state = Qul::PlatformInterface::TouchPoint::Moved;
    Qul::PlatformInterface::handleTouchEvent(nullptr /* screen */,
                                             Qul::Platform::getPlatformInstance()->currentTimestamp(),
                                             &touchPoint,
                                             1);
}

void FlickControl::endFlick()
{
    timer.stop();
    touchPoint.state = Qul::PlatformInterface::TouchPoint::Released;
    Qul::PlatformInterface::handleTouchEvent(nullptr /* screen */,
                                             Qul::Platform::getPlatformInstance()->currentTimestamp(),
                                             &touchPoint,
                                             1);
    flickInProgress = false;
}

bool FlickControl::running()
{
    return flickInProgress;
}

#else
void FlickControl::startFlick(int x, int y, int dx, int dy) {}
void FlickControl::endFlick() {}
void FlickControl::continueFlick() {}
bool FlickControl::running()
{
    return false;
}
#endif