]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistsmoothscroller.cpp
Merge branch 'master' into frameworks
[dolphin.git] / src / kitemviews / private / kitemlistsmoothscroller.cpp
index 6987e1ce13303ab1a72fb7444376f7ba03c1adaf..e70f478904dbb81619e67ac07287be48ca9f95bf 100644 (file)
 
 #include "kitemlistsmoothscroller.h"
 
-#include <KGlobalSettings>
 #include <QEvent>
 #include <QPropertyAnimation>
 #include <QScrollBar>
 #include <QWheelEvent>
-
-#include <KDebug>
+#include <QStyle>
 
 KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar,
                                                  QObject* parent) :
@@ -36,10 +34,10 @@ KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar,
     m_animation(0)
 {
     m_animation = new QPropertyAnimation(this);
-    const int duration = (KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::NoEffects) ? 1 : 100;
+    const int duration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animate, nullptr, m_scrollBar) ? 100 : 1;
     m_animation->setDuration(duration);
-    connect(m_animation, SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)),
-            this, SLOT(slotAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State)));
+    connect(m_animation, &QPropertyAnimation::stateChanged,
+            this, &KItemListSmoothScroller::slotAnimationStateChanged);
 
     m_scrollBar->installEventFilter(this);
 }
@@ -130,8 +128,13 @@ void KItemListSmoothScroller::scrollContentsBy(qreal distance)
 
 void KItemListSmoothScroller::scrollTo(qreal position)
 {
-    m_smoothScrolling = true;
-    m_scrollBar->setValue(position);
+    int newValue = position;
+    newValue = qBound(0, newValue, m_scrollBar->maximum());
+
+    if (newValue != m_scrollBar->value()) {
+        m_smoothScrolling = true;
+        m_scrollBar->setValue(newValue);
+    }
 }
 
 bool KItemListSmoothScroller::requestScrollBarUpdate(int newMaximum)
@@ -204,4 +207,3 @@ void KItemListSmoothScroller::handleWheelEvent(QWheelEvent* event)
     event->accept();
 }
 
-#include "kitemlistsmoothscroller.moc"