X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/59d01e8accbfb7f31fb5ea5ef4c94e57d427994a..38c34eeca315c7be58e65d4d3fb72aaf7b866719:/src/kitemviews/private/kitemlistsmoothscroller.cpp diff --git a/src/kitemviews/private/kitemlistsmoothscroller.cpp b/src/kitemviews/private/kitemlistsmoothscroller.cpp index 994d86174..19d47aac8 100644 --- a/src/kitemviews/private/kitemlistsmoothscroller.cpp +++ b/src/kitemviews/private/kitemlistsmoothscroller.cpp @@ -1,45 +1,29 @@ -/*************************************************************************** - * Copyright (C) 2011 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2011 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "kitemlistsmoothscroller.h" -#include -#include +#include #include #include +#include #include -#include - -KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar, - QObject* parent) : - QObject(parent), - m_scrollBarPressed(false), - m_smoothScrolling(true), - m_scrollBar(scrollBar), - m_animation(0) +KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar *scrollBar, QObject *parent) + : QObject(parent) + , m_scrollBarPressed(false) + , m_smoothScrolling(true) + , m_scrollBar(scrollBar) + , m_animation(nullptr) { m_animation = new QPropertyAnimation(this); - const int duration = (KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::NoEffects) ? 1 : 100; - m_animation->setDuration(duration); - connect(m_animation, &QPropertyAnimation::stateChanged, - this, &KItemListSmoothScroller::slotAnimationStateChanged); + const int animationDuration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, m_scrollBar); + const bool animationEnabled = (animationDuration > 0); + m_animation->setDuration(animationEnabled ? animationDuration : 1); + connect(m_animation, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged); m_scrollBar->installEventFilter(this); } @@ -53,22 +37,22 @@ void KItemListSmoothScroller::setScrollBar(QScrollBar *scrollBar) m_scrollBar = scrollBar; } -QScrollBar* KItemListSmoothScroller::scrollBar() const +QScrollBar *KItemListSmoothScroller::scrollBar() const { return m_scrollBar; } -void KItemListSmoothScroller::setTargetObject(QObject* target) +void KItemListSmoothScroller::setTargetObject(QObject *target) { m_animation->setTargetObject(target); } -QObject* KItemListSmoothScroller::targetObject() const +QObject *KItemListSmoothScroller::targetObject() const { return m_animation->targetObject(); } -void KItemListSmoothScroller::setPropertyName(const QByteArray& propertyName) +void KItemListSmoothScroller::setPropertyName(const QByteArray &propertyName) { m_animation->setPropertyName(propertyName); } @@ -80,7 +64,7 @@ QByteArray KItemListSmoothScroller::propertyName() const void KItemListSmoothScroller::scrollContentsBy(qreal distance) { - QObject* target = targetObject(); + QObject *target = targetObject(); if (!target) { return; } @@ -157,7 +141,7 @@ bool KItemListSmoothScroller::requestScrollBarUpdate(int newMaximum) return true; } -bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) +bool KItemListSmoothScroller::eventFilter(QObject *obj, QEvent *event) { Q_ASSERT(obj == m_scrollBar); @@ -173,8 +157,7 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) break; case QEvent::Wheel: - handleWheelEvent(static_cast(event)); - break; + return false; // we're the ones sending them default: break; @@ -183,30 +166,32 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) return QObject::eventFilter(obj, event); } -void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::State newState, - QAbstractAnimation::State oldState) +void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) { - Q_UNUSED(oldState); + Q_UNUSED(oldState) if (newState == QAbstractAnimation::Stopped && m_smoothScrolling && !m_scrollBarPressed) { m_smoothScrolling = false; } + if (newState == QAbstractAnimation::Stopped) { + Q_EMIT scrollingStopped(); + } } -void KItemListSmoothScroller::handleWheelEvent(QWheelEvent* event) +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); - m_smoothScrolling = previous; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QWheelEvent *copy = event->clone(); + QApplication::sendEvent(m_scrollBar, copy); + event->setAccepted(copy->isAccepted()); +#else + QWheelEvent copy = *event; + QApplication::sendEvent(m_scrollBar, ©); + event->setAccepted(copy.isAccepted()); +#endif - event->accept(); + m_smoothScrolling = previous; } - -#include "kitemlistsmoothscroller.moc"