source: trunk/src/gui/styles/qwindowsmobilestyle.cpp@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 232.9 KB
Line 
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 "qwindowsmobilestyle.h"
43#include "qwindowsmobilestyle_p.h"
44
45#if !defined(QT_NO_STYLE_WINDOWSMOBILE) || defined(QT_PLUGIN)
46
47#include "qpainterpath.h"
48#include "qapplication.h"
49#include "qdesktopwidget.h"
50#include "qwidget.h"
51#include "qdockwidget.h"
52#include "qframe.h"
53#include "qmenu.h"
54#include "qpaintengine.h"
55#include "qpainter.h"
56#include "qgroupbox.h"
57#include "qstyleoption.h"
58#include "qlistview.h"
59#include "qdrawutil.h"
60#include "qtoolbar.h"
61#include "qabstractscrollarea.h"
62#include "qabstractbutton.h"
63#include "qcombobox.h"
64#include "qabstractscrollarea.h"
65#include "qframe.h"
66#include "qscrollbar.h"
67#include "qabstractitemview.h"
68#include "qmenubar.h"
69#include "qtoolbutton.h"
70#include "qtextedit.h"
71#include "qdialog.h"
72#include "qdebug.h"
73#include "qtabwidget.h"
74
75#ifdef Q_WS_WINCE
76#include "qt_windows.h"
77#include "qguifunctions_wince.h"
78extern bool qt_wince_is_high_dpi(); //defined in qguifunctions_wince.cpp
79extern bool qt_wince_is_smartphone(); //defined in qguifunctions_wince.cpp
80extern bool qt_wince_is_windows_mobile_65(); //defined in qguifunctions_wince.cpp
81#endif // Q_WS_WINCE
82
83#include "qstylehelper_p.h"
84
85QT_BEGIN_NAMESPACE
86
87static const int windowsItemFrame = 1; // menu item frame width
88
89static const int windowsMobileitemViewCheckBoxSize = 13;
90static const int windowsMobileFrameGroupBoxOffset = 9;
91static const int windowsMobileIndicatorSize = 14;
92static const int windowsMobileExclusiveIndicatorSize = 14;
93static const int windowsMobileSliderThickness = 6;
94static const int windowsMobileIconSize = 16;
95static const int PE_IndicatorArrowUpBig = 0xf000101;
96static const int PE_IndicatorArrowDownBig = 0xf000102;
97static const int PE_IndicatorArrowLeftBig = 0xf000103;
98static const int PE_IndicatorArrowRightBig = 0xf000104;
99
100/* XPM */
101static const char *const radiobutton_xpm[] = {
102 "30 30 2 1",
103 " c None",
104 ". c #000000",
105 " ........ ",
106 " .............. ",
107 " .... .... ",
108 " .... .... ",
109 " ... ... ",
110 " ... ... ",
111 " .. .. ",
112 " .. .. ",
113 " ... ... ",
114 " .. .. ",
115 " .. .. ",
116 ".. ..",
117 ".. ..",
118 ".. ..",
119 ".. ..",
120 ".. ..",
121 ".. ..",
122 ".. ..",
123 ".. ..",
124 " .. .. ",
125 " .. .. ",
126 " ... ... ",
127 " .. .. ",
128 " .. .. ",
129 " ... ... ",
130 " ... ... ",
131 " .... .... ",
132 " .... .... ",
133 " .............. ",
134 " ........ "};
135
136/* XPM */
137static const char * const radiobutton_low_xpm[] = {
138 "15 15 2 1",
139 " c None",
140 ". c #000000",
141 " ..... ",
142 " .. .. ",
143 " . . ",
144 " . . ",
145 " . . ",
146 ". .",
147 ". .",
148 ". .",
149 ". .",
150 ". .",
151 " . . ",
152 " . . ",
153 " . . ",
154 " .. .. ",
155 " ..... "};
156
157/* XPM */
158 static const char * const arrowleft_big_xpm[] = {
159 "9 17 2 1",
160 " c None",
161 ". c #000000",
162 " .",
163 " ..",
164 " ...",
165 " ....",
166 " .....",
167 " ......",
168 " .......",
169 " ........",
170 ".........",
171 " ........",
172 " .......",
173 " ......",
174 " .....",
175 " ....",
176 " ...",
177 " ..",
178 " ."};
179
180/* XPM */
181 static const char * const arrowleft_xpm[] = {
182 "8 15 2 1",
183 " c None",
184 ". c #000000",
185 " .",
186 " ..",
187 " ...",
188 " ....",
189 " .....",
190 " ......",
191 " .......",
192 "........",
193 " .......",
194 " ......",
195 " .....",
196 " ....",
197 " ...",
198 " ..",
199 " ."};
200
201
202
203/* XPM */
204static const char *const horlines_xpm[] = {
205 "2 2 2 1",
206 " c None",
207 ". c #000000",
208 " ",
209 ".."};
210
211/* XPM */
212static const char *const vertlines_xpm[] = {
213 "2 2 2 1",
214 " c None",
215 ". c #000000",
216 ". ",
217 ". "};
218
219/* XPM */
220static const char *const radiochecked_xpm[] = {
221 "18 18 2 1",
222 " c None",
223 ". c #000000",
224 " ...... ",
225 " .......... ",
226 " .............. ",
227 " .............. ",
228 " ................ ",
229 " ................ ",
230 "..................",
231 "..................",
232 "..................",
233 "..................",
234 "..................",
235 "..................",
236 " ................ ",
237 " ................ ",
238 " .............. ",
239 " .............. ",
240 " .......... ",
241 " ...... "};
242
243/* XPM */
244static const char * const radiochecked_low_xpm[] = {
245 "9 9 2 1",
246 " c None",
247 ". c #000000",
248 " ... ",
249 " ....... ",
250 " ....... ",
251 ".........",
252 ".........",
253 ".........",
254 " ....... ",
255 " ....... ",
256 " ... "};
257
258static const char *const arrowdown_xpm[] = {
259 "15 8 2 1",
260 " c None",
261 ". c #000000",
262 "...............",
263 " ............. ",
264 " ........... ",
265 " ......... ",
266 " ....... ",
267 " ..... ",
268 " ... ",
269 " . "};
270
271
272static const char *const arrowdown_big_xpm[] = {
273 "17 9 2 1",
274 " c None",
275 ". c #000000",
276 ".................",
277 " ............... ",
278 " ............. ",
279 " ........... ",
280 " ......... ",
281 " ....... ",
282 " ..... ",
283 " ... ",
284 " . "};
285
286
287/* XPM */
288static const char *const checkedlight_xpm[] = {
289 "24 24 2 1",
290 " c None",
291 ". c #000000",
292 " ",
293 " ",
294 " ",
295 " ",
296 " ",
297 " . ",
298 " .. ",
299 " ... ",
300 " .... ",
301 " ..... ",
302 " ...... ",
303 " . ...... ",
304 " .. ...... ",
305 " ... ...... ",
306 " .... ...... ",
307 " .......... ",
308 " ......... ",
309 " ....... ",
310 " ..... ",
311 " ... ",
312 " . ",
313 " ",
314 " ",
315 " "};
316
317
318/* XPM */
319static const char *const checkedbold_xpm[] = {
320 "26 26 2 1",
321 " c None",
322 ". c #000000",
323 " ",
324 " ",
325 " ",
326 " ",
327 " ",
328 " ",
329 " .. ",
330 " ... ",
331 " .... ",
332 " ..... ",
333 " .. ...... ",
334 " ... ....... ",
335 " .... ....... ",
336 " ..... ....... ",
337 " ...... ....... ",
338 " .............. ",
339 " ............ ",
340 " .......... ",
341 " ........ ",
342 " ...... ",
343 " .... ",
344 " .. ",
345 " ",
346 " ",
347 " ",
348 " "};
349
350/* XPM */
351static const char * const checkedbold_low_xpm[] = {
352 "9 8 2 1",
353 " c None",
354 ". c #000000",
355 " .",
356 " ..",
357 ". ...",
358 ".. ... ",
359 "... ... ",
360 " ..... ",
361 " ... ",
362 " . "};
363
364/* XPM */
365static const char * const checkedlight_low_xpm[] = {
366 "8 8 2 1",
367 " c None",
368 ". c #000000",
369 " .",
370 " ..",
371 " ...",
372 ". ... ",
373 ".. ... ",
374 "..... ",
375 " ... ",
376 " . "};
377
378/* XPM */
379static const char * const highlightedradiobutton_xpm[] = {
380 "30 30 3 1",
381 " c None",
382 ". c #000000",
383 "+ c #0078CC",
384 " ........ ",
385 " .............. ",
386 " ....++++++++.... ",
387 " ....++++++++++++.... ",
388 " ...++++ ++++... ",
389 " ...+++ +++... ",
390 " ..++ ++.. ",
391 " ..++ ++.. ",
392 " ...++ ++... ",
393 " ..++ ++.. ",
394 " ..++ ++.. ",
395 "..++ ++..",
396 "..++ ++..",
397 "..++ ++..",
398 "..++ ++..",
399 "..++ ++..",
400 "..++ ++..",
401 "..++ ++..",
402 "..++ ++..",
403 " ..++ ++.. ",
404 " ..++ ++.. ",
405 " ...++ ++... ",
406 " ..++ ++.. ",
407 " ..++ ++.. ",
408 " ...+++ +++... ",
409 " ...++++ ++++... ",
410 " ....++++++++++++.... ",
411 " ....++++++++.... ",
412 " .............. ",
413 " ........ "};
414
415/* XPM */
416static const char * const highlightedradiobutton_low_xpm[] = {
417 "15 15 3 1",
418 " c None",
419 ". c #000000",
420 "+ c #3192D6",
421 " ..... ",
422 " ..+++++.. ",
423 " .++ ++. ",
424 " .+ +. ",
425 " .+ +. ",
426 ".+ +.",
427 ".+ +.",
428 ".+ +.",
429 ".+ +.",
430 ".+ +.",
431 " .+ +. ",
432 " .+ +. ",
433 " .++ ++. ",
434 " ..+++++.. ",
435 " ..... "};
436
437/* XPM */
438static const char * const cross_big_xpm[] = {
439"28 28 4 1",
440" c #09454A",
441". c #218C98",
442"+ c #47D8E5",
443"@ c #FDFFFC",
444" ",
445" ",
446" ++++++++++++++++++++++++ ",
447" ++++++++++++++++++++++++ ",
448" ++....................++ ",
449" ++....................++ ",
450" ++..@@@..........@@@..++ ",
451" ++..@@@@........@@@@..++ ",
452" ++..@@@@@......@@@@@..++ ",
453" ++...@@@@@....@@@@@...++ ",
454" ++....@@@@@..@@@@@....++ ",
455" ++.....@@@@@@@@@@.....++ ",
456" ++......@@@@@@@@......++ ",
457" ++.......@@@@@@.......++ ",
458" ++.......@@@@@@.......++ ",
459" ++......@@@@@@@@......++ ",
460" ++.....@@@@@@@@@@.....++ ",
461" ++....@@@@@..@@@@@....++ ",
462" ++...@@@@@....@@@@@...++ ",
463" ++..@@@@@......@@@@@..++ ",
464" ++..@@@@........@@@@..++ ",
465" ++..@@@..........@@@..++ ",
466" ++....................++ ",
467" ++....................++ ",
468" ++++++++++++++++++++++++ ",
469" ++++++++++++++++++++++++ ",
470" ",
471" "};
472
473/* XPM */
474static const char * const cross_small_xpm[] = {
475"14 14 4 1",
476" c #09454A",
477". c #218C98",
478"+ c #47D8E5",
479"@ c #FCFFFC",
480" ",
481" ++++++++++++ ",
482" +..........+ ",
483" +.@@....@@.+ ",
484" +.@@@..@@@.+ ",
485" +..@@@@@@..+ ",
486" +...@@@@...+ ",
487" +...@@@@...+ ",
488" +..@@@@@@..+ ",
489" +.@@@..@@@.+ ",
490" +.@@....@@.+ ",
491" +..........+ ",
492" ++++++++++++ ",
493" "};
494
495/* XPM */
496static const char * const max_big_xpm[] = {
497"28 28 4 1",
498" c #09454A",
499". c #218C98",
500"+ c #47D8E5",
501"@ c #FDFFFC",
502" ",
503" ",
504" ++++++++++++++++++++++++ ",
505" ++++++++++++++++++++++++ ",
506" ++....................++ ",
507" ++....................++ ",
508" ++....................++ ",
509" ++....................++ ",
510" ++..@@@@@@@@@@@@@@@@..++ ",
511" ++..@@@@@@@@@@@@@@@@..++ ",
512" ++..@@@@@@@@@@@@@@@@..++ ",
513" ++..@@@@@@@@@@@@@@@@..++ ",
514" ++..@@............@@..++ ",
515" ++..@@............@@..++ ",
516" ++..@@............@@..++ ",
517" ++..@@............@@..++ ",
518" ++..@@............@@..++ ",
519" ++..@@............@@..++ ",
520" ++..@@@@@@@@@@@@@@@@..++ ",
521" ++..@@@@@@@@@@@@@@@@..++ ",
522" ++....................++ ",
523" ++....................++ ",
524" ++....................++ ",
525" ++....................++ ",
526" ++++++++++++++++++++++++ ",
527" ++++++++++++++++++++++++ ",
528" ",
529" "};
530
531/* XPM */
532static const char * const max_small_xpm[] = {
533"14 14 4 1",
534" c #09454A",
535". c #218C98",
536"+ c #47D8E5",
537"@ c #FCFFFC",
538" ",
539" ++++++++++++ ",
540" +..........+ ",
541" +..........+ ",
542" +.@@@@@@@@.+ ",
543" +.@@@@@@@@.+ ",
544" +.@......@.+ ",
545" +.@......@.+ ",
546" +.@......@.+ ",
547" +.@@@@@@@@.+ ",
548" +..........+ ",
549" +..........+ ",
550" ++++++++++++ ",
551" "};
552
553/* XPM */
554static const char * const normal_big_xpm[] = {
555"28 28 4 1",
556" c #09454A",
557". c #218C98",
558"+ c #47D8E5",
559"@ c #FDFFFC",
560" ",
561" ",
562" ++++++++++++++++++++++++ ",
563" ++++++++++++++++++++++++ ",
564" ++....................++ ",
565" ++....................++ ",
566" ++..@@@@@@@@@@@@@@@@..++ ",
567" ++..@@@@@@@@@@@@@@@@..++ ",
568" ++..@@............@@..++ ",
569" ++..@@............@@..++ ",
570" ++..@@............@@..++ ",
571" ++..@@............@@..++ ",
572" ++..@@............@@..++ ",
573" ++..@@............@@..++ ",
574" ++..@@............@@..++ ",
575" ++..@@............@@..++ ",
576" ++..@@............@@..++ ",
577" ++..@@............@@..++ ",
578" ++..@@............@@..++ ",
579" ++..@@............@@..++ ",
580" ++..@@@@@@@@@@@@@@@@..++ ",
581" ++..@@@@@@@@@@@@@@@@..++ ",
582" ++....................++ ",
583" ++....................++ ",
584" ++++++++++++++++++++++++ ",
585" ++++++++++++++++++++++++ ",
586" ",
587" "};
588
589/* XPM */
590static const char * const normal_small_xpm[] = {
591"14 14 4 1",
592" c #09454A",
593". c #218C98",
594"+ c #47D8E5",
595"@ c #FCFFFC",
596" ",
597" ++++++++++++ ",
598" +..........+ ",
599" +.@@@@@@@@.+ ",
600" +.@......@.+ ",
601" +.@......@.+ ",
602" +.@......@.+ ",
603" +.@......@.+ ",
604" +.@......@.+ ",
605" +.@......@.+ ",
606" +.@@@@@@@@.+ ",
607" +..........+ ",
608" ++++++++++++ ",
609" "};
610
611
612/* XPM */
613static const char * const min_big_xpm[] = {
614"28 28 4 1",
615" c #09454A",
616". c #218C98",
617"+ c #47D8E5",
618"@ c #FDFFFC",
619" ",
620" ",
621" ++++++++++++++++++++++++ ",
622" ++++++++++++++++++++++++ ",
623" ++....................++ ",
624" ++....................++ ",
625" ++....................++ ",
626" ++....................++ ",
627" ++....................++ ",
628" ++....................++ ",
629" ++....................++ ",
630" ++....................++ ",
631" ++....................++ ",
632" ++....................++ ",
633" ++....................++ ",
634" ++....................++ ",
635" ++....................++ ",
636" ++....................++ ",
637" ++..@@@@@@@@@@@@@@@@..++ ",
638" ++..@@@@@@@@@@@@@@@@..++ ",
639" ++....................++ ",
640" ++....................++ ",
641" ++....................++ ",
642" ++....................++ ",
643" ++++++++++++++++++++++++ ",
644" ++++++++++++++++++++++++ ",
645" ",
646" "};
647
648/* XPM */
649static const char * const min_small_xpm[] = {
650"14 14 4 1",
651" c #09454A",
652". c #218C98",
653"+ c #47D8E5",
654"@ c #FCFFFC",
655" ",
656" ++++++++++++ ",
657" +..........+ ",
658" +..........+ ",
659" +..........+ ",
660" +..........+ ",
661" +..........+ ",
662" +..........+ ",
663" +..........+ ",
664" +.@@@@@@@@.+ ",
665" +..........+ ",
666" +..........+ ",
667" ++++++++++++ ",
668" "};
669
670#ifdef Q_WS_WINCE_WM
671
672static char * sbhandleup_xpm[] = {
673"26 41 45 1",
674" c None",
675". c #000000",
676"+ c #E7E7E7",
677"@ c #D6D7D6",
678"# c #949294",
679"$ c #737573",
680"% c #636563",
681"& c #636163",
682"* c #5A5D5A",
683"= c #5A595A",
684"- c #525552",
685"; c #525152",
686"> c #4A4D4A",
687", c #7B797B",
688"' c #CECFCE",
689") c #CED3CE",
690"! c #6B6D6B",
691"~ c #6B696B",
692"{ c #737173",
693"] c #7B7D7B",
694"^ c #848684",
695"/ c #848284",
696"( c #8C8A8C",
697"_ c #8C8E8C",
698": c #B5B2B5",
699"< c #FFFFFF",
700"[ c #949694",
701"} c #B5B6B5",
702"| c #9C9A9C",
703"1 c #ADAEAD",
704"2 c #9C9E9C",
705"3 c #BDBABD",
706"4 c #BDBEBD",
707"5 c #F7F3F7",
708"6 c #C6C3C6",
709"7 c #C6C7C6",
710"8 c #A5A2A5",
711"9 c #CECBCE",
712"0 c #FFFBFF",
713"a c #ADAAAD",
714"b c #A5A6A5",
715"c c #D6D3D6",
716"d c #B5BAB5",
717"e c #DEDFDE",
718"f c #DEDBDE",
719"..........................",
720"+@#$%%&&&**===---;;;;>=,'+",
721"+@#$%%&&&**===---;;;;>=$'+",
722")$!!~~%%&&&**===---;;;;>;'",
723"#{$]],,$${{{!!~~%%%&&&*-;]",
724"#{$]],,$${{{!!~~%%%&&&*-;]",
725",$^//]],,$${{{!!~~%%%&&*;*",
726",,(^^//]],$${!!!!!~~%%%&-*",
727",,(^^//]],$${!!!!!~~%%%&-*",
728"]]_((^^//]$!%%~!{{!!~~%%-*",
729"//#__((^^]{:<<:~!{{{!!~~=*",
730"//#__((^^]{:<<:~!{{{!!~~=&",
731"//###__(/$:<<<<:~{${{!!~*&",
732"^^[[##_^]:<<<<<<}!{$${{!*%",
733"^^[[##_^]:<<<<<<}!{$${{!*%",
734"((|[[#_/:<<<<<<<<}!$$${{&~",
735"((||[#^1<<<<1:<<<<}!$$$$&~",
736"((||[#^1<<<<1:<<<<}!$$$$&~",
737"__2|#(1<<<<}],}<<<<}{$,$%~",
738"##2|_1<<<<}^((]3<<<<}{$,~!",
739"##2|_1<<<<}^((]3<<<<}{$,~!",
740"##2#1<<<<3^###(/4<<<<}{,~{",
741"##2#1<<<<3^###(/4<<<<}{,~!",
742"[[2_5<<<4(#|[[#_/6<<<<,,!{",
743"[|2_5<<4_[||||[[_/7<<<,]{$",
744"[|2_5<<4_[||||[[_/7<<<,]{$",
745"||8_5<6#|2222|||[_/9<<,]{$",
746"228#06[28888222||[_/'<,/$,",
747"228#06[28888222||[_/'<,/$,",
748"22a|6[8bbbb88822||[(/c](,]",
749"881b8baaabbbb88222|[(^(_,]",
750"881b8baaabbbb88222|[(^(_,]",
751"88111111aaabbb88822|[###]/",
752"bb:::11111aaabbb8822||[[/^",
753"bb:::11111aaabbb8822||[[//",
754"bb:::::1111aaabbb8822||[/(",
755"3a1::::::1111aaabb8822|_^8",
756"da1::::::1111aaabb8822|_^8",
757"e1aaabbbb888822||[[##__((@",
758"+e4:aaabbbb88822||[[[#[b@+",
759"+e4:aaabbbb88822||[[[#[bf+"};
760
761static char * sbhandledown_xpm[] = {
762"26 40 46 1",
763" c None",
764". c #E7E7E7",
765"+ c #DEDFDE",
766"@ c #BDBEBD",
767"# c #B5B2B5",
768"$ c #ADAAAD",
769"% c #A5A6A5",
770"& c #A5A2A5",
771"* c #9C9E9C",
772"= c #9C9A9C",
773"- c #949694",
774"; c #949294",
775"> c #D6D7D6",
776", c #DEDBDE",
777"' c #D6DBD6",
778") c #ADAEAD",
779"! c #8C8E8C",
780"~ c #8C8A8C",
781"{ c #BDBABD",
782"] c #848684",
783"^ c #B5BAB5",
784"/ c #848284",
785"( c #848A84",
786"_ c #7B7D7B",
787": c #7B797B",
788"< c #C6C3C6",
789"[ c #D6D3D6",
790"} c #FFFBFF",
791"| c #CECFCE",
792"1 c #FFFFFF",
793"2 c #737573",
794"3 c #F7F3F7",
795"4 c #CECBCE",
796"5 c #737173",
797"6 c #C6C7C6",
798"7 c #6B6D6B",
799"8 c #B5B6B5",
800"9 c #6B696B",
801"0 c #636563",
802"a c #636163",
803"b c #5A5D5A",
804"c c #5A595A",
805"d c #525552",
806"e c #525152",
807"f c #4A4D4A",
808"g c #C6CBC6",
809".+@#$$$%%%%&&&**==---;-%>.",
810".+@#$$$%%%%&&&**==---;-%,.",
811"')$$$%%%%&&&&**==--;;!!~~>",
812"{$)######))))$$$%%&&**=!]&",
813"^$)######))))$$$%%&&**=!]&",
814"%%#####))))$$$%%%&&**==-/(",
815"%%###)))))$$$%%%&&**==--/]",
816"%%###)))))$$$%%%&&**==--//",
817"&&))))))$$$%%%&&&**=-;;;_/",
818"&&)%&%$$$%%%%&&***=-~]~!:_",
819"&&)%&%$$$%%%%&&***=-~]~!:_",
820"**$=<-&%%%%&&&**==-~/[_~:_",
821"**&;}<-*&&&&***==-!/|1:/2:",
822"**&;}<-*&&&&***==-!/|1:/2:",
823"==&!31<;=****===-!/411:_5:",
824"-=*!311@!-====--!/6111:_52",
825"-=*!311@!-====--!/6111:_52",
826"--*!3111@~;=--;!/<1111::75",
827";;*;)1111{];;;~/@111185:95",
828";;*;)1111{];;;~/@111185:97",
829";;*=!)11118]~~_{1111852:97",
830";;*=!)11118]~~_{1111852:97",
831"!!*=;~)11118_:81111852:207",
832"~~==-;])1111)#1111872222a9",
833"~~==-;])1111)#1111872222a9",
834"~~=--;!/#111111118722255a0",
835"]]--;;!]_#11111187522557b0",
836"]]--;;!]_#11111187522557b0",
837"//;;;!!~/2#1111#95255779ba",
838"//;!!~~]]_5#11#975557799cb",
839"//;!!~~]]_5#11#975557799ca",
840"__!~~]]//_27009755779900db",
841"::~]]//__:2257777799000adb",
842"::~]]//__:2257777799000adb",
843":2]//__::225557799000aabeb",
844";52__::225557799000aaabde_",
845";52__::225557799000aaabde_",
846"[2779900aaabbcccdddeeeefeg",
847".>;200aaabbcccdddeeeefc:|.",
848".>;200aaabbcccdddeeeefc2|."};
849
850static char * sbgripdown_xpm[] = {
851"26 34 39 1",
852" c None",
853". c #949294",
854"+ c #9C9E9C",
855"@ c #9C9A9C",
856"# c #949694",
857"$ c #8C8E8C",
858"% c #8C8A8C",
859"& c #848684",
860"* c #848284",
861"= c #7B7D7B",
862"- c #7B797B",
863"; c #6B696B",
864"> c #636563",
865", c #737573",
866"' c #636163",
867") c #737173",
868"! c #5A5D5A",
869"~ c #6B6D6B",
870"{ c #5A595A",
871"] c #B5B6B5",
872"^ c #BDBEBD",
873"/ c #ADAEAD",
874"( c #BDBABD",
875"_ c #525552",
876": c #313031",
877"< c #525152",
878"[ c #ADAAAD",
879"} c #BDBAB5",
880"| c #4A4D4A",
881"1 c #4A494A",
882"2 c #C6C3C6",
883"3 c #C6CBC6",
884"4 c #E7E7E7",
885"5 c #DEDFDE",
886"6 c #E7E3E7",
887"7 c #DEE3DE",
888"8 c #CECBCE",
889"9 c #8C928C",
890"0 c #CECFCE",
891"..+++@@@###...$$%&&**==-;>",
892"$.++@@@@##...$$%%&**==-->>",
893"$$+@@@@###..$$%%&&*==--,>>",
894"$$@@@@###..$$%%&&**==-,,>'",
895"%%@@@###..$$$%&&**==--,,''",
896"%%@@###..$$$%&&**==--,,)''",
897"%%@###...$$%%&&*==--,,))'!",
898"&&###...$$%%&&**==--,)))!!",
899"&&##...$$%%&&**==--,,))~!!",
900"&&#...$$%%&&**==--,,))~~!{",
901"**...$$%%&&**==--,,))~~;!{",
902"**..$$%%&&**===--,)))~~;{{",
903"**.$$%%&]^&===//,,))~~;;{{",
904"==$$%%&&]^*==-((,))~~;;>{_",
905"==$%%&&***::--,,::~~;;;>__",
906"==%%&&&**=::-,,)::~~;;>>__",
907"--%&&&**==--,,)))~~;;>>>__",
908"--&&&**==--,,)))~~;;>>>'_<",
909",-&&**==]^-,))[[~;;>>>''<<",
910",,&**==-]^-)))}};;>>>'''<<",
911",,**==--,,::)~~;::>>'''!<<",
912"))*==--,,)::~~;;::>'''!!<|",
913"))==--,,)))~~;;;>>'''!!!||",
914"))=--,,)))~~;;;>>'''!!!{||",
915"~~--,,)))~~;;;>>'''!!!{{||",
916"~~-,,)))~~;;>>>'''!!!{{{|1",
917";;,,)))~~;;>>>'''!!!{{{_1<",
918"~;,)))~~;;>>>'''!!!{{{__1'",
919"%>~))~~;;>>>'''!!!{{{__|1$",
920"2>>~~~;;>>>''!!!{{{{__<113",
921"4%'';;;>>>''!!!{{{{__<11%4",
922"45-!!'>>>''!!!{{{{_<|11)64",
923"447+!{{___<<<||||1111|+444",
924"444489~__<<<||||111>$04444"};
925
926static char * sbgripup_xpm[] = {
927"26 34 38 1",
928" c None",
929". c #E7E7E7",
930"+ c #D6DBD6",
931"@ c #C6C7C6",
932"# c #B5B6B5",
933"$ c #ADAEAD",
934"% c #ADAAAD",
935"& c #A5A6A5",
936"* c #A5A2A5",
937"= c #BDBEBD",
938"- c #DEDFDE",
939"; c #C6CBC6",
940"> c #9C9E9C",
941", c #E7E3E7",
942"' c #BDBABD",
943") c #B5B2B5",
944"! c #9C9A9C",
945"~ c #DEE3DE",
946"{ c #949694",
947"] c #D6D7D6",
948"^ c #949294",
949"/ c #DEDBDE",
950"( c #8C8E8C",
951"_ c #8C8A8C",
952": c #848684",
953"< c #D6D3CE",
954"[ c #CECBCE",
955"} c #D6D3D6",
956"| c #848284",
957"1 c #313031",
958"2 c #7B7D7B",
959"3 c #CECFCE",
960"4 c #CECBC6",
961"5 c #7B797B",
962"6 c #737573",
963"7 c #737173",
964"8 c #6B6D6B",
965"9 c #6B696B",
966"....+@#$$%%%%&&&***$=-....",
967"...;$$$$$%%%&&&&**>>>>@...",
968".,'$$)#'#####)))$$$%*!!$~.",
969".=$)#'''####))))$$$%%*!{'.",
970"]$$''''#####)))$$$%%%&*{^/",
971"=$#'''#####)))$$$$%%&&&!^#",
972"$$'''#####))))$$$%%%&&*>(!",
973"$$''#####))))$$$%%%&&&*>(^",
974"$$######))))$$$$%%&&&**>(_",
975"%$#####))))$$$$%%%&&***>__",
976"%$####))))$$$$%%%&&&**>>__",
977"%%###)))))$$$%%%&&&**>>>_:",
978"%%##))))<])$$%[[&&***>>!::",
979"%%#)))))<]$$%%}<&&**>>!!:|",
980"&%)))))$$$11%%&&11*>>>!!:|",
981"&&))))$$$$11%&&&11*>>!!{||",
982"&&)))$$$$$%%%&&&**>>!!!{|2",
983"&&))$$$$$%%%&&&**>>>!!{{|2",
984"*&)$$$$$3]%&&&4@*>>!!{{{22",
985"**$$$$$%3]%&&&<<>>!!!{{^25",
986"**$$$$%%%%11&**>11!!{{^^25",
987"**$$$%%%%&11***>11!!{{^^55",
988"**$$%%%%&&&***>>!!!{{^^(55",
989">>$%%%%&&&***>>>!!{{^^((56",
990">>%%%%&&&&***>>!!!{{^^((66",
991">>%%%&&&&***>>!!!{{^^((_67",
992"!>%%&&&&***>>>!!{{{^^(__67",
993"!!%&&&&***>>>!!!{{^^((_:77",
994"!!&&&&***>>>!!!{{^^((__:77",
995"!!&&&****>>!!!{{^^^(__::78",
996"{!&&****>>>!!{{{^^((_::|88",
997"{{&****>>>!!!{{^^((__:||88",
998"{{****>>>!!!{{^^^(__::|289",
999"{{***>>>!!!{{{^^((_::||289"};
1000
1001static char * sbgripmiddle_xpm[] = {
1002"26 2 12 1",
1003" c None",
1004". c #949294",
1005"+ c #A5A2A5",
1006"@ c #9C9E9C",
1007"# c #9C9A9C",
1008"$ c #949694",
1009"% c #8C8E8C",
1010"& c #8C8A8C",
1011"* c #848684",
1012"= c #848284",
1013"- c #7B7D7B",
1014"; c #6B696B",
1015"..++@@@###$$$..%%&&*==--;;",
1016"..++@@@###$$$..%%&&*==--;;"};
1017
1018
1019static char * listviewhighmiddle_xpm[] = {
1020"8 46 197 2",
1021" c None",
1022". c #66759E",
1023"+ c #6C789D",
1024"@ c #6A789E",
1025"# c #6B789E",
1026"$ c #6A779D",
1027"% c #6C789C",
1028"& c #6F7D9B",
1029"* c #6F7D9A",
1030"= c #9DB6EE",
1031"- c #9DB6ED",
1032"; c #9CB6ED",
1033"> c #A1B6EF",
1034", c #A2B6F0",
1035"' c #93AAE9",
1036") c #95ABEA",
1037"! c #94ABEA",
1038"~ c #94A9E8",
1039"{ c #8BA8EA",
1040"] c #8BA7EA",
1041"^ c #8AA7EA",
1042"/ c #8EAAE8",
1043"( c #8FAAE8",
1044"_ c #88A2E7",
1045": c #8CA3E8",
1046"< c #8BA3E7",
1047"[ c #8BA3E8",
1048"} c #8BA2E7",
1049"| c #8CA2E7",
1050"1 c #8DA2E7",
1051"2 c #87A1E8",
1052"3 c #87A1E9",
1053"4 c #86A0E8",
1054"5 c #86A1E7",
1055"6 c #87A2E7",
1056"7 c #859EE9",
1057"8 c #849DE9",
1058"9 c #869EE9",
1059"0 c #869FE9",
1060"a c #7C9BEA",
1061"b c #7C9CEA",
1062"c c #7B9CEA",
1063"d c #7C9BE9",
1064"e c #7E9CE9",
1065"f c #7B9AEA",
1066"g c #7C99E9",
1067"h c #7C9AEA",
1068"i c #7B9AE8",
1069"j c #7A9AEA",
1070"k c #7996E1",
1071"l c #7C96E4",
1072"m c #7B96E3",
1073"n c #7B95E3",
1074"o c #7E95E5",
1075"p c #7E95E6",
1076"q c #7292E1",
1077"r c #7490DF",
1078"s c #7591E0",
1079"t c #7590DF",
1080"u c #7392E1",
1081"v c #6D8CDE",
1082"w c #6F8EDD",
1083"x c #6E8DDD",
1084"y c #6E8DDE",
1085"z c #6F8EDE",
1086"A c #6E8EDE",
1087"B c #718EDD",
1088"C c #728EDD",
1089"D c #6B89E0",
1090"E c #6C89DF",
1091"F c #6D89E0",
1092"G c #6D89DF",
1093"H c #6C88DF",
1094"I c #6D88DF",
1095"J c #6D86DD",
1096"K c #6086E0",
1097"L c #6686E0",
1098"M c #6586E0",
1099"N c #6486E0",
1100"O c #6485E0",
1101"P c #6786DF",
1102"Q c #5F85E0",
1103"R c #6583DE",
1104"S c #6683DE",
1105"T c #6682DD",
1106"U c #6086DF",
1107"V c #5F86E0",
1108"W c #567ED7",
1109"X c #567ED8",
1110"Y c #557DD7",
1111"Z c #5A7FD8",
1112"` c #6281DA",
1113" . c #5379D9",
1114".. c #5278D9",
1115"+. c #547BD8",
1116"@. c #4C73D7",
1117"#. c #4B72D2",
1118"$. c #4C73D4",
1119"%. c #4C73D3",
1120"&. c #4B72D4",
1121"*. c #4F75D3",
1122"=. c #5074D2",
1123"-. c #4971D0",
1124";. c #4871D0",
1125">. c #335ECF",
1126",. c #325ECB",
1127"'. c #335ECD",
1128"). c #335ECE",
1129"!. c #325DCD",
1130"~. c #2E59C9",
1131"{. c #3059C9",
1132"]. c #2F59C9",
1133"^. c #2F59C8",
1134"/. c #2B59CA",
1135"(. c #3355C6",
1136"_. c #3354C5",
1137":. c #3156C7",
1138"<. c #3056C7",
1139"[. c #3355C7",
1140"}. c #3355C5",
1141"|. c #254EBF",
1142"1. c #1F51C1",
1143"2. c #234FC0",
1144"3. c #234FBF",
1145"4. c #2350C0",
1146"5. c #1E50BE",
1147"6. c #1D50C0",
1148"7. c #264DBE",
1149"8. c #264CBD",
1150"9. c #254DBE",
1151"0. c #244EBF",
1152"a. c #254DBF",
1153"b. c #234CBF",
1154"c. c #244CC0",
1155"d. c #244BC0",
1156"e. c #234BC0",
1157"f. c #234BBF",
1158"g. c #234CBE",
1159"h. c #2049B7",
1160"i. c #2A49B5",
1161"j. c #2749B5",
1162"k. c #2749B6",
1163"l. c #2D49B4",
1164"m. c #2649B6",
1165"n. c #2946B5",
1166"o. c #2A48B6",
1167"p. c #2947B5",
1168"q. c #2946B6",
1169"r. c #2848B6",
1170"s. c #2549B5",
1171"t. c #2648B6",
1172"u. c #2744B5",
1173"v. c #2744B4",
1174"w. c #2744AF",
1175"x. c #2543B4",
1176"y. c #2543B2",
1177"z. c #2442B2",
1178"A. c #2442B3",
1179"B. c #2442B5",
1180"C. c #2543B3",
1181"D. c #1F40B1",
1182"E. c #1E40B1",
1183"F. c #243EAE",
1184"G. c #273BAC",
1185"H. c #263DAC",
1186"I. c #253CAB",
1187"J. c #273CAB",
1188"K. c #273CAC",
1189"L. c #263BAA",
1190"M. c #253CAE",
1191"N. c #263BA6",
1192"O. c #253BA5",
1193"P. c #253AA5",
1194"Q. c #253BA6",
1195"R. c #253CA7",
1196"S. c #263AA6",
1197"T. c #243CA6",
1198"U. c #253CA5",
1199"V. c #273BA8",
1200"W. c #2F4DA4",
1201"X. c #2F4DA3",
1202"Y. c #1B2F85",
1203"Z. c #B5B5B6",
1204"`. c #B5B5B5",
1205" + c #B5B6B6",
1206".+ c #B5B4B6",
1207"++ c #C2C3C5",
1208"@+ c #C0C3C3",
1209"#+ c #C1C3C4",
1210"$+ c #E3E3E3",
1211"%+ c #E3E3E4",
1212"&+ c #E4E3E4",
1213"*+ c #E2E3E4",
1214"=+ c #ECEEEB",
1215"-+ c #EBEDEA",
1216";+ c #EEF0ED",
1217">+ c #EFF0EE",
1218". + @ @ # # $ % ",
1219"& & * & & & & & ",
1220"= = - = = ; > , ",
1221"' ) ! ! ! ) ' ~ ",
1222"{ ] { { { ^ / ( ",
1223"_ : < [ : } | 1 ",
1224"2 2 2 3 2 4 5 6 ",
1225"7 7 7 7 7 8 9 0 ",
1226"a b a a a c d e ",
1227"f g h h h h i j ",
1228"k l m m m n o p ",
1229"q q q q q q q q ",
1230"r r s s s t q u ",
1231"v w x y z A B C ",
1232"D E F F G F H I ",
1233"J K L M N O P Q ",
1234"R R S S S T U V ",
1235"W W X X X Y Z ` ",
1236" . . . . ...+.W ",
1237" . . . . ..... .",
1238"@.#.$.$.%.&.*.=.",
1239"-.-.;.-.-.-.-.-.",
1240">.,.'.).).!.!.>.",
1241"~.{.].^.].^././.",
1242"(.(.(.(.(._.:.<.",
1243"(.(.[.[.[.[.(.}.",
1244"|.1.2.3.3.4.5.6.",
1245"7.7.7.7.7.8.9.0.",
1246"a.b.c.d.c.e.f.g.",
1247"h.i.j.k.j.k.l.m.",
1248"n.o.p.q.r.p.s.t.",
1249"u.u.v.u.u.u.u.u.",
1250"w.x.y.z.A.y.B.C.",
1251"D.D.E.D.D.D.D.D.",
1252"D.D.E.D.D.D.D.D.",
1253"F.G.H.I.J.K.L.M.",
1254"N.N.O.N.N.P.Q.R.",
1255"N.N.S.N.N.N.N.N.",
1256"T.N.T.T.T.U.N.V.",
1257"W.W.X.W.W.W.W.W.",
1258"W.W.W.W.W.W.W.W.",
1259"Y.Y.Y.Y.Y.Y.Y.Y.",
1260"Z.`. + +.+Z.`.`.",
1261"++@+#+#+#+#+@+@+",
1262"$+%+&+&+*+%+%+%+",
1263"=+-+;+-+-+>+-+-+"};
1264
1265
1266
1267static char * listviewhighcornerleft_xpm[] = {
1268"100 46 1475 2",
1269" c None",
1270". c #FBFBFC",
1271"+ c #E8EAE7",
1272"@ c #758DC3",
1273"# c #42599E",
1274"$ c #28418A",
1275"% c #19418F",
1276"& c #3F5695",
1277"* c #415896",
1278"= c #435A98",
1279"- c #445C99",
1280"; c #465E9B",
1281"> c #48609B",
1282", c #49629C",
1283"' c #4A639D",
1284") c #49639D",
1285"! c #4A629D",
1286"~ c #4B639D",
1287"{ c #4B649D",
1288"] c #4C659D",
1289"^ c #4D669D",
1290"/ c #4E689D",
1291"( c #506A9D",
1292"_ c #516A9D",
1293": c #536B9C",
1294"< c #546C9C",
1295"[ c #566D9B",
1296"} c #576D9B",
1297"| c #586E9C",
1298"1 c #5B6F9D",
1299"2 c #61739D",
1300"3 c #63749E",
1301"4 c #64749E",
1302"5 c #68769E",
1303"6 c #6A779E",
1304"7 c #6B789E",
1305"8 c #66759E",
1306"9 c #6C789D",
1307"0 c #EEF0ED",
1308"a c #D0D3DC",
1309"b c #3E51A3",
1310"c c #28428B",
1311"d c #29428C",
1312"e c #425996",
1313"f c #455C99",
1314"g c #485F9C",
1315"h c #49619E",
1316"i c #4A63A0",
1317"j c #4B64A1",
1318"k c #4B65A1",
1319"l c #4C66A2",
1320"m c #4D67A2",
1321"n c #4F69A1",
1322"o c #516AA1",
1323"p c #536CA0",
1324"q c #556DA1",
1325"r c #576EA0",
1326"s c #586F9F",
1327"t c #586E9F",
1328"u c #596F9E",
1329"v c #5A6F9E",
1330"w c #5C709E",
1331"x c #5E719E",
1332"y c #5F729F",
1333"z c #62739F",
1334"A c #63739E",
1335"B c #64749D",
1336"C c #65749E",
1337"D c #69769D",
1338"E c #6C799E",
1339"F c #6D799F",
1340"G c #707D9F",
1341"H c #717F9E",
1342"I c #6E7AA1",
1343"J c #6C789E",
1344"K c #6F7C9C",
1345"L c #6F7D9B",
1346"M c #2A4AA0",
1347"N c #4971D0",
1348"O c #4C72D8",
1349"P c #5472C0",
1350"Q c #5573BF",
1351"R c #5774BF",
1352"S c #5875BF",
1353"T c #5976C1",
1354"U c #5A76C1",
1355"V c #5C78C2",
1356"W c #5E7AC2",
1357"X c #607CC3",
1358"Y c #627EC3",
1359"Z c #637FC4",
1360"` c #6581C5",
1361" . c #6682C6",
1362".. c #6783C7",
1363"+. c #6984C8",
1364"@. c #6B85C9",
1365"#. c #6D87CA",
1366"$. c #6F89CB",
1367"%. c #718CCD",
1368"&. c #748ECF",
1369"*. c #7690D0",
1370"=. c #7992D2",
1371"-. c #7A93D3",
1372";. c #7C95D5",
1373">. c #7F98D7",
1374",. c #8099D8",
1375"'. c #859CDB",
1376"). c #8AA0DD",
1377"!. c #8DA3DF",
1378"~. c #8FA5E0",
1379"{. c #90A5E0",
1380"]. c #91A6E1",
1381"^. c #91A5E1",
1382"/. c #90A4E0",
1383"(. c #8EA3DE",
1384"_. c #92A6E2",
1385":. c #8FA4DF",
1386"<. c #90A5DE",
1387"[. c #90A5DC",
1388"}. c #90A6DB",
1389"|. c #91A6E0",
1390"1. c #93A7E2",
1391"2. c #95AAE6",
1392"3. c #99AEEA",
1393"4. c #9AB2EA",
1394"5. c #99B1E9",
1395"6. c #99B1E7",
1396"7. c #98AFE6",
1397"8. c #93A8E2",
1398"9. c #97ACE7",
1399"0. c #9AB3EB",
1400"a. c #9DB5ED",
1401"b. c #9DB6EE",
1402"c. c #375095",
1403"d. c #4056AD",
1404"e. c #506DCD",
1405"f. c #4360CC",
1406"g. c #345ED6",
1407"h. c #335ECF",
1408"i. c #355ED6",
1409"j. c #355FD6",
1410"k. c #365FD6",
1411"l. c #355FD0",
1412"m. c #3760D5",
1413"n. c #3A63D4",
1414"o. c #3C63D1",
1415"p. c #3B63CD",
1416"q. c #3B63C9",
1417"r. c #3B62C9",
1418"s. c #3D63C8",
1419"t. c #4065C5",
1420"u. c #4567C5",
1421"v. c #496BC5",
1422"w. c #4F70C7",
1423"x. c #5273C8",
1424"y. c #5475CA",
1425"z. c #5777CB",
1426"A. c #5879CD",
1427"B. c #5A7BCE",
1428"C. c #5D7DCF",
1429"D. c #5F7ECF",
1430"E. c #617FD0",
1431"F. c #6381D1",
1432"G. c #6583D2",
1433"H. c #6785D2",
1434"I. c #6886D3",
1435"J. c #6A88D4",
1436"K. c #6C89D5",
1437"L. c #6E8BD6",
1438"M. c #708CD7",
1439"N. c #718DD8",
1440"O. c #738EDA",
1441"P. c #748FDB",
1442"Q. c #7691DC",
1443"R. c #7893DD",
1444"S. c #7994DD",
1445"T. c #7A96DE",
1446"U. c #7B97DF",
1447"V. c #7C98E0",
1448"W. c #7E9AE2",
1449"X. c #7F9BE3",
1450"Y. c #829DE4",
1451"Z. c #849FE5",
1452"`. c #87A0E6",
1453" + c #88A1E7",
1454".+ c #89A2E6",
1455"++ c #8CA3E7",
1456"@+ c #8EA5E9",
1457"#+ c #8EA6E9",
1458"$+ c #8FA7E9",
1459"%+ c #8FA8E8",
1460"&+ c #8FA9E8",
1461"*+ c #91A9E8",
1462"=+ c #90A7E8",
1463"-+ c #8FA8EA",
1464";+ c #90AAEA",
1465">+ c #93ABEA",
1466",+ c #95ABEA",
1467"'+ c #93ABE9",
1468")+ c #94ABEA",
1469"!+ c #90A9EA",
1470"~+ c #93AAE9",
1471"{+ c #273E7E",
1472"]+ c #345ED5",
1473"^+ c #3D60CE",
1474"/+ c #3D60CF",
1475"(+ c #345ECF",
1476"_+ c #335ED0",
1477":+ c #355FD3",
1478"<+ c #3A60CE",
1479"[+ c #3A5FCB",
1480"}+ c #385FC9",
1481"|+ c #3B60C8",
1482"1+ c #3C63CB",
1483"2+ c #3E64CB",
1484"3+ c #4166CA",
1485"4+ c #4568C9",
1486"5+ c #4A6CC7",
1487"6+ c #4F71C8",
1488"7+ c #5172CA",
1489"8+ c #5475CE",
1490"9+ c #5678D3",
1491"0+ c #597CD6",
1492"a+ c #5C7ED7",
1493"b+ c #5E7FD8",
1494"c+ c #6181D9",
1495"d+ c #6383DA",
1496"e+ c #6585DA",
1497"f+ c #6786DB",
1498"g+ c #6988DC",
1499"h+ c #6B8ADD",
1500"i+ c #6D8BDE",
1501"j+ c #6F8DDE",
1502"k+ c #718EDF",
1503"l+ c #728FE0",
1504"m+ c #7390E1",
1505"n+ c #7390E2",
1506"o+ c #7491E3",
1507"p+ c #7592E4",
1508"q+ c #7693E4",
1509"r+ c #7794E5",
1510"s+ c #7894E5",
1511"t+ c #7995E6",
1512"u+ c #7B96E6",
1513"v+ c #7C97E7",
1514"w+ c #7D9AE8",
1515"x+ c #7F9CE9",
1516"y+ c #829DE9",
1517"z+ c #849EE9",
1518"A+ c #859EE9",
1519"B+ c #87A0E7",
1520"C+ c #8AA2E7",
1521"D+ c #8BA3E8",
1522"E+ c #89A2E7",
1523"F+ c #8CA6EA",
1524"G+ c #8BA6EA",
1525"H+ c #8BA7EA",
1526"I+ c #8CA3E8",
1527"J+ c #8BA8EA",
1528"K+ c #8CA7EA",
1529"L+ c #8CA8EA",
1530"M+ c #4659C7",
1531"N+ c #355ECF",
1532"O+ c #3660CF",
1533"P+ c #3860CE",
1534"Q+ c #3961CD",
1535"R+ c #3B61CB",
1536"S+ c #3B61CA",
1537"T+ c #3D62CA",
1538"U+ c #3D63CA",
1539"V+ c #4165CB",
1540"W+ c #456ACB",
1541"X+ c #4B6FCD",
1542"Y+ c #5174CE",
1543"Z+ c #5275D1",
1544"`+ c #5477D4",
1545" @ c #5678D9",
1546".@ c #587ADB",
1547"+@ c #597BDB",
1548"@@ c #5B7DDC",
1549"#@ c #5E7FDC",
1550"$@ c #6081DD",
1551"%@ c #6283DE",
1552"&@ c #6484DF",
1553"*@ c #6787E0",
1554"=@ c #6989E1",
1555"-@ c #6B8BE1",
1556";@ c #6D8DE2",
1557">@ c #6F8EE3",
1558",@ c #718FE4",
1559"'@ c #7290E4",
1560")@ c #7491E5",
1561"!@ c #7692E6",
1562"~@ c #7793E5",
1563"{@ c #7894E6",
1564"]@ c #7895E7",
1565"^@ c #7996E8",
1566"/@ c #7A97E8",
1567"(@ c #7B98E9",
1568"_@ c #7D99E8",
1569":@ c #7F9AE8",
1570"<@ c #7F9BE9",
1571"[@ c #7F9CEA",
1572"}@ c #859EE8",
1573"|@ c #859FE8",
1574"1@ c #85A0E9",
1575"2@ c #869FE9",
1576"3@ c #86A1E7",
1577"4@ c #86A0E9",
1578"5@ c #87A1E7",
1579"6@ c #88A2E7",
1580"7@ c #87A1E9",
1581"8@ c #5A6FCA",
1582"9@ c #365FCF",
1583"0@ c #345ED0",
1584"a@ c #385FCC",
1585"b@ c #385FCE",
1586"c@ c #3A61CC",
1587"d@ c #3B62CD",
1588"e@ c #3E64CD",
1589"f@ c #4167CF",
1590"g@ c #4469CF",
1591"h@ c #486CD1",
1592"i@ c #4D71D2",
1593"j@ c #5175D4",
1594"k@ c #5376D6",
1595"l@ c #5578DA",
1596"m@ c #5679DC",
1597"n@ c #587BDD",
1598"o@ c #5A7DDE",
1599"p@ c #5D80DE",
1600"q@ c #5F82DF",
1601"r@ c #6284DF",
1602"s@ c #6585E0",
1603"t@ c #6787E1",
1604"u@ c #6988E2",
1605"v@ c #6B8AE2",
1606"w@ c #6D8CE3",
1607"x@ c #6E8DE3",
1608"y@ c #708EE4",
1609"z@ c #718FE3",
1610"A@ c #7391E4",
1611"B@ c #7592E5",
1612"C@ c #7895E5",
1613"D@ c #7996E6",
1614"E@ c #7A97E6",
1615"F@ c #7B98E7",
1616"G@ c #7A98E8",
1617"H@ c #7B99E9",
1618"I@ c #7E9AE9",
1619"J@ c #7D9AE9",
1620"K@ c #7E9AEA",
1621"L@ c #809CE9",
1622"M@ c #819DE8",
1623"N@ c #7F9BEA",
1624"O@ c #819DE9",
1625"P@ c #819CE9",
1626"Q@ c #839EE9",
1627"R@ c #839EE8",
1628"S@ c #839DEA",
1629"T@ c #859FE9",
1630"U@ c #87A0E8",
1631"V@ c #86A0E8",
1632"W@ c #87A1E8",
1633"X@ c #3760CF",
1634"Y@ c #3A61CE",
1635"Z@ c #3A62CD",
1636"`@ c #3F66CE",
1637" # c #4368D0",
1638".# c #466CD2",
1639"+# c #496DD5",
1640"@# c #4E72D6",
1641"## c #5175D8",
1642"$# c #5276DA",
1643"%# c #5578DC",
1644"&# c #577ADC",
1645"*# c #597CDD",
1646"=# c #5B7DDD",
1647"-# c #5D7FDE",
1648";# c #5E81DE",
1649"># c #6183DF",
1650",# c #6386DF",
1651"'# c #6687E0",
1652")# c #6888E0",
1653"!# c #6A89E1",
1654"~# c #6C8AE1",
1655"{# c #6E8CE2",
1656"]# c #6F8DE2",
1657"^# c #7390E4",
1658"/# c #7390E3",
1659"(# c #7491E4",
1660"_# c #7693E5",
1661":# c #7895E6",
1662"<# c #7896E6",
1663"[# c #7997E7",
1664"}# c #7B97E7",
1665"|# c #7B98E8",
1666"1# c #7C98E8",
1667"2# c #7E9BE9",
1668"3# c #809CEA",
1669"4# c #819CEA",
1670"5# c #839DE9",
1671"6# c #365FD0",
1672"7# c #3660D0",
1673"8# c #3961CF",
1674"9# c #3B63CF",
1675"0# c #3D64D0",
1676"a# c #4067D0",
1677"b# c #4469D2",
1678"c# c #466BD3",
1679"d# c #496ED5",
1680"e# c #4C71D6",
1681"f# c #4E72D8",
1682"g# c #5074D9",
1683"h# c #5376DB",
1684"i# c #5578DB",
1685"j# c #587ADC",
1686"k# c #5B7CDC",
1687"l# c #5D7EDD",
1688"m# c #5F80DD",
1689"n# c #6081DE",
1690"o# c #6383DE",
1691"p# c #6686DF",
1692"q# c #6887E0",
1693"r# c #6988E0",
1694"s# c #6B89E1",
1695"t# c #6C8AE0",
1696"u# c #6E8CE1",
1697"v# c #708EE2",
1698"w# c #718FE2",
1699"x# c #7290E3",
1700"y# c #7391E2",
1701"z# c #7492E1",
1702"A# c #7592E2",
1703"B# c #7691E3",
1704"C# c #7591E3",
1705"D# c #7692E3",
1706"E# c #7693E3",
1707"F# c #7793E4",
1708"G# c #7893E4",
1709"H# c #7994E5",
1710"I# c #7D97E8",
1711"J# c #7E98E8",
1712"K# c #7D98E8",
1713"L# c #7D99E9",
1714"M# c #7D9BEA",
1715"N# c #7D9CEA",
1716"O# c #7E99E8",
1717"P# c #7D9AEA",
1718"Q# c #7C9BEA",
1719"R# c #7C9CEA",
1720"S# c #355FCF",
1721"T# c #3860D0",
1722"U# c #3A62D0",
1723"V# c #3C64D1",
1724"W# c #4167D1",
1725"X# c #4369D3",
1726"Y# c #466BD4",
1727"Z# c #486DD5",
1728"`# c #4A6ED7",
1729" $ c #4C70D8",
1730".$ c #5478D9",
1731"+$ c #577BDA",
1732"@$ c #597DDB",
1733"#$ c #5B7EDB",
1734"$$ c #5D7FDC",
1735"%$ c #6182DE",
1736"&$ c #6284DE",
1737"*$ c #6485DF",
1738"=$ c #6586DF",
1739"-$ c #6787DF",
1740";$ c #6888DF",
1741">$ c #6A8ADF",
1742",$ c #6C8BE0",
1743"'$ c #6D8CE0",
1744")$ c #6E8DE1",
1745"!$ c #6F8DE1",
1746"~$ c #708EE1",
1747"{$ c #718FE0",
1748"]$ c #728FE1",
1749"^$ c #7390E0",
1750"/$ c #738FE0",
1751"($ c #7490E1",
1752"_$ c #7590E1",
1753":$ c #7591E1",
1754"<$ c #7592E1",
1755"[$ c #7692E2",
1756"}$ c #7794E2",
1757"|$ c #7894E3",
1758"1$ c #7996E3",
1759"2$ c #7A96E5",
1760"3$ c #7B98E6",
1761"4$ c #7B9AE8",
1762"5$ c #7C99E8",
1763"6$ c #7C96E5",
1764"7$ c #7D97E7",
1765"8$ c #7C99E9",
1766"9$ c #7B9AE9",
1767"0$ c #7B9AEA",
1768"a$ c #5B6DCF",
1769"b$ c #305EC8",
1770"c$ c #335ECE",
1771"d$ c #305ECA",
1772"e$ c #345FCF",
1773"f$ c #3761D0",
1774"g$ c #3A62D1",
1775"h$ c #3C64D2",
1776"i$ c #4066D3",
1777"j$ c #466BD5",
1778"k$ c #486ED6",
1779"l$ c #4A6ED6",
1780"m$ c #4D71D8",
1781"n$ c #4F72D9",
1782"o$ c #5073D9",
1783"p$ c #4F72D8",
1784"q$ c #5074D8",
1785"r$ c #5276D9",
1786"s$ c #587ADA",
1787"t$ c #5B7CDB",
1788"u$ c #5D7EDC",
1789"v$ c #5F7FDD",
1790"w$ c #6081DC",
1791"x$ c #6182DD",
1792"y$ c #6283DD",
1793"z$ c #6484DE",
1794"A$ c #6585DD",
1795"B$ c #6787DE",
1796"C$ c #6988DF",
1797"D$ c #6A89DE",
1798"E$ c #6C8ADF",
1799"F$ c #6D8BDF",
1800"G$ c #6E8CE0",
1801"H$ c #6F8DE0",
1802"I$ c #718EE0",
1803"J$ c #728FDF",
1804"K$ c #728FDE",
1805"L$ c #7290E0",
1806"M$ c #7190E0",
1807"N$ c #7291E0",
1808"O$ c #7191E0",
1809"P$ c #7392E1",
1810"Q$ c #7493E1",
1811"R$ c #7594E1",
1812"S$ c #7594E2",
1813"T$ c #7694E2",
1814"U$ c #7695E2",
1815"V$ c #7A96E4",
1816"W$ c #7895E2",
1817"X$ c #7A96E2",
1818"Y$ c #7A96E3",
1819"Z$ c #7B96E3",
1820"`$ c #7996E1",
1821" % c #7C96E4",
1822".% c #305EC9",
1823"+% c #315ECC",
1824"@% c #325ECE",
1825"#% c #3760D0",
1826"$% c #3962D1",
1827"%% c #3E66D3",
1828"&% c #4268D4",
1829"*% c #446BD5",
1830"=% c #476CD6",
1831"-% c #496ED7",
1832";% c #4B6FD7",
1833">% c #4C70D7",
1834",% c #4E71D7",
1835"'% c #5074D7",
1836")% c #5276D8",
1837"!% c #5376D8",
1838"~% c #5779DA",
1839"{% c #597ADA",
1840"]% c #5A7BDB",
1841"^% c #5B7CDA",
1842"/% c #5D7EDB",
1843"(% c #5E7FDB",
1844"_% c #6182DB",
1845":% c #6384DC",
1846"<% c #6586DD",
1847"[% c #6686DC",
1848"}% c #6887DD",
1849"|% c #6988DD",
1850"1% c #6A8ADE",
1851"2% c #6B8BDE",
1852"3% c #6C8CDE",
1853"4% c #6E8DDF",
1854"5% c #6E8CDF",
1855"6% c #6D8DDF",
1856"7% c #6C8BDF",
1857"8% c #6F8DDF",
1858"9% c #718FDF",
1859"0% c #7290DF",
1860"a% c #7391E0",
1861"b% c #7491E0",
1862"c% c #7292E1",
1863"d% c #3959C5",
1864"e% c #345BC5",
1865"f% c #315EC8",
1866"g% c #355BC5",
1867"h% c #325EC8",
1868"i% c #315ECB",
1869"j% c #345DCC",
1870"k% c #335ECD",
1871"l% c #345ECD",
1872"m% c #355FCE",
1873"n% c #3862D0",
1874"o% c #3E66D2",
1875"p% c #456BD5",
1876"q% c #476CD5",
1877"r% c #4B6ED7",
1878"s% c #4B6FD6",
1879"t% c #4B6FD5",
1880"u% c #4D71D6",
1881"v% c #5073D7",
1882"w% c #5174D7",
1883"x% c #5275D8",
1884"y% c #5577D8",
1885"z% c #5678D8",
1886"A% c #5779D9",
1887"B% c #587AD8",
1888"C% c #597CD9",
1889"D% c #5B7DD9",
1890"E% c #5D7FDA",
1891"F% c #5F80DB",
1892"G% c #6182DC",
1893"H% c #6484DC",
1894"I% c #6585DC",
1895"J% c #6787DD",
1896"K% c #6988DE",
1897"L% c #6B8ADE",
1898"M% c #6B8ADF",
1899"N% c #6989DE",
1900"O% c #6B89DE",
1901"P% c #6E8BDF",
1902"Q% c #708CDE",
1903"R% c #708DDF",
1904"S% c #708FDF",
1905"T% c #728EDF",
1906"U% c #6F8EDD",
1907"V% c #728EDD",
1908"W% c #7390DF",
1909"X% c #7490DF",
1910"Y% c #335DC8",
1911"Z% c #3759C5",
1912"`% c #3859C5",
1913" & c #335EC8",
1914".& c #325DCA",
1915"+& c #345CCB",
1916"@& c #335DCC",
1917"#& c #345DCD",
1918"$& c #355FCD",
1919"%& c #3861D0",
1920"&& c #3B64D1",
1921"*& c #3E65D2",
1922"=& c #4168D3",
1923"-& c #456AD5",
1924";& c #4B6ED5",
1925">& c #4C6FD4",
1926",& c #4D70D5",
1927"'& c #4F72D6",
1928")& c #5173D6",
1929"!& c #5375D7",
1930"~& c #5476D8",
1931"{& c #5577D7",
1932"]& c #5477D8",
1933"^& c #5677D8",
1934"/& c #5879D9",
1935"(& c #597AD9",
1936"_& c #5C7DDA",
1937":& c #6080DC",
1938"<& c #6080DB",
1939"[& c #6181DC",
1940"}& c #6282DC",
1941"|& c #6383DD",
1942"1& c #6484DD",
1943"2& c #6686DE",
1944"3& c #6685DE",
1945"4& c #6786DE",
1946"5& c #6687DE",
1947"6& c #6887DE",
1948"7& c #6987DE",
1949"8& c #6788DF",
1950"9& c #6785DF",
1951"0& c #6B89DF",
1952"a& c #6C89DF",
1953"b& c #6F8DDD",
1954"c& c #6D8CDE",
1955"d& c #445BBB",
1956"e& c #3759BE",
1957"f& c #375AC6",
1958"g& c #355CC8",
1959"h& c #345CCA",
1960"i& c #355ECC",
1961"j& c #365FCD",
1962"k& c #3761CE",
1963"l& c #3A63D0",
1964"m& c #3D65D1",
1965"n& c #466AD4",
1966"o& c #476BD4",
1967"p& c #486CD3",
1968"q& c #4A6ED4",
1969"r& c #4B6ED4",
1970"s& c #4E71D6",
1971"t& c #4F71D5",
1972"u& c #5072D6",
1973"v& c #5274D7",
1974"w& c #5273D7",
1975"x& c #5274D6",
1976"y& c #5476D7",
1977"z& c #5779D8",
1978"A& c #587AD9",
1979"B& c #5A7CDA",
1980"C& c #5C7DDB",
1981"D& c #5D7EDA",
1982"E& c #6081DA",
1983"F& c #6181DB",
1984"G& c #6283DC",
1985"H& c #6483DD",
1986"I& c #6483DE",
1987"J& c #6585DE",
1988"K& c #6786DF",
1989"L& c #6886DE",
1990"M& c #6887DF",
1991"N& c #6987DF",
1992"O& c #6A88DF",
1993"P& c #6786E0",
1994"Q& c #6A86DE",
1995"R& c #6B89E0",
1996"S& c #365BC8",
1997"T& c #365CC8",
1998"U& c #375DCA",
1999"V& c #375FCB",
2000"W& c #3860CD",
2001"X& c #3C63D0",
2002"Y& c #4167D2",
2003"Z& c #4268D2",
2004"`& c #4368D2",
2005" * c #4367D2",
2006".* c #4568D2",
2007"+* c #466AD2",
2008"@* c #496CD3",
2009"#* c #4A6DD3",
2010"$* c #4A6DD4",
2011"%* c #4D70D4",
2012"&* c #4F72D5",
2013"** c #4C70D4",
2014"=* c #4E72D5",
2015"-* c #5173D5",
2016";* c #5375D6",
2017">* c #597BDA",
2018",* c #5B7DDA",
2019"'* c #5C7EDB",
2020")* c #5D7FDB",
2021"!* c #5E80DB",
2022"~* c #5E81DA",
2023"{* c #5F81DB",
2024"]* c #5F82DB",
2025"^* c #6384DD",
2026"/* c #6384DE",
2027"(* c #6585DF",
2028"_* c #6486E0",
2029":* c #6583DD",
2030"<* c #6386E0",
2031"[* c #6686E0",
2032"}* c #6B86DD",
2033"|* c #6D86DD",
2034"1* c #6086E0",
2035"2* c #5573CD",
2036"3* c #3959C3",
2037"4* c #3959C4",
2038"5* c #3759C0",
2039"6* c #375BC7",
2040"7* c #365CC7",
2041"8* c #395FCC",
2042"9* c #3B62CE",
2043"0* c #3E64D0",
2044"a* c #4066D1",
2045"b* c #4166D1",
2046"c* c #4064CF",
2047"d* c #4065CF",
2048"e* c #4266D0",
2049"f* c #4468D1",
2050"g* c #4569D1",
2051"h* c #476BD2",
2052"i* c #466AD1",
2053"j* c #476AD2",
2054"k* c #456AD1",
2055"l* c #496DD2",
2056"m* c #4A6FD3",
2057"n* c #496ED2",
2058"o* c #4B70D4",
2059"p* c #4D71D4",
2060"q* c #4E72D4",
2061"r* c #5073D4",
2062"s* c #5174D5",
2063"t* c #5175D5",
2064"u* c #5276D6",
2065"v* c #5377D6",
2066"w* c #5478D7",
2067"x* c #5579D7",
2068"y* c #567AD8",
2069"z* c #577BD9",
2070"A* c #597CD8",
2071"B* c #5A7DD9",
2072"C* c #5A7ED9",
2073"D* c #5B7FDA",
2074"E* c #5C80DA",
2075"F* c #5D80DA",
2076"G* c #5E81DB",
2077"H* c #5D80DB",
2078"I* c #6082DC",
2079"J* c #6183DD",
2080"K* c #6183DE",
2081"L* c #6082DB",
2082"M* c #6282DE",
2083"N* c #6682DE",
2084"O* c #6583DE",
2085"P* c #3759BF",
2086"Q* c #375AC2",
2087"R* c #375AC1",
2088"S* c #375AC4",
2089"T* c #395DCA",
2090"U* c #3A5ECA",
2091"V* c #3C60CC",
2092"W* c #3D61CD",
2093"X* c #3D61CC",
2094"Y* c #3C61CD",
2095"Z* c #3E62CD",
2096"`* c #3F64CE",
2097" = c #4266CF",
2098".= c #4468D0",
2099"+= c #4267CF",
2100"@= c #4166CE",
2101"#= c #4065CE",
2102"$= c #4166CD",
2103"%= c #4267CE",
2104"&= c #456AD0",
2105"*= c #4368CE",
2106"== c #4468CF",
2107"-= c #4569D0",
2108";= c #486BD1",
2109">= c #4B6FD3",
2110",= c #4C70D3",
2111"'= c #4F73D4",
2112")= c #5275D5",
2113"!= c #5477D6",
2114"~= c #577BD7",
2115"{= c #587CD8",
2116"]= c #577CD8",
2117"^= c #597DD9",
2118"/= c #5A7DDA",
2119"(= c #597DDA",
2120"_= c #587CDA",
2121":= c #5A7EDA",
2122"<= c #567BD8",
2123"[= c #557AD9",
2124"}= c #567BD9",
2125"|= c #577CD9",
2126"1= c #587DD9",
2127"2= c #587ED9",
2128"3= c #577ED8",
2129"4= c #587DD8",
2130"5= c #587ED8",
2131"6= c #567ED7",
2132"7= c #526ABD",
2133"8= c #3759C1",
2134"9= c #385BC7",
2135"0= c #395CC8",
2136"a= c #3B5DC9",
2137"b= c #3B5ECA",
2138"c= c #3A5FCA",
2139"d= c #3B60CC",
2140"e= c #3C61CC",
2141"f= c #3D62CD",
2142"g= c #3E63CD",
2143"h= c #3C61CB",
2144"i= c #3C61CA",
2145"j= c #3D62CB",
2146"k= c #3F64CC",
2147"l= c #4065CD",
2148"m= c #4669D0",
2149"n= c #476AD0",
2150"o= c #496BD1",
2151"p= c #4A6DD2",
2152"q= c #4B6ED2",
2153"r= c #4D71D3",
2154"s= c #4E73D4",
2155"t= c #4F74D4",
2156"u= c #5075D5",
2157"v= c #5276D5",
2158"w= c #5377D7",
2159"x= c #5278D7",
2160"y= c #5277D6",
2161"z= c #5378D7",
2162"A= c #5379D8",
2163"B= c #5379D9",
2164"C= c #5278D8",
2165"D= c #5178D7",
2166"E= c #3355C0",
2167"F= c #3556C1",
2168"G= c #395AC6",
2169"H= c #385AC7",
2170"I= c #395BC7",
2171"J= c #395EC9",
2172"K= c #395FCA",
2173"L= c #3B60CA",
2174"M= c #3B60CB",
2175"N= c #375DC7",
2176"O= c #385EC8",
2177"P= c #395FC9",
2178"Q= c #3A60CA",
2179"R= c #3D63CC",
2180"S= c #4367CF",
2181"T= c #476BD1",
2182"U= c #4A6ED2",
2183"V= c #4B6FD2",
2184"W= c #4C6FD2",
2185"X= c #4D70D1",
2186"Y= c #4E71D2",
2187"Z= c #4E72D2",
2188"`= c #4E74D4",
2189" - c #4E75D5",
2190".- c #4E75D4",
2191"+- c #4F75D3",
2192"@- c #5075D2",
2193"#- c #5075D3",
2194"$- c #5177D7",
2195"%- c #5178D8",
2196"&- c #4F75D5",
2197"*- c #5076D5",
2198"=- c #4F76D6",
2199"-- c #5279D9",
2200";- c #3C52B1",
2201">- c #3656C3",
2202",- c #3757C5",
2203"'- c #3758C6",
2204")- c #3759C6",
2205"!- c #375BC6",
2206"~- c #385CC7",
2207"{- c #385DC8",
2208"]- c #365CC6",
2209"^- c #355BC6",
2210"/- c #355CC6",
2211"(- c #365DC7",
2212"_- c #375EC8",
2213":- c #375CC6",
2214"<- c #385EC6",
2215"[- c #3A5FC7",
2216"}- c #3C60C8",
2217"|- c #3D61C9",
2218"1- c #3E62CA",
2219"2- c #4063CC",
2220"3- c #4165CE",
2221"4- c #4268D0",
2222"5- c #4269D1",
2223"6- c #436AD2",
2224"7- c #446AD2",
2225"8- c #456BD2",
2226"9- c #496CD1",
2227"0- c #4C6CD0",
2228"a- c #4D6CCF",
2229"b- c #4E6DD0",
2230"c- c #4F6ECF",
2231"d- c #4E6FCF",
2232"e- c #4C70CF",
2233"f- c #4A71D0",
2234"g- c #4F6FCF",
2235"h- c #4B71D0",
2236"i- c #4A72D1",
2237"j- c #4B73D4",
2238"k- c #4F70D0",
2239"l- c #4C73D3",
2240"m- c #4C73D6",
2241"n- c #4B72D2",
2242"o- c #4B71D1",
2243"p- c #4C73D7",
2244"q- c #3354C0",
2245"r- c #3152BE",
2246"s- c #3052BE",
2247"t- c #3051BF",
2248"u- c #2E4FBF",
2249"v- c #2E4FBE",
2250"w- c #2E50BF",
2251"x- c #2F50BF",
2252"y- c #3156C4",
2253"z- c #2F56C5",
2254"A- c #2E57C5",
2255"B- c #2F57C5",
2256"C- c #3057C6",
2257"D- c #3258C6",
2258"E- c #3459C7",
2259"F- c #365AC7",
2260"G- c #385BC8",
2261"H- c #3B5DCA",
2262"I- c #3B5DCB",
2263"J- c #3C5ECC",
2264"K- c #3C60CD",
2265"L- c #3C62CE",
2266"M- c #3D65D0",
2267"N- c #3D66D1",
2268"O- c #4166D2",
2269"P- c #4667D2",
2270"Q- c #4A67D1",
2271"R- c #4C68D0",
2272"S- c #4C69CF",
2273"T- c #4D6BCE",
2274"U- c #4E6DCD",
2275"V- c #4E6ECE",
2276"W- c #4E6DCE",
2277"X- c #4970D0",
2278"Y- c #4770D0",
2279"Z- c #4B6BCE",
2280"`- c #4A6CCE",
2281" ; c #496DCF",
2282".; c #476FD0",
2283"+; c #4870D0",
2284"@; c #486DCF",
2285"#; c #242F79",
2286"$; c #2F41AC",
2287"%; c #2040B8",
2288"&; c #2041B8",
2289"*; c #2243B3",
2290"=; c #2243B8",
2291"-; c #2343B8",
2292";; c #2444B8",
2293">; c #2445B8",
2294",; c #2445B6",
2295"'; c #2445B7",
2296"); c #2444B9",
2297"!; c #2949BE",
2298"~; c #2649BF",
2299"{; c #234BBF",
2300"]; c #224CBF",
2301"^; c #224AC0",
2302"/; c #244CC0",
2303"(; c #254DC0",
2304"_; c #254DC1",
2305":; c #264DC2",
2306"<; c #274EC3",
2307"[; c #274CC3",
2308"}; c #274DC4",
2309"|; c #254DC5",
2310"1; c #214EC5",
2311"2; c #204FC6",
2312"3; c #1F50C8",
2313"4; c #2151C9",
2314"5; c #2B53C8",
2315"6; c #3154C7",
2316"7; c #3255C6",
2317"8; c #2F57C7",
2318"9; c #2C58C9",
2319"0; c #2D59CA",
2320"a; c #2D58C9",
2321"b; c #2E5BCC",
2322"c; c #325ECC",
2323"d; c #325ECB",
2324"e; c #1F40B1",
2325"f; c #1F40B2",
2326"g; c #1F40B3",
2327"h; c #2A44BD",
2328"i; c #2845BE",
2329"j; c #2745BE",
2330"k; c #2646BF",
2331"l; c #2546BE",
2332"m; c #2347BF",
2333"n; c #2147BF",
2334"o; c #2048C0",
2335"p; c #1D48C0",
2336"q; c #1C48C0",
2337"r; c #1B47C0",
2338"s; c #1C48BF",
2339"t; c #1E49BE",
2340"u; c #214ABD",
2341"v; c #244CBD",
2342"w; c #264DBE",
2343"x; c #254EC0",
2344"y; c #214FC2",
2345"z; c #1B51C5",
2346"A; c #1C51C7",
2347"B; c #2250C8",
2348"C; c #2A52C8",
2349"D; c #3254C6",
2350"E; c #3355C5",
2351"F; c #3154C8",
2352"G; c #3355C6",
2353"H; c #2F57C8",
2354"I; c #2E58C9",
2355"J; c #2E59C9",
2356"K; c #3059C9",
2357"L; c #2040B6",
2358"M; c #2743BB",
2359"N; c #2844BC",
2360"O; c #2743BD",
2361"P; c #2844BE",
2362"Q; c #2844BD",
2363"R; c #2346BE",
2364"S; c #2047BF",
2365"T; c #1E48C0",
2366"U; c #1D47C0",
2367"V; c #1D49BF",
2368"W; c #1F49BF",
2369"X; c #204ABE",
2370"Y; c #254DBF",
2371"Z; c #234EC0",
2372"`; c #2050C1",
2373" > c #1C51C3",
2374".> c #1F51C6",
2375"+> c #2651C8",
2376"@> c #2D53C7",
2377"#> c #3155C6",
2378"$> c #3155C7",
2379"%> c #3355C7",
2380"&> c #3254C7",
2381"*> c #1E40B1",
2382"=> c #2141B8",
2383"-> c #2442B9",
2384";> c #2744BB",
2385">> c #2945BB",
2386",> c #2A45BB",
2387"'> c #2944BA",
2388")> c #2745BB",
2389"!> c #2545BC",
2390"~> c #2246BD",
2391"{> c #2047BE",
2392"]> c #1F47BD",
2393"^> c #1D48BE",
2394"/> c #1E49C0",
2395"(> c #1F4AC0",
2396"_> c #214BBF",
2397":> c #244CBE",
2398"<> c #254DBE",
2399"[> c #244DBE",
2400"}> c #224FBF",
2401"|> c #2051C1",
2402"1> c #2151C3",
2403"2> c #2252C5",
2404"3> c #2151C1",
2405"4> c #2851C6",
2406"5> c #2A50C6",
2407"6> c #2E54C6",
2408"7> c #1F51C2",
2409"8> c #1D52C5",
2410"9> c #2651C9",
2411"0> c #2950C7",
2412"a> c #2D40A5",
2413"b> c #2040B0",
2414"c> c #1F40B0",
2415"d> c #223CAE",
2416"e> c #233CAE",
2417"f> c #253BAC",
2418"g> c #253BAD",
2419"h> c #233CB0",
2420"i> c #213EB2",
2421"j> c #1F3FB4",
2422"k> c #1E40B6",
2423"l> c #1F3FB7",
2424"m> c #1E3EB8",
2425"n> c #1F3FB8",
2426"o> c #2040B7",
2427"p> c #2141B6",
2428"q> c #2140B7",
2429"r> c #2241B6",
2430"s> c #2342B5",
2431"t> c #2442B6",
2432"u> c #2543B5",
2433"v> c #2643B4",
2434"w> c #2544B6",
2435"x> c #2346B8",
2436"y> c #2247B9",
2437"z> c #2048BC",
2438"A> c #1F48BF",
2439"B> c #2049C0",
2440"C> c #214AC0",
2441"D> c #224BBF",
2442"E> c #234CBE",
2443"F> c #244DBF",
2444"G> c #234CBF",
2445"H> c #264DC0",
2446"I> c #274EBF",
2447"J> c #264DBF",
2448"K> c #254EBF",
2449"L> c #2050C0",
2450"M> c #1F51C1",
2451"N> c #1E42A4",
2452"O> c #263BA6",
2453"P> c #253BA7",
2454"Q> c #253CA7",
2455"R> c #1E41A5",
2456"S> c #1F40AF",
2457"T> c #273AAC",
2458"U> c #1E40B0",
2459"V> c #1F40B5",
2460"W> c #1F40B6",
2461"X> c #1F40B8",
2462"Y> c #1E40B8",
2463"Z> c #1F3EB8",
2464"`> c #203FB7",
2465" , c #2240B6",
2466"., c #2341B7",
2467"+, c #2345B9",
2468"@, c #2147BB",
2469"#, c #2148BA",
2470"$, c #2049BB",
2471"%, c #2049BD",
2472"&, c #2049BF",
2473"*, c #224BBE",
2474"=, c #244DBD",
2475"-, c #244CBF",
2476";, c #182969",
2477">, c #273BAD",
2478",, c #2739AB",
2479"', c #263AAC",
2480"), c #243CAE",
2481"!, c #233DAE",
2482"~, c #213EAF",
2483"{, c #1F3FB0",
2484"], c #2040B4",
2485"^, c #1F3FB6",
2486"/, c #1E3EB7",
2487"(, c #2240B7",
2488"_, c #2341B6",
2489":, c #2543B4",
2490"<, c #2644B3",
2491"[, c #2544B5",
2492"}, c #2545B5",
2493"|, c #2547B6",
2494"1, c #2548B7",
2495"2, c #2349BA",
2496"3, c #1F49BE",
2497"4, c #2149BD",
2498"5, c #2049BE",
2499"6, c #214BBE",
2500"7, c #2249BE",
2501"8, c #234CBD",
2502"9, c #2149BE",
2503"0, c #1E49BF",
2504"a, c #253BA9",
2505"b, c #253BAB",
2506"c, c #263AAB",
2507"d, c #213DAF",
2508"e, c #203EAF",
2509"f, c #1D40AF",
2510"g, c #1D40B0",
2511"h, c #1E40B4",
2512"i, c #2241B7",
2513"j, c #2643B6",
2514"k, c #2744B5",
2515"l, c #2643B5",
2516"m, c #2346B6",
2517"n, c #2147B7",
2518"o, c #2644B6",
2519"p, c #2247B7",
2520"q, c #2248B8",
2521"r, c #2647B7",
2522"s, c #2549B7",
2523"t, c #2645B7",
2524"u, c #2148B8",
2525"v, c #2847B6",
2526"w, c #2549B6",
2527"x, c #2849B6",
2528"y, c #2049B7",
2529"z, c #2A49B5",
2530"A, c #243BA4",
2531"B, c #253BA5",
2532"C, c #253BA6",
2533"D, c #263AA7",
2534"E, c #263AA8",
2535"F, c #2739AA",
2536"G, c #243CAD",
2537"H, c #223DAE",
2538"I, c #1F3EAF",
2539"J, c #1E3FB0",
2540"K, c #1D40B1",
2541"L, c #1E3FB1",
2542"M, c #1F3FB3",
2543"N, c #1F3FB5",
2544"O, c #2140B6",
2545"P, c #2140B8",
2546"Q, c #2744B4",
2547"R, c #2746B6",
2548"S, c #2947B6",
2549"T, c #2946B5",
2550"U, c #2A48B6",
2551"V, c #3551A8",
2552"W, c #1F399C",
2553"X, c #143D9F",
2554"Y, c #263BA5",
2555"Z, c #273BA8",
2556"`, c #273BAA",
2557" ' c #263AAD",
2558".' c #233CAD",
2559"+' c #213DAE",
2560"@' c #203FB2",
2561"#' c #2342B6",
2562"$' c #2443B6",
2563"%' c #2543B6",
2564"&' c #2644B5",
2565"*' c #133D9E",
2566"=' c #263BA7",
2567"-' c #263BA9",
2568";' c #273BA9",
2569">' c #263AAA",
2570",' c #2539AB",
2571"'' c #2639AB",
2572")' c #253AAC",
2573"!' c #243BAD",
2574"~' c #223DAF",
2575"{' c #203FB0",
2576"]' c #2040B1",
2577"^' c #2140B3",
2578"/' c #2543B1",
2579"(' c #2744AF",
2580"_' c #1A3CA0",
2581":' c #1D3BA2",
2582"<' c #233BA4",
2583"[' c #263AA5",
2584"}' c #253AA5",
2585"|' c #263AA6",
2586"1' c #263BA4",
2587"2' c #243BA5",
2588"3' c #263BA8",
2589"4' c #223EAF",
2590"5' c #3B4CA5",
2591"6' c #1D379A",
2592"7' c #1E389C",
2593"8' c #1E399F",
2594"9' c #1F3BA2",
2595"0' c #1F3BA3",
2596"a' c #213BA4",
2597"b' c #233AA3",
2598"c' c #243AA3",
2599"d' c #2539A4",
2600"e' c #253AA6",
2601"f' c #243BA7",
2602"g' c #253CAA",
2603"h' c #253CAC",
2604"i' c #253CAD",
2605"j' c #253CAE",
2606"k' c #243DAE",
2607"l' c #213FAF",
2608"m' c #223FAF",
2609"n' c #2040AF",
2610"o' c #253D93",
2611"p' c #1D3894",
2612"q' c #1F379A",
2613"r' c #1E389B",
2614"s' c #1D399C",
2615"t' c #1C3A9D",
2616"u' c #1B3A9D",
2617"v' c #183B9E",
2618"w' c #163C9E",
2619"x' c #153C9E",
2620"y' c #163B9D",
2621"z' c #173B9D",
2622"A' c #193A9D",
2623"B' c #1C3A9E",
2624"C' c #1F3AA1",
2625"D' c #223AA4",
2626"E' c #253BA8",
2627"F' c #273BA7",
2628"G' c #263CAB",
2629"H' c #263CAC",
2630"I' c #243EAE",
2631"J' c #273BAC",
2632"K' c #2A3795",
2633"L' c #1F389B",
2634"M' c #1D389B",
2635"N' c #1C399C",
2636"O' c #1B399C",
2637"P' c #1A3A9D",
2638"Q' c #1D399B",
2639"R' c #1B399B",
2640"S' c #1A3A9C",
2641"T' c #1B3A9F",
2642"U' c #1D3AA0",
2643"V' c #203BA2",
2644"W' c #203BA3",
2645"X' c #2639A6",
2646"Y' c #1B3692",
2647"Z' c #1C3794",
2648"`' c #1D3796",
2649" ) c #1E3898",
2650".) c #1E389A",
2651"+) c #1F399B",
2652"@) c #1A399C",
2653"#) c #193A9E",
2654"$) c #1A3BA0",
2655"%) c #1C3BA2",
2656"&) c #1D3CA3",
2657"*) c #203CA4",
2658"=) c #223BA5",
2659"-) c #3C4699",
2660";) c #2B4595",
2661">) c #1C3793",
2662",) c #1D3895",
2663"') c #1E3897",
2664")) c #1F3998",
2665"!) c #1F3999",
2666"~) c #1F399A",
2667"{) c #1E399C",
2668"]) c #1C3B9E",
2669"^) c #1D3BA0",
2670"/) c #1E3CA2",
2671"() c #223CA5",
2672"_) c #243CA6",
2673":) c #596FA9",
2674"<) c #3B4894",
2675"[) c #314993",
2676"}) c #29499F",
2677"|) c #28489E",
2678"1) c #2B4BA1",
2679"2) c #2C4BA1",
2680"3) c #2D4CA2",
2681"4) c #2E4CA3",
2682"5) c #2F4CA4",
2683"6) c #2E4CA4",
2684"7) c #2F4DA3",
2685"8) c #2F4DA4",
2686"9) c #D3D5D2",
2687"0) c #3B4794",
2688"a) c #314791",
2689"b) c #304892",
2690"c) c #304893",
2691"d) c #2F4995",
2692"e) c #2F4997",
2693"f) c #2D4A9A",
2694"g) c #2A4A9D",
2695"h) c #294A9F",
2696"i) c #284AA0",
2697"j) c #294AA0",
2698"k) c #2B4AA1",
2699"l) c #2D4CA3",
2700"m) c #C9CAC9",
2701"n) c #455D9B",
2702"o) c #242F78",
2703"p) c #1B2F85",
2704"q) c #C6C3C8",
2705"r) c #B5B2B6",
2706"s) c #B5B7B4",
2707"t) c #B5B7B3",
2708"u) c #B5B2B5",
2709"v) c #B5B3B4",
2710"w) c #B5B5B4",
2711"x) c #B5B6B3",
2712"y) c #B5B4B4",
2713"z) c #B5B3B5",
2714"A) c #B5B4B5",
2715"B) c #B5B5B5",
2716"C) c #B5B5B3",
2717"D) c #B5B5B6",
2718"E) c #BAC3BE",
2719"F) c #B9C3BD",
2720"G) c #C1C3C4",
2721"H) c #BFC3C2",
2722"I) c #B9C3BE",
2723"J) c #BBC3BF",
2724"K) c #BDC3C1",
2725"L) c #C0C3C3",
2726"M) c #BEC3C1",
2727"N) c #C2C3C5",
2728"O) c #E6E3E8",
2729"P) c #E0E2DF",
2730"Q) c #E1E1E1",
2731"R) c #E2E1E3",
2732"S) c #E4E1E6",
2733"T) c #E4E2E7",
2734"U) c #E4E2E6",
2735"V) c #E3E3E4",
2736"W) c #E2E3E3",
2737"X) c #E1E3E2",
2738"Y) c #E3E3E3",
2739"Z) c #E3E3E2",
2740"`) c #EBEDEA",
2741" ! c #EAECE9",
2742".! c #E9EBE8",
2743"+! c #ECEEEB",
2744". . + @ # $ $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ $ $ $ % $ $ & * = - ; > , , ' ) ! ! ~ { ] ^ / ( _ : < [ } | | 1 2 3 3 4 4 4 4 4 4 4 5 6 4 4 4 5 6 7 8 9 4 5 6 7 8 9 6 7 8 9 ",
2745"0 a b % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ c d d d d $ $ $ $ $ c d e f g h i i i i j k l m n o p q r s t u v w x y z 4 A B C D 9 9 E 9 E F G H I F J K L L L L J K L L L L L L L L ",
2746"@ % M N O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O P Q R S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.b.b.b.b.b.",
2747"c.$ d.O e.f.g.g.g.h.g.g.g.g.g.h.h.g.g.g.g.g.h.h.g.g.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+@+$+%+&+*+=+$+-+;+>+,+'+)+!+;+>+,+~+,+>+,+~+,+",
2748"$ {+N N f.f.f.f.h.h.h.g.f.f.h.h.h.h.g.f.f.h.h.h.h.]+^+/+(+h._+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+.+C+D+E+D+F+G+H+C+I+F+G+J+K+L+H+F+G+J+K+L+H+J+H+J+H+",
2749"{+{+N N M+M+h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.N+N+h.h.(+O+P+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@[@y+}@|@1@A+1@2@3@ +2@4@2@5@C+D+6@D+7@5@C+D+6@I+C+D+6@I+",
2750"{+{+8@N M+M+h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.9@9@0@N+a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@q+r+C@D@E@F@G@H@_@I@J@K@<@L@M@N@O@P@Q@R@S@T@A+A+U@V@W@W@A+2@U@V@W@W@U@V@W@W@",
2751"{+{+8@N f.M+h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.(+(+(+9@9@X@Y@Z@e@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#z@^#/#(#p+_#r+:#s+t+<#[#}#|#|#1#_@|#_@_@2#L@3#4#y+y+5#z+z+z+5#z+z+z+z+A+A+A+A+A+",
2752"{+{+8@8@f.f.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.(+6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#&@p#q#r#s#t#u#v#w#x#x#y#y#z#A#B#C#D#E#E#F#G#H#F#H#H#u+v+I#J#K#L#J@J@M#N#O#P#M#M#M#N#M#Q#Q#R#",
2753"$ {+8@e.f.f.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.S#l.7#T#U#V#W#X#Y#Z#`# $f#g###.$+$@$#$$$$@%$&$*$=$-$;$>$,$'$)$!$~$~${$]$^$/$($($_$_$:$<$_$<$[$}$|$|$1$2$2$3$}#4$5$6$7$8$8$9$8$8$8$0$8$",
2754"$ {+a$e.f.f.h.h.h.h.h.h.h.h.h.b$h.c$c$c$c$c$d$c$c$c$c$c$c$c$c$c$c$e$e$7#f$g$h$i$X#j$k$l$m$n$o$p$q$r$l@s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$G$H$I$J$J$K$K$J$L$L$L$L$L$M$N$O$P$Q$R$S$T$U$1$V$T$W$X$Y$1$V$Y$Z$`$ %",
2755"$ $ a$a$f.f.b$b$b$b$b$b$b$b$b$b$b$b$b$b$b$b$b$b$.%b$b$b$.%d$+%+%@%h.e$l.#%$%h$%%&%*%=%-%;%>%,%'%)%!% @ @~%{%]%^%/%(%w$_%:%<%[%}%|%D$1%2%3%4%5%4%4%6%5%5%4%4%4%5%7%5%8%9%L$0%a%a%a%P$b%P$P$z#z#z#P$c%c%c%",
2756"$ $ 8@e.f.f.d%b$b$b$b$b$d%b$b$b$b$b$b$e%f%b$b$b$b$b$g%h%b$.%i%i%j%k%l%m%X@n%h$o%&%p%q%`#r%s%t%u%v%w%x%y% @z%A%B%C%D%E%F%G%:%H%I%[%J%}%K%|%D$K%D$D$L%M%M%M%M%M%D$N%O%i+P%j+Q%R%S%T%0%U%V%W%W%W%W%X%X%X%X%",
2757"$ $ 8@8@f.f.d%d%b$b$b$b$d%d%b$b$b$h%Y%Z%Z%h%f%f%h%Y%`%`% &h%h%.&+&@&#&$&X@%&&&*&=&-&j$Z#+#;&>&,&'&)&)&!&~&{&]&^&/&(&^%_&(%:&<&[&}&|&1&A$A$2&3&4&4&5&B$6&7&B$7&8&9&6&7&0&a&a&i+i+i+b&a&a&j+U%c&U%j+U%c&U%",
2758"$ $ 8@8@d&e&d%d%d%d%d%d%d%d%d%d%d%`%d%d%d%d%`%`%`%d%d%d%d%`%`%f&g&h&j%i&j&k&l&m&=&X#Y#n&o&p&q&r&>&s&t&t&u&v&w&x&y&{&z&A&B&C&D&(%(%F%F%E&F&}&}&|&G&|&H&1&I%I&A$1&}&z$z$J&K&L&M&N&O&0&P&Q&0&a&R&a&a&a&R&a&",
2759"{+$ 8@8@e&e&d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%`%f&S&T&U&V&W&Y@X&Y&Z&`& *.*+*@*#*@*r&$*#*r&%*&***=*-*;*y&z%A%z&A&A&>*B&,*,*'*)*!*!*~*{*F&}&{*}&{*]*G%G%y$^*/*J&(*2&_*:*<*=$[*}*<*=$<*|*1*",
2760"{+{+8@2*e&e&d%d%d%d%d%d%d%d%d%e&3*4*4*4*4*4*5*4*4*4*4*4*4*4*4*4*`%f&6*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*+*k*h*l*m*n*m*o*p*q*r*s*t*u*v*w*x*y*y*z*A*B*C*D*E*F*G*E*G*F*H*G*F*~*]*{*I*x$J*K*L*G%K*M*o#o#I&N*O*O*",
2761"{+{+8@2*e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&P*e&e&e&e&e&e&P*P*e&e&e&P*P*5*Q*R*S*T*U*V*W*X*Y*Z*`*d* =.=+=@=#=$=%=g@&=*===-=i*;=l*>=,=q*'=s*)=k@!=x*~={=]=^=/=(=_=:=(=<=<=]=[=}=|=]=]=1=2=3=|=4=5=2=2=2=3=6=6=6=",
2762"{+{+7=e.e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&P*P*8=9=0=a=b=U*c=d=e=f=e@#=g=h=i=i=j=k=k=l=%===m=n=o=p=q=,=r=s=t=u=v=v*w=x=x=y=z=z=A=z=A=B=C=B=D=C=B=x=B=B=B=B=B=B=B=B=B=B=B=B=B=B=",
2763"{+{+7=7=e&e&e&e&E=E=e&e&e&e&E=E=E=e&e&e&e&E=E=E=e&e&e&e&E=E=e&e&e&e&E=E=E=F=d%G=G=H=I=J=K=L=M=R+}+N=O=P=Q=j=i=h=R=e@@=S=-=T=h@l*U=V=W=X=Y=Z=`= - - -.-+-@- -#-$-%-$-&-*-$-=-%-----C=$-%---------B=B=B=B=",
2764"{+{+7=7=;-;-E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=E=>-,-'-)-!-6*~-{-{-]-^-/-/-(-_-:-N=<-[-}-|-1-2-3- =4-5-6-7-8-9-0-0-a-b-c-d-e-f-g-h-h-i-j-k-h-h-i-j-l-m-n-o-i-j-l-m-n-j-l-p-n-",
2765"{+{+7=7=;-;-E=E=E=E=E=E=E=E=q-r-s-t-t-u-u-v-v-v-u-w-x-u-u-u-u-u-u-u-u-v-v-u-u-u-u-u-v-v-u-u-u-u-v-v-u-y-z-A-B-C-D-E-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-U-V-W-V-e-X-Y-Z-`- ;.;Y-N N +;@;.;Y-N N N N N N N ",
2766"#;#;d&d&$;$;%;%;%;%;%;%;%;%;&;*;=;-;-;-;;;>;,;>;>;>;;;>;>;>;>;>;>;>;>;>;';);>;>;>;>;>;';>;>;>;>;>;';);!;~;{;];^;/;(;_;_;:;<;[;};};|;1;2;3;4;5;6;7;8;9;9;0;a;0;0;b;h.a;0;0;b;h.c;h.d;0;b;h.c;h.d;h.c;h.d;",
2767"#;#;;-;-$;$;e;e;e;e;e;e;e;e;e;e;e;f;f;f;f;e;e;e;f;f;f;f;f;f;f;f;f;f;f;f;g;%;f;f;f;f;f;g;f;f;f;f;f;g;%;h;i;j;k;l;m;n;o;p;q;r;r;s;t;u;v;w;x;y;z;A;B;C;6;D;E;F;G;G;H;I;F;G;G;H;I;J;J;K;G;H;I;J;J;K;I;J;J;K;",
2768"#;#;;-;-$;$;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;L;e;e;e;e;e;e;e;e;e;e;e;e;L;M;N;O;P;Q;i;i;k;R;S;T;U;q;q;V;W;X;{;Y;Z;`; >.>+>@>#>+>$>6;#>#>+>%>&>G;G;G;G;G;&>G;G;G;G;G;G;G;G;G;",
2769"#;#;d.;-$;$;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;*>e;e;e;e;e;e;e;e;e;e;e;e;*>=>->;>>>,>'>'>)>!>~>{>]>^>^>V;V;/>(>_>:><>[>}>|>1>2>3>2>4>5>6>7>8>9>0>G;G;G;G;9>0>G;G;G;G;G;G;G;G;",
2770"#;#;d.d.a>a>e;e;e;e;e;e;e;e;e;e;b>b>c>c>c>c>c>b>e;e;e;e;e;e;e;e;e;e;e;e;e;e;d>e>f>g>h>i>j>k>l>l>m>m>n>n>o>o>p>q>r>r>s>t>u>v>v>u>w>';x>y>z>t;A>B>C>D>E>E>F>G>F>H>H>I>F>Y;J>w;K>L>K>M>J>w;K>L>K>M>K>L>K>M>",
2771"#;#;d.d.a>a>N>e;N>O>O>O>N>e;N>O>O>P>Q>R>S>R>Q>O>O>O>N>e;N>O>O>O>N>e;N>N>O>T>e;e;e;U>U>U>U>f;V>W>o>o>o>o>X>X>Y>Y>n>n>Z>Z>`> ,.,t>t>u>u>w>+,@,#,$,%,A>&,*,=,B>[>-,w;<>C>[>-,w;w;w;w;w;-,w;w;w;w;w;w;w;w;w;",
2772"#;;,;-;-a>a>N>N>N>O>O>O>N>N>N>O>O>O>O>N>N>N>O>O>O>O>N>N>N>O>O>O>N>N>N>N>O>>,,,,,,,',g>),!,~,{,{,*>U>e;f;],o>%;o>^,^,/,/,l>q>(,_,t>u>:,<,v>[,},|,1,2,%,%,3,4,5,6,7,8,9,5,6,0,G>G>Y;G>6,0,G>G>Y;G>G>G>Y;G>",
2773";,;,;-;-O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>P>a,b,',',c,c,f>),e>d,e,{,{,U>U>f,f,U>U>g,g,*>g;h,^,^,`>`>q>i,t>j,k,k,l,w>m,n,o,p,q,r,s,t,p,u,v,w,x,y,z,u,v,w,x,y,z,w,x,y,z,",
2774";,;,b b O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>A,A,A,B,C,D,E,F,c,',g>G,!,H,~,e,{,I,J,J,K,K,U>f,f,J,L,M,N,L;O,i,P,.,l,Q,k,k,k,k,k,k,R,v,k,k,k,R,v,S,T,U,k,R,v,S,T,U,v,S,T,U,",
2775";,;,b V,W,W,X,X,O>X,X,X,X,X,O>X,X,X,X,X,X,O>X,X,X,X,X,X,O>X,X,X,X,X,O>X,X,O>O>O>O>B,B,B,B,Y,O>O>Z,`,T>T> '',g>.'+'e,{,{,e,+'+'e,e,{,J,K,e;@'N,O,#'$'%'%'j,%'j,&'k,k,%'j,&'k,k,k,k,k,&'k,k,k,k,k,k,k,k,k,",
2776";,;,b V,W,W,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,*'O>O>O>O>O>O>O>O>B,B,A,A,B,C,='-'`,;'>'>',''')'!'!'e>e>~'~'~,~,{'{,*>*>e;]']']']']']'^'/']']']'^'/':,(':,]'^'/':,(':,/':,(':,",
2777";,;,V,V,W,W,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,_':'<'['}'|'|'O>O>O>O>O>O>O>Y,Y,1'1'B,B,2'2'C,3'-'>'c,)')'!'),4'{'e;]'e;*>*>e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;",
2778";,;,5'5'W,W,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,W,6'6'6'7'8'9'0'a'b'c'd'd'}'}'O>O>O>O>O>O>O>O>Y,1'1'['['e'e'f'g'h'i'j'k'G,),!,l'j'm'n'b>b>),m'b>e;e;e;e;e;b>e;e;e;e;e;e;e;e;e;",
2779";,;,b b o'o'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'W,q'q'q'r's't'u'v'w'x'y'z'A'B'C'D'2'2'B,B,O>O>O>O>O>O>O>O>O>O>O>Y,Y,C,C,='='='E'F'3'3'3'G'Z,='F'F'G'H'I'J'F'F'G'H'I'J'G'H'I'J'",
2780";,;,b b K'K'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'W,W,W,W,W,L'L'q'r'M'N'O'P'u'N's'Q'R'S'A'T'U'C'V'9'0'W'D'}'X'|'O>O>B,B,O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>",
2781";,;,b b K'K'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'p'Y'Y'Y'Z'`' ).)+)+)+)W,W,W,W,L'L'q'q'r'r's'M'N'P'@)A'#)$)%)&)*)=)B,|'|'O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>O>",
2782"{+;,$ -);)K'p'p'o'p'p'p'p'p'o'p'p'p'p'p'p'o'p'p'p'p'p'p'o'p'p'p'p'p'o'o'p'p'p'p'p'p'p'p'p'p'>)>)Y'Y'>)Z',)')))!)~)+)W,W,W,W,W,W,W,W,W,W,W,L'L'{)s't'])^)/)])/)/)O>()])/)/)O>()O>_)O>/)O>()O>_)O>()O>_)O>",
2783":);,;,;)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)[)M M M M M M M M M M M M M M M M M M })})|)|)})M M 1)2)3)4)5)6)6)6)7)7)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)",
2784"9)#;;,;,$ -)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)<)0)a)a)a)b)c)d)e)f)g)h)i)i)j)j)M M M M M M M M M M M })})})})M k)k)M M k)l)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)8)",
2785"+ 9)m)n)$ #;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;#;o)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)",
2786"+ + 9)a m)q)r)s)r)s)r)s)r)s)r)r)s)r)s)r)s)r)r)s)r)s)r)s)r)s)r)s)r)s)r)s)r)t)u)v)w)x)x)w)y)z)A)A)B)B)B)B)w)w)C)C)w)w)B)B)B)B)B)w)w)w)w)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)B)D)B)B)B)B)B)D)B)B)B)D)B)",
2787". + + 9)9)9)q)E)q)E)q)E)q)E)q)q)E)q)E)q)E)q)q)E)q)E)q)E)q)E)q)E)q)E)q)E)q)F)G)H)E)I)J)K)H)L)L)L)L)L)L)L)H)H)M)M)H)H)L)L)G)L)L)H)H)H)H)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)L)N)L)L)L)L)L)N)L)L)L)N)L)",
2788". . 0 . + O)P)O)P)O)P)O)P)O)P)P)O)P)O)P)O)P)P)O)P)O)P)O)P)O)P)O)P)O)P)O)P)O)Q)R)S)T)U)V)W)X)W)W)V)V)V)V)V)V)V)V)Y)Y)Z)Z)Y)Z)Z)Y)Y)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)V)Y)V)V)V)V)V)Y)V)V)V)Y)V)",
2789". . . 0 0 0 . 0 0 0 + 0 + 0 + 0 + 0 + 0 + 0 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 0 `) !+ + + .! !`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)+!`)`)`)`)`)+!`)`)`)+!`)"};
2790
2791
2792static char * listviewhighcornerright_xpm[] = {
2793"100 46 780 2",
2794" c None",
2795". c #6A779D",
2796"+ c #6C789C",
2797"@ c #6C789D",
2798"# c #6B789D",
2799"$ c #6A779E",
2800"% c #66759E",
2801"& c #64749E",
2802"* c #63749E",
2803"= c #61739D",
2804"- c #576D9B",
2805"; c #556C9C",
2806"> c #4D679D",
2807", c #4A649D",
2808"' c #49629D",
2809") c #465E9C",
2810"! c #40579C",
2811"~ c #3B5394",
2812"{ c #2C4E97",
2813"] c #314993",
2814"^ c #2B4595",
2815"/ c #1B4296",
2816"( c #253D93",
2817"_ c #19418F",
2818": c #0F3C96",
2819"< c #42599E",
2820"[ c #758DC3",
2821"} c #E8EAE7",
2822"| c #EEF0ED",
2823"1 c #FBFBFC",
2824"2 c #6F7D9B",
2825"3 c #6F7D9A",
2826"4 c #6E7B9C",
2827"5 c #67759E",
2828"6 c #63739E",
2829"7 c #62739D",
2830"8 c #596F9C",
2831"9 c #4A639D",
2832"0 c #47609C",
2833"a c #445B9F",
2834"b c #3E5697",
2835"c c #2E509A",
2836"d c #2D509A",
2837"e c #2D4F99",
2838"f c #2D4F98",
2839"g c #28418A",
2840"h c #3E51A3",
2841"i c #D0D3DC",
2842"j c #A1B6EF",
2843"k c #A2B6F0",
2844"l c #A1B6F0",
2845"m c #A3B6F0",
2846"n c #A0B6EF",
2847"o c #9DB6EE",
2848"p c #9CB5EF",
2849"q c #9CB2F0",
2850"r c #9FB5EE",
2851"s c #9CB4EB",
2852"t c #9AB3EC",
2853"u c #9AB0EC",
2854"v c #9DB3EB",
2855"w c #9BB4EC",
2856"x c #9BB4EE",
2857"y c #9BB1EF",
2858"z c #9BB0F0",
2859"A c #90ACF0",
2860"B c #93ABEE",
2861"C c #91A8EB",
2862"D c #8BA3E8",
2863"E c #88A1E7",
2864"F c #809DE9",
2865"G c #7A99E8",
2866"H c #7491E5",
2867"I c #698AE4",
2868"J c #6184E3",
2869"K c #507EDC",
2870"L c #4E7CDB",
2871"M c #4F7DDC",
2872"N c #5479DA",
2873"O c #567BDC",
2874"P c #577CDD",
2875"Q c #5074DA",
2876"R c #5174DB",
2877"S c #5175DC",
2878"T c #5276DD",
2879"U c #4D71DE",
2880"V c #4C72D8",
2881"W c #3A6CE0",
2882"X c #2B49A6",
2883"Y c #E0E2DF",
2884"Z c #93AAE9",
2885"` c #94A9E8",
2886" . c #94AAE9",
2887".. c #93A9E9",
2888"+. c #92AAE9",
2889"@. c #8DA9E8",
2890"#. c #8CA7E9",
2891"$. c #92ABE9",
2892"%. c #8EAAE9",
2893"&. c #8EA9E9",
2894"*. c #8FAAE9",
2895"=. c #8CA8E9",
2896"-. c #8CA2E7",
2897";. c #86A1E6",
2898">. c #839EE9",
2899",. c #7F9CE9",
2900"'. c #7A97E8",
2901"). c #7693E7",
2902"!. c #6E8EE8",
2903"~. c #678AE9",
2904"{. c #5D84E3",
2905"]. c #577CDF",
2906"^. c #4E77DF",
2907"/. c #4A70DB",
2908"(. c #4870DB",
2909"_. c #4870DC",
2910":. c #4770E3",
2911"<. c #496FDC",
2912"[. c #486EDB",
2913"}. c #466FE4",
2914"|. c #466EE3",
2915"1. c #4167D9",
2916"2. c #4066D8",
2917"3. c #3F66D8",
2918"4. c #3D64D7",
2919"5. c #3960DA",
2920"6. c #476DD9",
2921"7. c #446EE5",
2922"8. c #305EC8",
2923"9. c #8EAAE8",
2924"0. c #8FAAE8",
2925"a. c #91AAE9",
2926"b. c #8FA9E8",
2927"c. c #8BA8E8",
2928"d. c #8AA7E9",
2929"e. c #8BA5EA",
2930"f. c #8AA7E8",
2931"g. c #87A2E6",
2932"h. c #859FE8",
2933"i. c #7F9DE8",
2934"j. c #7C9AE8",
2935"k. c #7B95E7",
2936"l. c #7090E8",
2937"m. c #6B8BE9",
2938"n. c #6386E6",
2939"o. c #5881E1",
2940"p. c #5479DE",
2941"q. c #4D74DE",
2942"r. c #476EDB",
2943"s. c #446EE1",
2944"t. c #446EE0",
2945"u. c #446EDF",
2946"v. c #446DE0",
2947"w. c #426ADF",
2948"x. c #3C64DA",
2949"y. c #4360CC",
2950"z. c #D3D5D2",
2951"A. c #E6E3E8",
2952"B. c #8DA2E7",
2953"C. c #8CA6EA",
2954"D. c #8DA3E9",
2955"E. c #88A2E7",
2956"F. c #87A1E7",
2957"G. c #8AA1E7",
2958"H. c #849EE9",
2959"I. c #7D9AE9",
2960"J. c #7B98E8",
2961"K. c #7796E5",
2962"L. c #7191E7",
2963"M. c #688CE9",
2964"N. c #6687E5",
2965"O. c #5C83E1",
2966"P. c #557BDE",
2967"Q. c #4F76DE",
2968"R. c #4C72DE",
2969"S. c #456EDF",
2970"T. c #426AD9",
2971"U. c #4269D9",
2972"V. c #4269D8",
2973"W. c #3D64D9",
2974"X. c #3A61DA",
2975"Y. c #345ED6",
2976"Z. c #335ECF",
2977"`. c #C6C3C8",
2978" + c #86A1E7",
2979".+ c #87A2E7",
2980"++ c #87A0E7",
2981"@+ c #859EE8",
2982"#+ c #849DE9",
2983"$+ c #7E9BE9",
2984"%+ c #7A99E9",
2985"&+ c #7A95E5",
2986"*+ c #7593E7",
2987"=+ c #6F8EE9",
2988"-+ c #668AE5",
2989";+ c #6386E0",
2990">+ c #5B82DF",
2991",+ c #5379DE",
2992"'+ c #5075DE",
2993")+ c #4B6FDC",
2994"!+ c #446AD7",
2995"~+ c #4269D6",
2996"{+ c #4269D5",
2997"]+ c #3E65D7",
2998"^+ c #C9CAC9",
2999"/+ c #869EE9",
3000"(+ c #859FE9",
3001"_+ c #849FE9",
3002":+ c #829DE8",
3003"<+ c #819DE8",
3004"[+ c #7B9AE9",
3005"}+ c #7A96E6",
3006"|+ c #7290E8",
3007"1+ c #698CE6",
3008"2+ c #6689E0",
3009"3+ c #5D84E0",
3010"4+ c #587FDF",
3011"5+ c #5377DD",
3012"6+ c #4B74DE",
3013"7+ c #496BD8",
3014"8+ c #7C9BE9",
3015"9+ c #7E9CE9",
3016"0+ c #7D9AEA",
3017"a+ c #7D9BEA",
3018"b+ c #7D98E8",
3019"c+ c #7C98E8",
3020"d+ c #7796E4",
3021"e+ c #7592E6",
3022"f+ c #7390E1",
3023"g+ c #698DE0",
3024"h+ c #6588DE",
3025"i+ c #5E84E0",
3026"j+ c #5880DF",
3027"k+ c #5479DC",
3028"l+ c #4F75DE",
3029"m+ c #4A6FDB",
3030"n+ c #436AD7",
3031"o+ c #3F65D7",
3032"p+ c #BAC3BE",
3033"q+ c #7B9AE8",
3034"r+ c #7B9AEA",
3035"s+ c #7A9AEA",
3036"t+ c #7B99E9",
3037"u+ c #7D97E7",
3038"v+ c #7D95E6",
3039"w+ c #7D95E5",
3040"x+ c #7C95E6",
3041"y+ c #7493E3",
3042"z+ c #7290DF",
3043"A+ c #6C8DDE",
3044"B+ c #6B89E1",
3045"C+ c #6486DF",
3046"D+ c #5D81DF",
3047"E+ c #567DDE",
3048"F+ c #4F73DE",
3049"G+ c #496EDA",
3050"H+ c #355ED6",
3051"I+ c #345ED5",
3052"J+ c #7E95E5",
3053"K+ c #7C97E8",
3054"L+ c #7C97E7",
3055"M+ c #7B94E6",
3056"N+ c #7A95E4",
3057"O+ c #7695E5",
3058"P+ c #7694E4",
3059"Q+ c #7994E6",
3060"R+ c #7995E4",
3061"S+ c #7594E4",
3062"T+ c #7391E2",
3063"U+ c #6E8EDE",
3064"V+ c #6B8ADE",
3065"W+ c #6688DF",
3066"X+ c #5F84E0",
3067"Y+ c #5980E0",
3068"Z+ c #4D72DD",
3069"`+ c #456BD7",
3070" @ c #4168D6",
3071".@ c #3C64D7",
3072"+@ c #335ED0",
3073"@@ c #4659C7",
3074"#@ c #7292E1",
3075"$@ c #7392E1",
3076"%@ c #7492E1",
3077"&@ c #718FDF",
3078"*@ c #6F8EDE",
3079"=@ c #6D8BDE",
3080"-@ c #6B88DF",
3081";@ c #597FDF",
3082">@ c #557ADD",
3083",@ c #5176DC",
3084"'@ c #4D74DD",
3085")@ c #496DDA",
3086"!@ c #3860D8",
3087"~@ c #7391E0",
3088"{@ c #7290DE",
3089"]@ c #6D8EDD",
3090"^@ c #6D8DDD",
3091"/@ c #7190E0",
3092"(@ c #6C8DDD",
3093"_@ c #6B89DF",
3094":@ c #6487E0",
3095"<@ c #6085DF",
3096"[@ c #5F81DE",
3097"}@ c #567EDE",
3098"|@ c #4F74D9",
3099"1@ c #466BD7",
3100"2@ c #4067D5",
3101"3@ c #3C63D7",
3102"4@ c #335ED3",
3103"5@ c #335ED1",
3104"6@ c #718EDD",
3105"7@ c #728EDD",
3106"8@ c #748EDD",
3107"9@ c #708EDD",
3108"0@ c #6F8DDD",
3109"a@ c #6E8DDD",
3110"b@ c #6C8ADE",
3111"c@ c #6C89DF",
3112"d@ c #6988DF",
3113"e@ c #6387DF",
3114"f@ c #6282DE",
3115"g@ c #5681E0",
3116"h@ c #577BDD",
3117"i@ c #5277DB",
3118"j@ c #4D73D8",
3119"k@ c #4A70D8",
3120"l@ c #436AD5",
3121"m@ c #3F66D6",
3122"n@ c #3C63D8",
3123"o@ c #3960D8",
3124"p@ c #3860D7",
3125"q@ c #335ED2",
3126"r@ c #345ED4",
3127"s@ c #6C88DF",
3128"t@ c #6D88DF",
3129"u@ c #6B89DE",
3130"v@ c #6888DF",
3131"w@ c #6587E0",
3132"x@ c #6989DF",
3133"y@ c #6687E0",
3134"z@ c #6287E0",
3135"A@ c #6281DD",
3136"B@ c #5881E0",
3137"C@ c #557ADB",
3138"D@ c #5176D9",
3139"E@ c #4E75D7",
3140"F@ c #4A6FD8",
3141"G@ c #476BD6",
3142"H@ c #4067D6",
3143"I@ c #3C62D7",
3144"J@ c #3C60D4",
3145"K@ c #365ED1",
3146"L@ c #345ED3",
3147"M@ c #6786DF",
3148"N@ c #5F85E0",
3149"O@ c #5F86E0",
3150"P@ c #6186DF",
3151"Q@ c #6286E0",
3152"R@ c #6284DF",
3153"S@ c #6384DF",
3154"T@ c #5B7FDE",
3155"U@ c #577DDC",
3156"V@ c #557BDA",
3157"W@ c #5278D8",
3158"X@ c #4E76D6",
3159"Y@ c #4C72D7",
3160"Z@ c #486DD8",
3161"`@ c #4469D6",
3162" # c #3F62D2",
3163".# c #3C60CF",
3164"+# c #345ECF",
3165"@# c #6086DF",
3166"## c #6085E0",
3167"$# c #6285DF",
3168"%# c #6383DD",
3169"&# c #6481DC",
3170"*# c #6380DD",
3171"=# c #6183DE",
3172"-# c #6083DD",
3173";# c #6081DC",
3174"># c #6080DD",
3175",# c #6083DE",
3176"'# c #6181DC",
3177")# c #6280DD",
3178"!# c #577EDB",
3179"~# c #557CD7",
3180"{# c #4F76D6",
3181"]# c #4E74D7",
3182"^# c #466CD7",
3183"/# c #3B64D6",
3184"(# c #4261CD",
3185"_# c #375FCE",
3186":# c #5A7FD8",
3187"<# c #6281DA",
3188"[# c #5F81D8",
3189"}# c #5C80D8",
3190"|# c #557DD7",
3191"1# c #577ED8",
3192"2# c #567ED7",
3193"3# c #587DD8",
3194"4# c #577DD8",
3195"5# c #587ED8",
3196"6# c #567DD8",
3197"7# c #5379D9",
3198"8# c #5177D7",
3199"9# c #4D74D5",
3200"0# c #486ED9",
3201"a# c #4068D4",
3202"b# c #3D65D2",
3203"c# c #4361CC",
3204"d# c #345ECE",
3205"e# c #325DCF",
3206"f# c #2C5AD1",
3207"g# c #3959C5",
3208"h# c #547BD8",
3209"i# c #567DD7",
3210"j# c #557BD8",
3211"k# c #5279D9",
3212"l# c #5278D9",
3213"m# c #4D74D6",
3214"n# c #4B71D8",
3215"o# c #496CD8",
3216"p# c #4669D7",
3217"q# c #3D66D3",
3218"r# c #3F62CF",
3219"s# c #4260CC",
3220"t# c #5379D8",
3221"u# c #4E75D4",
3222"v# c #4C73D7",
3223"w# c #476CD7",
3224"x# c #4869D0",
3225"y# c #4067D2",
3226"z# c #3D64D1",
3227"A# c #4261CC",
3228"B# c #395FCE",
3229"C# c #4F75D3",
3230"D# c #5074D2",
3231"E# c #5174D1",
3232"F# c #5175D1",
3233"G# c #4F74D3",
3234"H# c #4C73D5",
3235"I# c #4C73D4",
3236"J# c #4A72D1",
3237"K# c #4B70CF",
3238"L# c #506CCC",
3239"M# c #4D6BCE",
3240"N# c #4167D0",
3241"O# c #3D65D1",
3242"P# c #3F63CF",
3243"Q# c #3B5FCD",
3244"R# c #3159CD",
3245"S# c #4971D0",
3246"T# c #4870CF",
3247"U# c #4C6FCF",
3248"V# c #4E6CCE",
3249"W# c #4E6BCE",
3250"X# c #4769CF",
3251"Y# c #3D66D0",
3252"Z# c #3C65D1",
3253"`# c #4062CE",
3254" $ c #3D5FCD",
3255".$ c #365FCF",
3256"+$ c #325DCD",
3257"@$ c #2D5AD0",
3258"#$ c #3859C5",
3259"$$ c #355FCF",
3260"%$ c #355ECF",
3261"&$ c #335ECE",
3262"*$ c #305CCD",
3263"=$ c #2B5ACE",
3264"-$ c #3056C9",
3265";$ c #2553C6",
3266">$ c #2153C8",
3267",$ c #1F4FC7",
3268"'$ c #274CC5",
3269")$ c #214AC7",
3270"!$ c #1C48C8",
3271"~$ c #1244C9",
3272"{$ c #1043C9",
3273"]$ c #1144C9",
3274"^$ c #2A45BE",
3275"/$ c #2744B5",
3276"($ c #1D49C0",
3277"_$ c #2B58DE",
3278":$ c #002D94",
3279"<$ c #2B59CA",
3280"[$ c #2A59CA",
3281"}$ c #2E57C8",
3282"|$ c #3255C6",
3283"1$ c #3355C5",
3284"2$ c #1C52C8",
3285"3$ c #1D50C7",
3286"4$ c #234FC6",
3287"5$ c #264CC5",
3288"6$ c #1D48C7",
3289"7$ c #1245C8",
3290"8$ c #1F44C2",
3291"9$ c #2945BE",
3292"0$ c #2A45BD",
3293"a$ c #2040BF",
3294"b$ c #3156C7",
3295"c$ c #3056C7",
3296"d$ c #3354C5",
3297"e$ c #3355C6",
3298"f$ c #3255C5",
3299"g$ c #3254C5",
3300"h$ c #1952C7",
3301"i$ c #1951C8",
3302"j$ c #2050C7",
3303"k$ c #274CC4",
3304"l$ c #244CC6",
3305"m$ c #1F49C7",
3306"n$ c #1E47C5",
3307"o$ c #2045C3",
3308"p$ c #1C44BF",
3309"q$ c #2045BE",
3310"r$ c #2040B8",
3311"s$ c #3254C6",
3312"t$ c #3055C6",
3313"u$ c #2A54C6",
3314"v$ c #2353C7",
3315"w$ c #3054C5",
3316"x$ c #2F55C5",
3317"y$ c #2A54C5",
3318"z$ c #2553C5",
3319"A$ c #2F54C5",
3320"B$ c #3155C6",
3321"C$ c #2A54C7",
3322"D$ c #1A52C8",
3323"E$ c #204FC2",
3324"F$ c #264DC6",
3325"G$ c #234BC5",
3326"H$ c #1D48C1",
3327"I$ c #1E48BF",
3328"J$ c #2646BE",
3329"K$ c #2B45BD",
3330"L$ c #1E43BE",
3331"M$ c #2643BF",
3332"N$ c #2243BF",
3333"O$ c #3049BC",
3334"P$ c #1E50BE",
3335"Q$ c #1D50C0",
3336"R$ c #1D50BF",
3337"S$ c #1852C1",
3338"T$ c #1E51C0",
3339"U$ c #214FBF",
3340"V$ c #2050C0",
3341"W$ c #244EBF",
3342"X$ c #2151C0",
3343"Y$ c #234FBF",
3344"Z$ c #2350C0",
3345"`$ c #2351C0",
3346" % c #244FBF",
3347".% c #2250C0",
3348"+% c #2051C0",
3349"@% c #1E50C0",
3350"#% c #244DBE",
3351"$% c #274DBF",
3352"%% c #244CBF",
3353"&% c #1C48C0",
3354"*% c #2247BF",
3355"=% c #2C44BD",
3356"-% c #1C44BE",
3357";% c #1444BF",
3358">% c #1841BF",
3359",% c #1F40BF",
3360"'% c #254DBE",
3361")% c #224FBE",
3362"!% c #224FBF",
3363"~% c #234EBF",
3364"{% c #254CBD",
3365"]% c #244DBD",
3366"^% c #244CBD",
3367"/% c #264DBE",
3368"(% c #264DBD",
3369"_% c #214BC0",
3370":% c #1D48C0",
3371"<% c #2347BF",
3372"[% c #2B44BD",
3373"}% c #2444BE",
3374"|% c #0F42BF",
3375"1% c #0641BF",
3376"2% c #0F41BF",
3377"3% c #1741BE",
3378"4% c #1F40BD",
3379"5% c #234BBF",
3380"6% c #234CBE",
3381"7% c #214BBE",
3382"8% c #244CBE",
3383"9% c #214ABE",
3384"0% c #214ABF",
3385"a% c #1F48C0",
3386"b% c #2746BE",
3387"c% c #1F43BE",
3388"d% c #0941BE",
3389"e% c #0342BA",
3390"f% c #0242BC",
3391"g% c #1241B8",
3392"h% c #1F40B7",
3393"i% c #2F41AC",
3394"j% c #2644AE",
3395"k% c #2D49B4",
3396"l% c #2649B6",
3397"m% c #2949B7",
3398"n% c #2849B5",
3399"o% c #2149B8",
3400"p% c #1E49B9",
3401"q% c #1F48B8",
3402"r% c #1F49B9",
3403"s% c #2545B6",
3404"t% c #2744B7",
3405"u% c #2844B7",
3406"v% c #2043B8",
3407"w% c #1241B7",
3408"x% c #1340B8",
3409"y% c #0D41B8",
3410"z% c #1941B8",
3411"A% c #1F40B8",
3412"B% c #203FB8",
3413"C% c #2549B5",
3414"D% c #2648B6",
3415"E% c #2547B7",
3416"F% c #2248B7",
3417"G% c #2048B7",
3418"H% c #2346B6",
3419"I% c #2146B6",
3420"J% c #2247B7",
3421"K% c #2148B7",
3422"L% c #2743B4",
3423"M% c #2643B5",
3424"N% c #2542B6",
3425"O% c #1D42B7",
3426"P% c #0E42B8",
3427"Q% c #0C41B8",
3428"R% c #1341B8",
3429"S% c #1740B8",
3430"T% c #1C41B8",
3431"U% c #1F40B1",
3432"V% c #2644B5",
3433"W% c #2544B5",
3434"X% c #2544B4",
3435"Y% c #2444B5",
3436"Z% c #2444B4",
3437"`% c #2744B4",
3438" & c #2241B7",
3439".& c #1D41B8",
3440"+& c #0B42B8",
3441"@& c #0942B8",
3442"#& c #0C42B8",
3443"$& c #0F41B8",
3444"%& c #1641B8",
3445"&& c #2442B5",
3446"*& c #2543B3",
3447"=& c #2342B2",
3448"-& c #2341B4",
3449";& c #2141B3",
3450">& c #2141B5",
3451",& c #2140B5",
3452"'& c #2040B5",
3453")& c #1C40B7",
3454"!& c #1B41B3",
3455"~& c #0142B6",
3456"{& c #0E41B7",
3457"]& c #1141B7",
3458"^& c #1440B2",
3459"/& c #113FB0",
3460"(& c #1440B0",
3461"_& c #213EAF",
3462":& c #233DAE",
3463"<& c #223EAF",
3464"[& c #1E40B1",
3465"}& c #173EAD",
3466"|& c #1440AF",
3467"1& c #0D40AF",
3468"2& c #0941B0",
3469"3& c #0D3FAE",
3470"4& c #1B3CAC",
3471"5& c #233CAD",
3472"6& c #203FB0",
3473"7& c #273BAD",
3474"8& c #1D40B0",
3475"9& c #2040B1",
3476"0& c #1E40B0",
3477"a& c #1C40B0",
3478"b& c #1B3DAC",
3479"c& c #143DAC",
3480"d& c #193DAD",
3481"e& c #1B3DAD",
3482"f& c #173DAD",
3483"g& c #153DAC",
3484"h& c #1C3CAC",
3485"i& c #243CAD",
3486"j& c #213FB0",
3487"k& c #263BAA",
3488"l& c #253CAE",
3489"m& c #273AAC",
3490"n& c #273AAD",
3491"o& c #253BAD",
3492"p& c #1D3CAC",
3493"q& c #243BAD",
3494"r& c #1E3CAC",
3495"s& c #263BAD",
3496"t& c #1A3DAC",
3497"u& c #143DAB",
3498"v& c #163DAC",
3499"w& c #1A3CAC",
3500"x& c #1F3CAD",
3501"y& c #263BAB",
3502"z& c #263BA6",
3503"A& c #1E42A4",
3504"B& c #2D40A5",
3505"C& c #253BA6",
3506"D& c #253CA7",
3507"E& c #263AA5",
3508"F& c #253BA7",
3509"G& c #1E3BA6",
3510"H& c #193DA6",
3511"I& c #173DA5",
3512"J& c #143DA6",
3513"K& c #1A3DA7",
3514"L& c #133DA6",
3515"M& c #123DA5",
3516"N& c #1A3CA7",
3517"O& c #243BA6",
3518"P& c #263AA7",
3519"Q& c #273BA7",
3520"R& c #263AA6",
3521"S& c #223BA6",
3522"T& c #1D3BA6",
3523"U& c #173CA6",
3524"V& c #133DA5",
3525"W& c #1B3DA6",
3526"X& c #193DA5",
3527"Y& c #123DA4",
3528"Z& c #163CA5",
3529"`& c #213CA6",
3530" * c #273BA8",
3531".* c #263BA7",
3532"+* c #253BA5",
3533"@* c #263BA5",
3534"#* c #1C3BA6",
3535"$* c #1B3BA9",
3536"%* c #133BA8",
3537"&* c #0A3BA7",
3538"** c #083AA6",
3539"=* c #123CA5",
3540"-* c #0839A8",
3541";* c #0239A6",
3542">* c #123AA8",
3543",* c #1F49C8",
3544"'* c #2F4DA4",
3545")* c #2E4DA3",
3546"!* c #384CA4",
3547"~* c #3C4DA7",
3548"{* c #394EA7",
3549"]* c #3B4CA5",
3550"^* c #3C52B1",
3551"/* c #3551A8",
3552"(* c #3759BE",
3553"_* c #4161C7",
3554":* c #0033A8",
3555"<* c #596FA9",
3556"[* c #2F4DA3",
3557"}* c #2D4BA5",
3558"|* c #2E4CA4",
3559"1* c #2C4AA5",
3560"2* c #2D4BA4",
3561"3* c #354DA4",
3562"4* c #3A4BA4",
3563"5* c #394DA6",
3564"6* c #4056AD",
3565"7* c #445BBB",
3566"8* c #B5B7B4",
3567"9* c #1B2F85",
3568"0* c #242F79",
3569"a* c #B5B5B5",
3570"b* c #B5B2B6",
3571"c* c #C0C3C3",
3572"d* c #E3E3E4",
3573"e* c #EBEDEA",
3574". + @ + # $ % & # $ % & # $ % & # $ % & & * = - ; > , ' ) ! ~ { { { { { { { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ / / / ( / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / _ _ / / : / < [ } | | | 1 1 ",
3575"2 2 2 2 3 2 4 @ 3 2 4 @ 3 2 4 @ 3 2 4 @ # 5 6 7 8 ; > 9 0 a b c d e f { { { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ( ( ( ( ( ( ( ( ( / / / / / / / / / / / / / / / / / _ _ _ _ _ _ _ _ _ _ _ g g _ / / : : : h i } 1 | 1 ",
3576"j k l m n o p q n o p q r s t u v w x y z A B C D E F G H I J K L M N O P O O Q R S T T T T T T T T T T T T T T T T T T U U U U U U U U U U U U U U U U U U U U U U U U U U U U V V V U U W X : [ Y | | ",
3577"Z ` . ...+.@.#...+.@.#.Z $.%.&.Z $.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.6.7.8.: h Y } 1 ",
3578"9.0.a.b.c.c.d.e.f.c.d.e.f.c.d.e.f.c.d.e.g.h.i.j.k.l.m.n.o.p.q.r.s.s.t.u.u.v.w.x.4.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.y.5.7.6.: / z.A.} ",
3579"-.B.C.D.-.E.g.F.G.E.g.F.G.E.g.F.G.E.g.F.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.V.U.U.W.X.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Z.y.Y.7.7.: : `.z.} ",
3580" +.+g.;.++F.@+#+++F.@+#+++F.@+#+++F.@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+{+{+4.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.Y.Y.5.5.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Z.Z.Z.y.y.5.7.7.: : ^+z.Y ",
3581"/+(+_+#+H.H.>.:+H.H.>.:+H.H.>.:+H.H.>.<+[+}+*+|+1+2+3+4+5+6+7+{+{+4.4.4.4.4.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.Y.Y.Y.Y.Y.Y.Y.5.Y.Y.Y.Y.Y.Y.Y.Y.5.Y.Y.5.5.5.5.Y.Y.Y.Y.Y.Y.Z.Z.Z.Z.y.y.y.y.y.y.7.7.: : ^+i } ",
3582"8+9+0+0+a+0+0+b+a+0+0+b+a+0+0+b+a+0+0+c+d+e+f+g+h+i+j+k+l+m+n+o+4.4.4.4.5.5.5.5.5.5.Y.Y.5.5.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Y.Y.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.7.7.: : p+z.Y ",
3583"q+r+r+s+t+u+v+w+t+u+v+w+t+u+v+w+t+u+x+&+y+z+A+B+C+D+E+5+F+G+~+4.4.4.4.5.5.5.5.5.H+Y.Y.Y.Y.Y.Y.Y.Y.I+Y.Z.Y.Y.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.7.7.: : `.z.A.",
3584"J+v+K+L+M+N+O+P+Q+R+O+P+Q+R+O+P+Q+R+O+S+T+U+V+W+X+Y+P.T Z+`+ @4.4..@5.5.5.5.5.5.Y.Y.Y.I+I+I+I+I++@+@Z.Z.Y.Y.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.@@Z.7.7.: : p+z.Y ",
3585"#@$@$@%@%@$@#@&@#@#@#@&@#@#@#@&@#@#@#@*@=@-@;+i+;@>@,@'@)@ @4.X.5.5.H+Y.Y.Y.!@Y.Y.I++@+@Z.Z.+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.y.Z.6.6.: : `.z.A.",
3586"#@$@~@~@~@{@]@^@/@{@]@^@/@{@]@^@/@{@]@(@_@:@<@[@}@k+|@V 1@2@3@5.5.5.Y.Y.I+4@I+5@+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.y.Z.6.6.: : p+z.Y ",
3587"6@7@8@9@0@a@b@c@a@a@b@c@a@a@b@c@a@a@b@d@e@<@f@g@h@i@j@k@l@m@n@o@o@p@Y.I+q@q@r@+@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.y.Z.6.6.: : `.z.A.",
3588"s@t@u@_@_@v@w@w@x@v@w@w@x@v@y@y@x@v@:@z@A@B@P C@D@E@F@G@H@I@J@K@5@+@+@+@r@I+L@Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.@@Z.W W : : p+z.Y ",
3589"M@N@O@P@C+Q@Q@R@C+;+Q@R@C+;+;+S@C+Q@Q@R@T@U@V@W@X@Y@Z@`@4. #.#+#Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.8.Z.Z.Z.Z.8.8.Z.Z.y.@@@@W W : : `.z.A.",
3590"@#O@O@##$#%#&#*#=#-#;#>#,#-#;#>#,#-#'#)#!#~#W@{#]#k@^#H@/#(#_#Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.8.8.Z.Z.Z.Z.Z.Z.Z.8.8.8.8.8.8.8.8.8.8.8.Z.Z.y.y.@@W W : : p+z.Y ",
3591":#<#[#}#|#1#2#3#4#5#1#4#4#1#1#4#4#1#1#6#7#8#9#V 0#`+a#b#c#d#e#Z.Z.Z.f#Z.Z.Z.f#f#f#f#f#f#f#f#f#f#g#g#g#g#g#8.8.8.8.8.8.8.8.8.g#g#g#g#8.g#8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.y.y.@@W W : : `.z.A.",
3592"h#2#i#6#|#j#7#k#|#j#7#7#|#j#7#7#|#j#7#l#8#m#n#n#o#p#q#r#s#d#e#Z.Z.Z.f#f#f#f#Z.f#f#g#g#g#g#g#g#g#g#g#g#g#g#8.8.8.g#g#8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.y.y.y.y.8.8.8.y.y.@@W W : : p+z.Y ",
3593"l#7#7#l#7#7#7#W@7#7#7#W@7#7#k#W@t#7#7#W@u#v#n#w#x#y#z#A#B#Z.e#f#f#Z.f#f#f#Z.Z.g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#8.8.8.g#g#g#g#8.8.g#g#g#g#g#g#8.8.g#8.8.y.8.8.y.y.8.y.y.y.y.@@W W : : `.z.A.",
3594"C#D#E#F#G#H#I#J#G#H#I#J#G#H#I#J#G#H#I#J#K#L#M#N#O#P#s#Q#+#f#R#f#f#f#f#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#@@@@y.y.@@@@y.y.W W : : p+z.Y ",
3595"S#S#S#S#S#T#S#U#S#T#S#U#S#T#S#U#S#T#S#U#V#W#X#Y#Z#`# $.$+$@$#$g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#g#@@@@@@@@@@@@@@@@@@y.y.W W : : `.z.A.",
3596"+$Z..$$$%$+$&$*$%$+$&$*$%$+$&$*$%$+$&$*$=$-$;$>$,$'$)$!$~${$]$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$/$/$/$/$($($_$_$:$:$p+z.Y ",
3597"<$<$<$<$<$[$}$|$<$[$}$|$<$[$}$|$<$[$}$|$1$2$3$4$5$)$6$7$8$9$0$a$a$a$a$a$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$/$/$/$^$^$^$/$/$/$/$/$/$/$/$/$/$/$/$/$/$($($_$_$:$:$`.z.A.",
3598"b$c$c$c$d$e$e$f$g$|$|$1$d$e$e$1$d$e$e$1$h$i$j$k$l$m$n$o$p$9$q$a$a$a$a$a$a$a$a$^$a$a$^$^$^$^$^$^$a$r$r$r$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$^$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$($($_$_$:$:$p+z.Y ",
3599"e$1$s$s$1$t$u$v$w$x$y$z$A$x$u$v$g$B$C$>$D$E$F$G$H$I$J$K$L$M$N$a$a$a$a$a$a$a$a$^$r$r$a$^$^$^$a$r$r$r$r$r$/$^$r$^$^$^$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$O$($_$_$:$:$`.z.A.",
3600"P$Q$R$S$T$U$V$W$X$Y$Z$W$`$ %.%W$+%U$@%#%$%%%&%($*%=%-%;%>%>%,%r$r$r$r$r$a$a$a$/$/$/$r$r$r$r$r$r$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$O$($_$_$:$:$p+z.Y ",
3601"'%W$)%!%~%{%'%]%~%^%'%]%~%^%'%]%~%^%/%(%_%&%:%<%[%}%|%1%2%3%4%r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$/$r$/$/$r$r$r$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$/$r$/$/$/$/$/$O$($_$_$:$:$`.z.A.",
3602"5%6%'%'%6%7%8%9%6%7%8%9%6%7%8%9%6%7%8%0%&%a%<%b%[%c%d%e%f%g%h%r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$/$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$/$/$/$/$/$/$/$/$/$/$/$/$/$/$r$r$/$/$r$r$/$r$i%j%O$($_$_$:$:$p+z.Y ",
3603"k%l%m%n%o%o%p%q%o%o%r%q%o%o%r%q%o%o%p%q%s%t%/$u%v%w%x%y%z%A%B%r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$/$/$/$/$/$/$/$r$r$i%i%i%r$r$i%i%i%i%i%i%i%i%i%i%i%i%r$/$/$j%j%j%j%j%j%j%j%j%O$($_$_$:$:$`.z.A.",
3604"C%D%E%F%G%H%I%J%K%H%I%J%K%H%I%J%K%H%I%J%L%M%N%O%P%Q%R%S%T%A%B%r$r$r$r$r$r$r$r$r$r$r$r$r$r$r$U%U%r$r$i%i%/$/$r$r$/$/$/$/$r$r$i%i%i%i%i%i%i%i%i%i%i%i%i%i%j%i%j%j%j%j%j%j%j%j%j%j%j%j%j%O$($_$_$:$:$p+z.Y ",
3605"/$/$/$/$V%V%W%X%W%Y%Y%Z%W%W%Y%Z%W%W%W%`%`% &B%.&+&@&#&$&%&A%B%r$r$r$U%U%U%U%r$U%U%U%U%U%U%U%U%U%U%i%i%i%i%i%i%i%i%/$/$/$i%i%i%i%i%i%i%i%i%j%j%j%j%i%i%i%i%i%j%j%j%i%i%j%j%j%j%j%j%j%j%O$($_$_$:$:$`.z.A.",
3606"&&*&=&-&=&;&>&,&=&;&>&,&=&;&>&,&=&;&>&'&)&!&~&{&]&^&/&(&_&:&<&U%U%U%U%U%U%U%U%U%U%U%U%U%i%i%U%U%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%O$($_$_$:$:$p+z.Y ",
3607"U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%U%[&}&|&1&2&3&4&5&_&6&U%7&U%U%U%U%U%U%U%U%i%i%U%U%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%O$O$_$_$:$:$`.z.A.",
3608"U%U%U%U%U%U%[&8&U%9&[&0&U%9&[&0&U%9&[&a&:&b&c&d&e&f&g&h&i&<&j&U%U%U%U%U%U%U%U%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%O$O$_$_$:$:$p+z.Y ",
3609"k&l&m&7&7&n&o&p&7&n&q&r&s&s&q&r&s&n&o&p&t&u&u&g&v&w&x&q&n&m&y&7&7&U%U%7&z&7&z&U%A&B&i%i%B&B&i%i%B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&i%B&O$O$_$_$:$:$`.z.A.",
3610"C&D&E&z&z&E&F&G&z&E&F&G&z&E&F&G&z&E&F&G&H&I&J&K&L&M&N&O&P&Q&z&z&z&z&z&z&z&z&z&z&z&z&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&O$O$_$_$:$:$p+z.Y ",
3611"z&z&z&z&R&S&T&U&R&S&T&U&R&S&T&U&R&S&T&U&V&V&W&X&Y&Z&`&C&R&z&z&z&z&z&z&z&z&z&z&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&O$O$_$_$:$:$^+z.A.",
3612"z& *.*+*@*#*$*%*@*#*$*%*@*#*$*%*@*#*$*%*&***=*-*;*>*k&P&+*z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&z&B&B&B&B&z&z&z&B&B&B&z&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&B&/$O$O$@@_$,*:$/ ^+z.Y ",
3613"'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*)*'*!*~*{*]*^*^*^*/*/*/*/*/*/*/*^*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*^*/*/*/*/*/*h h ^*h h ^*^*h h ^*^*^*^*h ^*^*^*^*h ^*^*^*(*_*_*_*_*_$:*:$<*`.z.} ",
3614"'*'*'*'*'*[*}*|*'*[*}*|*'*[*}*|*'*[*}*|*1*1*2*}*}*2*[*)*3*4*5*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*h h h h h h h h h h h h h h h h 6*7*_*_*_*_*^*:*:$: 8*z.Y } ",
3615"9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*9*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*( <*8*^+z.Y } 1 ",
3616"a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*8*b*8*b*8*b*8*b*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*b*8*8*8*8*b*8*`.z.A.Y | | ",
3617"c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*p+`.p+`.p+`.p+`.`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+`.p+^+`.^+^+z.z.Y Y | | 1 ",
3618"d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*d*A.Y A.Y A.Y A.Y Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y A.Y } } | | | | 1 1 ",
3619"e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*e*} | } | } | } | | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | } | | | | 1 | | | 1 1 1 "};
3620
3621
3622static char * tabmiddle_xpm[] = {
3623"33 42 32 1",
3624" c None",
3625". c #CECFEF",
3626"+ c #CECBE7",
3627"@ c #C6C7E7",
3628"# c #C6CBE7",
3629"$ c #BDBEDE",
3630"% c #BDC3DE",
3631"& c #CECBEF",
3632"* c #B5B6D6",
3633"= c #ADAECE",
3634"- c #ADB2CE",
3635"; c #BDBAD6",
3636"> c #B5BAD6",
3637", c #C6C3DE",
3638"' c #ADAAC6",
3639") c #B5B2CE",
3640"! c #B5B6CE",
3641"~ c #A5A2BD",
3642"{ c #A5A6BD",
3643"] c #9C9EB5",
3644"^ c #9CA2BD",
3645"/ c #ADAEC6",
3646"( c #C6C3E7",
3647"_ c #9C9AB5",
3648": c #A5A6C6",
3649"< c #949AAD",
3650"[ c #A5AAC6",
3651"} c #9496AD",
3652"| c #BDBADE",
3653"1 c #BDBED6",
3654"2 c #9CA2B5",
3655"3 c #A5AABD",
3656"..........................+@.#.#.",
3657"........................$@%&#.#..",
3658"......................**$$@@&#.#.",
3659".....................=-;>,%+@.#..",
3660"....................'')!$$@@&#.#.",
3661"...................~{=)$$@@&#.#..",
3662"..................]^'/;;(%&#.#...",
3663"................._]:/*>,%&@.#.#..",
3664".................<{[)!$%+@.#.#...",
3665"................}~{=!$%@@.#......",
3666"................]^/-|$@@.#.......",
3667"................]'/*;@@&#........",
3668"...............<~[)>,%&#.#.......",
3669"...............]~=)$%+#.#........",
3670"...............]'/;1@@.#.........",
3671"...............~{)*,%&#..........",
3672"...............2/-$$@#...........",
3673"...............~[*>(@&#..........",
3674"...............^=)$%+#...........",
3675"...............{'*>(@.#..........",
3676"...............^=)$%+#...........",
3677"...............{'*>(@.#..........",
3678"...............^=)$%+#...........",
3679"...............{'*>(@.#..........",
3680"...............^=)$%+#...........",
3681"...............{'*>(@.#..........",
3682"...............^=)$%+#...........",
3683"...............{'*>@@.#..........",
3684"...............^=!$%&#...........",
3685"...............{/*;@@.#..........",
3686"...............{)!$%&#...........",
3687"..............]'/;1@@.#..........",
3688"..............23)>,%&#...........",
3689"..............~=-$$@@.#..........",
3690".............]{/*;@@.#...........",
3691"............<^[)>,%&#............",
3692"............]{/!$%@@.#...........",
3693"..........]^[-!$%@@.#............",
3694".........]^3/!>$@@.#.............",
3695".......<]^3/!>$@@&#..............",
3696".....<]2{[/!>$%@&#.#.............",
3697"}<<_]2{3/-!>$%@&#.#.............."};
3698
3699
3700static char * tabselectedbeginn_xpm[] = {
3701"33 39 28 1",
3702" c None",
3703". c #CECFEF",
3704"+ c #EFF3EF",
3705"@ c #FFFBFF",
3706"# c #F7FBF7",
3707"$ c #FFFFFF",
3708"% c #EFEFEF",
3709"& c #F7F7F7",
3710"* c #DEDFDE",
3711"= c #E7E7E7",
3712"- c #D6D3D6",
3713"; c #DEE3DE",
3714"> c #EFEBEF",
3715", c #F7F3F7",
3716"' c #CECBCE",
3717") c #CECFCE",
3718"! c #D6D7D6",
3719"~ c #DEDBDE",
3720"{ c #E7EBE7",
3721"] c #C6C7C6",
3722"^ c #E7E3E7",
3723"/ c #BDC3BD",
3724"( c #CED3CE",
3725"_ c #BDBABD",
3726": c #C6C3C6",
3727"< c #C6CBC6",
3728"[ c #D6DBD6",
3729"} c #BDBEBD",
3730"..........................+@#$#$$",
3731"........................%%&&@#$#$",
3732"......................*==%%&&@#$$",
3733"....................--*;>%,&@#$#$",
3734"...................')!~={,+@#$#$$",
3735"...................]-!^=%%&&@#$#$",
3736"................../'(~;>%&&@#$#$$",
3737"................._])!*={,&@#$#$$$",
3738"................_])~*>%&&$#$$$$$$",
3739"................:<![={&&@#$$$$$$$",
3740"................:)!^=,+@#$$$$$$$$",
3741"...............}'(*^%+@#$#$$$$$$$",
3742"...............:<!*>%&&$#$$$$$$$$",
3743".............../)!^{,&@#$$$$$$$$$",
3744"...............](*^%+@#$$$$$$$$$$",
3745"...............]!~=%&&$$$$$$$$$$$",
3746"...............'(*=,+@#$$$$$$$$$$",
3747"...............<!*>%&&$$$$$$$$$$$",
3748"...............'-^=,+@#$$$$$$$$$$",
3749"...............<!*>%&#$$$$$$$$$$$",
3750"...............'-^=,+@#$$$$$$$$$$",
3751"...............<!*>%&#$$$$$$$$$$$",
3752"...............'-^=,+@#$$$$$$$$$$",
3753"...............<!*>%&#$$$$$$$$$$$",
3754"...............'-^=,+@#$$$$$$$$$$",
3755"...............<!*>%&#$$$$$$$$$$$",
3756"...............'!^=,&@#$$$$$$$$$$",
3757"...............<~*>%&#$$$$$$$$$$$",
3758"...............)!^{,&@#$$$$$$$$$$",
3759"..............])~;%+@#$$$$$$$$$$$",
3760"..............]-[={&&$#$$$$$$$$$$",
3761".............])!^=,&@#$$$$$$$$$$$",
3762"............:'-*^%+@#$$$$$$$$$$$$",
3763"............])~*>%&&$#$$$$$$$$$$$",
3764"...........:'!*={,&@#$$$$$$$$$$$$",
3765"..........:'-~^=,+@#$$$$$$$$$$$$$",
3766".......}]'-~^=%,&@#$$$$$$$$$$$$$$",
3767".....}:])-~^=%,+@#$#$$$$$$$$$$$$$",
3768"}}}:]')-!*^=%,&@#$#$$$$$$$$$$$$$$"};
3769
3770
3771static char * tabselectedend_xpm[] = {
3772"33 42 33 1",
3773" c None",
3774". c #FFFFFF",
3775"+ c #CECBE7",
3776"@ c #C6C7E7",
3777"# c #CECFEF",
3778"$ c #C6CBE7",
3779"% c #BDBEDE",
3780"& c #BDC3DE",
3781"* c #CECBEF",
3782"= c #B5B6D6",
3783"- c #ADAECE",
3784"; c #ADB2CE",
3785"> c #BDBAD6",
3786", c #B5BAD6",
3787"' c #C6C3DE",
3788") c #ADAAC6",
3789"! c #B5B2CE",
3790"~ c #B5B6CE",
3791"{ c #A5A2BD",
3792"] c #A5A6BD",
3793"^ c #9C9EB5",
3794"/ c #9CA2BD",
3795"( c #ADAEC6",
3796"_ c #C6C3E7",
3797": c #9C9AB5",
3798"< c #A5A6C6",
3799"[ c #949AAD",
3800"} c #A5AAC6",
3801"| c #9496AD",
3802"1 c #BDBADE",
3803"2 c #BDBED6",
3804"3 c #9CA2B5",
3805"4 c #A5AABD",
3806"..........................+@#$#$#",
3807"........................%@&*$#$##",
3808"......................==%%@@*$#$#",
3809".....................-;>,'&+@#$##",
3810"....................))!~%%@@*$#$#",
3811"...................{]-!%%@@*$#$##",
3812"..................^/)(>>_&*$#$###",
3813".................:^<(=,'&*@#$#$##",
3814".................[]}!~%&+@#$#$###",
3815"................|{]-~%&@@#$######",
3816"................^/(;1%@@#$#######",
3817"................^)(=>@@*$########",
3818"...............[{}!,'&*$#$#######",
3819"...............^{-!%&+$#$########",
3820"...............^)(>2@@#$#########",
3821"...............{]!='&*$##########",
3822"...............3(;%%@$###########",
3823"...............{}=,_@*$##########",
3824".............../-!%&+$###########",
3825"...............])=,_@#$##########",
3826".............../-!%&+$###########",
3827"...............])=,_@#$##########",
3828".............../-!%&+$###########",
3829"...............])=,_@#$##########",
3830".............../-!%&+$###########",
3831"...............])=,_@#$##########",
3832".............../-!%&+$###########",
3833"...............])=,@@#$##########",
3834".............../-~%&*$###########",
3835"...............](=>@@#$##########",
3836"...............]!~%&*$###########",
3837"..............^)(>2@@#$##########",
3838"..............34!,'&*$###########",
3839"..............{-;%%@@#$##########",
3840".............^](=>@@#$###########",
3841"............[/}!,'&*$############",
3842"............^](~%&@@#$###########",
3843"..........^/};~%&@@#$############",
3844".........^/4(~,%@@#$#############",
3845".......[^/4(~,%@@*$##############",
3846".....[^3]}(~,%&@*$#$#############",
3847"|[[:^3]4(;~,%&@*$#$##############"};
3848
3849
3850static char * tabend_xpm[] = {
3851"33 42 3 1",
3852" c None",
3853". c #CECFEF",
3854"+ c #FFFFFF",
3855"..........................+++++++",
3856"........................+++++++++",
3857"......................+++++++++++",
3858".....................++++++++++++",
3859"....................+++++++++++++",
3860"...................++++++++++++++",
3861"..................+++++++++++++++",
3862".................++++++++++++++++",
3863".................++++++++++++++++",
3864"................+++++++++++++++++",
3865"................+++++++++++++++++",
3866"................+++++++++++++++++",
3867"...............++++++++++++++++++",
3868"...............++++++++++++++++++",
3869"...............++++++++++++++++++",
3870"...............++++++++++++++++++",
3871"...............++++++++++++++++++",
3872"...............++++++++++++++++++",
3873"...............++++++++++++++++++",
3874"...............++++++++++++++++++",
3875"...............++++++++++++++++++",
3876"...............++++++++++++++++++",
3877"...............++++++++++++++++++",
3878"...............++++++++++++++++++",
3879"...............++++++++++++++++++",
3880"...............++++++++++++++++++",
3881"...............++++++++++++++++++",
3882"...............++++++++++++++++++",
3883"...............++++++++++++++++++",
3884"...............++++++++++++++++++",
3885"...............++++++++++++++++++",
3886"..............+++++++++++++++++++",
3887"..............+++++++++++++++++++",
3888"..............+++++++++++++++++++",
3889".............++++++++++++++++++++",
3890"............+++++++++++++++++++++",
3891"............+++++++++++++++++++++",
3892"..........+++++++++++++++++++++++",
3893".........++++++++++++++++++++++++",
3894".......++++++++++++++++++++++++++",
3895".....++++++++++++++++++++++++++++",
3896"+++++++++++++++++++++++++++++++++"};
3897
3898
3899
3900
3901QColor fromHsl(QColor c)
3902{
3903 const qreal h = c.hueF();
3904 const qreal s = c.saturationF();
3905 const qreal l = c.valueF();
3906
3907 qreal ca[3] = {0, 0, 0};
3908
3909 if (s == 0 || h == 1) {
3910 // achromatic case
3911 ca[0] = ca[1] = ca[2] = l;
3912 } else {
3913 // chromatic case
3914 qreal temp2;
3915 if (l < qreal(0.5))
3916 temp2 = l * (qreal(1.0) + s);
3917 else
3918 temp2 = l + s - (l * s);
3919
3920 const qreal temp1 = (qreal(2.0) * l) - temp2;
3921 qreal temp3[3] = { h + (qreal(1.0) / qreal(3.0)),
3922 h,
3923 h - (qreal(1.0) / qreal(3.0)) };
3924
3925 for (int i = 0; i != 3; ++i) {
3926 if (temp3[i] < qreal(0.0))
3927 temp3[i] += qreal(1.0);
3928 else if (temp3[i] > qreal(1.0))
3929 temp3[i] -= qreal(1.0);
3930
3931 const qreal sixtemp3 = temp3[i] * qreal(6.0);
3932
3933 if (sixtemp3 < qreal(1.0))
3934 ca[i] = ((temp1 + (temp2 - temp1) * sixtemp3));
3935 else if ((temp3[i] * qreal(2.0)) < qreal(1.0))
3936 ca[i] = (temp2);
3937 else if ((temp3[i] * qreal(3.0)) < qreal(2.0))
3938 ca[i] = temp1 + (temp2 -temp1) * (qreal(2.0) /qreal(3.0) - temp3[i]) * qreal(6.0);
3939 else ca[i] = temp1;
3940 }
3941 }
3942
3943 return QColor::fromRgbF(ca[0], ca[1], ca[2]);
3944}
3945
3946#define Q_MAX_3(a, b, c) ( ( a > b && a > c) ? a : (b > c ? b : c) )
3947#define Q_MIN_3(a, b, c) ( ( a < b && a < c) ? a : (b < c ? b : c) )
3948
3949QColor toHsl(QColor c)
3950{
3951 QColor color;
3952 qreal h;
3953 qreal s;
3954 qreal l;
3955
3956 const qreal r = c.redF();
3957 const qreal g = c.greenF();
3958 const qreal b = c.blueF();
3959 const qreal max = Q_MAX_3(r, g, b);
3960 const qreal min = Q_MIN_3(r, g, b);
3961 const qreal delta = max - min;
3962 const qreal delta2 = max + min;
3963 const qreal lightness = qreal(0.5) * delta2;
3964 l = (lightness);
3965 if (qFuzzyIsNull(delta)) {
3966 // achromatic case, hue is undefined
3967 h = 0;
3968 s = 0;
3969 } else {
3970 // chromatic case
3971 qreal hue = 0;
3972 if (lightness < qreal(0.5))
3973 s = ((delta / delta2));
3974 else
3975 s = ((delta / (qreal(2.0) - delta2)));
3976 if (qFuzzyCompare(r, max)) {
3977 hue = ((g - b) /delta);
3978 } else if (qFuzzyCompare(g, max)) {
3979 hue = (2.0 + (b - r) / delta);
3980 } else if (qFuzzyCompare(b, max)) {
3981 hue = (4.0 + (r - g) / delta);
3982 } else {
3983 Q_ASSERT_X(false, "QColor::toHsv", "internal error");
3984 }
3985 hue *= 60.0;
3986 if (hue < 0.0)
3987 hue += 360.0;
3988 h = (hue * 100);
3989 }
3990
3991 h = h / 36000;
3992
3993 return QColor::fromHsvF(h, s, l);
3994}
3995
3996void tintColor(QColor &color, QColor tintColor, qreal _saturation)
3997{
3998 tintColor = toHsl(tintColor);
3999 color = toHsl(color);
4000 qreal hue = tintColor.hueF();
4001
4002 qreal saturation = color.saturationF();
4003 if (_saturation)
4004 saturation = _saturation;
4005 qreal lightness = color.valueF();
4006 color.setHsvF(hue, saturation, lightness);
4007
4008 color = fromHsl(color);
4009 color.toRgb();
4010}
4011
4012void tintImagePal(QImage *image, QColor color, qreal saturation)
4013{
4014 QVector<QRgb> colorTable = image->colorTable();
4015 for (int i=2;i< colorTable.size();i++) {
4016 QColor c(toHsl(colorTable.at(i)));
4017 tintColor(c, color, saturation);
4018 colorTable[i] = c.rgb();
4019 }
4020 image->setColorTable(colorTable);
4021}
4022
4023
4024void tintImage(QImage *image, QColor color, qreal saturation)
4025{
4026 *image = image->convertToFormat(QImage::Format_RGB32);
4027
4028 for (int x = 0; x < image->width(); x++)
4029 for (int y = 0; y < image->height(); y++) {
4030 QColor c(image->pixel(x,y));
4031 tintColor(c, color, saturation);
4032 image->setPixel(x, y, c.rgb());
4033 }
4034}
4035
4036#endif //Q_WS_WINCE_WM
4037
4038
4039enum QSliderDirection { SliderUp, SliderDown, SliderLeft, SliderRight };
4040
4041#ifdef Q_WS_WINCE_WM
4042
4043void QWindowsMobileStylePrivate::tintImagesButton(QColor color)
4044{
4045 if (currentTintButton == color)
4046 return;
4047 currentTintButton = color;
4048
4049 imageTabEnd = QImage(tabend_xpm);
4050 imageTabSelectedEnd = QImage(tabselectedend_xpm);
4051 imageTabSelectedBegin = QImage(tabselectedbeginn_xpm);
4052 imageTabMiddle = QImage(tabmiddle_xpm);
4053 tintImage(&imageTabEnd, color, 0.0);
4054 tintImage(&imageTabSelectedEnd, color, 0.0);
4055 tintImage(&imageTabSelectedBegin, color, 0.0);
4056 tintImage(&imageTabMiddle, color, 0.0);
4057
4058 if (!doubleControls) {
4059 int height = imageTabMiddle.height() / 2 + 1;
4060 imageTabEnd = imageTabEnd.scaledToHeight(height);
4061 imageTabMiddle = imageTabMiddle.scaledToHeight(height);
4062 imageTabSelectedEnd = imageTabSelectedEnd.scaledToHeight(height);
4063 imageTabSelectedBegin = imageTabSelectedBegin.scaledToHeight(height);
4064 }
4065}
4066
4067void QWindowsMobileStylePrivate::tintImagesHigh(QColor color)
4068{
4069 if (currentTintHigh == color)
4070 return;
4071 currentTintHigh = color;
4072 tintListViewHighlight(color);
4073 imageScrollbarHandleUpHigh = imageScrollbarHandleUp;
4074 imageScrollbarHandleDownHigh = imageScrollbarHandleDown;
4075 tintImagePal(&imageScrollbarHandleDownHigh, color, qreal(0.8));
4076 tintImagePal(&imageScrollbarHandleUpHigh, color, qreal(0.8));
4077}
4078
4079void QWindowsMobileStylePrivate::tintListViewHighlight(QColor color)
4080{
4081 imageListViewHighlightCornerRight = QImage(listviewhighcornerright_xpm);
4082 tintImage(&imageListViewHighlightCornerRight, color, qreal(0.0));
4083
4084 imageListViewHighlightCornerLeft = QImage(listviewhighcornerleft_xpm);
4085 tintImage(&imageListViewHighlightCornerLeft, color, qreal(0.0));
4086
4087 imageListViewHighlightMiddle = QImage(listviewhighmiddle_xpm);
4088 tintImage(&imageListViewHighlightMiddle, color, qreal(0.0));
4089
4090 int height = imageListViewHighlightMiddle.height();
4091 if (!doubleControls) {
4092 height = height / 2;
4093 imageListViewHighlightCornerRight = imageListViewHighlightCornerRight.scaledToHeight(height);
4094 imageListViewHighlightCornerLeft = imageListViewHighlightCornerLeft.scaledToHeight(height);
4095 imageListViewHighlightMiddle = imageListViewHighlightMiddle.scaledToHeight(height);
4096 }
4097}
4098
4099#endif //Q_WS_WINCE_WM
4100
4101void QWindowsMobileStylePrivate::setupWindowsMobileStyle65()
4102{
4103#ifdef Q_WS_WINCE_WM
4104 wm65 = qt_wince_is_windows_mobile_65();
4105 if (wm65) {
4106 imageScrollbarHandleUp = QImage(sbhandleup_xpm);
4107 imageScrollbarHandleDown = QImage(sbhandledown_xpm);
4108 imageScrollbarGripUp = QImage(sbgripup_xpm);
4109 imageScrollbarGripDown = QImage(sbgripdown_xpm);
4110 imageScrollbarGripMiddle = QImage(sbgripmiddle_xpm);
4111
4112 if (!doubleControls) {
4113 imageScrollbarHandleUp = imageScrollbarHandleUp.scaledToHeight(imageScrollbarHandleUp.height() / 2);
4114 imageScrollbarHandleDown = imageScrollbarHandleDown.scaledToHeight(imageScrollbarHandleDown.height() / 2);
4115 imageScrollbarGripMiddle = imageScrollbarGripMiddle.scaledToHeight(imageScrollbarGripMiddle.height() / 2);
4116 imageScrollbarGripUp = imageScrollbarGripUp.scaledToHeight(imageScrollbarGripUp.height() / 2);
4117 imageScrollbarGripDown = imageScrollbarGripDown.scaledToHeight(imageScrollbarGripDown.height() / 2);
4118 } else {
4119 }
4120 tintImagesHigh(Qt::blue);
4121 }
4122#endif //Q_WS_WINCE_WM
4123}
4124
4125void QWindowsMobileStylePrivate::drawTabBarTab(QPainter *painter, const QStyleOptionTab *tab)
4126{
4127#ifndef QT_NO_TABBAR
4128#ifdef Q_WS_WINCE_WM
4129 if (wm65) {
4130 tintImagesButton(tab->palette.button().color());
4131 QRect r;
4132 r.setTopLeft(tab->rect.topRight() - QPoint(imageTabMiddle.width(), 0));
4133 r.setBottomRight(tab->rect.bottomRight());
4134 if (tab->state & QStyle::State_Selected) {
4135 painter->fillRect(tab->rect, tab->palette.window());
4136 } else {
4137 painter->fillRect(tab->rect, QColor(imageTabMiddle.pixel(0,0)));
4138 }
4139 if (tab->selectedPosition == QStyleOptionTab::NextIsSelected) {
4140 painter->drawImage(r, imageTabSelectedBegin);
4141 } else if (tab->position == QStyleOptionTab::End ||
4142 tab->position == QStyleOptionTab::OnlyOneTab) {
4143 if (!(tab->state & QStyle::State_Selected)) {
4144 painter->drawImage(r, imageTabEnd);
4145 }
4146 } else if (tab->state & QStyle::State_Selected) {
4147 painter->drawImage(r, imageTabSelectedEnd);
4148 } else {
4149 painter->drawImage(r, imageTabMiddle);
4150 }
4151 if (tab->position == QStyleOptionTab::Beginning && ! (tab->state & QStyle::State_Selected)) {
4152 painter->drawImage(tab->rect.topLeft() - QPoint(imageTabMiddle.width() * 0.60, 0), imageTabSelectedEnd);
4153 }
4154 //imageTabBarBig
4155 return;
4156 }
4157#endif //Q_WS_WINCE_WM
4158 painter->save();
4159 painter->setPen(tab->palette.shadow().color());
4160 if (doubleControls) {
4161 QPen pen = painter->pen();
4162 pen.setWidth(2);
4163 pen.setCapStyle(Qt::FlatCap);
4164 painter->setPen(pen);
4165 }
4166 if(tab->shape == QTabBar::RoundedNorth) {
4167 if (tab->state & QStyle::State_Selected) {
4168 painter->fillRect(tab->rect, tab->palette.light());
4169 painter->drawLine(tab->rect.topRight(), tab->rect.bottomRight());
4170 }
4171 else {
4172 painter->fillRect(tab->rect, tab->palette.button());
4173 painter->drawLine(tab->rect.bottomLeft() , tab->rect.bottomRight());
4174 painter->drawLine(tab->rect.topRight(), tab->rect.bottomRight());
4175 }
4176 }
4177 else if(tab->shape == QTabBar::RoundedSouth) {
4178 if (tab->state & QStyle::State_Selected) {
4179 painter->fillRect(tab->rect.adjusted(0,-2,0,0), tab->palette.light());
4180 painter->drawLine(tab->rect.topRight(), tab->rect.bottomRight());
4181 }
4182 else {
4183 painter->fillRect(tab->rect, tab->palette.button());
4184 if (doubleControls)
4185 painter->drawLine(tab->rect.topLeft() + QPoint(0,1), tab->rect.topRight() + QPoint(0,1));
4186 else
4187 painter->drawLine(tab->rect.topLeft(), tab->rect.topRight());
4188 painter->drawLine(tab->rect.topRight(), tab->rect.bottomRight());
4189 }
4190 }
4191 else if(tab->shape == QTabBar::RoundedEast) {
4192 if (tab->state & QStyle::State_Selected) {
4193 painter->fillRect(tab->rect, tab->palette.light());
4194 painter->drawLine(tab->rect.topLeft(), tab->rect.topRight());
4195 }
4196 else {
4197 painter->fillRect(tab->rect, tab->palette.button());
4198 painter->drawLine(tab->rect.topLeft(), tab->rect.bottomLeft());
4199 painter->drawLine(tab->rect.topLeft(), tab->rect.topRight());
4200 }
4201 }
4202 else if(tab->shape == QTabBar::RoundedWest) {
4203 if (tab->state & QStyle::State_Selected) {
4204 painter->fillRect(tab->rect, tab->palette.light());
4205 painter->drawLine(tab->rect.bottomLeft(), tab->rect.bottomRight());
4206 }
4207 else {
4208 painter->fillRect(tab->rect, tab->palette.button());
4209 painter->drawLine(tab->rect.topRight(), tab->rect.bottomRight());
4210 painter->drawLine(tab->rect.bottomLeft(), tab->rect.bottomRight());
4211 }
4212 }
4213 painter->restore();
4214#endif //QT_NO_TABBAR
4215}
4216
4217void QWindowsMobileStylePrivate::drawPanelItemViewSelected(QPainter *painter, const QStyleOptionViewItemV4 *option, QRect rect)
4218{
4219#ifdef Q_WS_WINCE_WM
4220 if (wm65) {
4221 QRect r;
4222 if (rect.isValid())
4223 r = rect;
4224 else
4225 r = option->rect;
4226 tintImagesHigh(option->palette.highlight().color());
4227
4228 painter->setPen(QColor(Qt::lightGray));
4229
4230 if (option->viewItemPosition == QStyleOptionViewItemV4::Middle) {
4231 painter->drawImage(r, imageListViewHighlightMiddle);
4232 } else if (option->viewItemPosition == QStyleOptionViewItemV4::Beginning) {
4233 painter->drawImage(r.adjusted(10, 0, 0, 0), imageListViewHighlightMiddle);
4234 } else if (option->viewItemPosition == QStyleOptionViewItemV4::End) {
4235 painter->drawImage(r.adjusted(0, 0, -10, 0), imageListViewHighlightMiddle);
4236 } else {
4237 painter->drawImage(r.adjusted(10, 0, -10, 0), imageListViewHighlightMiddle);
4238 }
4239
4240 QImage cornerLeft = imageListViewHighlightCornerLeft;
4241 QImage cornerRight = imageListViewHighlightCornerRight;
4242
4243 int width = r.width() > cornerRight.width() ? r.width() : cornerRight.width();
4244
4245 if ((width * 2) > r.width()) {
4246 width = (r.width() - 5) / 2;
4247 }
4248
4249 cornerLeft = cornerLeft.scaled(width, r.height());
4250 cornerRight = cornerRight.scaled(width, r.height());
4251
4252 if ((option->viewItemPosition == QStyleOptionViewItemV4::Beginning) || (option->viewItemPosition == QStyleOptionViewItemV4::OnlyOne) || !option->viewItemPosition) {
4253 painter->drawImage(r.topLeft(), cornerLeft);
4254 }
4255 if ((option->viewItemPosition == QStyleOptionViewItemV4::End) || (option->viewItemPosition == QStyleOptionViewItemV4::OnlyOne) || !option->viewItemPosition) {
4256 painter->drawImage(r.topRight() - QPoint(cornerRight.width(),0), cornerRight);
4257 }
4258 return;
4259 }
4260#endif //Q_WS_WINCE_WM
4261 QPalette::ColorGroup cg = option->state & QStyle::State_Enabled
4262 ? QPalette::Normal : QPalette::Disabled;
4263
4264 if (rect.isValid())
4265 painter->fillRect(rect, option->palette.brush(cg, QPalette::Highlight));
4266 else
4267 painter->fillRect(option->rect, option->palette.brush(cg, QPalette::Highlight));
4268}
4269
4270void QWindowsMobileStylePrivate::drawScrollbarGrip(QPainter *p, QStyleOptionSlider *newScrollbar, const QStyleOptionComplex *option, bool drawCompleteFrame)
4271{
4272#ifdef Q_WS_WINCE_WM
4273 if (wm65) {
4274 if (newScrollbar->orientation == Qt::Horizontal) {
4275 QTransform transform;
4276 transform.rotate(-90);
4277 QRect r = newScrollbar->rect;
4278 p->drawImage(r.adjusted(10, 0, -10, 0), imageScrollbarGripMiddle.transformed(transform));
4279 p->drawImage(r.topLeft(), imageScrollbarGripUp.transformed(transform));
4280 p->drawImage(r.topRight() - QPoint(imageScrollbarGripDown.height() - 1, 0), imageScrollbarGripDown.transformed(transform));
4281 } else {
4282 QRect r = newScrollbar->rect;
4283 p->drawImage(r.adjusted(0, 10, 0, -10), imageScrollbarGripMiddle);
4284 p->drawImage(r.topLeft(), imageScrollbarGripUp);
4285 p->drawImage(r.bottomLeft() - QPoint(0, imageScrollbarGripDown.height() - 1), imageScrollbarGripDown);
4286 }
4287 return ;
4288 }
4289#endif
4290 if (newScrollbar->orientation == Qt::Horizontal) {
4291 p->fillRect(newScrollbar->rect,option->palette.button());
4292 QRect r = newScrollbar->rect;
4293 p->drawLine(r.topLeft(), r.bottomLeft());
4294 p->drawLine(r.topRight(), r.bottomRight());
4295 if (smartphone) {
4296 p->drawLine(r.topLeft(), r.topRight());
4297 p->drawLine(r.bottomLeft(), r.bottomRight());
4298 }
4299 }
4300 else {
4301 p->fillRect(newScrollbar->rect,option->palette.button());
4302 QRect r = newScrollbar->rect;
4303 p->drawLine(r.topLeft(), r.topRight());
4304 p->drawLine(r.bottomLeft(), r.bottomRight());
4305 if (smartphone) {
4306 p->drawLine(r.topLeft(), r.bottomLeft());
4307 p->drawLine(r.topRight(), r.bottomRight());
4308 }
4309 }
4310 if (newScrollbar->state & QStyle::State_HasFocus) {
4311 QStyleOptionFocusRect fropt;
4312 fropt.QStyleOption::operator=(*newScrollbar);
4313 fropt.rect.setRect(newScrollbar->rect.x() + 2, newScrollbar->rect.y() + 2,
4314 newScrollbar->rect.width() - 5,
4315 newScrollbar->rect.height() - 5);
4316 }
4317 int gripMargin = doubleControls ? 4 : 2;
4318 int doubleLines = doubleControls ? 2 : 1;
4319 //If there is a frame around the scrollbar (abstractScrollArea),
4320 //then the margin is different, because of the missing frame
4321 int gripMarginFrame = doubleControls ? 3 : 1;
4322 if (drawCompleteFrame)
4323 gripMarginFrame = 0;
4324 //draw grips
4325 if (!smartphone)
4326 if (newScrollbar->orientation == Qt::Horizontal) {
4327 for (int i = -3; i < 3; i += 2) {
4328 p->drawLine(
4329 QPoint(newScrollbar->rect.center().x() + i * doubleLines + 1,
4330 newScrollbar->rect.top() + gripMargin +gripMarginFrame),
4331 QPoint(newScrollbar->rect.center().x() + i * doubleLines + 1,
4332 newScrollbar->rect.bottom() - gripMargin));
4333 }
4334 } else {
4335 for (int i = -2; i < 4 ; i += 2) {
4336 p->drawLine(
4337 QPoint(newScrollbar->rect.left() + gripMargin + gripMarginFrame ,
4338 newScrollbar->rect.center().y() + 1 + i * doubleLines - 1),
4339 QPoint(newScrollbar->rect.right() - gripMargin,
4340 newScrollbar->rect.center().y() + 1 + i * doubleLines - 1));
4341 }
4342 }
4343 if (!smartphone) {
4344 QRect r;
4345 if (doubleControls)
4346 r = option->rect.adjusted(1, 1, -1, 0);
4347 else
4348 r = option->rect.adjusted(0, 0, -1, 0);
4349 if (drawCompleteFrame && doubleControls)
4350 r.adjust(0, 0, 0, -1);
4351 //Check if the scrollbar is part of an abstractItemView and draw the frame according
4352 if (drawCompleteFrame)
4353 p->drawRect(r);
4354 else
4355 if (newScrollbar->orientation == Qt::Horizontal)
4356 p->drawLine(r.topLeft(), r.topRight());
4357 else
4358 p->drawLine(r.topLeft(), r.bottomLeft());
4359 }
4360}
4361
4362void QWindowsMobileStylePrivate::drawScrollbarHandleUp(QPainter *p, QStyleOptionSlider *opt, bool completeFrame, bool )
4363{
4364#ifdef Q_WS_WINCE_WM
4365 if (wm65) {
4366 tintImagesHigh(opt->palette.highlight().color());
4367 QRect r = opt->rect;
4368 if (opt->orientation == Qt::Horizontal) {
4369 QTransform transform;
4370 transform.rotate(-90);
4371 if (opt->state & QStyle::State_Sunken)
4372 p->drawImage(r.topLeft(), imageScrollbarHandleUpHigh.transformed(transform));
4373 else
4374 p->drawImage(r.topLeft(), imageScrollbarHandleUp.transformed(transform));
4375 } else {
4376 if (opt->state & QStyle::State_Sunken)
4377 p->drawImage(r.topLeft(), imageScrollbarHandleUpHigh);
4378 else
4379 p->drawImage(r.topLeft(), imageScrollbarHandleUp);
4380 }
4381 return ;
4382 }
4383#endif //Q_WS_WINCE_WM
4384
4385 QBrush fill = opt->palette.button();
4386 if (opt->state & QStyle::State_Sunken)
4387 fill = opt->palette.shadow();
4388
4389 QStyleOption arrowOpt = *opt;
4390 if (doubleControls)
4391 arrowOpt.rect = opt->rect.adjusted(4, 6, -5, -3);
4392 else
4393 arrowOpt.rect = opt->rect.adjusted(5, 6, -4, -3);
4394
4395 bool horizontal = (opt->orientation == Qt::Horizontal);
4396
4397 if (horizontal) {
4398 p->fillRect(opt->rect,fill);
4399 QRect r = opt->rect.adjusted(0,0,1,0);
4400 p->drawLine(r.topRight(), r.bottomRight());
4401 if (doubleControls)
4402 arrowOpt.rect.adjust(0, -2 ,0, -2);
4403 q_func()->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowLeft, &arrowOpt, p, 0);
4404 } else {
4405 p->fillRect(opt->rect,fill);
4406 QRect r = opt->rect.adjusted(0, 0, 0, 1);
4407 p->drawLine(r.bottomLeft(), r.bottomRight());
4408 if (completeFrame)
4409 arrowOpt.rect.adjust(-2, 0, -2, 0);
4410 if (doubleControls)
4411 arrowOpt.rect.adjust(0, -4 , 0, -4);
4412 if (completeFrame && doubleControls)
4413 arrowOpt.rect.adjust(2, 0, 2, 0);
4414 q_func()->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowUp, &arrowOpt, p, 0);
4415 }
4416}
4417
4418void QWindowsMobileStylePrivate::drawScrollbarHandleDown(QPainter *p, QStyleOptionSlider *opt, bool completeFrame, bool secondScrollBar)
4419{
4420#ifndef QT_NO_SCROLLBAR
4421#ifdef Q_WS_WINCE_WM
4422 if (wm65) {
4423 tintImagesHigh(opt->palette.highlight().color());
4424 QRect r = opt->rect;
4425 if (opt->orientation == Qt::Horizontal) {
4426 QTransform transform;
4427 transform.rotate(-90);
4428 if (opt->state & QStyle::State_Sunken)
4429 p->drawImage(r.topLeft(), imageScrollbarHandleDownHigh.transformed(transform));
4430 else
4431 p->drawImage(r.topLeft(), imageScrollbarHandleDown.transformed(transform));
4432 } else {
4433 if (opt->state & QStyle::State_Sunken)
4434 p->drawImage(r.topLeft(), imageScrollbarHandleDownHigh);
4435 else
4436 p->drawImage(r.topLeft(), imageScrollbarHandleDown);
4437 }
4438 return ;
4439 }
4440#endif //Q_WS_WINCE_WM
4441
4442 QBrush fill = opt->palette.button();
4443 if (opt->state & QStyle::State_Sunken)
4444 fill = opt->palette.shadow();
4445
4446 QStyleOption arrowOpt = *opt;
4447 if (doubleControls)
4448 arrowOpt.rect = opt->rect.adjusted(4, 0, -5, 3);
4449 else
4450 arrowOpt.rect = opt->rect.adjusted(5, 6, -4, -3);
4451
4452 bool horizontal = (opt->orientation == Qt::Horizontal);
4453
4454 if (horizontal) {
4455 p->fillRect(opt->rect,fill);
4456 QRect r = opt->rect.adjusted(0, 0, 0, 0);
4457 p->drawLine(r.topLeft(), r.bottomLeft());
4458 if (secondScrollBar)
4459 p->drawLine(r.topRight(), r.bottomRight());
4460 if (doubleControls)
4461 arrowOpt.rect.adjust(0, 4, 0, 4 );
4462 q_func()->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowRight, &arrowOpt, p, 0);
4463 } else {
4464 p->fillRect(opt->rect,fill);
4465 QRect r = opt->rect.adjusted(0, -1, 0, -1);
4466 p->drawLine(r.topLeft(), r.topRight());
4467 if (secondScrollBar)
4468 p->drawLine(r.bottomLeft() + QPoint(0,1), r.bottomRight() + QPoint(0, 1));
4469 if (completeFrame)
4470 arrowOpt.rect.adjust(-2, 0, -2, 0);
4471 if (doubleControls)
4472 arrowOpt.rect.adjust(1, 0, 1, 0 );
4473 if (completeFrame && doubleControls)
4474 arrowOpt.rect.adjust(1, 0, 1, 0);
4475 q_func()->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &arrowOpt, p, 0);
4476 }
4477#endif //QT_NO_SCROLLBAR
4478}
4479
4480void QWindowsMobileStylePrivate::drawScrollbarGroove(QPainter *p,const QStyleOptionSlider *opt)
4481{
4482#ifndef QT_NO_SCROLLBAR
4483#ifdef Q_OS_WINCE_WM
4484 if (wm65) {
4485 p->fillRect(opt->rect, QColor(231, 231, 231));
4486 return ;
4487 }
4488#endif
4489 QBrush fill;
4490 if (smartphone) {
4491 fill = opt->palette.light();
4492 p->fillRect(opt->rect, fill);
4493 fill = opt->palette.button();
4494 QImage image;
4495#ifndef QT_NO_IMAGEFORMAT_XPM
4496 if (opt->orientation == Qt::Horizontal)
4497 image = QImage(vertlines_xpm);
4498 else
4499 image = QImage(horlines_xpm);
4500#endif
4501 image.setColor(1, opt->palette.button().color().rgb());
4502 fill.setTextureImage(image);
4503 }
4504 else {
4505 fill = opt->palette.light();
4506 }
4507 p->fillRect(opt->rect, fill);
4508#endif //QT_NO_SCROLLBAR
4509}
4510
4511QWindowsMobileStyle::QWindowsMobileStyle(QWindowsMobileStylePrivate &dd) : QWindowsStyle(dd) {
4512 qApp->setEffectEnabled(Qt::UI_FadeMenu, false);
4513 qApp->setEffectEnabled(Qt::UI_AnimateMenu, false);
4514}
4515
4516QWindowsMobileStyle::QWindowsMobileStyle() : QWindowsStyle(*new QWindowsMobileStylePrivate) {
4517 qApp->setEffectEnabled(Qt::UI_FadeMenu, false);
4518 qApp->setEffectEnabled(Qt::UI_AnimateMenu, false);
4519}
4520
4521QWindowsMobileStylePrivate::QWindowsMobileStylePrivate() :QWindowsStylePrivate() {
4522
4523#ifdef Q_WS_WINCE
4524 doubleControls = qt_wince_is_high_dpi();
4525 smartphone = qt_wince_is_smartphone();
4526#else
4527 doubleControls = false;
4528 smartphone = false;
4529#endif //Q_WS_WINCE
4530
4531#ifndef QT_NO_IMAGEFORMAT_XPM
4532
4533 imageArrowDown = QImage(arrowdown_xpm);
4534 imageArrowUp = QImage(arrowdown_xpm).mirrored();
4535 imageArrowLeft = QImage(arrowleft_xpm);
4536 imageArrowRight = QImage(arrowleft_xpm).mirrored(true, false);
4537 if (doubleControls) {
4538 imageRadioButton = QImage(radiobutton_xpm);
4539 imageRadioButtonChecked = QImage(radiochecked_xpm);
4540 imageChecked = QImage(checkedlight_xpm);
4541 imageCheckedBold = QImage(checkedbold_xpm);
4542 imageRadioButtonHighlighted = QImage(highlightedradiobutton_xpm);
4543 imageClose = QImage(cross_big_xpm);
4544 imageMaximize = QImage(max_big_xpm);
4545 imageMinimize = QImage(min_big_xpm);
4546 imageNormalize = QImage(normal_big_xpm);
4547 } else {
4548 imageRadioButton = QImage(radiobutton_low_xpm);
4549 imageRadioButtonChecked = QImage(radiochecked_low_xpm);
4550 imageChecked = QImage(checkedlight_low_xpm);
4551 imageCheckedBold = QImage(checkedbold_low_xpm);
4552 imageRadioButtonHighlighted = QImage(highlightedradiobutton_low_xpm);
4553 imageClose = QImage(cross_small_xpm);
4554 imageMaximize = QImage(max_small_xpm);
4555 imageMinimize = QImage(min_small_xpm);
4556 imageNormalize = QImage(normal_small_xpm);
4557 }
4558
4559 setupWindowsMobileStyle65();
4560
4561
4562 imageArrowDownBig = QImage(arrowdown_big_xpm);
4563 imageArrowUpBig = QImage(arrowdown_big_xpm).mirrored();
4564 imageArrowLeftBig = QImage(arrowleft_big_xpm);
4565 imageArrowRightBig = QImage(arrowleft_big_xpm).mirrored(true, false);
4566
4567#endif
4568}
4569
4570void QWindowsMobileStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
4571 QPainter *painter, const QWidget *widget) const {
4572
4573 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
4574
4575 bool doRestore = false;
4576 QRect rect = option->rect;
4577 painter->setClipping(false);
4578
4579 switch (element) {
4580 case PE_PanelButtonTool: {
4581 int penSize = 1;
4582 if (d->doubleControls)
4583 penSize = 2;
4584 if (widget)
4585 if (QWidget *parent = widget->parentWidget())
4586#ifndef QT_NO_TABWIDGET
4587 if (qobject_cast<QTabWidget *>(parent->parentWidget())) {
4588#else
4589 if (false) {
4590#endif //QT_NO_TABBAR
4591 rect.adjust(0,2*penSize,0,-1*penSize);
4592 qDrawPlainRect(painter, rect, option->palette.shadow().color(), penSize, &option->palette.light());
4593 if (option->state & (State_Sunken))
4594 qDrawPlainRect(painter, rect, option->palette.shadow().color(), penSize, &option->palette.shadow());
4595 }
4596 else {
4597 if (!(option->state & State_AutoRaise) || (option->state & (State_Sunken | State_On)))
4598 qDrawPlainRect(painter,option->rect.adjusted(0, penSize, 0, -1 * penSize) ,
4599 option->palette.button().color(), 0, &option->palette.button());
4600 if (option->state & (State_Sunken)) {
4601 qDrawPlainRect(painter, rect, option->palette.shadow().color(), penSize, &option->palette.light());
4602 }
4603 if (option->state & (State_On)){
4604 QBrush fill = QBrush(option->palette.light().color());
4605 painter->fillRect(rect.adjusted(windowsItemFrame , windowsItemFrame ,
4606 -windowsItemFrame , -windowsItemFrame ), fill);
4607 qDrawPlainRect(painter, rect, option->palette.shadow().color(), penSize, &option->palette.light());
4608 }
4609 }
4610 break; }
4611 case PE_IndicatorButtonDropDown:
4612 if (d->doubleControls)
4613 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(), 2, &option->palette.button());
4614 else
4615 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(), 1, &option->palette.button());
4616 break;
4617#ifndef QT_NO_TABBAR
4618 case PE_IndicatorTabTear:
4619 if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option)) {
4620 bool rtl = tab->direction == Qt::RightToLeft;
4621 QRect rect = tab->rect;
4622 QPainterPath path;
4623 rect.setTop(rect.top() + ((tab->state & State_Selected) ? 1 : 3));
4624 rect.setBottom(rect.bottom() - ((tab->state & State_Selected) ? 0 : 2));
4625 path.moveTo(QPoint(rtl ? rect.right() : rect.left(), rect.top()));
4626 int count = 3;
4627 for(int jags = 1; jags <= count; ++jags, rtl = !rtl)
4628 path.lineTo(QPoint(rtl ? rect.left() : rect.right(), rect.top() + jags * rect.height()/count));
4629 painter->setPen(QPen(tab->palette.light(), qreal(.8)));
4630 painter->setBrush(tab->palette.background());
4631 painter->setRenderHint(QPainter::Antialiasing);
4632 painter->drawPath(path);
4633 }
4634 break;
4635#endif //QT_NO_TABBAR
4636
4637#ifndef QT_NO_TOOLBAR
4638 case PE_IndicatorToolBarSeparator: {
4639 painter->save();
4640 QPoint p1, p2;
4641 if (option->state & State_Horizontal) {
4642 p1 = QPoint(option->rect.width()/2, 0);
4643 p2 = QPoint(p1.x(), option->rect.height());
4644 } else {
4645 p1 = QPoint(0, option->rect.height()/2);
4646 p2 = QPoint(option->rect.width(), p1.y());
4647 }
4648
4649
4650 painter->setPen(option->palette.mid().color());
4651 if (d->doubleControls) {
4652 QPen pen = painter->pen();
4653 pen.setWidth(2);
4654 pen.setCapStyle(Qt::FlatCap);
4655 painter->setPen(pen);
4656 }
4657 painter->drawLine(p1, p2);
4658 painter->restore();
4659 break; }
4660#endif // QT_NO_TOOLBAR
4661 case PE_IndicatorToolBarHandle:
4662 painter->save();
4663 painter->translate(option->rect.x(), option->rect.y());
4664 if (option->state & State_Horizontal) {
4665 int x = option->rect.width() / 2 - 4;
4666 if (QApplication::layoutDirection() == Qt::RightToLeft)
4667 x -= 2;
4668 if (option->rect.height() > 4) {
4669 qDrawWinButton(painter,x-1,0,7,option->rect.height(), option->palette, false, 0);
4670
4671 qDrawShadePanel(painter, x, 1, 3, option->rect.height() - 1,
4672 option->palette, false, 0);
4673 qDrawShadePanel(painter, x + 3, 1, 3, option->rect.height() - 1,
4674 option->palette, false, 0);
4675 painter->setPen(option->palette.button().color());
4676 }
4677 } else {
4678 if (option->rect.width() > 4) {
4679 int y = option->rect.height() / 2 - 4;
4680 qDrawShadePanel(painter, 2, y, option->rect.width() - 2, 3,
4681 option->palette, false, 0);
4682 qDrawShadePanel(painter, 2, y + 3, option->rect.width() - 2, 3,
4683 option->palette, false, 0);
4684 }
4685 }
4686 painter->restore();
4687 break;
4688
4689#ifndef QT_NO_PROGRESSBAR
4690 case PE_IndicatorProgressChunk: {
4691 bool vertical = false;
4692 if (const QStyleOptionProgressBarV2 *pb2 = qstyleoption_cast<const QStyleOptionProgressBarV2 *>(option))
4693 vertical = (pb2->orientation == Qt::Vertical);
4694 if (!vertical) {
4695 painter->fillRect(option->rect.x(), option->rect.y()+2, option->rect.width(), option->rect.height()-4,
4696 option->palette.brush(QPalette::Highlight));
4697 } else {
4698 painter->fillRect(option->rect.x()+2, option->rect.y(), option->rect.width()-4, option->rect.height(),
4699 option->palette.brush(QPalette::Highlight));
4700 }
4701 }
4702 break;
4703#endif // QT_NO_PROGRESSBAR
4704
4705 case PE_FrameButtonTool: {
4706#ifndef QT_NO_DOCKWIDGET
4707 if (widget && widget->inherits("QDockWidgetTitleButton")) {
4708 if (const QDockWidget *dw = qobject_cast<const QDockWidget *>(widget->parent()))
4709 if (dw->isFloating()){
4710 qDrawPlainRect(painter,option->rect.adjusted(1, 1, 0, 0),
4711 option->palette.shadow().color(),1,&option->palette.button());
4712 return;
4713 }
4714 }
4715#endif // QT_NO_DOCKWIDGET
4716 QBrush fill;
4717 bool stippled;
4718 bool panel = (element == PE_PanelButtonTool);
4719 if ((!(option->state & State_Sunken ))
4720 && (!(option->state & State_Enabled)
4721 || ((option->state & State_Enabled ) && !(option->state & State_MouseOver)))
4722 && (option->state & State_On)) {
4723 fill = QBrush(option->palette.light().color(), Qt::Dense4Pattern);
4724 stippled = true;
4725 } else {
4726 fill = option->palette.brush(QPalette::Button);
4727 stippled = false;
4728 }
4729 if (option->state & (State_Raised | State_Sunken | State_On)) {
4730 if (option->state & State_AutoRaise) {
4731 if(option->state & (State_Enabled | State_Sunken | State_On)){
4732 if (panel)
4733 qDrawPlainRect(painter, option->rect,option->palette.shadow().color(),d->doubleControls, &fill);
4734 else
4735 qDrawPlainRect(painter, option->rect,option->palette.shadow().color(),d->doubleControls, &fill);
4736 }
4737 if (stippled) {
4738 painter->setPen(option->palette.button().color());
4739 painter->drawRect(option->rect.adjusted(1, 1, -2, -2));
4740 }
4741 } else {
4742 qDrawPlainRect(painter, option->rect,option->palette.shadow().color(),d->doubleControls, &fill);
4743 }
4744 } else {
4745 painter->fillRect(option->rect, fill);
4746 }
4747 break; }
4748
4749 case PE_FrameFocusRect:
4750 if (const QStyleOptionFocusRect *fropt = qstyleoption_cast<const QStyleOptionFocusRect *>(option)) {
4751 //### check for d->alt_down
4752 int penSize;
4753 d->doubleControls ? penSize = 2 : penSize = 1;
4754 bool alternateFocusStyle = false;
4755 if (!widget)
4756 alternateFocusStyle = true;
4757#ifndef QT_NO_COMBOBOX
4758 if (qobject_cast<const QComboBox*>(widget))
4759 alternateFocusStyle = true;
4760#endif
4761 if (!(fropt->state & State_KeyboardFocusChange) && !styleHint(SH_UnderlineShortcut, option))
4762 return;
4763 QRect r = option->rect;
4764 painter->save();
4765 painter->setBackgroundMode(Qt::TransparentMode);
4766 if (alternateFocusStyle) {
4767 QColor bg_col = fropt->backgroundColor;
4768 if (!bg_col.isValid())
4769 bg_col = painter->background().color();
4770 // Create an "XOR" color.
4771 QColor patternCol((bg_col.red() ^ 0xff) & 0xff,
4772 (bg_col.green() ^ 0xff) & 0xff,
4773 (bg_col.blue() ^ 0xff) & 0xff);
4774 painter->setBrush(QBrush(patternCol, Qt::Dense4Pattern));
4775 painter->setBrushOrigin(r.topLeft());
4776 }
4777 else {
4778 painter->setPen(option->palette.highlight().color());
4779 painter->setBrush(option->palette.highlight());
4780 }
4781 painter->setPen(Qt::NoPen);
4782 painter->setBrushOrigin(r.topLeft());
4783 painter->drawRect(r.left(), r.top(), r.width(), penSize); // Top
4784 painter->drawRect(r.left(), r.bottom(), r.width() + penSize - 1, penSize); // Bottom
4785 painter->drawRect(r.left(), r.top(), penSize, r.height()); // Left
4786 painter->drawRect(r.right(), r.top(), penSize, r.height()); // Right
4787 painter->restore();
4788 }
4789 break;
4790
4791 case PE_PanelButtonBevel: {
4792 QBrush fill;
4793 bool panel = element != PE_FrameButtonBevel;
4794 painter->setBrushOrigin(option->rect.topLeft());
4795 if (!(option->state & State_Sunken) && (option->state & State_On))
4796 fill = QBrush(option->palette.light().color(), Qt::Dense4Pattern);
4797 else
4798 fill = option->palette.brush(QPalette::Button);
4799
4800 if (option->state & (State_Raised | State_On | State_Sunken)) {
4801 if (d->doubleControls)
4802 qDrawPlainRect(painter, option->rect,option->palette.shadow().color(),2,&fill);
4803 else
4804 qDrawPlainRect(painter, option->rect,option->palette.shadow().color(),1,&fill);
4805 } else {
4806 if (panel)
4807 painter->fillRect(option->rect, fill);
4808 else
4809 painter->drawRect(option->rect);
4810 }
4811 break; }
4812
4813 case PE_FrameGroupBox:
4814 if (const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
4815
4816 const QStyleOptionFrameV2 *frame2 = qstyleoption_cast<const QStyleOptionFrameV2 *>(option);
4817 if (frame2 && !(frame2->features & QStyleOptionFrameV2::Flat)) {
4818 QPen oldPen = painter->pen();
4819 QRect r = frame->rect;
4820 painter->setPen(frame->palette.shadow().color());
4821 painter->fillRect(r.x(), r.y(), r.x() + r.width()-1,
4822 r.y() + r.height() - windowsMobileFrameGroupBoxOffset,
4823 frame->palette.light());
4824 painter ->drawLine(r.topLeft() + QPoint(-2, 1), r.topRight()+ QPoint(0, 1));
4825 if (d->doubleControls)
4826 painter ->drawLine(r.topLeft() + QPoint(-2, 2), r.topRight()+ QPoint(0, 2));
4827 painter->setPen(oldPen);
4828 }
4829 }
4830 break;
4831
4832 case PE_IndicatorCheckBox: {
4833 QBrush fill;
4834 QRect r = d->doubleControls ? option->rect.adjusted(0,1,0,-1) : option->rect;
4835 if (option->state & State_NoChange)
4836 fill = QBrush(option->palette.shadow().color(), Qt::Dense4Pattern);
4837 else if (option->state & State_Sunken)
4838 fill = option->palette.button();
4839 else if (option->state & State_Enabled)
4840 fill = option->palette.base();
4841 else
4842 fill = option->palette.background();
4843 painter->save();
4844 doRestore = true;
4845 if (d->doubleControls && (option->state & State_NoChange))
4846 painter->fillRect(r, fill);
4847 else
4848 painter->fillRect(option->rect, fill);
4849 painter->setPen(option->palette.shadow().color());
4850 painter->drawLine(r.topLeft(), r.topRight());
4851 painter->drawLine(r.topRight(), r.bottomRight());
4852 painter->drawLine(r.bottomLeft(), r.bottomRight());
4853 painter->drawLine(r.bottomLeft(), r.topLeft());
4854 if (d->doubleControls) {
4855 QRect r0 = r.adjusted(1, 1, -1, -1);
4856 painter->drawLine(r0.topLeft(), r0.topRight());
4857 painter->drawLine(r0.topRight(), r0.bottomRight());
4858 painter->drawLine(r0.bottomLeft(), r0.bottomRight());
4859 painter->drawLine(r0.bottomLeft(), r0.topLeft());
4860 }
4861 if (option->state & State_HasFocus) {
4862 painter->setPen(option->palette.highlight().color());
4863 QRect r2 = d->doubleControls ? r.adjusted(2, 2, -2, -2) : r.adjusted(1, 1, -1, -1);
4864 painter->drawLine(r2.topLeft(), r2.topRight());
4865 painter->drawLine(r2.topRight(), r2.bottomRight());
4866 painter->drawLine(r2.bottomLeft(), r2.bottomRight());
4867 painter->drawLine(r2.bottomLeft(), r2.topLeft());
4868 if (d->doubleControls) {
4869 QRect r3 = r2.adjusted(1, 1, -1, -1);
4870 painter->drawLine(r3.topLeft(), r3.topRight());
4871 painter->drawLine(r3.topRight(), r3.bottomRight());
4872 painter->drawLine(r3.bottomLeft(), r3.bottomRight());
4873 painter->drawLine(r3.bottomLeft(), r3.topLeft());
4874 }
4875 painter->setPen(option->palette.shadow().color());
4876 }
4877 //fall through...
4878 }
4879 case PE_IndicatorViewItemCheck:
4880 case PE_Q3CheckListIndicator: {
4881 if (!doRestore) {
4882 painter->save();
4883 doRestore = true;
4884 }
4885 if (element == PE_Q3CheckListIndicator || element == PE_IndicatorViewItemCheck) {
4886 painter->setPen(option->palette.shadow().color());
4887 if (option->state & State_NoChange)
4888 painter->setBrush(option->palette.brush(QPalette::Button));
4889 if (d->doubleControls) {
4890 QRect r = QRect(option->rect.x(), option->rect.y(), windowsMobileitemViewCheckBoxSize * 2, windowsMobileitemViewCheckBoxSize * 2);
4891 qDrawPlainRect(painter, r, option->palette.shadow().color(), 2);
4892 } else {
4893 QRect r = QRect(option->rect.x(), option->rect.y(), windowsMobileitemViewCheckBoxSize, windowsMobileitemViewCheckBoxSize);
4894 qDrawPlainRect(painter, r, option->palette.shadow().color(), 1);
4895 }
4896 if (option->state & State_Enabled)
4897 d->imageChecked.setColor(1, option->palette.shadow().color().rgba());
4898 else
4899 d->imageChecked.setColor(1, option->palette.dark().color().rgba());
4900 if (!(option->state & State_Off)) {
4901 if (d->doubleControls)
4902 painter->drawImage(option->rect.x(), option->rect.y(), d->imageChecked);
4903 else
4904 painter->drawImage(option->rect.x() + 3, option->rect.y() + 3, d->imageChecked);
4905 }
4906 }
4907 else {
4908 if (option->state & State_NoChange)
4909 d->imageCheckedBold.setColor(1, option->palette.dark().color().rgba());
4910 else if (option->state & State_Enabled)
4911 d->imageCheckedBold.setColor(1, option->palette.shadow().color().rgba());
4912 else
4913 d->imageCheckedBold.setColor(1, option->palette.dark().color().rgba());
4914 if (!(option->state & State_Off)) {
4915 if (d->doubleControls)
4916 painter->drawImage(option->rect.x() + 2, option->rect.y(), d->imageCheckedBold);
4917 else
4918 painter->drawImage(option->rect.x() + 3, option->rect.y() + 3, d->imageCheckedBold);
4919 }
4920 }
4921 if (doRestore)
4922 painter->restore();
4923 break; }
4924 case PE_IndicatorRadioButton: {
4925 painter->save();
4926
4927 if (option->state & State_HasFocus) {
4928 d->imageRadioButtonHighlighted.setColor(1, option->palette.shadow().color().rgba());
4929 d->imageRadioButtonHighlighted.setColor(2, option->palette.highlight().color().rgba());
4930 painter->drawImage(option->rect.x(), option->rect.y(), d->imageRadioButtonHighlighted);
4931 }
4932 else {
4933 d->imageRadioButton.setColor(1, option->palette.shadow().color().rgba());
4934 painter->drawImage(option->rect.x(), option->rect.y(), d->imageRadioButton);
4935 }
4936 if (option->state & (State_Sunken | State_On)) {
4937 if (option->state & State_Enabled)
4938 d->imageRadioButtonChecked.setColor(1, option->palette.shadow().color().rgba());
4939 else
4940 d->imageRadioButtonChecked.setColor(1, option->palette.dark().color().rgba());
4941
4942 static const int offset = d->doubleControls ? 6 : 3;
4943 painter->drawImage(option->rect.x() + offset, option->rect.y() + offset, d->imageRadioButtonChecked);
4944 }
4945 painter->restore();
4946 break; }
4947 case PE_PanelButtonCommand:
4948 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
4949 QBrush fill;
4950 State flags = option->state;
4951 QPalette pal = option->palette;
4952 QRect r = option->rect;
4953 if ((flags & State_Sunken || flags & State_On) )
4954 fill = pal.brush(QPalette::Shadow);
4955 else
4956 fill = pal.brush(QPalette::Button);
4957 int singleLine = 1;
4958 int doubleLine = 2;
4959 if (d->doubleControls) {
4960 singleLine = 2;
4961 doubleLine = 4;
4962 }
4963 if (button->features & QStyleOptionButton::DefaultButton && flags & State_Sunken) {
4964 if (d->doubleControls) {
4965 qDrawPlainRect(painter, r, pal.shadow().color(), 1, &fill);
4966 qDrawPlainRect(painter, r.adjusted(1, 1, -1, 1), pal.shadow().color(), 1, &fill);
4967 }
4968 else {
4969 qDrawPlainRect(painter, r, pal.shadow().color(), 1, &fill);
4970 }
4971 } else if (flags & (State_Raised | State_Sunken | State_On | State_Sunken)) {
4972 qDrawPlainRect(painter, r, pal.shadow().color(), singleLine, &fill);
4973 } else {
4974 painter->fillRect(r, fill);
4975 }
4976 }
4977 break;
4978 case PE_FrameDefaultButton: {
4979 painter->save();
4980 painter->setPen(option->palette.shadow().color());
4981 QRect rect = option->rect;
4982 if (d->doubleControls) {
4983 rect.adjust(1, 1, -2, -2);
4984 painter->drawRect(rect);
4985 painter->drawRect(rect.adjusted(1, 1, -1, -1));
4986 }
4987
4988 else {
4989 rect.adjust(2, 2, -3, -3);
4990 painter->drawRect(rect);
4991 }
4992 painter->restore();
4993 break; }
4994 case PE_IndicatorSpinPlus:
4995 case PE_IndicatorSpinMinus: {
4996 QRect r = option->rect;
4997 int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget)+2;
4998 QRect br = r.adjusted(fw, fw, -fw, -fw);
4999 int offset = (option->state & State_Sunken) ? 1 : 0;
5000 int step = (br.width() + 4) / 5;
5001 painter->fillRect(br.x() + offset, br.y() + offset +br.height() / 2 - step / 2,
5002 br.width(), step, option->palette.buttonText());
5003 if (element == PE_IndicatorSpinPlus)
5004 painter->fillRect(br.x() + br.width() / 2 - step / 2 + offset, br.y() + offset+4,
5005 step, br.height() - 7, option->palette.buttonText());
5006 break; }
5007 case PE_IndicatorSpinUp:
5008 case PE_IndicatorSpinDown: {
5009 painter->save();
5010 QPoint points[7];
5011 switch (element) {
5012 case PE_IndicatorSpinUp:
5013 points[0] = QPoint(-2, -4);
5014 points[1] = QPoint(-2, 2);
5015 points[2] = QPoint(-1, -3);
5016 points[3] = QPoint(-1, 1);
5017 points[4] = QPoint(0, -2);
5018 points[5] = QPoint(0, 0);
5019 points[6] = QPoint(1, -1);
5020 break;
5021 case PE_IndicatorSpinDown:
5022 points[0] = QPoint(0, -4);
5023 points[1] = QPoint(0, 2);
5024 points[2] = QPoint(-1, -3);
5025 points[3] = QPoint(-1, 1);
5026 points[4] = QPoint(-2, -2);
5027 points[5] = QPoint(-2, 0);
5028 points[6] = QPoint(-3, -1);
5029 break;
5030 default:
5031 break;
5032 }
5033 if (option->state & State_Sunken)
5034 painter->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal),
5035 proxy()->pixelMetric(PM_ButtonShiftVertical));
5036 if (option->state & State_Enabled) {
5037 painter->translate(option->rect.x() + option->rect.width() / 2,
5038 option->rect.y() + option->rect.height() / 2);
5039 painter->setPen(option->palette.buttonText().color());
5040 painter->drawLine(points[0], points[1]);
5041 painter->drawLine(points[2], points[3]);
5042 painter->drawLine(points[4], points[5]);
5043 painter->drawPoint(points[6]);
5044 } else {
5045 painter->translate(option->rect.x() + option->rect.width() / 2 + 1,
5046 option->rect.y() + option->rect.height() / 2 + 1);
5047 painter->setPen(option->palette.light().color());
5048 painter->drawLine(points[0], points[1]);
5049 painter->drawLine(points[2], points[3]);
5050 painter->drawLine(points[4], points[5]);
5051 painter->drawPoint(points[6]);
5052 painter->translate(-1, -1);
5053 painter->setPen(option->palette.mid().color());
5054 painter->drawLine(points[0], points[1]);
5055 painter->drawLine(points[2], points[3]);
5056 painter->drawLine(points[4], points[5]);
5057 painter->drawPoint(points[6]);
5058 }
5059 painter->restore();
5060 break; }
5061
5062 case PE_IndicatorArrowUpBig:
5063 case PE_IndicatorArrowDownBig:
5064 case PE_IndicatorArrowLeftBig:
5065 case PE_IndicatorArrowRightBig:
5066
5067 case PE_IndicatorArrowUp:
5068 case PE_IndicatorArrowDown:
5069 case PE_IndicatorArrowRight:
5070 case PE_IndicatorArrowLeft: {
5071 painter->save();
5072
5073 if (d->doubleControls) {
5074 QColor color;
5075 if (option->state & State_Sunken)
5076 color = option->palette.light().color();
5077 else
5078 color = option->palette.buttonText().color();
5079 QImage image;
5080 int xoffset, yoffset;
5081 bool isTabBarArrow = widget && widget->parent()
5082 && widget->inherits("QToolButton")
5083 && widget->parent()->inherits("QTabBar");
5084
5085 switch (element) {
5086 case PE_IndicatorArrowUp:
5087 image = d->imageArrowUp;
5088 xoffset = 1;
5089 yoffset = 12;
5090 break;
5091 case PE_IndicatorArrowDown:
5092 image = d->imageArrowDown;
5093 xoffset = 1;
5094 yoffset =12;
5095 break;
5096 case PE_IndicatorArrowLeft:
5097 image = d->imageArrowLeft;
5098 xoffset = 8;
5099 yoffset = isTabBarArrow ? 12 : 2;
5100 break;
5101 case PE_IndicatorArrowRight:
5102 image = d->imageArrowRight;
5103 xoffset = 8;
5104 yoffset = isTabBarArrow ? 12 : 2;
5105 break;
5106 case PE_IndicatorArrowUpBig:
5107 image = d->imageArrowUpBig;
5108 xoffset = 3;
5109 yoffset = 12;
5110 break;
5111 case PE_IndicatorArrowDownBig:
5112 image = d->imageArrowDownBig;
5113 xoffset = 2;
5114 yoffset =12;
5115 break;
5116 case PE_IndicatorArrowLeftBig:
5117 image = d->imageArrowLeftBig;
5118 xoffset = 8;
5119 yoffset = 2;
5120 break;
5121 case PE_IndicatorArrowRightBig:
5122 image = d->imageArrowRightBig;
5123 xoffset = 8;
5124 yoffset = 2;
5125 break;
5126 default:
5127 break;
5128 }
5129 image.setColor(1, color.rgba());
5130 painter->drawImage(option->rect.x() + xoffset, option->rect.y() + yoffset, image);
5131 }
5132 else {
5133 QPoint points[7];
5134 switch (element) {
5135 case PE_IndicatorArrowUp:
5136 case PE_IndicatorArrowUpBig:
5137 points[0] = QPoint(-3, 1);
5138 points[1] = QPoint(3, 1);
5139 points[2] = QPoint(-2, 0);
5140 points[3] = QPoint(2, 0);
5141 points[4] = QPoint(-1, -1);
5142 points[5] = QPoint(1, -1);
5143 points[6] = QPoint(0, -2);
5144 break;
5145 case PE_IndicatorArrowDown:
5146 case PE_IndicatorArrowDownBig:
5147 points[0] = QPoint(-3, -1);
5148 points[1] = QPoint(3, -1);
5149 points[2] = QPoint(-2, 0);
5150 points[3] = QPoint(2, 0);
5151 points[4] = QPoint(-1, 1);
5152 points[5] = QPoint(1, 1);
5153 points[6] = QPoint(0, 2);
5154 break;
5155 case PE_IndicatorArrowRight:
5156 case PE_IndicatorArrowRightBig:
5157 points[0] = QPoint(-2, -3);
5158 points[1] = QPoint(-2, 3);
5159 points[2] = QPoint(-1, -2);
5160 points[3] = QPoint(-1, 2);
5161 points[4] = QPoint(0, -1);
5162 points[5] = QPoint(0, 1);
5163 points[6] = QPoint(1, 0);
5164 break;
5165 case PE_IndicatorArrowLeft:
5166 case PE_IndicatorArrowLeftBig:
5167 points[0] = QPoint(0, -3);
5168 points[1] = QPoint(0, 3);
5169 points[2] = QPoint(-1, -2);
5170 points[3] = QPoint(-1, 2);
5171 points[4] = QPoint(-2, -1);
5172 points[5] = QPoint(-2, 1);
5173 points[6] = QPoint(-3, 0);
5174 break;
5175 default:
5176 break;
5177 }
5178 if (option->state & State_Sunken)
5179 painter->setPen(option->palette.light().color());
5180 else
5181 painter->setPen(option->palette.buttonText().color());
5182 if (option->state & State_Enabled) {
5183 painter->translate(option->rect.x() + option->rect.width() / 2,
5184 option->rect.y() + option->rect.height() / 2 - 1);
5185 painter->drawLine(points[0], points[1]);
5186 painter->drawLine(points[2], points[3]);
5187 painter->drawLine(points[4], points[5]);
5188 painter->drawPoint(points[6]);
5189 } else {
5190 painter->translate(option->rect.x() + option->rect.width() / 2,
5191 option->rect.y() + option->rect.height() / 2 - 1);
5192 painter->setPen(option->palette.mid().color());
5193 painter->drawLine(points[0], points[1]);
5194 painter->drawLine(points[2], points[3]);
5195 painter->drawLine(points[4], points[5]);
5196 painter->drawPoint(points[6]);
5197 }
5198 }
5199 painter->restore();
5200 break; }
5201#ifndef QT_NO_TABWIDGET
5202 case PE_FrameTabWidget:
5203 if (const QStyleOptionTabWidgetFrame *tab = qstyleoption_cast<const QStyleOptionTabWidgetFrame *>(option)) {
5204 QRect rect = option->rect;
5205 QPalette pal = option->palette;
5206 painter->save();
5207 QBrush fill = pal.light();
5208 painter->fillRect(rect, fill);
5209 painter->setPen(pal.shadow().color());
5210 if (d->doubleControls) {
5211 QPen pen = painter->pen();
5212 pen.setWidth(2);
5213 pen.setCapStyle(Qt::FlatCap);
5214 painter->setPen(pen);
5215 }
5216 switch (tab->shape) {
5217 case QTabBar::RoundedNorth:
5218#ifdef Q_WS_WINCE_WM
5219 if (!d->wm65)
5220#endif
5221 {
5222 if (d->doubleControls)
5223 painter->drawLine(rect.topLeft() + QPoint(0, 1), rect.topRight() + QPoint(0, 1));
5224 else
5225 painter->drawLine(rect.topLeft(), rect.topRight());
5226 }
5227 break;
5228 case QTabBar::RoundedSouth:
5229#ifdef Q_WS_WINCE_WM
5230 if (!d->wm65)
5231#endif
5232 {
5233 if (d->doubleControls)
5234 painter->drawLine(rect.bottomLeft(), rect.bottomRight());
5235 else
5236 painter->drawLine(rect.bottomLeft(), rect.bottomRight());
5237 }
5238 break;
5239 case QTabBar::RoundedEast:
5240#ifdef Q_WS_WINCE_WM
5241 if (!d->wm65)
5242#endif
5243 painter->drawLine(rect.topRight(), rect.bottomRight());
5244 break;
5245 case QTabBar::RoundedWest:
5246#ifdef Q_WS_WINCE_WM
5247 if (!d->wm65)
5248#endif
5249 painter->drawLine(rect.topLeft(), rect.bottomLeft());
5250 break;
5251 case QTabBar::TriangularWest:
5252 case QTabBar::TriangularEast:
5253 case QTabBar::TriangularSouth:
5254 case QTabBar::TriangularNorth:
5255 if (d->doubleControls)
5256 qDrawPlainRect(painter, rect.adjusted(0,-2,0,0), option->palette.shadow().color(),2,&pal.light());
5257 else
5258 qDrawPlainRect(painter, rect, option->palette.shadow().color(),1,&pal.light());
5259 break;
5260 default:
5261 break;
5262 }
5263 painter->restore();
5264 }
5265 break;
5266#endif //QT_NO_TABBAR
5267#ifndef QT_NO_ITEMVIEWS
5268 case PE_PanelItemViewRow:
5269 if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) {
5270 QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
5271 ? QPalette::Normal : QPalette::Disabled;
5272 if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active))
5273 cg = QPalette::Inactive;
5274
5275 if ((vopt->state & QStyle::State_Selected) && proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, option, widget))
5276 d->drawPanelItemViewSelected(painter, vopt);
5277 else if (vopt->features & QStyleOptionViewItemV2::Alternate)
5278 painter->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase));
5279 else if (!(vopt->state & QStyle::State_Enabled))
5280 painter->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Base));
5281 }
5282 break;
5283 case PE_PanelItemViewItem:
5284 if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) {
5285 QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled
5286 ? QPalette::Normal : QPalette::Disabled;
5287 if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active))
5288 cg = QPalette::Inactive;
5289
5290 if (vopt->showDecorationSelected && (vopt->state & QStyle::State_Selected)) {
5291 d->drawPanelItemViewSelected(painter, vopt);
5292 } else {
5293 if (vopt->backgroundBrush.style() != Qt::NoBrush) {
5294 QPointF oldBO = painter->brushOrigin();
5295 painter->setBrushOrigin(vopt->rect.topLeft());
5296 painter->fillRect(vopt->rect, vopt->backgroundBrush);
5297 painter->setBrushOrigin(oldBO);
5298 }
5299
5300 if (vopt->state & QStyle::State_Selected) {
5301 QRect textRect = proxy()->subElementRect(QStyle::SE_ItemViewItemText, option, widget);
5302 d->drawPanelItemViewSelected(painter, vopt, textRect);
5303 }
5304 }
5305 }
5306 break;
5307#endif //QT_NO_ITEMVIEWS
5308
5309 case PE_FrameWindow: {
5310 QPalette popupPal = option->palette;
5311 popupPal.setColor(QPalette::Light, option->palette.background().color());
5312 popupPal.setColor(QPalette::Midlight, option->palette.light().color());
5313 if (d->doubleControls)
5314 qDrawPlainRect(painter, option->rect, popupPal.shadow().color(),2,0);
5315 else
5316 qDrawPlainRect(painter, option->rect, popupPal.shadow().color(),1,0);
5317 break; }
5318 case PE_FrameTabBarBase: {
5319 break; }
5320 case PE_Widget:
5321 break;
5322 case PE_IndicatorMenuCheckMark: {
5323 int markW = option->rect.width() > 7 ? 7 : option->rect.width();
5324 int markH = markW;
5325 if (d->doubleControls)
5326 markW*=2;
5327 markH*=2;
5328 int posX = option->rect.x() + (option->rect.width() - markW)/2 + 1;
5329 int posY = option->rect.y() + (option->rect.height() - markH)/2;
5330
5331 QVector<QLineF> a;
5332 a.reserve(markH);
5333
5334 int i, xx, yy;
5335 xx = posX;
5336 yy = 3 + posY;
5337 for (i = 0; i < markW/2; ++i) {
5338 a << QLineF(xx, yy, xx, yy + 2);
5339 ++xx;
5340 ++yy;
5341 }
5342 yy -= 2;
5343 for (; i < markH; ++i) {
5344 a << QLineF(xx, yy, xx, yy + 2);
5345 ++xx;
5346 --yy;
5347 }
5348 if (!(option->state & State_Enabled) && !(option->state & State_On)) {
5349 int pnt;
5350 painter->setPen(option->palette.highlightedText().color());
5351 QPoint offset(1, 1);
5352 for (pnt = 0; pnt < a.size(); ++pnt)
5353 a[pnt].translate(offset.x(), offset.y());
5354 painter->drawLines(a);
5355 for (pnt = 0; pnt < a.size(); ++pnt)
5356 a[pnt].translate(offset.x(), offset.y());
5357 }
5358 painter->setPen(option->palette.text().color());
5359 painter->drawLines(a);
5360 break; }
5361 case PE_IndicatorBranch: {
5362 // Copied from the Windows style.
5363 static const int decoration_size = d->doubleControls ? 18 : 9;
5364 static const int ofsA = d->doubleControls ? 4 : 2;
5365 static const int ofsB = d->doubleControls ? 8 : 4;
5366 static const int ofsC = d->doubleControls ? 12 : 6;
5367 static const int ofsD = d->doubleControls ? 1 : 0;
5368 int mid_h = option->rect.x() + option->rect.width() / 2;
5369 int mid_v = option->rect.y() + option->rect.height() / 2;
5370 int bef_h = mid_h;
5371 int bef_v = mid_v;
5372 int aft_h = mid_h;
5373 int aft_v = mid_v;
5374 if (option->state & State_Children) {
5375 int delta = decoration_size / 2;
5376 bef_h -= delta;
5377 bef_v -= delta;
5378 aft_h += delta;
5379 aft_v += delta;
5380 QPen oldPen = painter->pen();
5381 QPen crossPen = oldPen;
5382 crossPen.setWidth(2);
5383 painter->setPen(crossPen);
5384 painter->drawLine(bef_h + ofsA + ofsD, bef_v + ofsB + ofsD, bef_h + ofsC + ofsD, bef_v + ofsB + ofsD);
5385 if (!(option->state & State_Open))
5386 painter->drawLine(bef_h + ofsB + ofsD, bef_v + ofsA + ofsD, bef_h + ofsB + ofsD, bef_v + ofsC + ofsD);
5387 painter->setPen(option->palette.dark().color());
5388 painter->drawRect(bef_h, bef_v, decoration_size - 1, decoration_size - 1);
5389 if (d->doubleControls)
5390 painter->drawRect(bef_h + 1, bef_v + 1, decoration_size - 3, decoration_size - 3);
5391 painter->setPen(oldPen);
5392 }
5393 QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern);
5394 if (option->state & State_Item) {
5395 if (option->direction == Qt::RightToLeft)
5396 painter->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush);
5397 else
5398 painter->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush);
5399 }
5400 if (option->state & State_Sibling)
5401 painter->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush);
5402 if (option->state & (State_Open | State_Children | State_Item | State_Sibling))
5403 painter->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush);
5404 break; }
5405 case PE_Frame:
5406 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),
5407 d->doubleControls ? 2 : 1, &option->palette.background());
5408 break;
5409 case PE_FrameLineEdit:
5410 case PE_FrameMenu:
5411 if (d->doubleControls)
5412 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),2);
5413 else
5414 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),1);
5415 break;
5416 case PE_FrameStatusBar:
5417 if (d->doubleControls)
5418 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),2,0);
5419 else
5420 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(),1,0);
5421 break;
5422
5423 default:
5424 QWindowsStyle::drawPrimitive(element, option, painter, widget);
5425 break;
5426 }
5427}
5428
5429void QWindowsMobileStyle::drawControl(ControlElement element, const QStyleOption *option,
5430 QPainter *painter, const QWidget *widget) const {
5431
5432
5433 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
5434
5435
5436 painter->setClipping(false);
5437 switch (element) {
5438 case CE_MenuBarEmptyArea:
5439 painter->setClipping(true);
5440 QWindowsStyle::drawControl(element, option, painter, widget);
5441 break;
5442 case CE_PushButtonBevel:
5443 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
5444 QRect br = button->rect;
5445 int dbi = proxy()->pixelMetric(PM_ButtonDefaultIndicator, button, widget);
5446
5447 if (button->features & QStyleOptionButton::AutoDefaultButton)
5448 br.setCoords(br.left() + dbi, br.top() + dbi, br.right() - dbi, br.bottom() - dbi);
5449 QStyleOptionButton tmpBtn = *button;
5450 tmpBtn.rect = br;
5451 proxy()->drawPrimitive(PE_PanelButtonCommand, &tmpBtn, painter, widget);
5452 if (button->features & QStyleOptionButton::HasMenu) {
5453 int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, button, widget);
5454 QRect ir = button->rect;
5455 QStyleOptionButton newButton = *button;
5456 if (d->doubleControls)
5457 newButton.rect = QRect(ir.right() - mbi, ir.height() - 30, mbi, ir.height() - 4);
5458 else
5459 newButton.rect = QRect(ir.right() - mbi, ir.height() - 20, mbi, ir.height() - 4);
5460 proxy()->drawPrimitive(PE_IndicatorArrowDown, &newButton, painter, widget);
5461 }
5462 if (button->features & QStyleOptionButton::DefaultButton)
5463 proxy()->drawPrimitive(PE_FrameDefaultButton, option, painter, widget);
5464 }
5465 break;
5466 case CE_RadioButton:
5467 case CE_CheckBox:
5468 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
5469 bool isRadio = (element == CE_RadioButton);
5470 QStyleOptionButton subopt = *button;
5471 subopt.rect = proxy()->subElementRect(isRadio ? SE_RadioButtonIndicator
5472 : SE_CheckBoxIndicator, button, widget);
5473 proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox,
5474 &subopt, painter, widget);
5475 subopt.rect = proxy()->subElementRect(isRadio ? SE_RadioButtonContents
5476 : SE_CheckBoxContents, button, widget);
5477 proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, painter, widget);
5478 if (button->state & State_HasFocus) {
5479 QStyleOptionFocusRect fropt;
5480 fropt.QStyleOption::operator=(*button);
5481 fropt.rect = proxy()->subElementRect(isRadio ? SE_RadioButtonFocusRect
5482 : SE_CheckBoxFocusRect, button, widget);
5483 proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget);
5484 }
5485 }
5486 break;
5487 case CE_RadioButtonLabel:
5488 case CE_CheckBoxLabel:
5489 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
5490 uint alignment = visualAlignment(button->direction, Qt::AlignLeft | Qt::AlignVCenter);
5491 if (!styleHint(SH_UnderlineShortcut, button, widget))
5492 alignment |= Qt::TextHideMnemonic;
5493 QPixmap pix;
5494 QRect textRect = button->rect;
5495 if (!button->icon.isNull()) {
5496 pix = button->icon.pixmap(button->iconSize, button->state & State_Enabled ? QIcon::Normal : QIcon::Disabled);
5497 proxy()->drawItemPixmap(painter, button->rect, alignment, pix);
5498 if (button->direction == Qt::RightToLeft)
5499 textRect.setRight(textRect.right() - button->iconSize.width() - 4);
5500 else
5501 textRect.setLeft(textRect.left() + button->iconSize.width() + 4);
5502 }
5503 if (!button->text.isEmpty()){
5504 if (button->state & State_Enabled)
5505 proxy()->drawItemText(painter, textRect, alignment | Qt::TextShowMnemonic,
5506 button->palette, false, button->text, QPalette::WindowText);
5507 else
5508 proxy()->drawItemText(painter, textRect, alignment | Qt::TextShowMnemonic,
5509 button->palette, false, button->text, QPalette::Mid);
5510 }
5511 }
5512 break;
5513#ifndef QT_NO_PROGRESSBAR
5514 case CE_ProgressBarGroove:
5515 if (d->doubleControls)
5516 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(), 2, &option->palette.brush(QPalette::Window));
5517 else
5518 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(), 1, &option->palette.brush(QPalette::Window));
5519 break;
5520#endif //QT_NO_PROGRESSBAR
5521#ifndef QT_NO_TABBAR
5522 case CE_TabBarTab:
5523 if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option)) {
5524 proxy()->drawControl(CE_TabBarTabShape, tab, painter, widget);
5525 proxy()->drawControl(CE_TabBarTabLabel, tab, painter, widget);
5526 }
5527 break;
5528 case CE_TabBarTabShape:
5529 if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option)) {
5530
5531 if (tab->shape == QTabBar::RoundedNorth || tab->shape == QTabBar::RoundedEast ||
5532 tab->shape == QTabBar::RoundedSouth || tab->shape == QTabBar::RoundedWest) {
5533 d->drawTabBarTab(painter, tab);
5534 } else {
5535 QCommonStyle::drawControl(element, option, painter, widget);
5536 }
5537 break; }
5538
5539#endif // QT_NO_TABBAR
5540
5541#ifndef QT_NO_TOOLBAR
5542 case CE_ToolBar:
5543 if (const QStyleOptionToolBar *toolBar = qstyleoption_cast<const QStyleOptionToolBar *>(option)) {
5544 QRect rect = option->rect;
5545 painter->save();
5546 painter->setPen(option->palette.dark().color());
5547 painter->fillRect(rect,option->palette.button());
5548 if (d->doubleControls) {
5549 QPen pen = painter->pen();
5550 pen.setWidth(4);
5551 painter->setPen(pen);
5552 }
5553 if (toolBar->toolBarArea == Qt::TopToolBarArea)
5554 painter->drawLine(rect.bottomLeft(), rect.bottomRight());
5555 else
5556 painter->drawLine(rect.topLeft(), rect.topRight());
5557 painter->restore();
5558 break; }
5559#endif //QT_NO_TOOLBAR
5560 case CE_Header:
5561 if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(option)) {
5562 QRegion clipRegion = painter->clipRegion();
5563 painter->setClipRect(option->rect);
5564 proxy()->drawControl(CE_HeaderSection, header, painter, widget);
5565 QStyleOptionHeader subopt = *header;
5566 subopt.rect = proxy()->subElementRect(SE_HeaderLabel, header, widget);
5567 if (header->state & State_Sunken)
5568 subopt.palette.setColor(QPalette::ButtonText, header->palette.brightText().color());
5569 subopt.state |= QStyle::State_On;
5570 if (subopt.rect.isValid())
5571 proxy()->drawControl(CE_HeaderLabel, &subopt, painter, widget);
5572 if (header->sortIndicator != QStyleOptionHeader::None) {
5573 subopt.rect = proxy()->subElementRect(SE_HeaderArrow, option, widget);
5574 proxy()->drawPrimitive(PE_IndicatorHeaderArrow, &subopt, painter, widget);
5575 }
5576 painter->setClipRegion(clipRegion);
5577 }
5578 break;
5579
5580 case CE_HeaderSection:
5581 if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(option)) {
5582 QBrush fill;
5583 QColor color;
5584 QRect rect = option->rect;
5585 painter->setPen(option->palette.shadow().color());
5586
5587 int penSize = 1;
5588
5589 if (d->doubleControls) {
5590 penSize = 2;
5591 QPen pen = painter->pen();
5592 pen.setWidth(2);
5593 pen.setCapStyle(Qt::FlatCap);
5594 painter->setPen(pen);
5595 }
5596
5597 //fix Frame
5598
5599 if (header->position == QStyleOptionHeader::End
5600 || (header->position == QStyleOptionHeader::OnlyOneSection
5601 && !header->text.isEmpty()))
5602 if (Qt::Horizontal == header->orientation )
5603 rect.adjust(0, 0, penSize, 0);
5604 else
5605 rect.adjust(0, 0, 0, penSize);
5606
5607 if (option->state & State_Sunken) {
5608 fill = option->palette.brush(QPalette::Shadow);
5609 color = option->palette.light().color();
5610 painter->drawLine(rect.bottomLeft(), rect.bottomRight());
5611 painter->drawLine(rect.topRight(), rect.bottomRight());
5612 rect.adjust(0, 0, -penSize, -penSize);
5613 }
5614 else {
5615 fill = option->palette.brush(QPalette::Button);
5616 color = option->palette.shadow().color();
5617 if (Qt::Horizontal == header->orientation )
5618 rect.adjust(-penSize, 0, 0, 0);
5619 else
5620 rect.adjust(0, -penSize, 0, 0);
5621 }
5622 if (Qt::Horizontal == header->orientation )
5623 rect.adjust(0,-penSize,0,0);
5624 else
5625 rect.adjust(-penSize, 0, 0, 0);
5626
5627 if (option->state & State_Sunken) {
5628 qDrawPlainRect(painter, rect, color, penSize, &fill);
5629 } else {
5630 //Corner
5631 rect.adjust(-penSize, 0, 0, 0);
5632 qDrawPlainRect(painter, rect, color, penSize, &fill);
5633 }
5634
5635 //Hack to get rid of some double lines... StyleOptions need a clean flag for that
5636 rect = option->rect;
5637#ifndef QT_NO_SCROLLAREA
5638 if (const QAbstractScrollArea *abstractScrollArea = qobject_cast<const QAbstractScrollArea *> (widget) ) {
5639 QRect rectScrollArea = abstractScrollArea->geometry();
5640 if (Qt::Horizontal == header->orientation )
5641 if ((rectScrollArea.right() - rect.right() ) > 1)
5642 painter->drawLine(rect.topRight(), rect.bottomRight());
5643 else ;
5644 else
5645 if ((rectScrollArea.bottom() - rect.bottom() ) > 1)
5646 painter->drawLine(rect.bottomLeft(), rect.bottomRight());
5647 }
5648#endif // QT_NO_SCROLLAREA
5649 break;
5650 }
5651#ifndef QT_NO_COMBOBOX
5652 case CE_ComboBoxLabel:
5653 // This is copied from qcommonstyle.cpp with the difference, that
5654 // the editRect isn't adjusted when calling drawItemText.
5655 if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
5656 QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget);
5657 painter->save();
5658 painter->setClipRect(editRect);
5659 if (!cb->currentIcon.isNull()) {
5660 QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal
5661 : QIcon::Disabled;
5662 QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, mode);
5663 QRect iconRect(editRect);
5664 iconRect.setWidth(cb->iconSize.width() + 4);
5665 iconRect = alignedRect(cb->direction,
5666 Qt::AlignLeft | Qt::AlignVCenter,
5667 iconRect.size(), editRect);
5668 if (cb->editable)
5669 painter->fillRect(iconRect, option->palette.brush(QPalette::Base));
5670 proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap);
5671
5672 if (cb->direction == Qt::RightToLeft)
5673 editRect.translate(-4 - cb->iconSize.width(), 0);
5674 else
5675 editRect.translate(cb->iconSize.width() + 4, 0);
5676 }
5677 if (!cb->currentText.isEmpty() && !cb->editable) {
5678 proxy()->drawItemText(painter, editRect,
5679 visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter),
5680 cb->palette, cb->state & State_Enabled, cb->currentText);
5681 }
5682 painter->restore();
5683 }
5684 break;
5685#endif // QT_NO_COMBOBOX
5686#ifndef QT_NO_DOCKWIDGET
5687 case CE_DockWidgetTitle:
5688 if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast<const QStyleOptionDockWidget *>(option)) {
5689 const QStyleOptionDockWidgetV2 *v2
5690 = qstyleoption_cast<const QStyleOptionDockWidgetV2*>(option);
5691 bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar;
5692
5693 QRect rect = dwOpt->rect;
5694 QRect r = rect;
5695
5696 if (verticalTitleBar) {
5697 QSize s = r.size();
5698 s.transpose();
5699 r.setSize(s);
5700
5701 painter->save();
5702 painter->translate(r.left(), r.top() + r.width());
5703 painter->rotate(-90);
5704 painter->translate(-r.left(), -r.top());
5705 }
5706
5707 bool floating = false;
5708 bool active = dwOpt->state & State_Active;
5709 int menuOffset = 0; //used to center text when floated
5710 QColor inactiveCaptionTextColor = option->palette.highlightedText().color();
5711 if (dwOpt->movable) {
5712 QColor left, right;
5713
5714 //Titlebar gradient
5715 if (widget && widget->isWindow()) {
5716 floating = true;
5717 if (active) {
5718 right = option->palette.highlight().color();
5719 left = right.lighter(125);
5720 } else {
5721 left = option->palette.highlight().color().lighter(125);
5722 right = QColor(0xff, 0xff, 0xff);
5723 }
5724 menuOffset = 2;
5725 QBrush fillBrush(left);
5726 if (left != right) {
5727 QPoint p1(r.x(), r.top() + r.height()/2);
5728 QPoint p2(rect.right(), r.top() + r.height()/2);
5729 QLinearGradient lg(p1, p2);
5730 lg.setColorAt(0, left);
5731 lg.setColorAt(1, right);
5732 fillBrush = lg;
5733 }
5734 painter->fillRect(r.adjusted(0, 0, 0, -3), fillBrush);
5735 } else {
5736 painter->fillRect(r.adjusted(0, 0, 0, -3), option->palette.button().color());
5737 }
5738 painter->setPen(dwOpt->palette.color(QPalette::Light));
5739 if (!widget || !widget->isWindow()) {
5740 painter->drawLine(r.topLeft(), r.topRight());
5741 painter->setPen(dwOpt->palette.color(QPalette::Dark));
5742 painter->drawLine(r.bottomLeft(), r.bottomRight()); }
5743 }
5744 if (!dwOpt->title.isEmpty()) {
5745 QFont oldFont = painter->font();
5746 QFont newFont = oldFont;
5747 if (newFont.pointSize() > 2)
5748 newFont.setPointSize(newFont.pointSize() - 2);
5749 if (floating)
5750 newFont.setBold(true);
5751 painter->setFont(newFont);
5752 QPalette palette = dwOpt->palette;
5753 palette.setColor(QPalette::Window, inactiveCaptionTextColor);
5754 QRect titleRect = proxy()->subElementRect(SE_DockWidgetTitleBarText, option, widget);
5755 if (verticalTitleBar) {
5756 titleRect = QRect(r.left() + rect.bottom()
5757 - titleRect.bottom(),
5758 r.top() + titleRect.left() - rect.left(),
5759 titleRect.height(), titleRect.width());
5760 }
5761 proxy()->drawItemText(painter, titleRect,
5762 Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, palette,
5763 dwOpt->state & State_Enabled, dwOpt->title,
5764 floating ? (active ? QPalette::BrightText : QPalette::Window) : QPalette::WindowText);
5765 painter->setFont(oldFont);
5766 }
5767 if (verticalTitleBar)
5768 painter->restore();
5769 }
5770 return;
5771#endif // QT_NO_DOCKWIDGET
5772
5773 case CE_PushButtonLabel:
5774 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
5775 painter->save();
5776 QRect ir = button->rect;
5777 QPalette::ColorRole colorRole;
5778 uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic;
5779 if (!styleHint(SH_UnderlineShortcut, button, widget))
5780 tf |= Qt::TextHideMnemonic;
5781
5782 if (button->state & (State_On | State_Sunken))
5783 colorRole = QPalette::Light;
5784 else
5785 colorRole = QPalette::ButtonText;
5786
5787 if (!button->icon.isNull()) {
5788 QIcon::Mode mode = button->state & State_Enabled ? QIcon::Normal
5789 : QIcon::Disabled;
5790 if (mode == QIcon::Normal && button->state & State_HasFocus)
5791 mode = QIcon::Active;
5792 QIcon::State state = QIcon::Off;
5793 if (button->state & State_On)
5794 state = QIcon::On;
5795 QPixmap pixmap = button->icon.pixmap(button->iconSize, mode, state);
5796 int pixw = pixmap.width();
5797 int pixh = pixmap.height();
5798 //Center the icon if there is no text
5799
5800 QPoint point;
5801 if (button->text.isEmpty()) {
5802 point = QPoint(ir.x() + ir.width() / 2 - pixw / 2,
5803 ir.y() + ir.height() / 2 - pixh / 2);
5804 } else {
5805 point = QPoint(ir.x() + 2, ir.y() + ir.height() / 2 - pixh / 2);
5806 }
5807 if (button->direction == Qt::RightToLeft)
5808 point.rx() += pixw;
5809
5810 if ((button->state & (State_On | State_Sunken)) && button->direction == Qt::RightToLeft)
5811 point.rx() -= proxy()->pixelMetric(PM_ButtonShiftHorizontal, option, widget) * 2;
5812
5813 painter->drawPixmap(visualPos(button->direction, button->rect, point), pixmap);
5814
5815 if (button->direction == Qt::RightToLeft)
5816 ir.translate(-4, 0);
5817 else
5818 ir.translate(pixw + 4, 0);
5819 ir.setWidth(ir.width() - (pixw + 4));
5820 // left-align text if there is
5821 if (!button->text.isEmpty())
5822 tf |= Qt::AlignLeft;
5823 } else {
5824 tf |= Qt::AlignHCenter;
5825 }
5826 if (button->state & State_Enabled)
5827 proxy()->drawItemText(painter, ir, tf, button->palette, true, button->text, colorRole);
5828 else
5829 proxy()->drawItemText(painter, ir, tf, button->palette, true, button->text, QPalette::Mid);
5830 painter->restore();
5831 }
5832 break;
5833 default:
5834 QWindowsStyle::drawControl(element, option, painter, widget);
5835 break;
5836 }
5837}
5838
5839void QWindowsMobileStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
5840 QPainter *painter, const QWidget *widget) const {
5841
5842 painter->setClipping(false);
5843 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
5844
5845 switch (control) {
5846#ifndef QT_NO_SLIDER
5847 case CC_Slider:
5848 if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
5849 int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget);
5850 int len = proxy()->pixelMetric(PM_SliderLength, slider, widget);
5851 int ticks = slider->tickPosition;
5852 QRect groove = proxy()->subControlRect(CC_Slider, slider, SC_SliderGroove, widget);
5853 QRect handle = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle, widget);
5854
5855 if ((slider->subControls & SC_SliderGroove) && groove.isValid()) {
5856 int mid = thickness / 2;
5857 if (ticks & QSlider::TicksAbove)
5858 mid += len / 8;
5859 if (ticks & QSlider::TicksBelow)
5860 mid -= len / 8;
5861
5862 painter->setPen(slider->palette.shadow().color());
5863 if (slider->orientation == Qt::Horizontal) {
5864 qDrawPlainRect(painter, groove.x(), groove.y() + mid - 2,
5865 groove.width(), 4, option->palette.shadow().color(),1,0);
5866 } else {
5867 qDrawPlainRect(painter, groove.x()+mid-2, groove.y(),
5868 4, groove.height(), option->palette.shadow().color(),1,0);
5869 }
5870 }
5871 if (slider->subControls & SC_SliderTickmarks) {
5872 QStyleOptionSlider tmpSlider = *slider;
5873 tmpSlider.subControls = SC_SliderTickmarks;
5874 QCommonStyle::drawComplexControl(control, &tmpSlider, painter, widget);
5875 }
5876
5877 if (slider->subControls & SC_SliderHandle) {
5878 const QColor c0 = slider->palette.shadow().color();
5879 const QColor c1 = slider->palette.dark().color();
5880 const QColor c3 = slider->palette.midlight().color();
5881 const QColor c4 = slider->palette.dark().color();
5882 QBrush handleBrush;
5883
5884 if (slider->state & State_Enabled) {
5885 handleBrush = slider->palette.color(QPalette::Light);
5886 } else {
5887 handleBrush = QBrush(slider->palette.color(QPalette::Shadow),
5888 Qt::Dense4Pattern);
5889 }
5890 int x = handle.x(), y = handle.y(),
5891 wi = handle.width(), he = handle.height();
5892 int x1 = x;
5893 int x2 = x+wi-1;
5894 int y1 = y;
5895 int y2 = y+he-1;
5896
5897 Qt::Orientation orient = slider->orientation;
5898 bool tickAbove = slider->tickPosition == QSlider::TicksAbove;
5899 bool tickBelow = slider->tickPosition == QSlider::TicksBelow;
5900
5901 if (slider->state & State_HasFocus) {
5902 QStyleOptionFocusRect fropt;
5903 fropt.QStyleOption::operator=(*slider);
5904 fropt.rect = proxy()->subElementRect(SE_SliderFocusRect, slider, widget);
5905 proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget);
5906 }
5907 if ((tickAbove && tickBelow) || (!tickAbove && !tickBelow)) {
5908 Qt::BGMode oldMode = painter->backgroundMode();
5909 painter->setBackgroundMode(Qt::OpaqueMode);
5910 qDrawPlainRect(painter, QRect(x, y, wi, he)
5911 ,slider->palette.shadow().color(),1,&handleBrush);
5912 painter->setBackgroundMode(oldMode);
5913 QBrush fill = QBrush(option->palette.light().color(), Qt::Dense4Pattern);
5914 if (slider->state & State_Sunken)
5915 painter->fillRect(QRectF(x1 + 2, y1 + 2, x2 - x1 - 3, y2 - y1 - 3),fill);
5916 return;
5917 }
5918 QSliderDirection dir;
5919 if (orient == Qt::Horizontal)
5920 if (tickAbove)
5921 dir = SliderUp;
5922 else
5923 dir = SliderDown;
5924 else
5925 if (tickAbove)
5926 dir = SliderLeft;
5927 else
5928 dir = SliderRight;
5929 QPolygon polygon;
5930 int d = 0;
5931 switch (dir) {
5932 case SliderUp:
5933 x2++;
5934 y1 = y1 + wi / 2;
5935 d = (wi + 1) / 2 - 1;
5936 polygon.setPoints(5, x1, y1, x1, y2, x2, y2, x2, y1, x1 + d,y1 - d);
5937 break;
5938 case SliderDown:
5939 x2++;
5940 y2 = y2 - wi/2;
5941 d = (wi + 1) / 2 - 1;
5942 polygon.setPoints(5, x1, y1, x1, y2, x1 + d,y2 + d, x2, y2, x2, y1);
5943 break;
5944 case SliderLeft:
5945 d = (he + 1) / 2 - 1;
5946 x1 = x1 + he/2;
5947 polygon.setPoints(5, x1, y1, x1 - d, y1 + d, x1,y2, x2, y2, x2, y1);
5948 y1--;
5949 break;
5950 case SliderRight:
5951 d = (he + 1) / 2 - 1;
5952 x2 = x2 - he/2;
5953 polygon.setPoints(5, x1, y1, x1, y2, x2,y2, x2 + d, y1 + d, x2, y1);
5954 y1--;
5955 break;
5956 }
5957 QBrush oldBrush = painter->brush();
5958 painter->setPen(Qt::NoPen);
5959 painter->setBrush(handleBrush);
5960 Qt::BGMode oldMode = painter->backgroundMode();
5961 painter->setBackgroundMode(Qt::OpaqueMode);
5962 painter->drawRect(x1, y1, x2-x1+1, y2-y1+1);
5963 painter->drawPolygon(polygon);
5964 QBrush fill = QBrush(option->palette.button().color(), Qt::Dense4Pattern);
5965 painter->setBrush(oldBrush);
5966 painter->setBackgroundMode(oldMode);
5967 if (slider->state & State_Sunken)
5968 painter->fillRect(QRectF(x1, y1, x2 - x1 + 1, y2 - y1 + 1),fill);
5969
5970 if (dir != SliderUp) {
5971 painter->setPen(c0);
5972 painter->drawLine(x1, y1, x2, y1);
5973 }
5974 if (dir != SliderLeft) {
5975 painter->setPen(c0);
5976 painter->drawLine(x1, y1, x1, y2);
5977 }
5978 if (dir != SliderRight) {
5979 painter->setPen(c0);
5980 painter->drawLine(x2, y1, x2, y2);
5981 }
5982 if (dir != SliderDown) {
5983 painter->setPen(c0);
5984 painter->drawLine(x1, y2, x2, y2);
5985 }
5986 switch (dir) {
5987 case SliderUp:
5988 if (slider->state & State_Sunken)
5989 painter->fillRect(QRectF(x1 + 3, y1 - d + 2, x2 - x1 - 4, y1),fill);
5990 painter->setPen(c0);
5991 painter->drawLine(x1, y1, x1 + d, y1 - d);
5992 d = wi - d - 1;
5993 painter->drawLine(x2, y1, x2 -d , y1 -d );
5994 d--;
5995 break;
5996 case SliderDown:
5997 if (slider->state & State_Sunken)
5998 painter->fillRect(QRectF(x1+3, y2 - d, x2 - x1 -4,y2 - 8),fill);
5999 painter->setPen(c0);
6000 painter->drawLine(x1, y2, x1 + d, y2 + d);
6001 d = wi - d - 1;
6002 painter->drawLine(x2, y2, x2 - d, y2 + d);
6003 d--;
6004 break;
6005 case SliderLeft:
6006 if (slider->state & State_Sunken)
6007 painter->fillRect(QRectF(x1 - d + 2, y1 + 2, x1, y2 - y1 - 3),fill);
6008 painter->setPen(c0);
6009 painter->drawLine(x1, y1, x1 - d, y1 + d);
6010 d = he - d - 1;
6011 painter->drawLine(x1, y2, x1 - d, y2 - d);
6012 d--;
6013 break;
6014 case SliderRight:
6015 if (slider->state & State_Sunken)
6016 painter->fillRect(QRectF(x2 - d - 4, y1 + 2, x2 - 4, y2 - y1 - 3),fill);
6017 painter->setPen(c0);
6018 painter->drawLine(x2, y1, x2 + d, y1 + d);
6019 painter->setPen(c0);
6020 d = he - d - 1;
6021 painter->drawLine(x2, y2, x2 + d, y2 - d);
6022 d--;
6023 break;
6024 }
6025 }
6026 }
6027 break;
6028#endif //QT_NO_SLIDER
6029#ifndef QT_NO_SCROLLBAR
6030 case CC_ScrollBar:
6031 painter->save();
6032 painter->setPen(option->palette.shadow().color());
6033 if (d->doubleControls) {
6034 QPen pen = painter->pen();
6035 pen.setWidth(2);
6036 pen.setCapStyle(Qt::SquareCap);
6037 painter->setPen(pen);
6038 }
6039 if (const QStyleOptionSlider *scrollbar = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
6040 d->drawScrollbarGroove(painter, scrollbar);
6041 // Make a copy here and reset it for each primitive.
6042 QStyleOptionSlider newScrollbar = *scrollbar;
6043 State saveFlags = scrollbar->state;
6044 //Check if the scrollbar is part of an abstractItemView and draw the frame according
6045 bool drawCompleteFrame = true;
6046 bool secondScrollBar = false;
6047 if (widget)
6048 if (QWidget *parent = widget->parentWidget()) {
6049 if (QAbstractScrollArea *abstractScrollArea = qobject_cast<QAbstractScrollArea *>(parent->parentWidget())) {
6050 drawCompleteFrame = (abstractScrollArea->frameStyle() == QFrame::NoFrame) || (abstractScrollArea->frameStyle() == QFrame::StyledPanel);
6051 secondScrollBar = (abstractScrollArea->horizontalScrollBar()->isVisible()
6052 && abstractScrollArea->verticalScrollBar()->isVisible()) ;
6053 }
6054#ifndef QT_NO_LISTVIEW
6055 if (QListView *listView = qobject_cast<QListView *>(parent->parentWidget()))
6056 drawCompleteFrame = false;
6057#endif
6058 }
6059 if (scrollbar->minimum == scrollbar->maximum)
6060 saveFlags |= State_Enabled;
6061 if (scrollbar->subControls & SC_ScrollBarSubLine) {
6062 newScrollbar.state = saveFlags;
6063 newScrollbar.rect = proxy()->subControlRect(control, &newScrollbar, SC_ScrollBarSubLine, widget);
6064 if (newScrollbar.rect.isValid()) {
6065 if (!(scrollbar->activeSubControls & SC_ScrollBarSubLine))
6066 newScrollbar.state &= ~(State_Sunken | State_MouseOver);
6067 d->drawScrollbarHandleUp(painter, &newScrollbar, drawCompleteFrame, secondScrollBar);
6068 }
6069 }
6070 if (scrollbar->subControls & SC_ScrollBarAddLine) {
6071 newScrollbar.rect = scrollbar->rect;
6072 newScrollbar.state = saveFlags;
6073 newScrollbar.rect = proxy()->subControlRect(control, &newScrollbar, SC_ScrollBarAddLine, widget);
6074 if (newScrollbar.rect.isValid()) {
6075 if (!(scrollbar->activeSubControls & SC_ScrollBarAddLine))
6076 newScrollbar.state &= ~(State_Sunken | State_MouseOver);
6077 d->drawScrollbarHandleDown(painter, &newScrollbar, drawCompleteFrame, secondScrollBar);
6078 }
6079 }
6080 if (scrollbar->subControls & SC_ScrollBarSlider) {
6081
6082 newScrollbar.rect = scrollbar->rect;
6083 newScrollbar.state = saveFlags;
6084 newScrollbar.rect = proxy()->subControlRect(control, &newScrollbar, SC_ScrollBarSlider, widget);
6085
6086 if (newScrollbar.rect.isValid()) {
6087 if (!(scrollbar->activeSubControls & SC_ScrollBarSlider))
6088 newScrollbar.state &= ~(State_Sunken | State_MouseOver);
6089 d->drawScrollbarGrip(painter, &newScrollbar, option, drawCompleteFrame);
6090 }
6091 }
6092 }
6093 painter->restore();
6094 break;
6095#endif // QT_NO_SCROLLBAR
6096 case CC_ToolButton:
6097 if (const QStyleOptionToolButton *toolbutton
6098 = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
6099 QRect button, menuarea;
6100 bool isTabWidget = false;
6101#ifndef QT_NO_TABWIDGET
6102 if (widget)
6103 if (QWidget *parent = widget->parentWidget())
6104 isTabWidget = (qobject_cast<QTabWidget *>(parent->parentWidget()));
6105#endif //QT_NO_TABWIDGET
6106
6107 button = proxy()->subControlRect(control, toolbutton, SC_ToolButton, widget);
6108 menuarea = proxy()->subControlRect(control, toolbutton, SC_ToolButtonMenu, widget);
6109 State buttonFlags = toolbutton->state;
6110 if (buttonFlags & State_AutoRaise) {
6111 if (!(buttonFlags & State_MouseOver)) {
6112 buttonFlags &= ~State_Raised;
6113 }
6114 }
6115 State menuFlags = buttonFlags;
6116 if (toolbutton->activeSubControls & SC_ToolButton)
6117 buttonFlags |= State_Sunken;
6118 if (toolbutton->activeSubControls & SC_ToolButtonMenu)
6119 menuFlags |= State_On;
6120 QStyleOption tool(0);
6121 tool.palette = toolbutton->palette;
6122 if (toolbutton->subControls & SC_ToolButton) {
6123 tool.rect = button;
6124 tool.state = buttonFlags;
6125 proxy()->drawPrimitive(PE_PanelButtonTool, &tool, painter, widget);
6126 }
6127 if (toolbutton->subControls & SC_ToolButtonMenu) {
6128 tool.rect = menuarea;
6129 tool.state = buttonFlags & State_Enabled;
6130 QStyleOption toolMenu(0);
6131 toolMenu = *toolbutton;
6132 toolMenu.state = menuFlags;
6133 if (buttonFlags & State_Sunken)
6134 proxy()->drawPrimitive(PE_PanelButtonTool, &toolMenu, painter, widget);
6135 QStyleOption arrowOpt(0);
6136 arrowOpt.rect = tool.rect;
6137 arrowOpt.palette = tool.palette;
6138 State flags = State_None;
6139 if (menuFlags & State_Enabled)
6140 flags |= State_Enabled;
6141 if ((menuFlags & State_On) && !(buttonFlags & State_Sunken)) {
6142 flags |= State_Sunken;
6143 painter->fillRect(menuarea, option->palette.shadow());
6144 }
6145 arrowOpt.state = flags;
6146 proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, painter, widget);
6147 }
6148 if (toolbutton->state & State_HasFocus) {
6149 QStyleOptionFocusRect focusRect;
6150 focusRect.QStyleOption::operator=(*toolbutton);
6151 focusRect.rect.adjust(3, 3, -3, -3);
6152 if (toolbutton->features & QStyleOptionToolButton::Menu)
6153 focusRect.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator,
6154 toolbutton, widget), 0);
6155 proxy()->drawPrimitive(PE_FrameFocusRect, &focusRect, painter, widget);
6156 }
6157 QStyleOptionToolButton label = *toolbutton;
6158 if (isTabWidget)
6159 label.state = toolbutton->state;
6160 else
6161 label.state = toolbutton->state & State_Enabled;
6162 int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget);
6163 label.rect = button.adjusted(fw, fw, -fw, -fw);
6164 proxy()->drawControl(CE_ToolButtonLabel, &label, painter, widget);
6165 }
6166 break;
6167
6168#ifndef QT_NO_GROUPBOX
6169 case CC_GroupBox:
6170 if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast<const QStyleOptionGroupBox *>(option)) {
6171 // Draw frame
6172 painter->save();
6173 QFont font = painter->font();
6174 font.setBold(true);
6175 painter->setFont(font);
6176 QStyleOptionGroupBox groupBoxFont = *groupBox;
6177 groupBoxFont.fontMetrics = QFontMetrics(font);
6178 QRect textRect = proxy()->subControlRect(CC_GroupBox, &groupBoxFont, SC_GroupBoxLabel, widget);
6179 QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxCheckBox, widget).adjusted(0,0,0,0);
6180 if (groupBox->subControls & QStyle::SC_GroupBoxFrame) {
6181 QStyleOptionFrameV2 frame;
6182 frame.QStyleOption::operator=(*groupBox);
6183 frame.features = groupBox->features;
6184 frame.lineWidth = groupBox->lineWidth;
6185 frame.midLineWidth = groupBox->midLineWidth;
6186 frame.rect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxFrame, widget);
6187 painter->save();
6188 QRegion region(groupBox->rect);
6189 if (!groupBox->text.isEmpty()) {
6190 bool ltr = groupBox->direction == Qt::LeftToRight;
6191 QRect finalRect = checkBoxRect.united(textRect);
6192 if (groupBox->subControls & QStyle::SC_GroupBoxCheckBox)
6193 finalRect.adjust(ltr ? -4 : 0, 0, ltr ? 0 : 4, 0);
6194 region -= finalRect;
6195 }
6196 proxy()->drawPrimitive(PE_FrameGroupBox, &frame, painter, widget);
6197 painter->restore();
6198 }
6199 // Draw checkbox
6200 if (groupBox->subControls & SC_GroupBoxCheckBox) {
6201 QStyleOptionButton box;
6202 box.QStyleOption::operator=(*groupBox);
6203 box.rect = checkBoxRect;
6204 proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget);
6205 }
6206 // Draw title
6207 if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) {
6208 QColor textColor = groupBox->textColor;
6209 if (textColor.isValid())
6210 painter->setPen(textColor);
6211 else
6212 painter->setPen(groupBox->palette.link().color());
6213 painter->setPen(groupBox->palette.link().color());
6214
6215 int alignment = int(groupBox->textAlignment);
6216 if (!styleHint(QStyle::SH_UnderlineShortcut, option, widget))
6217 alignment |= Qt::TextHideMnemonic;
6218
6219 if (groupBox->state & State_Enabled)
6220 proxy()->drawItemText(painter, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment,
6221 groupBox->palette, true, groupBox->text,
6222 textColor.isValid() ? QPalette::NoRole : QPalette::Link);
6223 else
6224 proxy()->drawItemText(painter, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment,
6225 groupBox->palette, true, groupBox->text, QPalette::Mid);
6226 if (groupBox->state & State_HasFocus) {
6227 QStyleOptionFocusRect fropt;
6228 fropt.QStyleOption::operator=(*groupBox);
6229 fropt.rect = textRect;
6230 proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget);
6231 }
6232 }
6233 painter->restore();
6234 }
6235 break;
6236#endif //QT_NO_GROUPBOX
6237
6238#ifndef QT_NO_COMBOBOX
6239 case CC_ComboBox:
6240 if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
6241 QBrush editBrush = cmb->palette.brush(QPalette::Base);
6242 if ((cmb->subControls & SC_ComboBoxFrame) && cmb->frame)
6243 qDrawPlainRect(painter, option->rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_ComboBoxFrameWidth, option, widget), &editBrush);
6244 else
6245 painter->fillRect(option->rect, editBrush);
6246 State flags = State_None;
6247 QRect ar = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxArrow, widget);
6248 if ((option->state & State_On)) {
6249 painter->fillRect(ar.adjusted(0, 0, 1, 1),cmb->palette.brush(QPalette::Shadow));
6250 }
6251 if (d->doubleControls)
6252 ar.adjust(5, 0, 5, 0);
6253 else
6254 ar.adjust(2, 0, -2, 0);
6255 if (option->state & State_Enabled)
6256 flags |= State_Enabled;
6257 if (option->state & State_On)
6258 flags |= State_Sunken;
6259 QStyleOption arrowOpt(0);
6260 arrowOpt.rect = ar;
6261 arrowOpt.palette = cmb->palette;
6262 arrowOpt.state = flags;
6263 proxy()->drawPrimitive(PrimitiveElement(PE_IndicatorArrowDownBig), &arrowOpt, painter, widget);
6264 if (cmb->subControls & SC_ComboBoxEditField) {
6265 QRect re = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxEditField, widget);
6266 if (cmb->state & State_HasFocus && !cmb->editable)
6267 painter->fillRect(re.x(), re.y(), re.width(), re.height(),
6268 cmb->palette.brush(QPalette::Highlight));
6269 if (cmb->state & State_HasFocus) {
6270 painter->setPen(cmb->palette.highlightedText().color());
6271 painter->setBackground(cmb->palette.highlight());
6272 } else {
6273 painter->setPen(cmb->palette.text().color());
6274 painter->setBackground(cmb->palette.background());
6275 }
6276 if (cmb->state & State_HasFocus && !cmb->editable) {
6277 QStyleOptionFocusRect focus;
6278 focus.QStyleOption::operator=(*cmb);
6279 focus.rect = proxy()->subElementRect(SE_ComboBoxFocusRect, cmb, widget);
6280 focus.state |= State_FocusAtBorder;
6281 focus.backgroundColor = cmb->palette.highlight().color();
6282 if ((option->state & State_On))
6283 proxy()->drawPrimitive(PE_FrameFocusRect, &focus, painter, widget);
6284 }
6285 }
6286 }
6287 break;
6288#endif // QT_NO_COMBOBOX
6289
6290
6291#ifndef QT_NO_SPINBOX
6292 case CC_SpinBox:
6293 if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
6294 QStyleOptionSpinBox copy = *spinBox;
6295 //PrimitiveElement primitiveElement;
6296 int primitiveElement;
6297
6298 if (spinBox->frame && (spinBox->subControls & SC_SpinBoxFrame)) {
6299 QRect r = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxFrame, widget);
6300 qDrawPlainRect(painter, r, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget),0);
6301 }
6302 QPalette shadePal(option->palette);
6303 shadePal.setColor(QPalette::Button, option->palette.light().color());
6304 shadePal.setColor(QPalette::Light, option->palette.base().color());
6305 if (spinBox->subControls & SC_SpinBoxUp) {
6306 copy.subControls = SC_SpinBoxUp;
6307 QPalette pal2 = spinBox->palette;
6308 if (!(spinBox->stepEnabled & QAbstractSpinBox::StepUpEnabled)) {
6309 pal2.setCurrentColorGroup(QPalette::Disabled);
6310 copy.state &= ~State_Enabled;
6311 }
6312 copy.palette = pal2;
6313 if (spinBox->activeSubControls == SC_SpinBoxUp && (spinBox->state & State_Sunken)) {
6314 copy.state |= State_On;
6315 copy.state |= State_Sunken;
6316 } else {
6317 copy.state |= State_Raised;
6318 copy.state &= ~State_Sunken;
6319 }
6320 primitiveElement = (spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorArrowUpBig
6321 : PE_IndicatorArrowUpBig);
6322 copy.rect = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxUp, widget);
6323 if (copy.state & (State_Sunken | State_On))
6324 qDrawPlainRect(painter, copy.rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), &copy.palette.brush(QPalette::Shadow));
6325 else
6326 qDrawPlainRect(painter, copy.rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), &copy.palette.brush(QPalette::Base));
6327 copy.rect.adjust(proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), 0, -pixelMetric(PM_SpinBoxFrameWidth, option, widget), 0);
6328 proxy()->drawPrimitive(PrimitiveElement(primitiveElement), &copy, painter, widget);
6329 }
6330 if (spinBox->subControls & SC_SpinBoxDown) {
6331 copy.subControls = SC_SpinBoxDown;
6332 copy.state = spinBox->state;
6333 QPalette pal2 = spinBox->palette;
6334 if (!(spinBox->stepEnabled & QAbstractSpinBox::StepDownEnabled)) {
6335 pal2.setCurrentColorGroup(QPalette::Disabled);
6336 copy.state &= ~State_Enabled;
6337 }
6338 copy.palette = pal2;
6339 if (spinBox->activeSubControls == SC_SpinBoxDown && (spinBox->state & State_Sunken)) {
6340 copy.state |= State_On;
6341 copy.state |= State_Sunken;
6342 } else {
6343 copy.state |= State_Raised;
6344 copy.state &= ~State_Sunken;
6345 }
6346 primitiveElement = (spinBox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorArrowDownBig
6347 : PE_IndicatorArrowDownBig);
6348 copy.rect = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxDown, widget);
6349 qDrawPlainRect(painter, copy.rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), &copy.palette.brush(QPalette::Base));
6350 if (copy.state & (State_Sunken | State_On))
6351 qDrawPlainRect(painter, copy.rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), &copy.palette.brush(QPalette::Shadow));
6352 else
6353 qDrawPlainRect(painter, copy.rect, option->palette.shadow().color(), proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), &copy.palette.brush(QPalette::Base));
6354 copy.rect.adjust(3, 0, -4, 0);
6355 if (primitiveElement == PE_IndicatorArrowUp || primitiveElement == PE_IndicatorArrowDown) {
6356 int frameWidth = proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget);
6357 copy.rect = copy.rect.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth);
6358 proxy()->drawPrimitive(PrimitiveElement(primitiveElement), &copy, painter, widget);
6359 }
6360 else {
6361 proxy()->drawPrimitive(PrimitiveElement(primitiveElement), &copy, painter, widget);
6362 }
6363 if (spinBox->frame && (spinBox->subControls & SC_SpinBoxFrame)) {
6364 QRect r = proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxEditField, widget);
6365 }
6366 }
6367 }
6368 break;
6369#endif // QT_NO_SPINBOX
6370
6371 default:
6372 QWindowsStyle::drawComplexControl(control, option, painter, widget);
6373 break;
6374 }
6375}
6376
6377QSize QWindowsMobileStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
6378 const QSize &size, const QWidget *widget) const {
6379
6380 QSize newSize = QWindowsStyle::sizeFromContents(type, option, size, widget);
6381 switch (type) {
6382 case CT_PushButton:
6383 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
6384 newSize = QCommonStyle::sizeFromContents(type, option, size, widget);
6385 int w = newSize.width(),
6386 h = newSize.height();
6387 int defwidth = 0;
6388 if (button->features & QStyleOptionButton::AutoDefaultButton)
6389 defwidth = 2 * proxy()->pixelMetric(PM_ButtonDefaultIndicator, button, widget);
6390
6391 int minwidth = int(QStyleHelper::dpiScaled(55.0f));
6392 int minheight = int(QStyleHelper::dpiScaled(19.0f));
6393
6394 if (w < minwidth + defwidth && button->icon.isNull())
6395 w = minwidth + defwidth;
6396 if (h < minheight + defwidth)
6397 h = minheight + defwidth;
6398 newSize = QSize(w + 4, h + 4);
6399 }
6400 break;
6401
6402#ifndef QT_NO_GROUPBOX
6403 case CT_GroupBox:
6404 if (const QGroupBox *grb = static_cast<const QGroupBox *>(widget)) {
6405 newSize = size + QSize(!grb->isFlat() ? 16 : 0, !grb->isFlat() ? 16 : 0);
6406 }
6407 break;
6408#endif // QT_NO_GROUPBOX
6409
6410 case CT_RadioButton:
6411 case CT_CheckBox:
6412 newSize = size;
6413 if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
6414 bool isRadio = (type == CT_RadioButton);
6415 QRect irect = visualRect(button->direction, button->rect,
6416 proxy()->subElementRect(isRadio ? SE_RadioButtonIndicator
6417 : SE_CheckBoxIndicator, button, widget));
6418 int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight
6419 : PM_IndicatorHeight, button, widget);
6420 int margins = (!button->icon.isNull() && button->text.isEmpty()) ? 0 : 10;
6421 if (d_func()->doubleControls)
6422 margins *= 2;
6423 newSize += QSize(irect.right() + margins, 1);
6424 newSize.setHeight(qMax(newSize.height(), h));
6425 }
6426 break;
6427#ifndef QT_NO_COMBOBOX
6428 case CT_ComboBox:
6429 if (const QStyleOptionComboBox *comboBox = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
6430 int fw = comboBox->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, option, widget) * 2 : 0;
6431 newSize = QSize(newSize.width() + fw + 9, newSize.height() + fw); //Nine is a magic Number - See CommonStyle for real magic (23)
6432 }
6433 break;
6434#endif
6435#ifndef QT_NO_SPINBOX
6436 case CT_SpinBox:
6437 if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
6438 int fw = spinBox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget) * 2 : 0;
6439 newSize = QSize(newSize.width() + fw-5, newSize.height() + fw-6);
6440 }
6441 break;
6442#endif
6443#ifndef QT_NO_LINEEDIT
6444 case CT_LineEdit:
6445 newSize += QSize(0,1);
6446 break;
6447#endif
6448 case CT_ToolButton:
6449 newSize = QSize(newSize.width() + 1, newSize.height());
6450 break;
6451 case CT_TabBarTab:
6452 if (d_func()->doubleControls)
6453 newSize = QSize(newSize.width(), 42);
6454 else
6455 newSize = QSize(newSize.width(), 21);
6456 break;
6457 case CT_HeaderSection:
6458 newSize += QSize(4, 2);
6459 break;
6460#ifndef QT_NO_ITEMVIEWS
6461#ifdef Q_WS_WINCE_WM
6462 case CT_ItemViewItem:
6463 if (d_func()->wm65)
6464 if (d_func()->doubleControls)
6465 newSize.setHeight(46);
6466 else
6467 newSize.setHeight(23);
6468 break;
6469#endif //Q_WS_WINCE_WM
6470#endif //QT_NO_ITEMVIEWS
6471 default:
6472 break;
6473 }
6474 return newSize;
6475}
6476
6477QRect QWindowsMobileStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const {
6478
6479 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
6480 QRect rect = QWindowsStyle::subElementRect(element, option, widget);
6481 switch (element) {
6482#ifndef QT_NO_TABWIDGET
6483 case SE_TabWidgetTabBar:
6484 if (d->doubleControls)
6485 rect.adjust(-2, 0, 2, 0);
6486 else
6487 rect.adjust(-2, 0, 2, 0);
6488 break;
6489#endif //QT_NO_TABWIDGET
6490 case SE_CheckBoxFocusRect:
6491 rect.adjust(1,0,-2,-1);
6492 break;
6493 case SE_RadioButtonFocusRect:
6494 rect.adjust(1,1,-2,-2);
6495 break;
6496 default:
6497 break;
6498#ifndef QT_NO_SLIDER
6499 case SE_SliderFocusRect:
6500 if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
6501 rect = slider->rect;
6502 }
6503 break;
6504 case SE_PushButtonFocusRect:
6505 if (d->doubleControls)
6506 rect.adjust(-1, -1, 0, 0);
6507 break;
6508#endif // QT_NO_SLIDER
6509#ifndef QT_NO_ITEMVIEWS
6510 case SE_ItemViewItemFocusRect:
6511#ifdef Q_WS_WINCE_WM
6512 if (d->wm65)
6513 rect = QRect();
6514#endif
6515 break;
6516#endif //QT_NO_ITEMVIEWS
6517 }
6518 return rect;
6519}
6520
6521QRect QWindowsMobileStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option,
6522 SubControl subControl, const QWidget *widget) const {
6523
6524 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
6525
6526 QRect rect = QCommonStyle::subControlRect(control, option, subControl, widget);
6527 switch (control) {
6528
6529#ifndef QT_NO_SCROLLBAR
6530 case CC_ScrollBar:
6531 if (const QStyleOptionSlider *scrollbar = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
6532 int sliderButtonExtent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollbar, widget);
6533 float stretchFactor = 1.4f;
6534 int sliderButtonExtentDir = int (sliderButtonExtent * stretchFactor);
6535
6536#ifdef Q_WS_WINCE_WM
6537 if (d->wm65)
6538 {
6539 sliderButtonExtent = d->imageScrollbarHandleUp.width();
6540 sliderButtonExtentDir = d->imageScrollbarHandleUp.height();
6541 }
6542#endif //Q_WS_WINCE_WM
6543
6544 int sliderlen;
6545 int maxlen = ((scrollbar->orientation == Qt::Horizontal) ?
6546 scrollbar->rect.width() : scrollbar->rect.height()) - (sliderButtonExtentDir * 2);
6547 // calculate slider length
6548 if (scrollbar->maximum != scrollbar->minimum) {
6549 uint range = scrollbar->maximum - scrollbar->minimum;
6550 sliderlen = (qint64(scrollbar->pageStep) * maxlen) / (range + scrollbar->pageStep);
6551
6552 int slidermin = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollbar, widget);
6553 if (sliderlen < slidermin || range > INT_MAX / 2)
6554 sliderlen = slidermin;
6555 if (sliderlen > maxlen)
6556 sliderlen = maxlen;
6557 } else {
6558 sliderlen = maxlen;
6559 }
6560 int sliderstart = sliderButtonExtentDir + sliderPositionFromValue(scrollbar->minimum,
6561 scrollbar->maximum,
6562 scrollbar->sliderPosition,
6563 maxlen - sliderlen,
6564 scrollbar->upsideDown);
6565 if (d->smartphone) {
6566 sliderstart -= sliderButtonExtentDir;
6567 sliderlen += 2*sliderButtonExtent;
6568 }
6569 switch (subControl) {
6570 case SC_ScrollBarSubLine: // top/left button
6571 if (scrollbar->orientation == Qt::Horizontal) {
6572 int buttonWidth = qMin(scrollbar->rect.width() / 2, sliderButtonExtentDir );
6573 rect.setRect(0, 0, buttonWidth, sliderButtonExtent);
6574 } else {
6575 int buttonHeight = qMin(scrollbar->rect.height() / 2, sliderButtonExtentDir);
6576 rect.setRect(0, 0, sliderButtonExtent, buttonHeight);
6577 }
6578 if (d->smartphone)
6579 rect.setRect(0, 0, 0, 0);
6580 break;
6581 case SC_ScrollBarAddLine: // bottom/right button
6582 if (scrollbar->orientation == Qt::Horizontal) {
6583 int buttonWidth = qMin(scrollbar->rect.width()/2, sliderButtonExtentDir);
6584 rect.setRect(scrollbar->rect.width() - buttonWidth, 0, buttonWidth, sliderButtonExtent);
6585 } else {
6586 int buttonHeight = qMin(scrollbar->rect.height()/2, sliderButtonExtentDir );
6587 rect.setRect(0, scrollbar->rect.height() - buttonHeight, sliderButtonExtent, buttonHeight);
6588 }
6589 if (d->smartphone)
6590 rect.setRect(0, 0, 0, 0);
6591 break;
6592 case SC_ScrollBarSubPage: // between top/left button and slider
6593 if (scrollbar->orientation == Qt::Horizontal)
6594 if (d->smartphone)
6595 rect.setRect(0, 0, sliderstart, sliderButtonExtent);
6596 else
6597 rect.setRect(sliderButtonExtent, 0, sliderstart - sliderButtonExtent, sliderButtonExtent);
6598 else
6599 if (d->smartphone)
6600 rect.setRect(0, 0, sliderButtonExtent, sliderstart);
6601 else
6602 rect.setRect(0, sliderButtonExtent, sliderButtonExtent, sliderstart - sliderButtonExtent);
6603 break;
6604 case SC_ScrollBarAddPage: // between bottom/right button and slider
6605 if (scrollbar->orientation == Qt::Horizontal)
6606 if (d->smartphone)
6607 rect.setRect(sliderstart + sliderlen, 0,
6608 maxlen - sliderstart - sliderlen + 2*sliderButtonExtent, sliderButtonExtent);
6609 else
6610 rect.setRect(sliderstart + sliderlen, 0,
6611 maxlen - sliderstart - sliderlen + sliderButtonExtent, sliderButtonExtent);
6612 else
6613 if (d->smartphone)
6614 rect.setRect(0, sliderstart + sliderlen, sliderButtonExtent,
6615 maxlen - sliderstart - sliderlen + 2*sliderButtonExtent);
6616 else
6617 rect.setRect(0, sliderstart + sliderlen, sliderButtonExtent,
6618 maxlen - sliderstart - sliderlen + sliderButtonExtent);
6619 break;
6620 case SC_ScrollBarGroove:
6621 if (scrollbar->orientation == Qt::Horizontal)
6622 rect.setRect(sliderButtonExtent, 0, scrollbar->rect.width() - sliderButtonExtent * 2,
6623 scrollbar->rect.height());
6624 else
6625 rect.setRect(0, sliderButtonExtent, scrollbar->rect.width(),
6626 scrollbar->rect.height() - sliderButtonExtent * 2);
6627 break;
6628 case SC_ScrollBarSlider:
6629 if (scrollbar->orientation == Qt::Horizontal)
6630 rect.setRect(sliderstart, 0, sliderlen, sliderButtonExtent);
6631 else
6632 rect.setRect(0, sliderstart, sliderButtonExtent, sliderlen);
6633 break;
6634 default:
6635 break;
6636 }
6637 rect = visualRect(scrollbar->direction, scrollbar->rect, rect);
6638 }
6639 break;
6640#endif // QT_NO_SCROLLBAR
6641
6642
6643
6644#ifndef QT_NO_TOOLBUTTON
6645 case CC_ToolButton:
6646 if (const QStyleOptionToolButton *toolButton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
6647 int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolButton, widget);
6648 rect = toolButton->rect;
6649 switch (subControl) {
6650 case SC_ToolButton:
6651 if ((toolButton->features
6652 & (QStyleOptionToolButton::Menu | QStyleOptionToolButton::PopupDelay))
6653 == QStyleOptionToolButton::Menu)
6654 rect.adjust(0, 0, -mbi, 0);
6655 break;
6656 case SC_ToolButtonMenu:
6657 if ((toolButton->features
6658 & (QStyleOptionToolButton::Menu | QStyleOptionToolButton::PopupDelay))
6659 == QStyleOptionToolButton::Menu)
6660 rect.adjust(rect.width() - mbi, 1, 0, 1);
6661 break;
6662 default:
6663 break;
6664 }
6665 rect = visualRect(toolButton->direction, toolButton->rect, rect);
6666 }
6667 break;
6668#endif // QT_NO_TOOLBUTTON
6669
6670#ifndef QT_NO_SLIDER
6671 case CC_Slider:
6672 if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
6673 int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider, widget);
6674 int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget);
6675 switch (subControl) {
6676 case SC_SliderHandle: {
6677 int sliderPos = 0;
6678 int len = proxy()->pixelMetric(PM_SliderLength, slider, widget);
6679 bool horizontal = slider->orientation == Qt::Horizontal;
6680 sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum,
6681 slider->sliderPosition,
6682 (horizontal ? slider->rect.width()
6683 : slider->rect.height()) - len,
6684 slider->upsideDown);
6685 if (horizontal)
6686 rect.setRect(slider->rect.x() + sliderPos, slider->rect.y() + tickOffset, len, thickness);
6687 else
6688 rect.setRect(slider->rect.x() + tickOffset, slider->rect.y() + sliderPos, thickness, len);
6689 break; }
6690 default:
6691 break;
6692 }
6693 rect = visualRect(slider->direction, slider->rect, rect);
6694 }
6695 break;
6696#endif //QT_NO_SLIDER
6697#ifndef QT_NO_COMBOBOX
6698 case CC_ComboBox:
6699 if (const QStyleOptionComboBox *comboBox = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
6700 int x = comboBox->rect.x(),
6701 y = comboBox->rect.y(),
6702 wi = comboBox->rect.width(),
6703 he = comboBox->rect.height();
6704 int xpos = x;
6705 int margin = comboBox->frame ? (d->doubleControls ? 2 : 1) : 0;
6706 int bmarg = comboBox->frame ? (d->doubleControls ? 2 : 1) : 0;
6707 if (subControl == SC_ComboBoxArrow)
6708 xpos += wi - int((he - 2*bmarg)*0.9) - bmarg;
6709 else
6710 xpos += wi - (he - 2*bmarg) - bmarg;
6711 switch (subControl) {
6712 case SC_ComboBoxArrow:
6713 rect.setRect(xpos, y + bmarg, he - 2*bmarg, he - 2*bmarg);
6714 break;
6715 case SC_ComboBoxEditField:
6716 rect.setRect(x + margin, y + margin, wi - 2 * margin - int((he - 2*bmarg) * 0.84f), he - 2 * margin);
6717 if (d->doubleControls) {
6718 if (comboBox->editable)
6719 rect.adjust(2, 0, 0, 0);
6720 else
6721 rect.adjust(4, 2, 0, -2);
6722 } else if (!comboBox->editable) {
6723 rect.adjust(2, 1, 0, -1);
6724 }
6725 break;
6726 case SC_ComboBoxFrame:
6727 rect = comboBox->rect;
6728 break;
6729 default:
6730 break;
6731 }
6732 }
6733#endif //QT_NO_COMBOBOX
6734#ifndef QT_NO_SPINBOX
6735 case CC_SpinBox:
6736 if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
6737 QSize bs;
6738 int fw = spinBox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinBox, widget) : 0;
6739 bs.setHeight(qMax(d->doubleControls ? 28 : 14, (spinBox->rect.height())));
6740 // 1.6 -approximate golden mean
6741 bs.setWidth(qMax(d->doubleControls ? 28 : 14, qMin((bs.height()*7/8), (spinBox->rect.width() / 8))));
6742 bs = bs.expandedTo(QApplication::globalStrut());
6743 int x, lx, rx;
6744 x = spinBox->rect.width() - bs.width()*2;
6745 lx = fw;
6746 rx = x - fw;
6747 switch (subControl) {
6748 case SC_SpinBoxUp:
6749 rect = QRect(x + proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget), 0 , bs.width(), bs.height());
6750 break;
6751 case SC_SpinBoxDown:
6752 rect = QRect(x + bs.width(), 0, bs.width(), bs.height());
6753 break;
6754 case SC_SpinBoxEditField:
6755 if (spinBox->buttonSymbols == QAbstractSpinBox::NoButtons) {
6756 rect = QRect(lx, fw, spinBox->rect.width() - 2*fw - 2, spinBox->rect.height() - 2*fw);
6757 } else {
6758 rect = QRect(lx, fw, rx-2, spinBox->rect.height() - 2*fw);
6759 }
6760 break;
6761 case SC_SpinBoxFrame:
6762 rect = spinBox->rect;
6763 default:
6764 break;
6765 }
6766 rect = visualRect(spinBox->direction, spinBox->rect, rect);
6767 }
6768 break;
6769#endif // Qt_NO_SPINBOX
6770#ifndef QT_NO_GROUPBOX
6771 case CC_GroupBox: {
6772 if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast<const QStyleOptionGroupBox *>(option)) {
6773 switch (subControl) {
6774 case SC_GroupBoxFrame:
6775 // FALL THROUGH
6776 case SC_GroupBoxContents: {
6777 int topMargin = 0;
6778 int topHeight = 0;
6779 int bottomMargin = 0;
6780 int labelMargin = 2;
6781
6782 QRect frameRect = groupBox->rect;
6783 int verticalAlignment = styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget);
6784 if (groupBox->text.size()) {
6785 topHeight = groupBox->fontMetrics.height();
6786 if (verticalAlignment & Qt::AlignVCenter)
6787 topMargin = topHeight+5;
6788 else if (verticalAlignment & Qt::AlignTop)
6789 topMargin = -topHeight+5;
6790 }
6791 if (subControl == SC_GroupBoxFrame) {
6792 frameRect.setTop(topMargin);
6793 frameRect.setBottom(frameRect.height() + bottomMargin);
6794 rect = frameRect;
6795 break;
6796 }
6797 int frameWidth = 0;
6798 if (groupBox->text.size()) {
6799 frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, groupBox, widget);
6800 rect = frameRect.adjusted(frameWidth, frameWidth + topHeight + labelMargin, -frameWidth, -frameWidth);
6801 }
6802 else {
6803 rect = groupBox->rect;
6804 }
6805 break;
6806 }
6807 case SC_GroupBoxCheckBox:
6808 // FALL THROUGH
6809 case SC_GroupBoxLabel: {
6810 QFontMetrics fontMetrics = groupBox->fontMetrics;
6811 int h = fontMetrics.height();
6812 int textWidth = fontMetrics.size(Qt::TextShowMnemonic, groupBox->text + QLatin1Char(' ')).width();
6813 int margX = (groupBox->features & QStyleOptionFrameV2::Flat) ? 0 : 2;
6814 int margY = (groupBox->features & QStyleOptionFrameV2::Flat) ? 0 : 2;
6815 rect = groupBox->rect.adjusted(margX, margY, -margX, 0);
6816 if (groupBox->text.size())
6817 rect.setHeight(h);
6818 else
6819 rect.setHeight(0);
6820 int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget);
6821 int indicatorSpace = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, option, widget) - 1;
6822 bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox;
6823 int checkBoxSize = hasCheckBox ? (indicatorWidth + indicatorSpace) : 0;
6824
6825 // Adjusted rect for label + indicatorWidth + indicatorSpace
6826 QRect totalRect = alignedRect(groupBox->direction, groupBox->textAlignment,
6827 QSize(textWidth + checkBoxSize, h), rect);
6828
6829 // Adjust totalRect if checkbox is set
6830 if (hasCheckBox) {
6831 bool ltr = groupBox->direction == Qt::LeftToRight;
6832 int left = 2;
6833 // Adjust for check box
6834 if (subControl == SC_GroupBoxCheckBox) {
6835 int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget);
6836 left = ltr ? totalRect.left() : (totalRect.right() - indicatorWidth);
6837 int top = totalRect.top() + (fontMetrics.height() - indicatorHeight) / 2;
6838 totalRect.setRect(left, top, indicatorWidth, indicatorHeight);
6839 // Adjust for label
6840 } else {
6841 left = ltr ? (totalRect.left() + checkBoxSize - 2) : totalRect.left();
6842 totalRect.setRect(left, totalRect.top(),
6843 totalRect.width() - checkBoxSize, totalRect.height());
6844 }
6845 }
6846 if ((subControl== SC_GroupBoxLabel))
6847 totalRect.adjust(-2,0,6,0);
6848 rect = totalRect;
6849 break;
6850 }
6851 default:
6852 break;
6853 }
6854 }
6855 break;
6856 }
6857#endif // QT_NO_GROUPBOX
6858 default:
6859 break;
6860 }
6861 return rect;
6862}
6863
6864QPalette QWindowsMobileStyle::standardPalette() const {
6865 QPalette palette (Qt::black,QColor(198, 195, 198), QColor(222, 223, 222 ),
6866 QColor(132, 130, 132), QColor(198, 195, 198), Qt::black, Qt::white, Qt::white, QColor(198, 195, 198));
6867 palette.setColor(QPalette::Window, QColor(206, 223, 239));
6868 palette.setColor(QPalette::Link, QColor(8,77,123)); //Alternate TextColor for labels...
6869 palette.setColor(QPalette::Base, Qt::white);
6870 palette.setColor(QPalette::Button, QColor(206, 223, 239));
6871 palette.setColor(QPalette::Highlight, QColor(49, 146, 214));
6872 palette.setColor(QPalette::Light, Qt::white);
6873 palette.setColor(QPalette::Text, Qt::black);
6874 palette.setColor(QPalette::ButtonText, Qt::black);
6875 palette.setColor(QPalette::Midlight, QColor(222, 223, 222 ));
6876 palette.setColor(QPalette::Dark, QColor(132, 130, 132));
6877 palette.setColor(QPalette::Mid, QColor(189, 190, 189));
6878 palette.setColor(QPalette::Shadow, QColor(0, 0, 0));
6879 palette.setColor(QPalette::BrightText, QColor(33, 162, 33)); //color for ItemView checked indicator (arrow)
6880 return palette;
6881}
6882
6883
6884/*! \reimp */
6885void QWindowsMobileStyle::polish(QApplication *application) {
6886 QWindowsStyle::polish(application);
6887}
6888
6889/*! \reimp */
6890void QWindowsMobileStyle::polish(QWidget *widget) {
6891
6892#ifndef QT_NO_TOOLBAR
6893 if (QToolBar *toolBar = qobject_cast<QToolBar*>(widget)) {
6894 QPalette pal = toolBar->palette();
6895 pal.setColor(QPalette::Background, pal.button().color());
6896 toolBar->setPalette(pal);
6897 }
6898 else
6899#endif //QT_NO_TOOLBAR
6900
6901 QWindowsStyle::polish(widget);
6902}
6903
6904void QWindowsMobileStyle::unpolish(QWidget *widget)
6905{
6906 QWindowsStyle::unpolish(widget);
6907}
6908
6909void QWindowsMobileStyle::unpolish(QApplication *app)
6910{
6911 QWindowsStyle::unpolish(app);
6912}
6913
6914/*! \reimp */
6915void QWindowsMobileStyle::polish(QPalette &palette) {
6916 QWindowsStyle::polish(palette);
6917}
6918
6919int QWindowsMobileStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QWidget *widget) const {
6920
6921 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
6922 int ret;
6923
6924 switch (pm) {
6925 case PM_DefaultTopLevelMargin:
6926 ret =0;
6927 break;
6928 case PM_DefaultLayoutSpacing:
6929 d->doubleControls ? ret = 8 : ret = 4;
6930 break;
6931 case PM_HeaderMargin:
6932 d->doubleControls ? ret = 2 : ret = 1;
6933 break;
6934 case PM_DefaultChildMargin:
6935 d->doubleControls ? ret = 10 : ret = 5;
6936 break;
6937 case PM_ToolBarSeparatorExtent:
6938 d->doubleControls ? ret = 6 : ret = 3;
6939 break;
6940 case PM_DefaultFrameWidth:
6941 d->doubleControls ? ret = 2 : ret = 1;
6942 break;
6943 case PM_MenuVMargin:
6944 ret = 1;
6945 break;
6946 case PM_MenuHMargin:
6947 ret = 1;
6948 break;
6949 case PM_MenuButtonIndicator:
6950 ret = d->doubleControls ? 24 : 14;
6951 break;
6952 case PM_ComboBoxFrameWidth:
6953 d->doubleControls ? ret = 2 : ret = 1;
6954 break;
6955 case PM_SpinBoxFrameWidth:
6956 d->doubleControls ? ret = 2 : ret = 1;
6957 break;
6958 case PM_ButtonDefaultIndicator:
6959 case PM_ButtonShiftHorizontal:
6960 case PM_ButtonShiftVertical:
6961 d->doubleControls ? ret = 2 : ret = 1;
6962 break;
6963#ifndef QT_NO_TABBAR
6964 case PM_TabBarTabShiftHorizontal:
6965 ret = 0;
6966 break;
6967 case PM_TabBarTabShiftVertical:
6968 ret = 0;
6969 break;
6970#endif
6971 case PM_MaximumDragDistance:
6972 ret = 60;
6973 break;
6974 case PM_TabBarTabVSpace:
6975 ret = d->doubleControls ? 12 : 6;
6976 break;
6977 case PM_TabBarBaseHeight:
6978 ret = 0;
6979 break;
6980 case PM_IndicatorWidth:
6981 ret = d->doubleControls ? windowsMobileIndicatorSize * 2 : windowsMobileIndicatorSize;
6982 break;
6983 case PM_IndicatorHeight:
6984 ret = d->doubleControls ? windowsMobileIndicatorSize * 2 : windowsMobileIndicatorSize;
6985 break;
6986 case PM_ExclusiveIndicatorWidth:
6987 ret = d->doubleControls ? windowsMobileExclusiveIndicatorSize * 2 + 4: windowsMobileExclusiveIndicatorSize + 2;
6988 break;
6989 case PM_ExclusiveIndicatorHeight:
6990 ret = d->doubleControls ? windowsMobileExclusiveIndicatorSize * 2 + 4: windowsMobileExclusiveIndicatorSize + 2;
6991 break;
6992#ifndef QT_NO_SLIDER
6993 case PM_SliderLength:
6994 ret = d->doubleControls ? 16 : 8;
6995 break;
6996 case PM_FocusFrameHMargin:
6997 ret = d->doubleControls ? 1 : 2;
6998 break;
6999 case PM_SliderThickness:
7000 ret = d->doubleControls ? windowsMobileSliderThickness * 2: windowsMobileSliderThickness;
7001 break;
7002 case PM_TabBarScrollButtonWidth:
7003 ret = d->doubleControls ? 14 * 2 : 18;
7004 break;
7005 case PM_CheckBoxLabelSpacing:
7006 case PM_RadioButtonLabelSpacing:
7007 ret = d->doubleControls ? 6 * 2 : 6;
7008 break;
7009 // Returns the number of pixels to use for the business part of the
7010 // slider (i.e., the non-tickmark portion). The remaining space is shared
7011 // equally between the tickmark regions.
7012 case PM_SliderControlThickness:
7013 if (const QStyleOptionSlider *sl = qstyleoption_cast<const QStyleOptionSlider *>(opt)) {
7014 int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width();
7015 int ticks = sl->tickPosition;
7016 int n = 0;
7017 if (ticks & QSlider::TicksAbove)
7018 ++n;
7019 if (ticks & QSlider::TicksBelow)
7020 ++n;
7021 if (!n) {
7022 ret = space;
7023 break;
7024 }
7025 int thick = 8;
7026 if (ticks != QSlider::TicksBothSides && ticks != QSlider::NoTicks)
7027 thick += proxy()->pixelMetric(PM_SliderLength, sl, widget) / 4;
7028
7029 space -= thick;
7030 if (space > 0)
7031 thick += (space * 2) / (n + 2);
7032 ret = thick;
7033 } else {
7034 ret = 0;
7035 }
7036 break;
7037#endif // QT_NO_SLIDER
7038#ifndef QT_NO_MENU
7039 case PM_SmallIconSize:
7040 d->doubleControls ? ret = windowsMobileIconSize * 2 : ret = windowsMobileIconSize;
7041 break;
7042 case PM_ButtonMargin:
7043 d->doubleControls ? ret = 8 : ret = 4;
7044 break;
7045 case PM_LargeIconSize:
7046 d->doubleControls ? ret = 64 : ret = 32;
7047 break;
7048 case PM_IconViewIconSize:
7049 ret = proxy()->pixelMetric(PM_LargeIconSize, opt, widget);
7050 break;
7051 case PM_ToolBarIconSize:
7052 d->doubleControls ? ret = 2 * windowsMobileIconSize : ret = windowsMobileIconSize;
7053 break;
7054 case PM_DockWidgetTitleMargin:
7055 ret = 2;
7056 break;
7057#if defined(Q_WS_WIN)
7058#else
7059 case PM_DockWidgetFrameWidth:
7060 ret = 4;
7061 break;
7062#endif // Q_WS_WIN
7063 break;
7064#endif // QT_NO_MENU
7065
7066 case PM_TitleBarHeight:
7067 d->doubleControls ? ret = 42 : ret = 21;
7068 break;
7069 case PM_ScrollBarSliderMin:
7070#ifdef Q_WS_WINCE_WM
7071 if (d->wm65)
7072#else
7073 if (false)
7074#endif
7075 {
7076 d->doubleControls ? ret = 68 : ret = 34;
7077 } else {
7078 d->doubleControls ? ret = 36 : ret = 18;
7079 }
7080 break;
7081 case PM_ScrollBarExtent: {
7082
7083 if (d->smartphone)
7084 ret = 9;
7085 else
7086 d->doubleControls ? ret = 25 : ret = 13;
7087
7088#ifdef Q_WS_WINCE_WM
7089 if (d->wm65)
7090#else
7091 if (false)
7092#endif
7093 {
7094 d->doubleControls ? ret = 26 : ret = 13;
7095 break;
7096 }
7097
7098#ifndef QT_NO_SCROLLAREA
7099 //Check if the scrollbar is part of an abstractItemView and set size according
7100 if (widget)
7101 if (QWidget *parent = widget->parentWidget())
7102 if (qobject_cast<QAbstractScrollArea *>(parent->parentWidget()))
7103 if (d->smartphone)
7104 ret = 8;
7105 else
7106 d->doubleControls ? ret = 24 : ret = 12;
7107#endif
7108 }
7109 break;
7110 case PM_SplitterWidth:
7111 ret = qMax(4, QApplication::globalStrut().width());
7112 break;
7113
7114#if defined(Q_WS_WIN)
7115 case PM_MDIFrameWidth:
7116 ret = 1;
7117 break;
7118#endif
7119 case PM_ToolBarExtensionExtent:
7120 d->doubleControls ? ret = 32 : ret = 16;
7121 break;
7122 case PM_ToolBarItemMargin:
7123 d->doubleControls ? ret = 2 : ret = 1;
7124 break;
7125 case PM_ToolBarItemSpacing:
7126 d->doubleControls ? ret = 2 : ret = 1;
7127 break;
7128 case PM_ToolBarHandleExtent:
7129 d->doubleControls ? ret = 16 : ret = 8;
7130 break;
7131 case PM_ButtonIconSize:
7132 d->doubleControls ? ret = 32 : ret = 16;
7133 break;
7134 case PM_TextCursorWidth:
7135 ret = 2;
7136 break;
7137 case PM_TabBar_ScrollButtonOverlap:
7138 ret = 0;
7139 break;
7140 default:
7141 ret = QWindowsStyle::pixelMetric(pm, opt, widget);
7142 break;
7143 }
7144 return ret;
7145}
7146
7147int QWindowsMobileStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWidget *widget,
7148 QStyleHintReturn *returnData) const {
7149
7150 int ret;
7151 switch (hint) {
7152 case SH_Menu_MouseTracking:
7153 case SH_ComboBox_ListMouseTracking:
7154 case SH_EtchDisabledText:
7155 ret = 0;
7156 break;
7157 case SH_DitherDisabledText:
7158 ret = 0;
7159 break;
7160 case SH_ItemView_ShowDecorationSelected:
7161 ret = 0;
7162 break;
7163#ifndef QT_NO_TABWIDGET
7164 case SH_TabWidget_DefaultTabPosition:
7165 ret = QTabWidget::South;
7166 break;
7167#endif
7168 case SH_ToolBar_Movable:
7169 ret = false;
7170 break;
7171 case SH_ScrollBar_ContextMenu:
7172 ret = false;
7173 break;
7174 case SH_MenuBar_AltKeyNavigation:
7175 ret = false;
7176 break;
7177 case SH_RequestSoftwareInputPanel:
7178 ret = RSIP_OnMouseClick;
7179 break;
7180 default:
7181 ret = QWindowsStyle::styleHint(hint, opt, widget, returnData);
7182 break;
7183 }
7184 return ret;
7185}
7186
7187QPixmap QWindowsMobileStyle::standardPixmap(StandardPixmap sp, const QStyleOption *option,
7188 const QWidget *widget) const {
7189
7190 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
7191 switch (sp) {
7192#ifndef QT_NO_IMAGEFORMAT_XPM
7193 case SP_ToolBarHorizontalExtensionButton: {
7194 QPixmap pixmap = QCommonStyle::standardPixmap(sp, option, widget);
7195 if (d->doubleControls)
7196 return pixmap.scaledToHeight(pixmap.height() * 2);
7197 else
7198 return pixmap;
7199 }
7200 case SP_TitleBarMaxButton:
7201 case SP_TitleBarCloseButton:
7202 case SP_TitleBarNormalButton:
7203 case SP_TitleBarMinButton: {
7204 QImage image;
7205 switch (sp) {
7206 case SP_TitleBarMaxButton:
7207 image = d->imageMaximize;
7208 break;
7209 case SP_TitleBarCloseButton:
7210 image = d->imageClose;
7211 break;
7212 case SP_TitleBarNormalButton:
7213 image = d->imageNormalize;
7214 break;
7215 case SP_TitleBarMinButton:
7216 image = d->imageMinimize;
7217 break;
7218 default:
7219 break;
7220 }
7221 if (option) {
7222 image.setColor(0, option->palette.shadow().color().rgba());
7223 image.setColor(1, option->palette.highlight().color().rgba());
7224 image.setColor(2, option->palette.highlight().color().lighter(150).rgba());
7225 image.setColor(3, option->palette.highlightedText().color().rgba());
7226 }
7227
7228 return QPixmap::fromImage(image);
7229 }
7230
7231#endif
7232 default:
7233 return QWindowsStyle::standardPixmap(sp, option, widget);
7234 }
7235}
7236
7237QPixmap QWindowsMobileStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
7238 const QStyleOption *option) const {
7239
7240 switch (iconMode) {
7241 case QIcon::Selected: {
7242#ifdef Q_WS_WINCE_WM
7243 if (d_func()->wm65)
7244 return pixmap;
7245#endif //Q_WS_WINCE_WM
7246 QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32);
7247 int imgh = img.height();
7248 int imgw = img.width();
7249 for (int y = 0; y < imgh; y += 2) {
7250 for (int x = 0; x < imgw; x += 2) {
7251 QColor c = option->palette.highlight().color().rgb();
7252 c.setAlpha( qAlpha(img.pixel(x, y)));
7253 QRgb pixel = c.rgba();
7254 img.setPixel(x, y, pixel);
7255 }
7256 }
7257 return QPixmap::fromImage(img);
7258 }
7259 default:
7260 break;
7261 }
7262 return QWindowsStyle::generatedIconPixmap(iconMode, pixmap, option);
7263}
7264
7265
7266bool QWindowsMobileStyle::doubleControls() const {
7267
7268 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
7269
7270 return d->doubleControls;
7271}
7272
7273void QWindowsMobileStyle::setDoubleControls(bool doubleControls) {
7274
7275 QWindowsMobileStylePrivate *d = const_cast<QWindowsMobileStylePrivate*>(d_func());
7276
7277 d->doubleControls = doubleControls;
7278}
7279
7280QT_END_NAMESPACE
7281
7282#endif // QT_NO_STYLE_WINDOWSMOBILE
7283
Note: See TracBrowser for help on using the repository browser.