Files
yacreader/common/scroll_management.cpp
luisangelsm 3709b6e737
Some checks failed
Build / Initialization (push) Has been cancelled
Build / Code Format Validation (push) Has been cancelled
Build / Linux (Qt6) (push) Has been cancelled
Build / Linux (Qt6 + 7zip) (push) Has been cancelled
Build / macOS (Qt6 Universal) (push) Has been cancelled
Build / Windows x64 (Qt6) (push) Has been cancelled
Build / Windows ARM64 (Qt6) (push) Has been cancelled
Build / Docker amd64 Image (push) Has been cancelled
Build / Docker arm64 Image (push) Has been cancelled
Build / Publish Dev Builds (push) Has been cancelled
Build / Publish Release (push) Has been cancelled
Build / Publish YACReader10 Pre-release Builds (push) Has been cancelled
Format includes using clang-format
2026-03-13 18:21:38 +01:00

68 lines
1.6 KiB
C++

#include "scroll_management.h"
#include <QApplication>
ScrollManagement::ScrollManagement()
{
wheelTimer = new QElapsedTimer();
wheelTimer->start();
wheelAccumulator = 0;
}
ScrollManagement::Movement ScrollManagement::getMovement(QWheelEvent *event)
{
// qDebug() << "WheelEvent angle delta : " << event->angleDelta();
// qDebug() << "WheelEvent pixel delta : " << event->pixelDelta();
// qDebug() << "Accumulator : " << wheelAccumulator;
int delta;
int tooFast = 1;
int timeThrottle = 16;
int minimumMove;
if (event->pixelDelta().x() != 0 || event->pixelDelta().y() != 0) {
delta = event->pixelDelta().y() + event->pixelDelta().x();
minimumMove = 30;
} else {
delta = (event->angleDelta().y() / 8) + (event->angleDelta().x() / 8);
minimumMove = 8;
}
wheelAccumulator += delta;
// avoid any events overflood
if ((wheelTimer->elapsed() < tooFast)) {
event->setAccepted(true);
return None;
}
// 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()
{
}