Lomiri
Loading...
Searching...
No Matches
InputDispatcherFilter.h
1/*
2 * Copyright (C) 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU Lesser General Public License version 3, as published by
6 * the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10 * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#ifndef INPUTDISPATCHERFILTER_H
18#define INPUTDISPATCHERFILTER_H
19
20#include <QObject>
21#include <QPointF>
22#include <QSet>
23
24class MousePointer;
25class QScreen;
26
27class InputDispatcherFilter : public QObject
28{
29 Q_OBJECT
30public:
31 static InputDispatcherFilter *instance();
32
33 void registerPointer(MousePointer* pointer);
34 void unregisterPointer(MousePointer* pointer);
35
36Q_SIGNALS:
37 void pushedLeftBoundary(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
38 void pushedRightBoundary(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
39 void pushedTopBoundary(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
40 void pushedTopLeftCorner(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
41 void pushedTopRightCorner(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
42 void pushedBottomLeftCorner(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
43 void pushedBottomRightCorner(QScreen* screen, qreal amount, Qt::MouseButtons buttons);
44 void pushStopped(QScreen* screen);
45
46protected:
47 InputDispatcherFilter(QObject* parent = nullptr);
48
49 bool eventFilter(QObject *o, QEvent *e) override;
50
51 QPointF adjustedPositionForMovement(const QPointF& pt, const QPointF& movement) const;
52 QScreen* screenAt(const QPointF& pt) const;
53
54 MousePointer* currentPointer() const;
55
56private:
57 QObject* m_inputDispatcher;
58 QSet<MousePointer*> m_pointers;
59 bool m_pushing;
60};
61
62#endif // INPUTDISPATCHERFILTER_H