mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-04 17:30:55 +00:00
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
This commit is contained in:
parent
45af4bc0e0
commit
f509d41baf
|
@ -67,6 +67,7 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
|
||||||
Notifications
|
Notifications
|
||||||
Crash
|
Crash
|
||||||
WindowSystem
|
WindowSystem
|
||||||
|
WidgetsAddons
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(KUserFeedback 1.2.0)
|
find_package(KUserFeedback 1.2.0)
|
||||||
|
|
|
@ -92,8 +92,6 @@ target_sources(dolphinprivate PRIVATE
|
||||||
kitemviews/private/kitemlistviewanimation.cpp
|
kitemviews/private/kitemlistviewanimation.cpp
|
||||||
kitemviews/private/kitemlistviewlayouter.cpp
|
kitemviews/private/kitemlistviewlayouter.cpp
|
||||||
kitemviews/private/kpixmapmodifier.cpp
|
kitemviews/private/kpixmapmodifier.cpp
|
||||||
kitemviews/private/ktwofingerswipe.cpp
|
|
||||||
kitemviews/private/ktwofingertap.cpp
|
|
||||||
settings/applyviewpropsjob.cpp
|
settings/applyviewpropsjob.cpp
|
||||||
settings/viewmodes/viewmodesettings.cpp
|
settings/viewmodes/viewmodesettings.cpp
|
||||||
settings/viewpropertiesdialog.cpp
|
settings/viewpropertiesdialog.cpp
|
||||||
|
@ -159,6 +157,7 @@ target_link_libraries(
|
||||||
KF5::NewStuff
|
KF5::NewStuff
|
||||||
KF5::Parts
|
KF5::Parts
|
||||||
KF5::WindowSystem
|
KF5::WindowSystem
|
||||||
|
KF5::WidgetsAddons
|
||||||
)
|
)
|
||||||
|
|
||||||
if(HAVE_BALOO)
|
if(HAVE_BALOO)
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
#include "kitemlistview.h"
|
#include "kitemlistview.h"
|
||||||
#include "private/kitemlistkeyboardsearchmanager.h"
|
#include "private/kitemlistkeyboardsearchmanager.h"
|
||||||
#include "private/kitemlistrubberband.h"
|
#include "private/kitemlistrubberband.h"
|
||||||
#include "private/ktwofingerswipe.h"
|
|
||||||
#include "private/ktwofingertap.h"
|
|
||||||
#include "views/draganddrophelper.h"
|
#include "views/draganddrophelper.h"
|
||||||
|
|
||||||
|
#include <KTwoFingerSwipe>
|
||||||
|
#include <KTwoFingerTap>
|
||||||
|
|
||||||
#include <QAccessible>
|
#include <QAccessible>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDrag>
|
#include <QDrag>
|
||||||
|
|
|
@ -1,139 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Self
|
|
||||||
#include "ktwofingerswipe.h"
|
|
||||||
|
|
||||||
// Qt
|
|
||||||
#include <QTouchEvent>
|
|
||||||
#include <QLineF>
|
|
||||||
|
|
||||||
KTwoFingerSwipeRecognizer::KTwoFingerSwipeRecognizer() :
|
|
||||||
QGestureRecognizer(),
|
|
||||||
m_touchBeginnTimestamp(0),
|
|
||||||
m_gestureAlreadyTriggered(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
KTwoFingerSwipeRecognizer::~KTwoFingerSwipeRecognizer()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QGesture* KTwoFingerSwipeRecognizer::create(QObject*)
|
|
||||||
{
|
|
||||||
return static_cast<QGesture*>(new KTwoFingerSwipe());
|
|
||||||
}
|
|
||||||
|
|
||||||
QGestureRecognizer::Result KTwoFingerSwipeRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
|
|
||||||
{
|
|
||||||
Q_UNUSED(watched)
|
|
||||||
|
|
||||||
KTwoFingerSwipe* const kTwoFingerSwipe = static_cast<KTwoFingerSwipe*>(gesture);
|
|
||||||
const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef KTWOFINGERSWIPE_H
|
|
||||||
#define KTWOFINGERSWIPE_H
|
|
||||||
|
|
||||||
#include "dolphin_export.h"
|
|
||||||
// Qt
|
|
||||||
#include <QGesture>
|
|
||||||
#include <QGestureRecognizer>
|
|
||||||
|
|
||||||
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 */
|
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Self
|
|
||||||
#include "ktwofingertap.h"
|
|
||||||
|
|
||||||
// Qt
|
|
||||||
#include <QTouchEvent>
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QGraphicsWidget>
|
|
||||||
|
|
||||||
KTwoFingerTapRecognizer::KTwoFingerTapRecognizer() :
|
|
||||||
QGestureRecognizer(),
|
|
||||||
m_gestureTriggered(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
KTwoFingerTapRecognizer::~KTwoFingerTapRecognizer()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QGesture* KTwoFingerTapRecognizer::create(QObject*)
|
|
||||||
{
|
|
||||||
return static_cast<QGesture*>(new KTwoFingerTap());
|
|
||||||
}
|
|
||||||
|
|
||||||
QGestureRecognizer::Result KTwoFingerTapRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
|
|
||||||
{
|
|
||||||
if (qobject_cast<QGraphicsWidget*>(watched)) {
|
|
||||||
return Ignore;
|
|
||||||
}
|
|
||||||
|
|
||||||
KTwoFingerTap* const kTwoFingerTap = static_cast<KTwoFingerTap*>(gesture);
|
|
||||||
const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(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;
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef KTWOFINGERTAP_H
|
|
||||||
#define KTWOFINGERTAP_H
|
|
||||||
|
|
||||||
#include <dolphin_export.h>
|
|
||||||
// Qt
|
|
||||||
#include <QGesture>
|
|
||||||
#include <QGestureRecognizer>
|
|
||||||
|
|
||||||
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 */
|
|
Loading…
Reference in New Issue
Block a user