Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qplatformcursor.cpp
Go to the documentation of this file.
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
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
15QT_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
71QPlatformCursor::Capabilities QPlatformCursor::m_capabilities = { };
72
73/*!
74 \fn QPlatformCursor::QPlatformCursor()
75
76 Constructs a QPlatformCursor.
77*/
78QPlatformCursor::QPlatformCursor()
79{
80}
81
82QPoint QPlatformCursor::pos() const
83{
84 // As a fallback return the last mouse position seen by QGuiApplication.
85 return QGuiApplicationPrivate::lastCursorPosition.toPoint();
86}
87
88void QPlatformCursor::setPos(const QPoint &pos)
89{
90 static bool firstCall = true;
91 if (firstCall) {
92 firstCall = false;
93 qWarning("This plugin does not support QCursor::setPos()"
94 "; emulating movement within the application.");
95 }
96 QWindowSystemInterface::handleMouseEvent(nullptr, pos, pos, Qt::NoButton, Qt::NoButton, QEvent::MouseMove);
97}
98
99/*!
100 Returns the size of the cursor, in native pixels.
101*/
102QSize QPlatformCursor::size() const
103{
104 return QSize(16, 16);
105}
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
124static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1];
125static bool systemCursorTableInit = false;
126
127// 16 x 16
128static 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 };
132static 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
137static 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};
141static 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
146static 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};
150static 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
155static 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 };
159static 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
164static 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 };
168static 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
173static 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 };
177static 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 };
181static 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 };
185static 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 };
189static 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 };
193static 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
199static 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
205static 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
212static 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 };
224static 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
237static 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 };
249static 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 };
261static 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 };
273static 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 };
285static 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 };
297static 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
310static 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 };
322static 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
335static 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, };
347static 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
360static 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};
372static 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
386static 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};
390static 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};
394static 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};
398static 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
403void QPlatformCursorImage::createSystemCursor(int id)
404{
405 if (!systemCursorTableInit) {
406 for (int i = 0; i <= Qt::LastCursor; i++)
407 systemCursorTable[i] = nullptr;
408 systemCursorTableInit = true;
409 }
410 switch (id) {
411 // 16x16 cursors
412 case Qt::ArrowCursor:
413 systemCursorTable[Qt::ArrowCursor] =
414 new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0);
415 break;
416
417 case Qt::UpArrowCursor:
418 systemCursorTable[Qt::UpArrowCursor] =
419 new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0);
420 break;
421
422 case Qt::CrossCursor:
423 systemCursorTable[Qt::CrossCursor] =
424 new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7);
425 break;
426
427 case Qt::IBeamCursor:
428 systemCursorTable[Qt::IBeamCursor] =
429 new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7);
430 break;
431
432 case Qt::SizeVerCursor:
433 systemCursorTable[Qt::SizeVerCursor] =
434 new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7);
435 break;
436
437 case Qt::SizeHorCursor:
438 systemCursorTable[Qt::SizeHorCursor] =
439 new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7);
440 break;
441
442 case Qt::SizeBDiagCursor:
443 systemCursorTable[Qt::SizeBDiagCursor] =
444 new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7);
445 break;
446
447 case Qt::SizeFDiagCursor:
448 systemCursorTable[Qt::SizeFDiagCursor] =
449 new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7);
450 break;
451
452 case Qt::BlankCursor:
453 systemCursorTable[Qt::BlankCursor] =
454 new QPlatformCursorImage(nullptr, nullptr, 0, 0, 0, 0);
455 break;
456
457 // 20x20 cursors
458 case Qt::ForbiddenCursor:
459 systemCursorTable[Qt::ForbiddenCursor] =
460 new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10);
461 break;
462
463 // 32x32 cursors
464 case Qt::WaitCursor:
465 systemCursorTable[Qt::WaitCursor] =
466 new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15);
467 break;
468
469 case Qt::SplitVCursor:
470 systemCursorTable[Qt::SplitVCursor] =
471 new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15);
472 break;
473
474 case Qt::SplitHCursor:
475 systemCursorTable[Qt::SplitHCursor] =
476 new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15);
477 break;
478
479 case Qt::SizeAllCursor:
480 systemCursorTable[Qt::SizeAllCursor] =
481 new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15);
482 break;
483
484 case Qt::PointingHandCursor:
485 systemCursorTable[Qt::PointingHandCursor] =
486 new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0);
487 break;
488
489 case Qt::WhatsThisCursor:
490 systemCursorTable[Qt::WhatsThisCursor] =
491 new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0);
492 break;
493 case Qt::BusyCursor:
494 systemCursorTable[Qt::BusyCursor] =
495 new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0);
496 break;
497
498 case Qt::OpenHandCursor:
499 systemCursorTable[Qt::OpenHandCursor] =
500 new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8);
501 break;
502 case Qt::ClosedHandCursor:
503 systemCursorTable[Qt::ClosedHandCursor] =
504 new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8);
505 break;
506 default:
507 qWarning("Unknown system cursor %d", id);
508 }
509}
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
522void QPlatformCursorImage::set(Qt::CursorShape id)
523{
524 QPlatformCursorImage *cursor = nullptr;
525 if (unsigned(id) <= unsigned(Qt::LastCursor)) {
526 if (!systemCursorTable[id])
527 createSystemCursor(id);
528 cursor = systemCursorTable[id];
529 }
530
531 if (cursor == nullptr) {
532 if (!systemCursorTable[Qt::ArrowCursor])
533 createSystemCursor(Qt::ArrowCursor);
534 cursor = systemCursorTable[Qt::ArrowCursor];
535 }
536 cursorImage = cursor->cursorImage;
537 hot = cursor->hot;
538}
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
545void QPlatformCursorImage::set(const QImage &image, int hx, int hy)
546{
547 hot.setX(hx);
548 hot.setY(hy);
549 cursorImage = image;
550}
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*/
567void QPlatformCursorImage::set(const uchar *data, const uchar *mask,
568 int width, int height, int hx, int hy)
569{
570 hot.setX(hx);
571 hot.setY(hy);
572
573 cursorImage = QImage(width,height, QImage::Format_Indexed8);
574
575 if (!width || !height || !data || !mask || cursorImage.isNull())
576 return;
577
578 cursorImage.setColorCount(3);
579 cursorImage.setColor(0, 0xff000000);
580 cursorImage.setColor(1, 0xffffffff);
581 cursorImage.setColor(2, 0x00000000);
582
583 int bytesPerLine = (width + 7) / 8;
584 int p = 0;
585 int d, m;
586
587 int x = -1;
588
589 uchar *cursor_data = cursorImage.bits();
590 qsizetype bpl = cursorImage.bytesPerLine();
591 for (int i = 0; i < height; i++)
592 {
593 for (int j = 0; j < bytesPerLine; j++, data++, mask++)
594 {
595 for (int b = 0; b < 8 && j*8+b < width; b++)
596 {
597 d = *data & (1 << b);
598 m = *mask & (1 << b);
599 if (d && m) p = 0;
600 else if (!d && m) p = 1;
601 else p = 2;
602 cursor_data[j*8+b] = p;
603
604 // calc region
605 if (x < 0 && m)
606 x = j*8+b;
607 else if (x >= 0 && !m) {
608 x = -1;
609 }
610 }
611 }
612 if (x >= 0) {
613 x = -1;
614 }
615 cursor_data += bpl;
616 }
617
618}
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*/
656void QPlatformCursor::setOverrideCursor(const QCursor &)
657{
658}
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*/
667void QPlatformCursor::clearOverrideCursor()
668{
669}
670#endif // QT_NO_CURSOR
671
672QT_END_NAMESPACE
static const uchar busy_bits[]
static const uchar phandm_bits[]
static const uchar forbidden_bits[]
static const uchar busym_bits[]
static const uchar mcur_ver_bits[]
static const uchar mcur_fdiag_bits[]
static const uchar hsplit_bits[]
static const uchar closedhandm_bits[]
static const uchar cur_bdiag_bits[]
static const uchar size_all_mask_bits[]
static const uchar cur_arrow_bits[]
static const uchar wait_mask_bits[]
static const uchar whatsthis_bits[]
static const uchar openhand_bits[]
static const unsigned char cur_up_arrow_bits[]
static const uchar openhandm_bits[]
static const uchar cur_ibeam_bits[]
static const uchar cur_fdiag_bits[]
static bool systemCursorTableInit
static const unsigned char cur_cross_bits[]
static const uchar hsplitm_bits[]
static const unsigned char mcur_up_arrow_bits[]
static const uchar forbiddenm_bits[]
static const uchar mcur_arrow_bits[]
static const uchar mcur_bdiag_bits[]
static const uchar wait_data_bits[]
static const uchar vsplit_bits[]
static const uchar mcur_ibeam_bits[]
static const uchar cur_hor_bits[]
static const uchar vsplitm_bits[]
static const uchar phand_bits[]
static QPlatformCursorImage * systemCursorTable[Qt::LastCursor+1]
static const uchar closedhand_bits[]
static const uchar mcur_hor_bits[]
static const uchar cur_ver_bits[]
static const uchar whatsthism_bits[]
static const uchar size_all_data_bits[]
static const unsigned char mcur_cross_bits[]