1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the test suite module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file. Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "tabletwidget.h"
43 #include <QPainter>
44 #include <QApplication>
45
TabletWidget()46 TabletWidget::TabletWidget()
47 {
48 QPalette newPalette = palette();
49 newPalette.setColor(QPalette::Window, Qt::white);
50 newPalette.setColor(QPalette::WindowText, Qt::black);
51 setPalette(newPalette);
52 qApp->installEventFilter(this);
53 resetAttributes();
54 }
55
eventFilter(QObject *,QEvent * ev)56 bool TabletWidget::eventFilter(QObject *, QEvent *ev)
57 {
58 switch (ev->type()) {
59 case QEvent::TabletEnterProximity:
60 case QEvent::TabletLeaveProximity:
61 case QEvent::TabletMove:
62 case QEvent::TabletPress:
63 case QEvent::TabletRelease:
64 {
65 QTabletEvent *event = static_cast<QTabletEvent*>(ev);
66 mType = event->type();
67 mPos = event->pos();
68 mGPos = event->globalPos();
69 mHiResGlobalPos = event->hiResGlobalPos();
70 mDev = event->device();
71 mPointerType = event->pointerType();
72 mUnique = event->uniqueId();
73 mXT = event->xTilt();
74 mYT = event->yTilt();
75 mZ = event->z();
76 mPress = event->pressure();
77 mTangential = event->tangentialPressure();
78 mRot = event->rotation();
79 if (isVisible())
80 update();
81 break;
82 }
83 case QEvent::MouseMove:
84 {
85 resetAttributes();
86 QMouseEvent *event = static_cast<QMouseEvent*>(ev);
87 mType = event->type();
88 mPos = event->pos();
89 mGPos = event->globalPos();
90 }
91 default:
92 break;
93 }
94 return false;
95 }
96
paintEvent(QPaintEvent * event)97 void TabletWidget::paintEvent(QPaintEvent *event)
98 {
99 QPainter painter(this);
100
101 QStringList eventInfo;
102
103 QString typeString("Event type: ");
104 switch (mType) {
105 case QEvent::TabletEnterProximity:
106 typeString += "QEvent::TabletEnterProximity";
107 break;
108 case QEvent::TabletLeaveProximity:
109 typeString += "QEvent::TabletLeaveProximity";
110 break;
111 case QEvent::TabletMove:
112 typeString += "QEvent::TabletMove";
113 break;
114 case QEvent::TabletPress:
115 typeString += "QEvent::TabletPress";
116 break;
117 case QEvent::TabletRelease:
118 typeString += "QEvent::TabletRelease";
119 break;
120 case QEvent::MouseMove:
121 typeString += "QEvent::MouseMove";
122 break;
123 }
124 eventInfo << typeString;
125
126 eventInfo << QString("Global position: %1 %2").arg(QString::number(mGPos.x()), QString::number(mGPos.y()));
127 eventInfo << QString("Local position: %1 %2").arg(QString::number(mPos.x()), QString::number(mPos.y()));
128 if (mType == QEvent::TabletEnterProximity || mType == QEvent::TabletLeaveProximity
129 || mType == QEvent::TabletMove || mType == QEvent::TabletPress
130 || mType == QEvent::TabletRelease) {
131
132 eventInfo << QString("Hight res global position: %1 %2").arg(QString::number(mHiResGlobalPos.x()), QString::number(mHiResGlobalPos.y()));
133
134 QString pointerType("Pointer type: ");
135 switch (mPointerType) {
136 case QTabletEvent::UnknownPointer:
137 pointerType += "QTabletEvent::UnknownPointer";
138 break;
139 case QTabletEvent::Pen:
140 pointerType += "QTabletEvent::Pen";
141 break;
142 case QTabletEvent::Cursor:
143 pointerType += "QTabletEvent::Cursor";
144 break;
145 case QTabletEvent::Eraser:
146 pointerType += "QTabletEvent::Eraser";
147 break;
148 }
149 eventInfo << pointerType;
150
151
152 QString deviceString = "Device type: ";
153 switch (mDev) {
154 case QTabletEvent::NoDevice:
155 deviceString += "QTabletEvent::NoDevice";
156 break;
157 case QTabletEvent::Puck:
158 deviceString += "QTabletEvent::Puck";
159 break;
160 case QTabletEvent::Stylus:
161 deviceString += "QTabletEvent::Stylus";
162 break;
163 case QTabletEvent::Airbrush:
164 deviceString += "QTabletEvent::Airbrush";
165 break;
166 case QTabletEvent::FourDMouse:
167 deviceString += "QTabletEvent::FourDMouse";
168 break;
169 case QTabletEvent::RotationStylus:
170 deviceString += "QTabletEvent::RotationStylus";
171 break;
172 }
173 eventInfo << deviceString;
174
175 eventInfo << QString("Pressure: %1").arg(QString::number(mPress));
176 eventInfo << QString("Tangential pressure: %1").arg(QString::number(mTangential));
177 eventInfo << QString("Rotation: %1").arg(QString::number(mRot));
178 eventInfo << QString("xTilt: %1").arg(QString::number(mXT));
179 eventInfo << QString("yTilt: %1").arg(QString::number(mYT));
180 eventInfo << QString("z: %1").arg(QString::number(mZ));
181
182 eventInfo << QString("Unique Id: %1").arg(QString::number(mUnique));
183 }
184
185 painter.drawText(rect(), eventInfo.join("\n"));
186 }
187
tabletEvent(QTabletEvent * event)188 void TabletWidget::tabletEvent(QTabletEvent *event)
189 {
190 event->accept();
191 }
192
193