File indexing completed on 2024-05-19 15:09:24

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QPointer>
0011 #include <QQuickItem>
0012 
0013 class FallbackTapHandlerMouseEvent : public QObject
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(Qt::MouseButton button MEMBER m_button)
0017     Q_PROPERTY(Qt::MouseButtons buttons MEMBER m_buttons)
0018     Q_PROPERTY(Qt::KeyboardModifiers modifiers MEMBER m_modifiers)
0019     Q_PROPERTY(qreal x MEMBER m_x)
0020     Q_PROPERTY(qreal y MEMBER m_y)
0021 
0022 public:
0023     FallbackTapHandlerMouseEvent(Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, qreal x, qreal y);
0024     ~FallbackTapHandlerMouseEvent() override = default;
0025 
0026 private:
0027     Qt::MouseButton m_button = Qt::NoButton;
0028     Qt::MouseButtons m_buttons = Qt::NoButton;
0029     Qt::KeyboardModifiers m_modifiers = Qt::NoModifier;
0030     qreal m_x = 0;
0031     qreal m_y = 0;
0032 };
0033 
0034 class FallbackTapHandler : public QQuickItem
0035 {
0036     Q_OBJECT
0037     Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedMouseButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged)
0038 
0039 public:
0040     explicit FallbackTapHandler(QQuickItem *parent = nullptr);
0041     ~FallbackTapHandler() override;
0042 
0043     void setAcceptedButtons(Qt::MouseButtons buttons);
0044 
0045 Q_SIGNALS:
0046     void pressed(FallbackTapHandlerMouseEvent *event);
0047     void tapped(FallbackTapHandlerMouseEvent *event);
0048     void released(FallbackTapHandlerMouseEvent *event);
0049     void acceptedButtonsChanged();
0050 
0051 protected:
0052     bool childMouseEventFilter(QQuickItem *item, QEvent *event) override;
0053     void mousePressEvent(QMouseEvent *event) override;
0054     void mouseReleaseEvent(QMouseEvent *event) override;
0055 
0056 private:
0057     QPointer<QQuickItem> m_mouseDownItem;
0058     QPointF m_mouseDownPos;
0059 };