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

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

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

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