Coverage Report

Created: 2026-08-17 07:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qtbase/src/gui/kernel/qplatformcursor.cpp
Line
Count
Source
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
#include "qplatformcursor.h"
5
6
#include <QPainter>
7
#include <QBitmap>
8
#include <QGuiApplication>
9
#include <QScreen>
10
#include <qpa/qplatformscreen.h>
11
#include <private/qguiapplication_p.h>
12
13
#include <QDebug>
14
15
QT_BEGIN_NAMESPACE
16
17
/*!
18
    \class QPlatformCursor
19
    \since 5.0
20
    \internal
21
    \preliminary
22
    \ingroup qpa
23
24
    \brief The QPlatformCursor class provides information about
25
    pointer device events (movement, buttons), and requests to change
26
    the currently displayed cursor.
27
28
    Note that QPlatformCursor does not include any graphics for
29
    display. An application that sets a QCursor may provide its own
30
    graphics.
31
32
    \sa QPlatformCursorImage
33
*/
34
35
/*!
36
    \fn virtual void QPlatformCursor::pointerEvent(const QMouseEvent & event)
37
38
    This method is called by Qt whenever a QMouseEvent is generated by the
39
    underlying pointer input. \a event is a reference to the QMouseEvent in
40
    question. A default do-nothing implementation is provided.
41
*/
42
43
/*!
44
    \fn virtual void QPlatformCursor::changeCursor(QCursor * windowCursor, QWindow * window)
45
46
    \brief This method is called by Qt whenever the cursor graphic should be changed.
47
48
    Implementation of this method is mandatory for a subclass of QPlatformCursor.
49
50
    \a windowCursor is a pointer to the QCursor that should be displayed.
51
52
    To unset the cursor of \a window, \nullptr is passed. This means \a window does not have
53
    a cursor set and the cursor of a the first parent window which has a cursor explicitly
54
    set or the system default cursor should take effect.
55
56
    \a window is a pointer to the window currently displayed at QCursor::pos(). Note
57
    that this may be \nullptr if the current position is not occupied by a displayed widget.
58
59
    \sa QCursor::pos()
60
*/
61
62
/*!
63
    \enum QPlatformCursor::Capability
64
    \since 5.10
65
66
    \value OverrideCursor Indicates that the platform implements
67
                          QPlatformCursor::setOverrideCursor() and
68
                          QPlatformCursor::clearOverrideCursor().
69
*/
70
71
QPlatformCursor::Capabilities QPlatformCursor::m_capabilities = { };
72
73
/*!
74
    \fn QPlatformCursor::QPlatformCursor()
75
76
    Constructs a QPlatformCursor.
77
*/
78
QPlatformCursor::QPlatformCursor()
79
0
{
80
0
}
81
82
QPoint QPlatformCursor::pos() const
83
0
{
84
    // As a fallback return the last mouse position seen by QGuiApplication.
85
0
    return QGuiApplicationPrivate::lastCursorPosition.toPoint();
86
0
}
87
88
void QPlatformCursor::setPos(const QPoint &pos)
89
0
{
90
0
    static bool firstCall = true;
91
0
    if (firstCall) {
92
0
        firstCall = false;
93
0
        qWarning("This plugin does not support QCursor::setPos()"
94
0
                 "; emulating movement within the application.");
95
0
    }
96
0
    QWindowSystemInterface::handleMouseEvent(nullptr, pos, pos, Qt::NoButton, Qt::NoButton, QEvent::MouseMove);
97
0
}
98
99
/*!
100
    Returns the size of the cursor, in native pixels.
101
*/
102
QSize QPlatformCursor::size() const
103
0
{
104
0
    return QSize(16, 16);
105
0
}
106
107
// End of display and pointer event handling code
108
// Beginning of built-in cursor graphics
109
// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp
110
111
/*!
112
    \class QPlatformCursorImage
113
    \since 5.0
114
    \internal
115
    \preliminary
116
    \ingroup qpa
117
118
    \brief The QPlatformCursorImage class provides a set of graphics
119
    intended to be used as cursors.
120
121
    \sa QPlatformCursor
122
*/
123
124
static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1];
125
static bool systemCursorTableInit = false;
126
127
// 16 x 16
128
static const uchar cur_arrow_bits[] = {
129
   0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08,
130
   0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22,
131
   0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 };
