#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() { }