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