yacreader/common/scroll_management.cpp
2019-05-30 19:46:37 +02:00

60 lines
1.4 KiB
C++

#include "scroll_management.h"
ScrollManagement::ScrollManagement()
{
wheelTimer = new QTime();
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()
{
}