132
static const uchar mcur_arrow_bits[] = {
133
   0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f,
134
   0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e,
135
   0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 };
136
137
static const unsigned char cur_up_arrow_bits[] = {
138
   0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04,
139
   0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
140
   0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01};
141
static const unsigned char mcur_up_arrow_bits[] = {
142
   0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07,
143
   0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
144
   0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
145
146
static const unsigned char cur_cross_bits[] = {
147
   0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
148
   0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
149
   0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00};
150
static const unsigned char mcur_cross_bits[] = {
151
   0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
152
   0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
153
   0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00};
154
155
static const uchar cur_ibeam_bits[] = {
156
   0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
157
   0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
158
   0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 };
159
static const uchar mcur_ibeam_bits[] = {
160
   0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
161
   0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
162
   0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 };
163
164
static const uchar cur_ver_bits[] = {
165
    0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
166
    0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f,
167
    0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 };
168
static const uchar mcur_ver_bits[] = {
169
    0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f,
170
    0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f,
171
    0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 };
172
173
static const uchar cur_hor_bits[] = {
174
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18,
175
    0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08,
176
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
177
static const uchar mcur_hor_bits[] = {
178
    0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c,
179
    0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c,
180
    0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 };
181
static const uchar cur_bdiag_bits[] = {
182
    0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e,
183
    0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00,
184
    0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
185
static const uchar mcur_bdiag_bits[] = {
186
    0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f,
187
    0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01,
188
    0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 };
189
static const uchar cur_fdiag_bits[] = {
190
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00,
191
    0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c,
192
    0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 };
193
static const uchar mcur_fdiag_bits[] = {
194
    0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00,
195
    0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e,
196
    0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 };
197
198
// 20 x 20
199
static const uchar forbidden_bits[] = {
200
    0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01,
201
    0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06,
202
    0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03,
203
    0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 };
204
205
static const uchar forbiddenm_bits[] = {
206
    0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03,
207
    0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f,
208
    0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07,
209
    0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00};
210
211
// 32 x 32
212
static const uchar wait_data_bits[] = {
213
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
214
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
215
   0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00,
216
   0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00,
217
   0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00,
218
   0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00,
219
   0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00,
220
   0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00,
221
   0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
222
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
224
static const uchar wait_mask_bits[] = {
225
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
227
   0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
228
   0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
229
   0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00,
230
   0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00,
231
   0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
232
   0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00,
233
   0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
234
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
235
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
236
237
static const uchar hsplit_bits[] = {
238
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240
    0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
241
    0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
242
    0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03,
243
    0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00,
244
    0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
245
    0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
246
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
249
static const uchar hsplitm_bits[] = {
250
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
252
    0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
253
    0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00,
254
    0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07,
255
    0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00,
256
    0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
257
    0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
258
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
261
static const uchar vsplit_bits[] = {
262
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264
    0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
265
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
266
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
267
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
268
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
269
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00,
270
    0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
273
static const uchar vsplitm_bits[] = {
274
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
276
    0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
277
    0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
278
    0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
279
    0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
280
    0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
281
    0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00,
282
    0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00,
283
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
285
static const uchar phand_bits[] = {
286
    0x00, 0x00, 0x00, 0x00,        0xfe, 0x01, 0x00, 0x00,        0x01, 0x02, 0x00, 0x00,
287
    0x7e, 0x04, 0x00, 0x00,        0x08, 0x08, 0x00, 0x00,        0x70, 0x08, 0x00, 0x00,
288
    0x08, 0x08, 0x00, 0x00,        0x70, 0x14, 0x00, 0x00,        0x08, 0x22, 0x00, 0x00,
289
    0x30, 0x41, 0x00, 0x00,        0xc0, 0x20, 0x00, 0x00,        0x40, 0x12, 0x00, 0x00,
290
    0x80, 0x08, 0x00, 0x00,        0x00, 0x05, 0x00, 0x00,        0x00, 0x02, 0x00, 0x00,
291
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
292
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
293
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
294
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
295
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
296
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00 };
297
static const uchar phandm_bits[] = {
298
    0xfe, 0x01, 0x00, 0x00,        0xff, 0x03, 0x00, 0x00,        0xff, 0x07, 0x00, 0x00,
299
    0xff, 0x0f, 0x00, 0x00,        0xfe, 0x1f, 0x00, 0x00,        0xf8, 0x1f, 0x00, 0x00,
300
    0xfc, 0x1f, 0x00, 0x00,        0xf8, 0x3f, 0x00, 0x00,        0xfc, 0x7f, 0x00, 0x00,
301
    0xf8, 0xff, 0x00, 0x00,        0xf0, 0x7f, 0x00, 0x00,        0xe0, 0x3f, 0x00, 0x00,
302
    0xc0, 0x1f, 0x00, 0x00,        0x80, 0x0f, 0x00, 0x00,        0x00, 0x07, 0x00, 0x00,
303
    0x00, 0x02, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
304
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
305
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
306
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
307
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00,
308
    0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00 };
309
310
static const uchar size_all_data_bits[] = {
311
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313
   0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
314
   0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
315
   0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00,
316
   0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00,
317
   0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
318
   0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00,
319
   0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
322
static const uchar size_all_mask_bits[] = {
323
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
325
   0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
326
   0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00,
327
   0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01,
328
   0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00,
329
   0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00,
330
   0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00,
331
   0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
334
335
static const uchar whatsthis_bits[] = {
336
   0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00,
337
   0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00,
338
   0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00,
339
   0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00,
340
   0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00,
341
   0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00,
342
   0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
343
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
344
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
345
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
346
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
347
static const uchar whatsthism_bits[] = {
348
   0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00,
349
   0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00,
350
   0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00,
351
   0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00,
352
   0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00,
353
   0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00,
354
   0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
356
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
358
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
359
360
static const uchar busy_bits[] = {
361
    0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
362
    0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
363
    0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00,
364
    0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00,
365
    0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00,
366
    0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00,
367
    0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00,
368
    0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
369
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
372
static const uchar busym_bits[] = {
373
    0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
374
    0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
375
    0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00,
376
    0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00,
377
    0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00,
378
    0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00,
379
    0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00,
380
    0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
381
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
384
385
// 16 x 16
386
static const uchar openhand_bits[] = {
387
    0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92,
388
    0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20,
389
    0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00};
390
static const uchar openhandm_bits[] = {
391
    0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff,
392
    0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f,
393
    0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00};
394
static const uchar closedhand_bits[] = {
395
    0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50,
396
    0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10,
397
    0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00};
398
static const uchar closedhandm_bits[] = {
399
    0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f,
400
    0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f,
401
    0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00};
402
403
void QPlatformCursorImage::createSystemCursor(int id)
404
0
{
405
0
    if (!systemCursorTableInit) {
406
0
        for (int i = 0; i <= Qt::LastCursor; i++)
407
0
            systemCursorTable[i] = nullptr;
408
0
        systemCursorTableInit = true;
409
0
    }
410
0
    switch (id) {
411
        // 16x16 cursors
412
0
        case Qt::ArrowCursor:
413
0
            systemCursorTable[Qt::ArrowCursor] =
414
0
                new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0);
415
0
            break;
416
417
0
        case Qt::UpArrowCursor:
418
0
            systemCursorTable[Qt::UpArrowCursor] =
419
0
                new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0);
420
0
            break;
421
422
0
        case Qt::CrossCursor:
423
0
            systemCursorTable[Qt::CrossCursor] =
424
0
                new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7);
425
0
            break;
426
427
0
        case Qt::IBeamCursor:
428
0
            systemCursorTable[Qt::IBeamCursor] =
429
0
                new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7);
430
0
            break;
431
432
0
        case Qt::SizeVerCursor:
433
0
            systemCursorTable[Qt::SizeVerCursor] =
434
0
                new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7);
435
0
            break;
436
437
0
        case Qt::SizeHorCursor:
438
0
            systemCursorTable[Qt::SizeHorCursor] =
439
0
                new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7);
440
0
            break;
441
442
0
        case Qt::SizeBDiagCursor:
443
0
            systemCursorTable[Qt::SizeBDiagCursor] =
444
0
                new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7);
445
0
            break;
446
447
0
        case Qt::SizeFDiagCursor:
448
0
            systemCursorTable[Qt::SizeFDiagCursor] =
449
0
                new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7);
450
0
            break;
451
452
0
        case Qt::BlankCursor:
453
0
            systemCursorTable[Qt::BlankCursor] =
454
0
                new QPlatformCursorImage(nullptr, nullptr, 0, 0, 0, 0);
455
0
            break;
456
457
        // 20x20 cursors
458
0
        case Qt::ForbiddenCursor:
459
0
            systemCursorTable[Qt::ForbiddenCursor] =
460
0
                new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10);
461
0
            break;
462
463
        // 32x32 cursors
464
0
        case Qt::WaitCursor:
465
0
            systemCursorTable[Qt::WaitCursor] =
466
0
                new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15);
467
0
            break;
468
469
0
        case Qt::SplitVCursor:
470
0
            systemCursorTable[Qt::SplitVCursor] =
471
0
                new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15);
472
0
            break;
473
474
0
        case Qt::SplitHCursor:
475
0
            systemCursorTable[Qt::SplitHCursor] =
476
0
                new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15);
477
0
            break;
478
479
0
        case Qt::SizeAllCursor:
480
0
            systemCursorTable[Qt::SizeAllCursor] =
481
0
                new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15);
482
0
            break;
483
484
0
        case Qt::PointingHandCursor:
485
0
            systemCursorTable[Qt::PointingHandCursor] =
486
0
                new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0);
487
0
            break;
488
489
0
        case Qt::WhatsThisCursor:
490
0
            systemCursorTable[Qt::WhatsThisCursor] =
491
0
                new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0);
492
0
            break;
493
0
        case Qt::BusyCursor:
494
0
            systemCursorTable[Qt::BusyCursor] =
495
0
                new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0);
496
0
            break;
497
498
0
        case Qt::OpenHandCursor:
499
0
            systemCursorTable[Qt::OpenHandCursor] =
500
0
                new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8);
