1 | /****************************************************************************
|
---|
2 | **
|
---|
3 | ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
---|
4 | ** All rights reserved.
|
---|
5 | ** Contact: Nokia Corporation (qt-info@nokia.com)
|
---|
6 | **
|
---|
7 | ** This file is part of the QtGui module of the Qt Toolkit.
|
---|
8 | **
|
---|
9 | ** $QT_BEGIN_LICENSE:LGPL$
|
---|
10 | ** Commercial Usage
|
---|
11 | ** Licensees holding valid Qt Commercial licenses may use this file in
|
---|
12 | ** accordance with the Qt Commercial License Agreement provided with the
|
---|
13 | ** Software or, alternatively, in accordance with the terms contained in
|
---|
14 | ** a written agreement between you and Nokia.
|
---|
15 | **
|
---|
16 | ** GNU Lesser General Public License Usage
|
---|
17 | ** Alternatively, this file may be used under the terms of the GNU Lesser
|
---|
18 | ** General Public License version 2.1 as published by the Free Software
|
---|
19 | ** Foundation and appearing in the file LICENSE.LGPL included in the
|
---|
20 | ** packaging of this file. Please review the following information to
|
---|
21 | ** ensure the GNU Lesser General Public License version 2.1 requirements
|
---|
22 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
---|
23 | **
|
---|
24 | ** In addition, as a special exception, Nokia gives you certain additional
|
---|
25 | ** rights. These rights are described in the Nokia Qt LGPL Exception
|
---|
26 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
---|
27 | **
|
---|
28 | ** GNU General Public License Usage
|
---|
29 | ** Alternatively, this file may be used under the terms of the GNU
|
---|
30 | ** General Public License version 3.0 as published by the Free Software
|
---|
31 | ** Foundation and appearing in the file LICENSE.GPL included in the
|
---|
32 | ** packaging of this file. Please review the following information to
|
---|
33 | ** ensure the GNU General Public License version 3.0 requirements will be
|
---|
34 | ** met: http://www.gnu.org/copyleft/gpl.html.
|
---|
35 | **
|
---|
36 | ** If you have questions regarding the use of this file, please contact
|
---|
37 | ** Nokia at qt-info@nokia.com.
|
---|
38 | ** $QT_END_LICENSE$
|
---|
39 | **
|
---|
40 | ****************************************************************************/
|
---|
41 |
|
---|
42 | #include "qcursor.h"
|
---|
43 | #include "qbitmap.h"
|
---|
44 | #include "qscreen_qws.h"
|
---|
45 | #include "qapplication.h"
|
---|
46 | #include "qwindowsystem_qws.h"
|
---|
47 | #include "qwindowsystem_p.h"
|
---|
48 | #include "qwscursor_qws.h"
|
---|
49 |
|
---|
50 | QT_BEGIN_NAMESPACE
|
---|
51 |
|
---|
52 | #ifndef QT_NO_QWS_CURSOR
|
---|
53 | static QWSCursor *systemCursorTable[Qt::LastCursor+1];
|
---|
54 | static bool systemCursorTableInit = false;
|
---|
55 |
|
---|
56 | // 16 x 16
|
---|
57 | static const uchar cur_arrow_bits[] = {
|
---|
58 | 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08,
|
---|
59 | 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22,
|
---|
60 | 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 };
|
---|
61 | static const uchar mcur_arrow_bits[] = {
|
---|
62 | 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f,
|
---|
63 | 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e,
|
---|
64 | 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 };
|
---|
65 |
|
---|
66 | static const unsigned char cur_up_arrow_bits[] = {
|
---|
67 | 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04,
|
---|
68 | 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
|
---|
69 | 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01};
|
---|
70 | static const unsigned char mcur_up_arrow_bits[] = {
|
---|
71 | 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07,
|
---|
72 | 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
|
---|
73 | 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
|
---|
74 |
|
---|
75 | static const unsigned char cur_cross_bits[] = {
|
---|
76 | 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
|
---|
77 | 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
|
---|
78 | 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00};
|
---|
79 | static const unsigned char mcur_cross_bits[] = {
|
---|
80 | 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
|
---|
81 | 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
|
---|
82 | 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00};
|
---|
83 |
|
---|
84 | static const uchar cur_ibeam_bits[] = {
|
---|
85 | 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
|
---|
86 | 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
|
---|
87 | 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 };
|
---|
88 | static const uchar mcur_ibeam_bits[] = {
|
---|
89 | 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
|
---|
90 | 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
|
---|
91 | 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 };
|
---|
92 |
|
---|
93 | static const uchar cur_ver_bits[] = {
|
---|
94 | 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
|
---|
95 | 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f,
|
---|
96 | 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 };
|
---|
97 | static const uchar mcur_ver_bits[] = {
|
---|
98 | 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f,
|
---|
99 | 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f,
|
---|
100 | 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 };
|
---|
101 |
|
---|
102 | static const uchar cur_hor_bits[] = {
|
---|
103 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18,
|
---|
104 | 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08,
|
---|
105 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
106 | static const uchar mcur_hor_bits[] = {
|
---|
107 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c,
|
---|
108 | 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c,
|
---|
109 | 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 };
|
---|
110 | static const uchar cur_bdiag_bits[] = {
|
---|
111 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e,
|
---|
112 | 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00,
|
---|
113 | 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
114 | static const uchar mcur_bdiag_bits[] = {
|
---|
115 | 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f,
|
---|
116 | 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01,
|
---|
117 | 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 };
|
---|
118 | static const uchar cur_fdiag_bits[] = {
|
---|
119 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00,
|
---|
120 | 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c,
|
---|
121 | 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 };
|
---|
122 | static const uchar mcur_fdiag_bits[] = {
|
---|
123 | 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00,
|
---|
124 | 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e,
|
---|
125 | 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 };
|
---|
126 | static const uchar cur_blank_bits[] = {
|
---|
127 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
128 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
129 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
130 |
|
---|
131 | // 20 x 20
|
---|
132 | static const uchar forbidden_bits[] = {
|
---|
133 | 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01,
|
---|
134 | 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06,
|
---|
135 | 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03,
|
---|
136 | 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 };
|
---|
137 |
|
---|
138 | static const uchar forbiddenm_bits[] = {
|
---|
139 | 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03,
|
---|
140 | 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f,
|
---|
141 | 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07,
|
---|
142 | 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00};
|
---|
143 |
|
---|
144 | // 32 x 32
|
---|
145 | static const uchar wait_data_bits[] = {
|
---|
146 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
147 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
|
---|
148 | 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00,
|
---|
149 | 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00,
|
---|
150 | 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00,
|
---|
151 | 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00,
|
---|
152 | 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00,
|
---|
153 | 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00,
|
---|
154 | 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
155 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
156 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
157 | static const uchar wait_mask_bits[] = {
|
---|
158 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
159 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
|
---|
160 | 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
|
---|
161 | 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
|
---|
162 | 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00,
|
---|
163 | 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00,
|
---|
164 | 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
|
---|
165 | 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00,
|
---|
166 | 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
167 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
168 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
169 |
|
---|
170 | static const uchar hsplit_bits[] = {
|
---|
171 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
172 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
173 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
|
---|
174 | 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
|
---|
175 | 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03,
|
---|
176 | 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00,
|
---|
177 | 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
|
---|
178 | 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
179 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
180 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
181 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
182 | static const uchar hsplitm_bits[] = {
|
---|
183 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
184 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
185 | 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
---|
186 | 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00,
|
---|
187 | 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07,
|
---|
188 | 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00,
|
---|
189 | 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
|
---|
190 | 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
191 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
192 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
193 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
194 | static const uchar vsplit_bits[] = {
|
---|
195 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
196 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
197 | 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
|
---|
198 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
199 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
|
---|
200 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
|
---|
201 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
202 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00,
|
---|
203 | 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
204 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
205 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
206 | static const uchar vsplitm_bits[] = {
|
---|
207 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
208 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
209 | 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
|
---|
210 | 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
|
---|
211 | 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
|
---|
212 | 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
|
---|
213 | 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
|
---|
214 | 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00,
|
---|
215 | 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
216 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
217 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
218 | static const uchar phand_bits[] = {
|
---|
219 | 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
|
---|
220 | 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00,
|
---|
221 | 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00,
|
---|
222 | 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00,
|
---|
223 | 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
|
---|
224 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
225 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
226 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
227 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
228 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
229 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
230 | static const uchar phandm_bits[] = {
|
---|
231 | 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00,
|
---|
232 | 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00,
|
---|
233 | 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
|
---|
234 | 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00,
|
---|
235 | 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
|
---|
236 | 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
237 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
241 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
242 |
|
---|
243 | static const uchar size_all_data_bits[] = {
|
---|
244 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
245 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
246 | 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
|
---|
247 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
248 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00,
|
---|
249 | 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00,
|
---|
250 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
251 | 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00,
|
---|
252 | 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
253 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
254 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
255 | static const uchar size_all_mask_bits[] = {
|
---|
256 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
257 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
|
---|
258 | 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
|
---|
259 | 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00,
|
---|
260 | 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01,
|
---|
261 | 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00,
|
---|
262 | 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00,
|
---|
263 | 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00,
|
---|
264 | 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
265 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
266 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
---|
267 |
|
---|
268 | static const uchar whatsthis_bits[] = {
|
---|
269 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00,
|
---|
270 | 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00,
|
---|
271 | 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00,
|
---|
272 | 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00,
|
---|
273 | 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00,
|
---|
274 | 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00,
|
---|
275 | 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
276 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
277 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
278 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
279 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
|
---|
280 | static const uchar whatsthism_bits[] = {
|
---|
281 | 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00,
|
---|
282 | 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00,
|
---|
283 | 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00,
|
---|
284 | 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00,
|
---|
285 | 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00,
|
---|
286 | 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00,
|
---|
287 | 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
288 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
289 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
290 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
291 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
|
---|
292 |
|
---|
293 | static const uchar busy_bits[] = {
|
---|
294 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
|
---|
295 | 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
---|
296 | 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00,
|
---|
297 | 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00,
|
---|
298 | 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00,
|
---|
299 | 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00,
|
---|
300 | 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00,
|
---|
301 | 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
302 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
303 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
304 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
---|
305 | static const uchar busym_bits[] = {
|
---|
306 | 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
|
---|
307 | 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
|
---|
308 | 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00,
|
---|
309 | 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00,
|
---|
310 | 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00,
|
---|
311 | 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00,
|
---|
312 | 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00,
|
---|
313 | 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
314 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
315 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
---|
316 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
---|
317 |
|
---|
318 | // 16 x 16
|
---|
319 | static const uchar openhand_bits[] = {
|
---|
320 | 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92,
|
---|
321 | 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20,
|
---|
322 | 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00};
|
---|
323 | static const uchar openhandm_bits[] = {
|
---|
324 | 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff,
|
---|
325 | 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f,
|
---|
326 | 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00};
|
---|
327 | static const uchar closedhand_bits[] = {
|
---|
328 | 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50,
|
---|
329 | 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10,
|
---|
330 | 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00};
|
---|
331 | static const uchar closedhandm_bits[] = {
|
---|
332 | 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f,
|
---|
333 | 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f,
|
---|
334 | 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00};
|
---|
335 |
|
---|
336 | #endif
|
---|
337 |
|
---|
338 | void QWSServerPrivate::initializeCursor()
|
---|
339 | {
|
---|
340 | Q_Q(QWSServer);
|
---|
341 | // setup system cursors
|
---|
342 | #ifndef QT_NO_QWS_CURSOR
|
---|
343 | // qt_screen->initCursor(sharedram + ramlen,true);
|
---|
344 |
|
---|
345 | // default cursor
|
---|
346 | cursor = 0;
|
---|
347 | setCursor(QWSCursor::systemCursor(Qt::ArrowCursor));
|
---|
348 | #endif
|
---|
349 | q->sendMouseEvent(QPoint(swidth/2, sheight/2), 0);
|
---|
350 | }
|
---|
351 |
|
---|
352 | void QWSServerPrivate::setCursor(QWSCursor *curs)
|
---|
353 | {
|
---|
354 | #ifdef QT_NO_QWS_CURSOR
|
---|
355 | Q_UNUSED(curs);
|
---|
356 | #else
|
---|
357 | if (cursor == curs)
|
---|
358 | return;
|
---|
359 |
|
---|
360 | cursor = curs;
|
---|
361 |
|
---|
362 | if (!haveviscurs || !curs)
|
---|
363 | curs = QWSCursor::systemCursor(Qt::BlankCursor);
|
---|
364 |
|
---|
365 | if (qt_screencursor) {
|
---|
366 | qt_screencursor->set(curs->image(),
|
---|
367 | curs->hotSpot().x(),
|
---|
368 | curs->hotSpot().y());
|
---|
369 | }
|
---|
370 | #endif
|
---|
371 | }
|
---|
372 |
|
---|
373 | #ifndef QT_NO_QWS_CURSOR
|
---|
374 | static void cleanupSystemCursorTable()
|
---|
375 | {
|
---|
376 | for (int i = 0; i <= Qt::LastCursor; i++)
|
---|
377 | if (systemCursorTable[i]) {
|
---|
378 | delete systemCursorTable[i];
|
---|
379 | systemCursorTable[i] = 0;
|
---|
380 | }
|
---|
381 | }
|
---|
382 | #endif
|
---|
383 |
|
---|
384 | void QWSCursor::createSystemCursor(int id)
|
---|
385 | {
|
---|
386 | #ifdef QT_NO_QWS_CURSOR
|
---|
387 | Q_UNUSED(id);
|
---|
388 | #else
|
---|
389 | if (!systemCursorTableInit) {
|
---|
390 | for (int i = 0; i <= Qt::LastCursor; i++)
|
---|
391 | systemCursorTable[i] = 0;
|
---|
392 | qAddPostRoutine(cleanupSystemCursorTable);
|
---|
393 | systemCursorTableInit = true;
|
---|
394 | }
|
---|
395 | switch (id) {
|
---|
396 | // 16x16 cursors
|
---|
397 | case Qt::ArrowCursor:
|
---|
398 | systemCursorTable[Qt::ArrowCursor] =
|
---|
399 | new QWSCursor(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0);
|
---|
400 | break;
|
---|
401 |
|
---|
402 | case Qt::UpArrowCursor:
|
---|
403 | systemCursorTable[Qt::UpArrowCursor] =
|
---|
404 | new QWSCursor(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0);
|
---|
405 | break;
|
---|
406 |
|
---|
407 | case Qt::CrossCursor:
|
---|
408 | systemCursorTable[Qt::CrossCursor] =
|
---|
409 | new QWSCursor(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7);
|
---|
410 | break;
|
---|
411 |
|
---|
412 | case Qt::IBeamCursor:
|
---|
413 | systemCursorTable[Qt::IBeamCursor] =
|
---|
414 | new QWSCursor(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7);
|
---|
415 | break;
|
---|
416 |
|
---|
417 | case Qt::SizeVerCursor:
|
---|
418 | systemCursorTable[Qt::SizeVerCursor] =
|
---|
419 | new QWSCursor(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7);
|
---|
420 | break;
|
---|
421 |
|
---|
422 | case Qt::SizeHorCursor:
|
---|
423 | systemCursorTable[Qt::SizeHorCursor] =
|
---|
424 | new QWSCursor(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7);
|
---|
425 | break;
|
---|
426 |
|
---|
427 | case Qt::SizeBDiagCursor:
|
---|
428 | systemCursorTable[Qt::SizeBDiagCursor] =
|
---|
429 | new QWSCursor(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7);
|
---|
430 | break;
|
---|
431 |
|
---|
432 | case Qt::SizeFDiagCursor:
|
---|
433 | systemCursorTable[Qt::SizeFDiagCursor] =
|
---|
434 | new QWSCursor(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7);
|
---|
435 | break;
|
---|
436 |
|
---|
437 | case Qt::BlankCursor:
|
---|
438 | systemCursorTable[Qt::BlankCursor] =
|
---|
439 | new QWSCursor(0, 0, 0, 0, 0, 0);
|
---|
440 | break;
|
---|
441 |
|
---|
442 | // 20x20 cursors
|
---|
443 | case Qt::ForbiddenCursor:
|
---|
444 | systemCursorTable[Qt::ForbiddenCursor] =
|
---|
445 | new QWSCursor(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10);
|
---|
446 | break;
|
---|
447 |
|
---|
448 | // 32x32 cursors
|
---|
449 | case Qt::WaitCursor:
|
---|
450 | systemCursorTable[Qt::WaitCursor] =
|
---|
451 | new QWSCursor(wait_data_bits, wait_mask_bits, 32, 32, 15, 15);
|
---|
452 | break;
|
---|
453 |
|
---|
454 | case Qt::SplitVCursor:
|
---|
455 | systemCursorTable[Qt::SplitVCursor] =
|
---|
456 | new QWSCursor(vsplit_bits, vsplitm_bits, 32, 32, 15, 15);
|
---|
457 | break;
|
---|
458 |
|
---|
459 | case Qt::SplitHCursor:
|
---|
460 | systemCursorTable[Qt::SplitHCursor] =
|
---|
461 | new QWSCursor(hsplit_bits, hsplitm_bits, 32, 32, 15, 15);
|
---|
462 | break;
|
---|
463 |
|
---|
464 | case Qt::SizeAllCursor:
|
---|
465 | systemCursorTable[Qt::SizeAllCursor] =
|
---|
466 | new QWSCursor(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15);
|
---|
467 | break;
|
---|
468 |
|
---|
469 | case Qt::PointingHandCursor:
|
---|
470 | systemCursorTable[Qt::PointingHandCursor] =
|
---|
471 | new QWSCursor(phand_bits, phandm_bits, 32, 32, 0, 0);
|
---|
472 | break;
|
---|
473 |
|
---|
474 | case Qt::WhatsThisCursor:
|
---|
475 | systemCursorTable[Qt::WhatsThisCursor] =
|
---|
476 | new QWSCursor(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0);
|
---|
477 | break;
|
---|
478 | case Qt::BusyCursor:
|
---|
479 | systemCursorTable[Qt::BusyCursor] =
|
---|
480 | new QWSCursor(busy_bits, busym_bits, 32, 32, 0, 0);
|
---|
481 | break;
|
---|
482 |
|
---|
483 | case Qt::OpenHandCursor:
|
---|
484 | systemCursorTable[Qt::OpenHandCursor] =
|
---|
485 | new QWSCursor(openhand_bits, openhandm_bits, 16, 16, 8, 8);
|
---|
486 | break;
|
---|
487 | case Qt::ClosedHandCursor:
|
---|
488 | systemCursorTable[Qt::ClosedHandCursor] =
|
---|
489 | new QWSCursor(closedhand_bits, closedhandm_bits, 16, 16, 8, 8);
|
---|
490 | break;
|
---|
491 | default:
|
---|
492 | qWarning("Unknown system cursor %d", id);
|
---|
493 | }
|
---|
494 | #endif
|
---|
495 | }
|
---|
496 |
|
---|
497 | QWSCursor *QWSCursor::systemCursor(int id)
|
---|
498 | {
|
---|
499 | QWSCursor *cursor = 0;
|
---|
500 | #ifdef QT_NO_QWS_CURSOR
|
---|
501 | Q_UNUSED(id);
|
---|
502 | #else
|
---|
503 | if (id >= 0 && id <= Qt::LastCursor) {
|
---|
504 | if (!systemCursorTable[id])
|
---|
505 | createSystemCursor(id);
|
---|
506 | cursor = systemCursorTable[id];
|
---|
507 | }
|
---|
508 |
|
---|
509 | if (cursor == 0) {
|
---|
510 | if (!systemCursorTable[Qt::ArrowCursor])
|
---|
511 | createSystemCursor(Qt::ArrowCursor);
|
---|
512 | cursor = systemCursorTable[Qt::ArrowCursor];
|
---|
513 | }
|
---|
514 | #endif
|
---|
515 | return cursor;
|
---|
516 | }
|
---|
517 |
|
---|
518 | void QWSCursor::set(const uchar *data, const uchar *mask,
|
---|
519 | int width, int height, int hx, int hy)
|
---|
520 | {
|
---|
521 | #ifdef QT_NO_QWS_CURSOR
|
---|
522 | Q_UNUSED(data);
|
---|
523 | Q_UNUSED(mask);
|
---|
524 | Q_UNUSED(width);
|
---|
525 | Q_UNUSED(height);
|
---|
526 | Q_UNUSED(hx);
|
---|
527 | Q_UNUSED(hy);
|
---|
528 | #else
|
---|
529 | hot.setX(hx);
|
---|
530 | hot.setY(hy);
|
---|
531 |
|
---|
532 | cursor = QImage(width,height, QImage::Format_Indexed8);
|
---|
533 |
|
---|
534 | if (!width || !height || !data || !mask || cursor.isNull())
|
---|
535 | return;
|
---|
536 |
|
---|
537 | cursor.setColorCount(3);
|
---|
538 | cursor.setColor(0, 0xff000000);
|
---|
539 | cursor.setColor(1, 0xffffffff);
|
---|
540 | cursor.setColor(2, 0x00000000);
|
---|
541 |
|
---|
542 | int bytesPerLine = (width + 7) / 8;
|
---|
543 | int p = 0;
|
---|
544 | int d, m;
|
---|
545 |
|
---|
546 | int x = -1, w = 0;
|
---|
547 |
|
---|
548 | uchar *cursor_data = cursor.bits();
|
---|
549 | int bpl = cursor.bytesPerLine();
|
---|
550 | for (int i = 0; i < height; i++)
|
---|
551 | {
|
---|
552 | for (int j = 0; j < bytesPerLine; j++, data++, mask++)
|
---|
553 | {
|
---|
554 | for (int b = 0; b < 8 && j*8+b < width; b++)
|
---|
555 | {
|
---|
556 | d = *data & (1 << b);
|
---|
557 | m = *mask & (1 << b);
|
---|
558 | if (d && m) p = 0;
|
---|
559 | else if (!d && m) p = 1;
|
---|
560 | else p = 2;
|
---|
561 | cursor_data[j*8+b] = p;
|
---|
562 |
|
---|
563 | // calc region
|
---|
564 | if (x < 0 && m)
|
---|
565 | x = j*8+b;
|
---|
566 | else if (x >= 0 && !m) {
|
---|
567 | x = -1;
|
---|
568 | w = 0;
|
---|
569 | }
|
---|
570 | if (m)
|
---|
571 | w++;
|
---|
572 | }
|
---|
573 | }
|
---|
574 | if (x >= 0) {
|
---|
575 | x = -1;
|
---|
576 | w = 0;
|
---|
577 | }
|
---|
578 | cursor_data += bpl;
|
---|
579 | }
|
---|
580 |
|
---|
581 | if (qt_screencursor && qt_screencursor->supportsAlphaCursor())
|
---|
582 | createDropShadow(5, 2);
|
---|
583 | #endif
|
---|
584 | }
|
---|
585 |
|
---|
586 | // now we're really silly
|
---|
587 | void QWSCursor::createDropShadow(int dropx, int dropy)
|
---|
588 | {
|
---|
589 | //####
|
---|
590 | #if 1 || defined(QT_NO_QWS_CURSOR) || defined(QT_NO_QWS_ALHPA_CURSOR)
|
---|
591 | Q_UNUSED(dropx);
|
---|
592 | Q_UNUSED(dropy);
|
---|
593 | #else
|
---|
594 | if (cursor.width() + dropx > 64 || cursor.height() + dropy > 64)
|
---|
595 | return;
|
---|
596 |
|
---|
597 | if (!cursor.hasAlphaBuffer()) {
|
---|
598 | cursor.setAlphaBuffer(true);
|
---|
599 |
|
---|
600 | const int nblur=4;
|
---|
601 | const int darkness=140;
|
---|
602 |
|
---|
603 | QImage drop(cursor.width()+dropx+nblur, cursor.height()+dropy+nblur, 8, 18);
|
---|
604 | drop.setColor(0, 0xff000000); // bg (black)
|
---|
605 | drop.setColor(1, 0xffffffff); // fg (white)
|
---|
606 | for (int i=0; i<16; i++) {
|
---|
607 | drop.setColor(2+i, (darkness*i/16)<<24);
|
---|
608 | }
|
---|
609 | drop.fill(2); // all trans
|
---|
610 | QImage drop2 = drop.copy();
|
---|
611 |
|
---|
612 | int cp;
|
---|
613 |
|
---|
614 | // made solid shadow
|
---|
615 | for (int row = 0; row < cursor.height(); row++) {
|
---|
616 | for (int col = 0; col < cursor.width(); col++) {
|
---|
617 | cp = cursor.pixelIndex(col, row);
|
---|
618 | if (cp != 2)
|
---|
619 | drop.setPixel(col+dropx, row+dropy, 17);
|
---|
620 | }
|
---|
621 | }
|
---|
622 |
|
---|
623 | // blur shadow
|
---|
624 | for (int blur=0; blur<nblur; blur++) {
|
---|
625 | QImage& to((blur&1)?drop:drop2);
|
---|
626 | QImage& from((blur&1)?drop2:drop);
|
---|
627 | for (int row = 1; row < drop.height()-1; row++) {
|
---|
628 | for (int col = 1; col < drop.width()-1; col++) {
|
---|
629 | int t=0;
|
---|
630 | for (int dx=-1; dx<=1; dx++) {
|
---|
631 | for (int dy=-1; dy<=1; dy++) {
|
---|
632 | t += from.pixelIndex(col+dx,row+dy)-2;
|
---|
633 | }
|
---|
634 | }
|
---|
635 | to.setPixel(col,row,2+t/9);
|
---|
636 | }
|
---|
637 | }
|
---|
638 | }
|
---|
639 |
|
---|
640 | // copy cursor
|
---|
641 | for (int row = 0; row < cursor.height(); row++) {
|
---|
642 | for (int col = 0; col < cursor.width(); col++) {
|
---|
643 | cp = cursor.pixelIndex(col, row);
|
---|
644 | if (cp != 2)
|
---|
645 | drop.setPixel(col, row, cp);
|
---|
646 | }
|
---|
647 | }
|
---|
648 |
|
---|
649 | cursor = drop;
|
---|
650 | }
|
---|
651 | #endif
|
---|
652 | }
|
---|
653 |
|
---|
654 | QT_END_NAMESPACE
|
---|