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