501
0
            break;
502
0
        case Qt::ClosedHandCursor:
503
0
            systemCursorTable[Qt::ClosedHandCursor] =
504
0
                new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8);
505
0
            break;
506
0
        default:
507
0
            qWarning("Unknown system cursor %d", id);
508
0
    }
509
0
}
510
511
/*!
512
    \fn void QPlatformCursorImage::set(Qt::CursorShape id)
513
514
    \brief Calling this method sets the cursor image to the specified shape
515
516
    \a id is one of the defined Qt::CursorShape values.
517
518
    If id is invalid, Qt::BitmapCursor, or unknown by the implementation,
519
    Qt::ArrowCursor is used instead.
520
*/
521
522
void QPlatformCursorImage::set(Qt::CursorShape id)
523
0
{
524
0
    QPlatformCursorImage *cursor = nullptr;
525
0
    if (unsigned(id) <= unsigned(Qt::LastCursor)) {
526
0
        if (!systemCursorTable[id])
527
0
            createSystemCursor(id);
528
0
        cursor = systemCursorTable[id];
529
0
    }
530
531
0
    if (cursor == nullptr) {
532
0
        if (!systemCursorTable[Qt::ArrowCursor])
533
0
            createSystemCursor(Qt::ArrowCursor);
534
0
        cursor = systemCursorTable[Qt::ArrowCursor];
535
0
    }
536
0
    cursorImage = cursor->cursorImage;
537
0
    hot = cursor->hot;
538
0
}
539
540
/*!
541
    Sets the cursor image to the given \a image, with the hotspot at the
542
    point specified by (\a hx, \a hy).
543
*/
544
545
void QPlatformCursorImage::set(const QImage &image, int hx, int hy)
546
0
{
547
0
    hot.setX(hx);
548
0
    hot.setY(hy);
549
0
    cursorImage = image;
550
0
}
551
552
/*!
553
    \fn void QPlatformCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy)
554
555
    Sets the cursor image to the graphic represented by the combination of
556
    \a data and \a mask, with dimensions given by \a width and \a height and a
557
    hotspot at the point specified by (\a hx, \a hy).
558
559
    The image data specified by \a data must be supplied in the format
560
    described by QImage::Format_Indexed8.
561
562
    The corresponding mask data specified by \a mask must be supplied in a
563
    character array containing packed 1 bit per pixel format data, with any
564
    padding bits at the end of the array. Bits of value 0 represent transparent
565
    pixels in the image data.
566
*/
567
void QPlatformCursorImage::set(const uchar *data, const uchar *mask,
568
                    int width, int height, int hx, int hy)
