const qreal MS_PER_S = 1000;
// const values for tuning the kinetic scroll effect
-const int KINETIC_MIN_DRAG_LENGTH = 30;
+const int KINETIC_MIN_DRAG_LENGTH_VIEW_PIXELS = 30;
const int KINETIC_MAX_TIME_FROM_LAST_MOUSE_EVENT_MS = 100;
const int KINETIC_SCROLL_TIME_MS = 750;
const qreal KINETIC_SPEED_TO_DISTANCE_FACTOR = 0.15 * sqrt(KINETIC_SCROLL_TIME_MS / MS_PER_S);
m_index = 0;
m_dragMovement[m_index] = m_mouseLastViewPosition - event->pos();
- m_dragTime[m_index] = time.elapsed();
- time.start();
+ m_dragTime[m_index] = m_time.elapsed();
+ m_time.start();
m_index++;
emit viewScrolled(m_scenePosition);
{
qDebug() << __PRETTY_FUNCTION__;
- time.start();
+ m_time.start();
m_scroller->stop();
{
qDebug() << __PRETTY_FUNCTION__;
- int elapsed = time.elapsed();
+ int elapsed = m_time.elapsed();
QGraphicsView::mouseReleaseEvent(event);
int dragLength = 0;
int values = 0;
for (int i = 0; i < VALUES; i++) {
- if (m_dragTime > 0) {
+ if (m_dragTime[i] > 0) {
dragViewSpeed += m_dragMovement[i] / (m_dragTime[i] / MS_PER_S);
dragLength += m_dragMovement[i].manhattanLength();
values++;
}
}
- dragViewSpeed /= values;
- dragViewSpeed *= KINETIC_SPEED_TO_DISTANCE_FACTOR;
- if (dragLength >= KINETIC_MIN_DRAG_LENGTH) {
- QPointF dragSceneSpeed = dragViewSpeed * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
+ if (dragLength >= KINETIC_MIN_DRAG_LENGTH_VIEW_PIXELS) {
+ dragViewSpeed /= values;
+ QPointF effectViewDistance= dragViewSpeed * KINETIC_SPEED_TO_DISTANCE_FACTOR;
+ QPointF effectSceneDistance = effectViewDistance
+ * (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
m_scroller->setDuration(KINETIC_SCROLL_TIME_MS);
m_scroller->setStartValue(m_scenePosition);
- m_scroller->setEndValue(m_scenePosition + dragSceneSpeed.toPoint());
+ m_scroller->setEndValue(m_scenePosition + effectSceneDistance.toPoint());
m_scroller->start();
}
}