~gabriel1984sibiu/minitube/qt5.6

« back to all changes in this revision

Viewing changes to tests/manual/qtabletevent/device_information/tabletwidget.cpp

  • Committer: Grevutiu Gabriel
  • Date: 2017-06-13 08:43:17 UTC
  • Revision ID: gabriel1984sibiu@gmail.com-20170613084317-ek0zqe0u9g3ocvi8
OriginalĀ upstreamĀ code

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2016 The Qt Company Ltd.
 
4
** Contact: https://www.qt.io/licensing/
 
5
**
 
6
** This file is part of the test suite module of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
 
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 https://www.qt.io/terms-conditions. For further
 
15
** information use the contact form at https://www.qt.io/contact-us.
 
16
**
 
17
** GNU General Public License Usage
 
18
** Alternatively, this file may be used under the terms of the GNU
 
19
** General Public License version 3 as published by the Free Software
 
20
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 
21
** included in the packaging of this file. Please review the following
 
22
** information to ensure the GNU General Public License requirements will
 
23
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 
24
**
 
25
** $QT_END_LICENSE$
 
26
**
 
27
****************************************************************************/
 
28
 
 
29
#include "tabletwidget.h"
 
30
#include <QPainter>
 
31
#include <QApplication>
 
32
#include <QDebug>
 
33
#include <QMetaObject>
 
34
#include <QMetaEnum>
 
35
 
 
36
TabletWidget::TabletWidget(bool mouseToo) : mMouseToo(mouseToo), mWheelEventCount(0)
 
37
{
 
38
    QPalette newPalette = palette();
 
39
    newPalette.setColor(QPalette::Window, Qt::white);
 
40
    newPalette.setColor(QPalette::WindowText, Qt::black);
 
41
    setPalette(newPalette);
 
42
    qApp->installEventFilter(this);
 
43
    resetAttributes();
 
44
}
 
45
 
 
46
bool TabletWidget::eventFilter(QObject *, QEvent *ev)
 
47
{
 
48
    switch (ev->type()) {
 
49
    case QEvent::TabletEnterProximity:
 
50
    case QEvent::TabletLeaveProximity:
 
51
    case QEvent::TabletMove:
 
52
    case QEvent::TabletPress:
 
53
    case QEvent::TabletRelease:
 
54
        {
 
55
            QTabletEvent *event = static_cast<QTabletEvent*>(ev);
 
56
            mType = event->type();
 
57
            mPos = event->pos();
 
58
            mGPos = event->globalPos();
 
59
            mHiResGlobalPos = event->posF();
 
60
            mDev = event->device();
 
61
            mPointerType = event->pointerType();
 
62
            mUnique = event->uniqueId();
 
63
            mXT = event->xTilt();
 
64
            mYT = event->yTilt();
 
65
            mZ = event->z();
 
66
            mPress = event->pressure();
 
67
            mTangential = event->tangentialPressure();
 
68
            mRot = event->rotation();
 
69
            mButton = event->button();
 
70
            mButtons = event->buttons();
 
71
            mTimestamp = event->timestamp();
 
72
            if (isVisible())
 
73
                update();
 
74
            break;
 
75
        }
 
76
    case QEvent::MouseMove:
 
77
        if (mMouseToo) {
 
78
            resetAttributes();
 
79
            QMouseEvent *event = static_cast<QMouseEvent*>(ev);
 
80
            mType = event->type();
 
81
            mPos = event->pos();
 
82
            mGPos = event->globalPos();
 
83
            mTimestamp = event->timestamp();
 
84
        }
 
85
        break;
 
86
    case QEvent::Wheel:
 
87
        ++mWheelEventCount;
 
88
        break;
 
89
    default:
 
90
        break;
 
91
    }
 
92
    return false;
 
93
}
 
94
 
 
95
void TabletWidget::paintEvent(QPaintEvent *)
 