569
0
{
570
0
    hot.setX(hx);
571
0
    hot.setY(hy);
572
573
0
    cursorImage = QImage(width,height, QImage::Format_Indexed8);
574
575
0
    if (!width || !height || !data || !mask || cursorImage.isNull())
576
0
        return;
577
578
0
    cursorImage.setColorCount(3);
579
0
    cursorImage.setColor(0, 0xff000000);
580
0
    cursorImage.setColor(1, 0xffffffff);
581
0
    cursorImage.setColor(2, 0x00000000);
582
583
0
    int bytesPerLine = (width + 7) / 8;
584
0
    int p = 0;
585
0
    int d, m;
586
587
0
    int x = -1;
588
589
0
    uchar *cursor_data = cursorImage.bits();
590
0
    qsizetype bpl = cursorImage.bytesPerLine();
591
0
    for (int i = 0; i < height; i++)
592
0
    {
593
0
        for (int j = 0; j < bytesPerLine; j++, data++, mask++)
594
0
        {
595
0
            for (int b = 0; b < 8 && j*8+b < width; b++)
596
0
            {
597
0
                d = *data & (1 << b);
598
0
                m = *mask & (1 << b);
599
0
                if (d && m) p = 0;
600
0
                else if (!d && m) p = 1;
601
0
                else p = 2;
602
0
                cursor_data[j*8+b] = p;
603
604
                // calc region
605
0
                if (x < 0 && m)
606
0
                    x = j*8+b;
607
0
                else if (x >= 0 && !m) {
608
0
                    x = -1;
609
0
                }
610
0
            }
611
0
        }
612
0
        if (x >= 0) {
613
0
            x = -1;
614
0
        }
615
0
        cursor_data += bpl;
616
0
    }
617
618
0
}
619
620
/*!
621
    \fn QPlatformCursorImage::QPlatformCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY)
622
623
    Sets the cursor image to the graphic represented by the combination of
624
    \a data and \a mask, with dimensions given by \a width and \a height and a
625
    hotspot at the point specified by (\a hotX, \a hotY).
626
627
    \sa set()
628
*/
629
630
/*!
631
  \fn QImage *QPlatformCursorImage::image()
632
633
  \brief Return the cursor graphic as a pointer to a QImage
634
*/
635
636
/*!
637
    \fn QPoint QPlatformCursorImage::hotspot() const
638
639
    \brief Return the cursor's hotspot
640
*/
641
642
#ifndef QT_NO_CURSOR
643
/*!
644
    Reimplement this function in subclass to set an override cursor
645
    on the associated screen and return true to indicate success.
646
647
    This function can be implemented on platforms where the cursor is a
648
    property of the application or the screen rather than a property
649
    of the window. On these platforms, the OverrideCursor capability
650
    should be set.
651
652
    \sa QGuiApplication::setOverrideCursor(), Capabilities
653
654
    \since 5.10
655
*/
656
void QPlatformCursor::setOverrideCursor(const QCursor &)
657
0
{
658
0
}
659
660
/*!
661
    Reimplement this function in subclass to clear the override cursor.
662
663
    \sa QGuiApplication::clearOverrideCursor(), Capabilities
664
665
    \since 5.10
666
*/
667
void QPlatformCursor::clearOverrideCursor()
668
0
{
669
0
}
670
#endif // QT_NO_CURSOR
671
672
QT_END_NAMESPACE