mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include "scroll_management.h"
|
|
|
|
ScrollManagement::ScrollManagement()
|
|
{
|
|
wheelTimer = new QElapsedTimer();
|
|
wheelTimer->start();
|
|
wheelAccumulator = 0;
|
|
}
|
|
|
|
ScrollManagement::Movement ScrollManagement::getMovement(QWheelEvent *event)
|
|
{
|
|
/*QLOG_DEBUG() << "WheelEvent angle delta : " << event->angleDelta();
|
|
QLOG_DEBUG() << "WheelEvent pixel delta : " << event->pixelDelta();*/
|
|
|
|
int tooFast = 1;
|
|
int timeThrottle = 16;
|
|
int minimumMove = 70;
|
|
|
|
// avoid any events overflood
|
|
if ((wheelTimer->elapsed() < tooFast)) {
|
|
event->setAccepted(true);
|
|
return None;
|
|
}
|
|
|
|
// Accumulate the delta
|
|
if ((event->delta() < 0) != (wheelAccumulator < 0)) // different sign means change in direction
|
|
wheelAccumulator = 0;
|
|
|
|
wheelAccumulator += event->delta();
|
|
|
|
// 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()
|
|
{
|
|
}
|