|
1 /**************************************************************************** |
|
2 ** |
|
3 ** Copyright (C) 2010 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 ** No Commercial Usage |
|
11 ** This file contains pre-release code and may not be distributed. |
|
12 ** You may use this file in accordance with the terms and conditions |
|
13 ** contained in the Technology Preview License Agreement accompanying |
|
14 ** this package. |
|
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 ** If you have questions regarding the use of this file, please contact |
|
29 ** Nokia at qt-info@nokia.com. |
|
30 ** |
|
31 ** |
|
32 ** |
|
33 ** |
|
34 ** |
|
35 ** |
|
36 ** |
|
37 ** |
|
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 |