1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Copyright (C) 2016 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
5** Contact: https://www.qt.io/licensing/
6**
7** This file is part of the plugins module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial License Usage
11** Licensees holding valid commercial Qt licenses may use this file in
12** accordance with the commercial license agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and The Qt Company. For licensing terms
15** and conditions see https://www.qt.io/terms-conditions. For further
16** information use the contact form at https://www.qt.io/contact-us.
17**
18** GNU Lesser General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU Lesser
20** General Public License version 3 as published by the Free Software
21** Foundation and appearing in the file LICENSE.LGPL3 included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU Lesser General Public License version 3 requirements
24** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
25**
26** GNU General Public License Usage
27** Alternatively, this file may be used under the terms of the GNU
28** General Public License version 2.0 or (at your option) the GNU General
29** Public license version 3 or any later version approved by the KDE Free
30** Qt Foundation. The licenses are as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
32** included in the packaging of this file. Please review the following
33** information to ensure the GNU General Public License requirements will
34** be met: https://www.gnu.org/licenses/gpl-2.0.html and
35** https://www.gnu.org/licenses/gpl-3.0.html.
36**
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#ifndef QEVDEVTOUCHHANDLER_P_H
42#define QEVDEVTOUCHHANDLER_P_H
43
44//
45// W A R N I N G
46// -------------
47//
48// This file is not part of the Qt API. It exists purely as an
49// implementation detail. This header file may change from version to
50// version without notice, or even be removed.
51//
52// We mean it.
53//
54
55#include <QtGui/private/qtguiglobal_p.h>
56#include <QObject>
57#include <QString>
58#include <QList>
59#include <QThread>
60#include <QtCore/private/qthread_p.h>
61#include <qpa/qwindowsysteminterface.h>
62#include "qevdevtouchfilter_p.h"
63
64#if QT_CONFIG(mtdev)
65struct mtdev;
66#endif
67
68QT_BEGIN_NAMESPACE
69
70class QSocketNotifier;
71class QEvdevTouchScreenData;
72
73class QEvdevTouchScreenHandler : public QObject
74{
75 Q_OBJECT
76
77public:
78 explicit QEvdevTouchScreenHandler(const QString &device, const QString &spec = QString(), QObject *parent = nullptr);
79 ~QEvdevTouchScreenHandler();
80
81 QTouchDevice *touchDevice() const;
82
83 bool isFiltered() const;
84
85 void readData();
86
87signals:
88 void touchPointsUpdated();
89
90private:
91 friend class QEvdevTouchScreenData;
92 friend class QEvdevTouchScreenHandlerThread;
93
94 void registerTouchDevice();
95 void unregisterTouchDevice();
96
97 QSocketNotifier *m_notify;
98 int m_fd;
99 QEvdevTouchScreenData *d;
100 QTouchDevice *m_device;
101#if QT_CONFIG(mtdev)
102 mtdev *m_mtdev;
103#endif
104};
105
106class QEvdevTouchScreenHandlerThread : public QDaemonThread
107{
108 Q_OBJECT
109public:
110 explicit QEvdevTouchScreenHandlerThread(const QString &device, const QString &spec, QObject *parent = nullptr);
111 ~QEvdevTouchScreenHandlerThread();
112 void run() override;
113
114 bool isTouchDeviceRegistered() const;
115
116 bool eventFilter(QObject *object, QEvent *event) override;
117
118 void scheduleTouchPointUpdate();
119
120signals:
121 void touchDeviceRegistered();
122
123private:
124 Q_INVOKABLE void notifyTouchDeviceRegistered();
125
126 void filterAndSendTouchPoints();
127 QRect targetScreenGeometry() const;
128
129 QString m_device;
130 QString m_spec;
131 QEvdevTouchScreenHandler *m_handler;
132 bool m_touchDeviceRegistered;
133
134 bool m_touchUpdatePending;
135 QWindow *m_filterWindow;
136
137 struct FilteredTouchPoint {
138 QEvdevTouchFilter x;
139 QEvdevTouchFilter y;
140 QWindowSystemInterface::TouchPoint touchPoint;
141 };
142 QHash<int, FilteredTouchPoint> m_filteredPoints;
143
144 float m_touchRate;
145};
146
147QT_END_NAMESPACE
148
149#endif // QEVDEVTOUCH_P_H
150

source code of qtbase/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h