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