// const values for tuning the kinetic scroll effect
const int KINETIC_MIN_DRAG_LENGTH_VIEW_PIXELS = 30;
const int KINETIC_MAX_TIME_FROM_LAST_MOUSE_EVENT_MS = 100;
+const qreal KINETIC_MAX_VIEW_DISTANCE_FACTOR = 0.8;
const int KINETIC_SCROLL_TIME_MS = 750;
const qreal KINETIC_SPEED_TO_DISTANCE_FACTOR = 0.15 * sqrt(KINETIC_SCROLL_TIME_MS / MS_PER_S);
if (dragLength >= KINETIC_MIN_DRAG_LENGTH_VIEW_PIXELS) {
dragViewSpeed /= values;
- QPointF effectViewDistance= dragViewSpeed * KINETIC_SPEED_TO_DISTANCE_FACTOR;
+ QPointF effectViewDistance = dragViewSpeed * KINETIC_SPEED_TO_DISTANCE_FACTOR;
+
+ // limit the scroll distance in screen pixels
+ qreal biggerDistance = qMax(abs(effectViewDistance.x()), abs(effectViewDistance.y()));
+ if (biggerDistance > m_kineticMaxViewDistance)
+ effectViewDistance /= biggerDistance / m_kineticMaxViewDistance;
+
QPointF effectSceneDistance = effectViewDistance
* (1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
{
qDebug() << __PRETTY_FUNCTION__ << "Resize:" << event->size();
+ m_kineticMaxViewDistance = qMax(width(), height()) * KINETIC_MAX_VIEW_DISTANCE_FACTOR;
+
emit viewResized(event->size());
}