Krita Source Code Documentation
Loading...
Searching...
No Matches
tablettest.cpp
Go to the documentation of this file.
1/*
2 Drawpile - a collaborative drawing program.
3
4 SPDX-FileCopyrightText: 2017 Calle Laakkonen
5
6 SPDX-License-Identifier: GPL-3.0-or-later
7*/
8
9#include "tablettest.h"
10
11#include <QPaintEvent>
12#include <QPainter>
13
15 : QWidget(parent), m_mouseDown(false), m_tabletDown(false)
16{
17 // we don't explicitly update settings inside KisSpeedSmoother
18 // here because the tablet tester is created every time anew.
19
20}
21
23{
24 return QSize(500, 200);
25}
26
28{
29 m_mousePath.clear();
30 m_tabletPath.clear();
31 update();
32}
33
34void TabletTester::paintEvent(QPaintEvent *e)
35{
36 Q_UNUSED(e);
37 const int w = width();
38 const int h = height();
39 QPainter p(this);
40 p.fillRect(0, 0, w, h, QColor(200, 200, 200));
41 p.setPen(QColor(128, 128, 128));
42
43 // Draw grid
44 for(int i=w/8;i<w;i+=w/8)
45 p.drawLine(i, 0, i, h);
46 for(int i=h/8;i<h;i+=h/8)
47 p.drawLine(0, i, w, i);
48
49 // Draw paths
50 if(!m_mousePath.isEmpty()) {
51 p.setPen(QPen(Qt::red, 3));
52 p.drawPolyline(m_mousePath);
53 }
54 if(!m_tabletPath.isEmpty()) {
55 p.setPen(QPen(Qt::blue, 2));
56 p.drawPolyline(m_tabletPath);
57 }
58}
59
61{
62 m_mouseDown = true;
63 m_mousePath.clear();
65
66 const qreal speed = m_tabletSpeedSmoother.getNextSpeed(e->pos(), e->timestamp());
67 Q_EMIT eventReport(QString("Mouse press X=%1 Y=%2 B=%3 S=%4").arg(e->x()).arg(e->y()).arg(e->button()).arg(speed));
68
69 update();
70}
71
72void TabletTester::mouseMoveEvent(QMouseEvent *e)
73{
74 const qreal speed = m_tabletSpeedSmoother.getNextSpeed(e->pos(), e->timestamp());
75 Q_EMIT eventReport(QString("Mouse move X=%1 Y=%2 B=%3 S=%4").arg(e->x()).arg(e->y()).arg(e->buttons()).arg(speed));
76 m_mousePath << e->pos();
77 update();
78}
79
81{
82 Q_UNUSED(e);
83 Q_EMIT eventReport(QString("Mouse release"));
84 m_mouseDown = false;
85}
86
87void TabletTester::tabletEvent(QTabletEvent *e)
88{
89 e->accept();
90
91 QString msg;
92 switch(e->deviceType()) {
93#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
94 case QTabletEvent::Stylus: msg = "Stylus"; break;
95#else
96 case QInputDevice::DeviceType::Stylus: msg = "Stylus"; break;
97#endif
98 default: msg = QString("Device(%1)").arg((int)e->deviceType()); break;
99 }
100
101 switch(e->type()) {
102 case QEvent::TabletMove:
103 msg += " move";
104
105 break;
106 case QEvent::TabletPress:
107 msg += " press";
108 m_tabletPath.clear();
109 m_tabletDown = true;
111 break;
112 case QEvent::TabletRelease:
113 msg += " release";
114 m_tabletDown = false;
115 break;
116 default:
117 msg += QString(" event-%1").arg(e->type());
118 break;
119 }
120
121 const qreal speed = m_tabletSpeedSmoother.getNextSpeed(e->posF(), e->timestamp());
122
123 msg += QString(" X=%1 Y=%2 B=%3 P=%4% TX=%6 TY=%7 S=%9")
124 .arg(e->posF().x(), 0, 'f', 2)
125 .arg(e->posF().y(), 0, 'f', 2)
126 .arg(e->buttons())
127 .arg(e->pressure()*100, 0, 'f', 1)
128 .arg(e->xTilt())
129 .arg(e->yTilt())
130 .arg(speed, 0, 'f', 1)
131 ;
132
133 if(e->type() == QEvent::TabletMove) {
134 if(m_tabletDown) {
135 msg += " (DRAW)";
136 m_tabletPath << e->pos();
137 update();
138 } else {
139 msg += " (HOVER)";
140 }
141 }
142
143 Q_EMIT eventReport(msg);
144}
const Params2D p
qreal getNextSpeed(const QPointF &pt, ulong timestamp)
void mousePressEvent(QMouseEvent *e) override
QSize sizeHint() const override
void paintEvent(QPaintEvent *e) override
void tabletEvent(QTabletEvent *e) override
KisSpeedSmoother m_tabletSpeedSmoother
Definition tablettest.h:41
QPolygon m_mousePath
Definition tablettest.h:36
TabletTester(QWidget *parent=nullptr)
void mouseMoveEvent(QMouseEvent *e) override
void mouseReleaseEvent(QMouseEvent *e) override
bool m_mouseDown
Definition tablettest.h:39
KisSpeedSmoother m_mouseSpeedSmoother
Definition tablettest.h:42
QPolygon m_tabletPath
Definition tablettest.h:37
void eventReport(const QString &msg)
bool m_tabletDown
Definition tablettest.h:40