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

}

