From f509d41baf326d59d9a71a56628ae282ae58511b Mon Sep 17 00:00:00 2001 From: Steffen Hartleib Date: Wed, 23 Mar 2022 22:00:31 +0000 Subject: [PATCH] Using the gesture recognizer from KWidgetsAddons Using the gesture recognizer from KWidgetsAddons, so that the source code for the gestures is only in one place --- CMakeLists.txt | 1 + src/CMakeLists.txt | 3 +- src/kitemviews/kitemlistcontroller.cpp | 5 +- src/kitemviews/private/ktwofingerswipe.cpp | 139 --------------------- src/kitemviews/private/ktwofingerswipe.h | 54 -------- src/kitemviews/private/ktwofingertap.cpp | 122 ------------------ src/kitemviews/private/ktwofingertap.h | 48 ------- 7 files changed, 5 insertions(+), 367 deletions(-) delete mode 100644 src/kitemviews/private/ktwofingerswipe.cpp delete mode 100644 src/kitemviews/private/ktwofingerswipe.h delete mode 100644 src/kitemviews/private/ktwofingertap.cpp delete mode 100644 src/kitemviews/private/ktwofingertap.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e19f6c2330..ae9507ef6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,7 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Notifications Crash WindowSystem + WidgetsAddons ) find_package(KUserFeedback 1.2.0) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f26ee3dcc..364f12a74d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -92,8 +92,6 @@ target_sources(dolphinprivate PRIVATE kitemviews/private/kitemlistviewanimation.cpp kitemviews/private/kitemlistviewlayouter.cpp kitemviews/private/kpixmapmodifier.cpp - kitemviews/private/ktwofingerswipe.cpp - kitemviews/private/ktwofingertap.cpp settings/applyviewpropsjob.cpp settings/viewmodes/viewmodesettings.cpp settings/viewpropertiesdialog.cpp @@ -159,6 +157,7 @@ target_link_libraries( KF5::NewStuff KF5::Parts KF5::WindowSystem + KF5::WidgetsAddons ) if(HAVE_BALOO) diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 2422e91109..966dc822b5 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -13,10 +13,11 @@ #include "kitemlistview.h" #include "private/kitemlistkeyboardsearchmanager.h" #include "private/kitemlistrubberband.h" -#include "private/ktwofingerswipe.h" -#include "private/ktwofingertap.h" #include "views/draganddrophelper.h" +#include +#include + #include #include #include diff --git a/src/kitemviews/private/ktwofingerswipe.cpp b/src/kitemviews/private/ktwofingerswipe.cpp deleted file mode 100644 index 6d0e18e65c..0000000000 --- a/src/kitemviews/private/ktwofingerswipe.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2020 Steffen Hartleib - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -// Self -#include "ktwofingerswipe.h" - -// Qt -#include -#include - -KTwoFingerSwipeRecognizer::KTwoFingerSwipeRecognizer() : - QGestureRecognizer(), - m_touchBeginnTimestamp(0), - m_gestureAlreadyTriggered(false) -{ -} - -KTwoFingerSwipeRecognizer::~KTwoFingerSwipeRecognizer() -{ -} - -QGesture* KTwoFingerSwipeRecognizer::create(QObject*) -{ - return static_cast(new KTwoFingerSwipe()); -} - -QGestureRecognizer::Result KTwoFingerSwipeRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event) -{ - Q_UNUSED(watched) - - KTwoFingerSwipe* const kTwoFingerSwipe = static_cast(gesture); - const QTouchEvent* touchEvent = static_cast(event); - - const int maxTimeFrameForSwipe = 90; - const int minDistanceForSwipe = 30; - - switch (event->type()) { - case QEvent::TouchBegin: { - m_touchBeginnTimestamp = touchEvent->timestamp(); - m_gestureAlreadyTriggered = false; - kTwoFingerSwipe->setHotSpot(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerSwipe->setPos(touchEvent->touchPoints().first().startPos()); - kTwoFingerSwipe->setScreenPos(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerSwipe->setScenePos(touchEvent->touchPoints().first().startScenePos()); - return MayBeGesture; - } - - case QEvent::TouchUpdate: { - const qint64 now = touchEvent->timestamp(); - const qint64 elapsedTime = now - m_touchBeginnTimestamp; - const QPointF distance = touchEvent->touchPoints().first().startPos() - touchEvent->touchPoints().first().pos(); - kTwoFingerSwipe->setHotSpot(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerSwipe->setPos(touchEvent->touchPoints().first().startPos()); - kTwoFingerSwipe->setScreenPos(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerSwipe->setScenePos(touchEvent->touchPoints().first().startScenePos()); - const QLineF ql = QLineF(touchEvent->touchPoints().first().startPos(), touchEvent->touchPoints().first().pos()); - kTwoFingerSwipe->setSwipeAngle(ql.angle()); - - if (touchEvent->touchPoints().size() > 2) { - return CancelGesture; - } - - if (touchEvent->touchPoints().size() == 2) { - if ((elapsedTime) > maxTimeFrameForSwipe) { - return CancelGesture; - } - - if (distance.manhattanLength() >= minDistanceForSwipe && - (elapsedTime) <= maxTimeFrameForSwipe && !m_gestureAlreadyTriggered) { - m_gestureAlreadyTriggered = true; - return FinishGesture; - } else if ((elapsedTime) <= maxTimeFrameForSwipe && !m_gestureAlreadyTriggered) { - return TriggerGesture; - } - } - break; - } - - default: - return Ignore; - } - return Ignore; -} - -KTwoFingerSwipe::KTwoFingerSwipe(QObject* parent) : - QGesture(parent), - m_pos(QPointF(-1, -1)), - m_screenPos(QPointF(-1, -1)), - m_scenePos(QPointF(-1, -1)), - m_swipeAngle(0.0) -{ -} - -KTwoFingerSwipe::~KTwoFingerSwipe() -{ -} - -QPointF KTwoFingerSwipe::pos() const -{ - return m_pos; -} - -void KTwoFingerSwipe::setPos(QPointF _pos) -{ - m_pos = _pos; -} - -QPointF KTwoFingerSwipe::screenPos() const -{ - return m_screenPos; -} - -void KTwoFingerSwipe::setScreenPos(QPointF _screenPos) -{ - m_screenPos = _screenPos; -} - -QPointF KTwoFingerSwipe::scenePos() const -{ - return m_scenePos; -} - -void KTwoFingerSwipe::setScenePos(QPointF _scenePos) -{ - m_scenePos = _scenePos; -} - -qreal KTwoFingerSwipe::swipeAngle() const -{ - return m_swipeAngle; -} - void KTwoFingerSwipe::setSwipeAngle(qreal _swipeAngle) -{ - m_swipeAngle = _swipeAngle; -} - diff --git a/src/kitemviews/private/ktwofingerswipe.h b/src/kitemviews/private/ktwofingerswipe.h deleted file mode 100644 index 6d64d8ff7d..0000000000 --- a/src/kitemviews/private/ktwofingerswipe.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2020 Steffen Hartleib - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef KTWOFINGERSWIPE_H -#define KTWOFINGERSWIPE_H - -#include "dolphin_export.h" -// Qt -#include -#include - -class DOLPHIN_EXPORT KTwoFingerSwipe : public QGesture -{ - Q_OBJECT - Q_PROPERTY(QPointF pos READ pos WRITE setPos) - Q_PROPERTY(QPointF screenPos READ screenPos WRITE setScreenPos) - Q_PROPERTY(QPointF scenePos READ scenePos WRITE setScenePos) - Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle) -public: - explicit KTwoFingerSwipe(QObject* parent = nullptr); - ~KTwoFingerSwipe() override; - QPointF pos() const; - void setPos(QPointF pos); - QPointF screenPos() const; - void setScreenPos(QPointF screenPos); - QPointF scenePos() const; - void setScenePos(QPointF scenePos); - qreal swipeAngle() const; - void setSwipeAngle(qreal swipeAngle); -private: - QPointF m_pos; - QPointF m_screenPos; - QPointF m_scenePos; - qreal m_swipeAngle; -}; - -class DOLPHIN_EXPORT KTwoFingerSwipeRecognizer : public QGestureRecognizer -{ -public: - explicit KTwoFingerSwipeRecognizer(); - ~KTwoFingerSwipeRecognizer() override; - QGesture* create(QObject*) override; - Result recognize(QGesture*, QObject*, QEvent*) override; -private: - Q_DISABLE_COPY( KTwoFingerSwipeRecognizer ) - qint64 m_touchBeginnTimestamp; - bool m_gestureAlreadyTriggered; -}; - -#endif /* KTWOFINGERSWIPE_H */ - diff --git a/src/kitemviews/private/ktwofingertap.cpp b/src/kitemviews/private/ktwofingertap.cpp deleted file mode 100644 index edd9d1d35f..0000000000 --- a/src/kitemviews/private/ktwofingertap.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2020 Steffen Hartleib - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -// Self -#include "ktwofingertap.h" - -// Qt -#include -#include -#include - -KTwoFingerTapRecognizer::KTwoFingerTapRecognizer() : - QGestureRecognizer(), - m_gestureTriggered(false) -{ -} - -KTwoFingerTapRecognizer::~KTwoFingerTapRecognizer() -{ -} - -QGesture* KTwoFingerTapRecognizer::create(QObject*) -{ - return static_cast(new KTwoFingerTap()); -} - -QGestureRecognizer::Result KTwoFingerTapRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event) -{ - if (qobject_cast(watched)) { - return Ignore; - } - - KTwoFingerTap* const kTwoFingerTap = static_cast(gesture); - const QTouchEvent* touchEvent = static_cast(event); - - switch (event->type()) { - case QEvent::TouchBegin: { - kTwoFingerTap->setHotSpot(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerTap->setPos(touchEvent->touchPoints().first().startPos()); - kTwoFingerTap->setScreenPos(touchEvent->touchPoints().first().startScreenPos()); - kTwoFingerTap->setScenePos(touchEvent->touchPoints().first().startScenePos()); - m_gestureTriggered = false; - return MayBeGesture; - } - - case QEvent::TouchUpdate: { - - if (touchEvent->touchPoints().size() > 2) { - m_gestureTriggered = false; - return CancelGesture; - } - - if (touchEvent->touchPoints().size() == 2) { - if ((touchEvent->touchPoints().first().startPos() - touchEvent->touchPoints().first().pos()).manhattanLength() >= QApplication::startDragDistance()) { - m_gestureTriggered = false; - return CancelGesture; - } - if ((touchEvent->touchPoints().at(1).startPos() - touchEvent->touchPoints().at(1).pos()).manhattanLength() >= QApplication::startDragDistance()) { - m_gestureTriggered = false; - return CancelGesture; - } - if (touchEvent->touchPointStates() & Qt::TouchPointPressed) { - m_gestureTriggered = true; - } - if (touchEvent->touchPointStates() & Qt::TouchPointReleased && m_gestureTriggered) { - m_gestureTriggered = false; - return FinishGesture; - } - } - break; - } - - default: - return Ignore; - } - return Ignore; -} - -KTwoFingerTap::KTwoFingerTap(QObject* parent) : - QGesture(parent), - m_pos(QPointF(-1, -1)), - m_screenPos(QPointF(-1, -1)), - m_scenePos(QPointF(-1, -1)) -{ -} - -KTwoFingerTap::~KTwoFingerTap() -{ -} - -QPointF KTwoFingerTap::pos() const -{ - return m_pos; -} - -void KTwoFingerTap::setPos(QPointF _pos) -{ - m_pos = _pos; -} - -QPointF KTwoFingerTap::screenPos() const -{ - return m_screenPos; -} - -void KTwoFingerTap::setScreenPos(QPointF _screenPos) -{ - m_screenPos = _screenPos; -} - -QPointF KTwoFingerTap::scenePos() const -{ - return m_scenePos; -} - -void KTwoFingerTap::setScenePos(QPointF _scenePos) -{ - m_scenePos = _scenePos; -} diff --git a/src/kitemviews/private/ktwofingertap.h b/src/kitemviews/private/ktwofingertap.h deleted file mode 100644 index 6d409900b5..0000000000 --- a/src/kitemviews/private/ktwofingertap.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2020 Steffen Hartleib - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef KTWOFINGERTAP_H -#define KTWOFINGERTAP_H - -#include -// Qt -#include -#include - -class DOLPHIN_EXPORT KTwoFingerTap : public QGesture -{ - Q_OBJECT - Q_PROPERTY(QPointF pos READ pos WRITE setPos) - Q_PROPERTY(QPointF screenPos READ screenPos WRITE setScreenPos) - Q_PROPERTY(QPointF scenePos READ scenePos WRITE setScenePos) -public: - explicit KTwoFingerTap(QObject* parent = nullptr); - ~KTwoFingerTap() override; - QPointF pos() const; - void setPos(QPointF pos); - QPointF screenPos() const; - void setScreenPos(QPointF screenPos); - QPointF scenePos() const; - void setScenePos(QPointF scenePos); -private: - QPointF m_pos; - QPointF m_screenPos; - QPointF m_scenePos; -}; - -class DOLPHIN_EXPORT KTwoFingerTapRecognizer : public QGestureRecognizer -{ -public: - explicit KTwoFingerTapRecognizer(); - ~KTwoFingerTapRecognizer() override; - QGesture* create(QObject*) override; - Result recognize(QGesture*, QObject*, QEvent*) override; -private: - Q_DISABLE_COPY(KTwoFingerTapRecognizer) - bool m_gestureTriggered; -}; - -#endif /* KTWOFINGERTAP_H */