X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/32b51b7b92e16cfaf1121cbe80ca267fc8bb0718..b7ad5fb99d32d43fe4e083a8ffc2ebfbd046d2db:/src/kitemviews/private/kitemlistsmoothscroller.cpp diff --git a/src/kitemviews/private/kitemlistsmoothscroller.cpp b/src/kitemviews/private/kitemlistsmoothscroller.cpp index 24eea0cef..c89d3cf8f 100644 --- a/src/kitemviews/private/kitemlistsmoothscroller.cpp +++ b/src/kitemviews/private/kitemlistsmoothscroller.cpp @@ -19,13 +19,12 @@ #include "kitemlistsmoothscroller.h" -#include +#include #include #include #include #include - -#include +#include KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar, QObject* parent) : @@ -36,7 +35,7 @@ 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, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged); @@ -174,7 +173,7 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) case QEvent::Wheel: handleWheelEvent(static_cast(event)); - break; + return true; // eat event so that QScrollBar does not scroll one step more by itself default: break; @@ -194,15 +193,25 @@ void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::Stat void KItemListSmoothScroller::handleWheelEvent(QWheelEvent* event) { - const int numDegrees = event->delta() / 8; - const int numSteps = numDegrees / 15; - const bool previous = m_smoothScrolling; m_smoothScrolling = true; - const int value = m_scrollBar->value(); - const int pageStep = m_scrollBar->pageStep(); - m_scrollBar->setValue(value - numSteps * pageStep); + int numPixels; + if (!event->pixelDelta().isNull()) { + numPixels = event->pixelDelta().y(); + } else { + const int numDegrees = event->angleDelta().y() / 8; + const int numSteps = qApp->wheelScrollLines() * numDegrees / 15; + numPixels = numSteps * m_scrollBar->pageStep() / 12; + } + int value = m_scrollBar->value(); + if (event->modifiers().testFlag(Qt::ShiftModifier)) { + const int scrollingDirection = numPixels > 0 ? 1 : -1; + value -= m_scrollBar->pageStep() * scrollingDirection; + } else { + value -= numPixels; + } + m_scrollBar->setValue(value); m_smoothScrolling = previous;