96
{
 
97
    QPainter painter(this);
 
98
 
 
99
    QStringList eventInfo;
 
100
 
 
101
    QString typeString("Event type: ");
 
102
    switch (mType) {
 
103
    case QEvent::TabletEnterProximity:
 
104
        typeString += "QEvent::TabletEnterProximity";
 
105
        break;
 
106
    case QEvent::TabletLeaveProximity:
 
107
        typeString += "QEvent::TabletLeaveProximity";
 
108
        break;
 
109
    case QEvent::TabletMove:
 
110
        typeString += "QEvent::TabletMove";
 
111
        break;
 
112
    case QEvent::TabletPress:
 
113
        typeString += "QEvent::TabletPress";
 
114
        break;
 
115
    case QEvent::TabletRelease:
 
116
        typeString += "QEvent::TabletRelease";
 
117
        break;
 
118
    case QEvent::MouseMove:
 
119
        typeString += "QEvent::MouseMove";
 
120
        break;
 
121
    }
 
122
    eventInfo << typeString;
 
123
 
 
124
    eventInfo << QString("Global position: %1 %2").arg(QString::number(mGPos.x()), QString::number(mGPos.y()));
 
125
    eventInfo << QString("Local position: %1 %2").arg(QString::number(mPos.x()), QString::number(mPos.y()));
 
126
    eventInfo << QString("Timestamp: %1").arg(QString::number(mTimestamp));
 
127
    if (mType == QEvent::TabletEnterProximity || mType == QEvent::TabletLeaveProximity
 
128
        || mType == QEvent::TabletMove || mType == QEvent::TabletPress
 
129
        || mType == QEvent::TabletRelease) {
 
130
 
 
131
        eventInfo << QString("High res global position: %1 %2").arg(QString::number(mHiResGlobalPos.x()), QString::number(mHiResGlobalPos.y()));
 
132
 
 
133
        QString pointerType("Pointer type: ");
 
134
        switch (mPointerType) {
 
135
        case QTabletEvent::UnknownPointer:
 
136
            pointerType += "QTabletEvent::UnknownPointer";
 
137
            break;
 
138
        case QTabletEvent::Pen:
 
139
            pointerType += "QTabletEvent::Pen";
 
140
            break;
 
141
        case QTabletEvent::Cursor:
 
142
            pointerType += "QTabletEvent::Cursor";
 
143
            break;
 
144
        case QTabletEvent::Eraser:
 
145
            pointerType += "QTabletEvent::Eraser";
 
146
            break;
 
147
        }
 
148
        eventInfo << pointerType;
 
149
 
 
150
        QString deviceString = "Device type: ";
 
151
        switch (mDev) {
 
152
        case QTabletEvent::NoDevice:
 
153
            deviceString += "QTabletEvent::NoDevice";
 
154
            break;
 
155
        case QTabletEvent::Puck:
 
156
            deviceString += "QTabletEvent::Puck";
 
157
            break;
 
158
        case QTabletEvent::Stylus:
 
159
            deviceString += "QTabletEvent::Stylus";
 
160
            break;
 
161
        case QTabletEvent::Airbrush:
 
162
            deviceString += "QTabletEvent::Airbrush";
 
163
            break;
 
164
        case QTabletEvent::FourDMouse:
 
165
            deviceString += "QTabletEvent::FourDMouse";
 
166
            break;
 
167
        case QTabletEvent::RotationStylus:
 
168
            deviceString += "QTabletEvent::RotationStylus";
 
169
            break;
 
170
        }
 
171
        eventInfo << deviceString;
 
172
 
 
173
        eventInfo << QString("Button: %1 (0x%2)").arg(buttonToString(mButton)).arg(mButton, 0, 16);
 
174
        eventInfo << QString("Buttons currently pressed: %1 (0x%2)").arg(buttonsToString(mButtons)).arg(mButtons, 0, 16);
 
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
        eventInfo << QString("Total wheel events: %1").arg(QString::number(mWheelEventCount));
 
185
    }
 
186
 
 
187
    QString text = eventInfo.join("\n");
 
188
    painter.drawText(rect(), text);
 
189
}
 
190
 
 
191
const char *TabletWidget::buttonToString(Qt::MouseButton b)
 
192
{
 
193
    static int enumIdx = QObject::staticQtMetaObject.indexOfEnumerator("MouseButtons");
 
194
    return QObject::staticQtMetaObject.enumerator(enumIdx).valueToKey(b);
 
195
}
 
196
 
 
197
QString TabletWidget::buttonsToString(Qt::MouseButtons bs)
 
198
{
 
199
    QStringList ret;
 
200
    for (int i = 0; (uint)(1 << i) <= Qt::MaxMouseButton; ++i) {
 
201
        Qt::MouseButton b = static_cast<Qt::MouseButton>(1 << i);
 
202
        if (bs.testFlag(b))
 
203
            ret << buttonToString(b);
 
204
    }
 
205
    return ret.join(QLatin1Char('|'));
 
206
}
 
207
 
 
208
void TabletWidget::tabletEvent(QTabletEvent *event)
 
209
{
 
210
    event->accept();
 
211
}
 
212