mirror of
https://github.com/YACReader/yacreader
synced 2025-05-25 18:00:46 -04:00
68 lines
1.6 KiB
C++
68 lines
1.6 KiB
C++
#include "scroll_management.h"
|
|
#include <QtCore>
|
|
#include <QApplication>
|
|
|
|
ScrollManagement::ScrollManagement()
|
|
{
|
|
wheelTimer = new QElapsedTimer();
|
|
wheelTimer->start();
|
|
wheelAccumulator = 0;
|
|
}
|
|
|
|
ScrollManagement::Movement ScrollManagement::getMovement(QWheelEvent *event)
|
|
{
|
|
// qDebug() << "WheelEvent angle delta : " << event->angleDelta();
|
|
// qDebug() << "WheelEvent pixel delta : " << event->pixelDelta();
|
|
// qDebug() << "Accumulator : " << wheelAccumulator;
|
|
|
|
int delta;
|
|
int tooFast = 1;
|
|
int timeThrottle = 16;
|
|
int minimumMove;
|
|
|
|
if (event->pixelDelta().x() != 0 || event->pixelDelta().y() != 0) {
|
|
delta = event->pixelDelta().y() + event->pixelDelta().x();
|
|
minimumMove = 30;
|
|
} else {
|
|
delta = (event->angleDelta().y() / 8) + (event->angleDelta().x() / 8);
|
|
minimumMove = 8;
|
|
}
|
|
|
|
wheelAccumulator += delta;
|
|
|
|
// avoid any events overflood
|
|
if ((wheelTimer->elapsed() < tooFast)) {
|
|
event->setAccepted(true);
|
|
return None;
|
|
}
|
|
|
|
// Do not process events too fast
|
|
if ((wheelTimer->elapsed() < timeThrottle)) {
|
|
event->setAccepted(true);
|
|
return None;
|
|
}
|
|
|
|
// small intervals are ignored until with have enough acumulated delta
|
|
if ((wheelAccumulator < minimumMove) && (wheelAccumulator > -minimumMove)) {
|
|
event->setAccepted(true);
|
|
return None;
|
|
}
|
|
|
|
Movement m;
|
|
if (wheelAccumulator < 0)
|
|
m = Forward;
|
|
else
|
|
m = Backward;
|
|
|
|
event->accept();
|
|
// Clean up
|
|
wheelAccumulator = 0;
|
|
wheelTimer->restart();
|
|
|
|
return m;
|
|
}
|
|
|
|
ScrollManagement::~ScrollManagement()
|
|
{
|
|
}
|