annotate demos/shared/arthurstyle.d @ 310:5bcfe9e7db7f lifetime

Committing local changes
author maxter <spambox@d-coding.com>
date Wed, 23 Dec 2009 16:10:46 +0200
parents ab01453c9d56
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
310
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
1 /****************************************************************************
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
2 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
5 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
6 ** This file is part of the demonstration applications of the Qt Toolkit.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
7 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
9 ** Commercial Usage
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
13 ** a written agreement between you and Nokia.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
14 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
15 ** GNU Lesser General Public License Usage
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
19 ** packaging of this file. Please review the following information to
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
22 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
26 ** package.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
27 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
28 ** GNU General Public License Usage
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
32 ** packaging of this file. Please review the following information to
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
35 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
38 ** $QT_END_LICENSE$
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
39 **
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
40 ****************************************************************************/
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
41 module arthurstyle;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
42
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
43
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
44 import
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
45 qt.gui.QLayout,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
46 qt.gui.QWindowsStyle,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
47 qt.gui.QPainter,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
48 qt.gui.QPainterPath,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
49 qt.gui.QPixmapCache,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
50 qt.gui.QRadioButton,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
51 qt.gui.QPushButton,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
52 qt.gui.QGroupBox,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
53 qt.gui.QLinearGradient,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
54 qt.gui.QStyleOption,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
55 qt.gui.QStyleOptionFrameV2;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
56
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
57
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
58 class ArthurStyle : QWindowsStyle
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
59 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
60 QPixmap cached(string img)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
61 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
62 QPixmap pm = new QPixmap;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
63 if (QPixmapCache.find(img, pm))
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
64 return pm;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
65
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
66 pm = QPixmap.fromImage(new QImage(img), Qt.OrderedDither | Qt.OrderedAlphaDither);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
67 if (pm.isNull)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
68 return new QPixmap;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
69
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
70 QPixmapCache.insert(img, pm);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
71 return pm;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
72 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
73
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
74 this()
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
75 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
76 //Q_INIT_RESOURCE(shared);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
77 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
78
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
79 void drawHoverRect(QPainter painter, QRect r)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
80 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
81 qreal h = r.height();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
82 qreal h2 = r.height() / 2.0;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
83 QPainterPath path = new QPainterPath;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
84 path.addRect(r.x() + h2, r.y() + 0, r.width() - h2 * 2, r.height());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
85 path.addEllipse(r.x(), r.y(), h, h);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
86 path.addEllipse(r.x() + r.width() - h, r.y(), h, h);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
87 path.setFillRule(Qt.WindingFill);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
88 painter.setPen(Qt.NoPen);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
89 painter.setBrush(new QColor(191, 215, 191));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
90 painter.setRenderHint(QPainter.Antialiasing);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
91 painter.drawPath(path);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
92 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
93
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
94 override void drawPrimitive(PrimitiveElement element, QStyleOption option, QPainter painter, QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
95 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
96 assert(option);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
97 switch (element)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
98 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
99 case PE_FrameFocusRect:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
100 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
101
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
102 case PE_IndicatorRadioButton:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
103 if (QStyleOptionButton button = cast(QStyleOptionButton)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
104 bool hover = (button.state & State_Enabled) && (button.state & State_MouseOver);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
105 painter.save;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
106 QPixmap radio;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
107 if (hover)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
108 drawHoverRect(painter, widget.rect);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
109
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
110 if (button.state & State_Sunken)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
111 radio = cached(":res/images/radiobutton-on.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
112 else if (button.state & State_On)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
113 radio = cached(":res/images/radiobutton_on.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
114 else
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
115 radio = cached(":res/images/radiobutton_off.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
116 painter.drawPixmap(button.rect.topLeft, radio);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
117
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
118 painter.restore();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
119 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
120 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
121
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
122 case PE_PanelButtonCommand:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
123 if (QStyleOptionButton button = cast(QStyleOptionButton)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
124 bool hover = (button.state & State_Enabled) && (button.state & State_MouseOver);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
125
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
126 painter.save();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
127 QPushButton pushButton = cast(QPushButton)(widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
128 assert(pushButton);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
129 auto parent = pushButton.parentWidget;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
130 if (parent && cast(QGroupBox)(parent)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
131 auto lg = new QLinearGradient(0, 0, 0, parent.height);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
132 lg.setColorAt(0, new QColor(224,224,224));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
133 lg.setColorAt(1, new QColor(255,255,255));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
134 painter.setPen(Qt.NoPen);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
135 painter.setBrush(lg);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
136 painter.setBrushOrigin(QPoint() - widget.mapToParent(QPoint(0,0)));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
137 painter.drawRect(button.rect);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
138 painter.setBrushOrigin(0, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
139 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
140
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
141 bool down = (button.state & State_Sunken) || (button.state & State_On);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
142
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
143 QPixmap left, right, mid;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
144 if (down) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
145 left = cached(":res/images/button_pressed_cap_left.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
146 right = cached(":res/images/button_pressed_cap_right.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
147 mid = cached(":res/images/button_pressed_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
148 } else {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
149 left = cached(":res/images/button_normal_cap_left.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
150 right = cached(":res/images/button_normal_cap_right.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
151 mid = cached(":res/images/button_normal_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
152 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
153 painter.drawPixmap(button.rect.topLeft, left);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
154 painter.drawTiledPixmap(QRect(button.rect.x + left.width,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
155 button.rect.y,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
156 button.rect.width - left.width - right.width,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
157 left.height),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
158 mid);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
159 painter.drawPixmap(button.rect.x + button.rect.width - right.width,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
160 button.rect.y,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
161 right);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
162 if (hover)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
163 painter.fillRect(widget.rect.adjusted(3,5,-3,-5), new QColor(31,127,31,63));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
164 painter.restore;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
165 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
166 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
167
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
168 case PE_FrameGroupBox:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
169 if (QStyleOptionFrameV2 group = cast(QStyleOptionFrameV2)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
170 auto r = group.rect;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
171
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
172 painter.save();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
173 int radius = 14;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
174 int radius2 = radius*2;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
175 QPainterPath clipPath;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
176 clipPath.moveTo(radius, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
177 clipPath.arcTo(r.right() - radius2, 0, radius2, radius2, 90, -90);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
178 clipPath.arcTo(r.right() - radius2, r.bottom() - radius2, radius2, radius2, 0, -90);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
179 clipPath.arcTo(r.left(), r.bottom() - radius2, radius2, radius2, 270, -90);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
180 clipPath.arcTo(r.left(), r.top(), radius2, radius2, 180, -90);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
181 painter.setClipPath(clipPath);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
182 QPixmap titleStretch = cached(":res/images/title_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
183 QPixmap topLeft = cached(":res/images/groupframe_topleft.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
184 QPixmap topRight = cached(":res/images/groupframe_topright.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
185 QPixmap bottomLeft = cached(":res/images/groupframe_bottom_left.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
186 QPixmap bottomRight = cached(":res/images/groupframe_bottom_right.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
187 QPixmap leftStretch = cached(":res/images/groupframe_left_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
188 QPixmap topStretch = cached(":res/images/groupframe_top_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
189 QPixmap rightStretch = cached(":res/images/groupframe_right_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
190 QPixmap bottomStretch = cached(":res/images/groupframe_bottom_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
191 auto lg = new QLinearGradient(0, 0, 0, r.height());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
192 lg.setColorAt(0, new QColor(224,224,224));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
193 lg.setColorAt(1, new QColor(255,255,255));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
194 painter.setPen(Qt.NoPen);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
195 painter.setBrush(lg);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
196 painter.drawRect(r.adjusted(0, titleStretch.height()/2, 0, 0));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
197 painter.setClipping(false);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
198
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
199 int topFrameOffset = titleStretch.height()/2 - 2;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
200 painter.drawPixmap(r.topLeft() + QPoint(0, topFrameOffset), topLeft);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
201 painter.drawPixmap(r.topRight() - QPoint(topRight.width()-1, 0) + QPoint(0, topFrameOffset), topRight);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
202 painter.drawPixmap(r.bottomLeft() - QPoint(0, bottomLeft.height()-1), bottomLeft);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
203 painter.drawPixmap(r.bottomRight() - QPoint(bottomRight.width()-1, bottomRight.height()-1), bottomRight);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
204
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
205 QRect left = r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
206 left.setY(r.y() + topLeft.height() + topFrameOffset);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
207 left.setWidth(leftStretch.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
208 left.setHeight(r.height() - topLeft.height() - bottomLeft.height() - topFrameOffset);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
209 painter.drawTiledPixmap(left, leftStretch);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
210
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
211 QRect top = r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
212 top.setX(r.x() + topLeft.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
213 top.setY(r.y() + topFrameOffset);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
214 top.setWidth(r.width() - topLeft.width() - topRight.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
215 top.setHeight(topLeft.height());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
216 painter.drawTiledPixmap(top, topStretch);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
217
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
218 QRect right = r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
219 right.setX(r.right() - rightStretch.width()+1);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
220 right.setY(r.y() + topRight.height() + topFrameOffset);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
221 right.setWidth(rightStretch.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
222 right.setHeight(r.height() - topRight.height() - bottomRight.height() - topFrameOffset);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
223 painter.drawTiledPixmap(right, rightStretch);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
224
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
225 QRect bottom = r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
226 bottom.setX(r.x() + bottomLeft.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
227 bottom.setY(r.bottom() - bottomStretch.height()+1);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
228 bottom.setWidth(r.width() - bottomLeft.width() - bottomRight.width());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
229 bottom.setHeight(bottomLeft.height());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
230 painter.drawTiledPixmap(bottom, bottomStretch);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
231 painter.restore();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
232 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
233 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
234
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
235 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
236 QWindowsStyle.drawPrimitive(element, option, painter, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
237 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
238 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
239 return;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
240 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
241
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
242 override void drawComplexControl(ComplexControl control, QStyleOptionComplex option,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
243 QPainter painter, QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
244 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
245 switch (control) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
246 case CC_Slider:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
247 if (QStyleOptionSlider slider = cast(QStyleOptionSlider)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
248 QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
249 QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
250
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
251 painter.save;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
252
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
253 bool hover = (slider.state & State_Enabled) && (slider.state & State_MouseOver);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
254 if (hover) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
255 QRect moderated = widget.rect().adjusted(0, 4, 0, -4);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
256 drawHoverRect(painter, moderated);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
257 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
258
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
259 if ((option.subControls & SC_SliderGroove) && groove.isValid()) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
260 QPixmap grv = cached(":res/images/slider_bar.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
261 painter.drawPixmap(QRect(groove.x() + 5, groove.y(),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
262 groove.width() - 10, grv.height()),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
263 grv);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
264 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
265 if ((option.subControls & SC_SliderHandle) && handle.isValid()) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
266 QPixmap hndl = cached(":res/images/slider_thumb_on.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
267 painter.drawPixmap(handle.topLeft(), hndl);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
268 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
269
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
270 painter.restore();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
271 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
272 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
273 case CC_GroupBox:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
274 if (QStyleOptionGroupBox groupBox
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
275 = cast(QStyleOptionGroupBox)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
276 auto groupBoxCopy = new QStyleOptionGroupBox(groupBox);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
277 groupBoxCopy.setSubControls = groupBoxCopy.subControls & ~SC_GroupBoxLabel;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
278 QWindowsStyle.drawComplexControl(control, groupBoxCopy, painter, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
279
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
280 if (groupBox.subControls & SC_GroupBoxLabel) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
281 QRect r = groupBox.rect;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
282 QPixmap titleLeft = cached(":res/images/title_cap_left.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
283 QPixmap titleRight = cached(":res/images/title_cap_right.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
284 QPixmap titleStretch = cached(":res/images/title_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
285 int txt_width = groupBox.fontMetrics.width(groupBox.text) + 20;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
286 painter.drawPixmap(r.center().x() - txt_width/2, 0, titleLeft);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
287 QRect tileRect = subControlRect(control, groupBox, SC_GroupBoxLabel, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
288 painter.drawTiledPixmap(tileRect, titleStretch);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
289 painter.drawPixmap(tileRect.x() + tileRect.width(), 0, titleRight);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
290 int opacity = 31;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
291 painter.setPen(new QColor(0, 0, 0, opacity));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
292 painter.drawText(tileRect.translated(0, 1),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
293 cast(int)(Qt.AlignVCenter | Qt.AlignHCenter), groupBox.text, null);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
294 painter.drawText(tileRect.translated(2, 1),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
295 cast(int)(Qt.AlignVCenter | Qt.AlignHCenter), groupBox.text, null);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
296 painter.setPen(new QColor(0, 0, 0, opacity * 2));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
297 painter.drawText(tileRect.translated(1, 1),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
298 cast(int)(Qt.AlignVCenter | Qt.AlignHCenter), groupBox.text, null);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
299 painter.setPen(new QColor(Qt.white));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
300 painter.drawText(tileRect, cast(int)(Qt.AlignVCenter | Qt.AlignHCenter), groupBox.text, null);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
301 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
302 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
303 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
304 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
305 QWindowsStyle.drawComplexControl(control, option, painter, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
306 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
307 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
308 return;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
309 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
310
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
311 override QRect subControlRect(QStyle_ComplexControl control, QStyleOptionComplex option,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
312 int sc, QWidget widget = null)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
313 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
314 QRect rect;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
315
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
316 auto subControl = cast(SubControl)sc;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
317
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
318 switch (control) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
319 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
320 rect = QWindowsStyle.subControlRect(control, option, subControl, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
321 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
322 case CC_GroupBox:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
323 if (QStyleOptionGroupBox group
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
324 = cast(QStyleOptionGroupBox)(option)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
325 switch (subControl) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
326 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
327 rect = QWindowsStyle.subControlRect(control, option, subControl, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
328 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
329 case SC_GroupBoxContents:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
330 rect = QWindowsStyle.subControlRect(control, option, subControl, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
331 rect.adjust(0, -8, 0, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
332 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
333 case SC_GroupBoxFrame:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
334 rect = group.rect;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
335 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
336 case SC_GroupBoxLabel:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
337 QPixmap titleLeft = cached(":res/images/title_cap_left.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
338 QPixmap titleRight = cached(":res/images/title_cap_right.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
339 QPixmap titleStretch = cached(":res/images/title_stretch.png");
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
340 int txt_width = group.fontMetrics.width(group.text) + 20;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
341 rect = QRect(group.rect.center().x() - txt_width/2 + titleLeft.width(), 0,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
342 txt_width - titleLeft.width() - titleRight.width(),
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
343 titleStretch.height());
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
344 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
345 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
346 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
347 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
348 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
349
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
350 if (control == CC_Slider && subControl == SC_SliderHandle) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
351 rect.setWidth(13);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
352 rect.setHeight(27);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
353 } else if (control == CC_Slider && subControl == SC_SliderGroove) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
354 rect.setHeight(9);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
355 rect.moveTop(27/2 - 9/2);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
356 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
357 return rect;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
358 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
359
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
360 override QSize sizeFromContents(ContentsType type, QStyleOption option,
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
361 QSize size, QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
362 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
363 QSize newSize = QWindowsStyle.sizeFromContents(type, option, size, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
364
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
365 switch (type) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
366 case CT_RadioButton:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
367 newSize += QSize(20, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
368 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
369
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
370 case CT_PushButton:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
371 newSize.setHeight(26);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
372 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
373
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
374 case CT_Slider:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
375 newSize.setHeight(27);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
376 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
377
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
378 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
379 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
380 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
381
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
382 return newSize;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
383 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
384
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
385 override int pixelMetric(PixelMetric pm, QStyleOption opt, QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
386 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
387 if (pm == PM_SliderLength)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
388 return 13;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
389 return QWindowsStyle.pixelMetric(pm, opt, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
390 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
391
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
392 override void polish(QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
393 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
394 if (widget.layout() && cast(QGroupBox)(widget)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
395 if (widget.findChildren!(QGroupBox).length == 0) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
396 widget.layout().setWidgetSpacing(0); // Why setSpacing was renamed to setWidgetSpacing?
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
397 widget.layout().setMargin(12);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
398 } else {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
399 widget.layout().setMargin(13);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
400 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
401 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
402
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
403 if (cast(QPushButton)(widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
404 || cast(QRadioButton)(widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
405 || cast(QSlider)(widget)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
406 widget.setAttribute(Qt.WA_Hover);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
407 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
408
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
409 QPalette pal = widget.palette();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
410 if (widget.isWindow()) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
411 pal.setColor(QPalette.Window, new QColor(241, 241, 241));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
412 widget.setPalette(pal);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
413 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
414 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
415
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
416 override void unpolish(QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
417 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
418 if (cast(QPushButton)(widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
419 || cast(QRadioButton)(widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
420 || cast(QSlider)(widget)) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
421 widget.setAttribute(Qt.WA_Hover, false);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
422 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
423 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
424
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
425 override void polish(QPalette palette)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
426 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
427 palette.setColor(QPalette.Window, new QColor(241, 241, 241));
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
428 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
429
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
430 override QRect subElementRect(SubElement element, QStyleOption option, QWidget widget)
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
431 {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
432 QRect r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
433 switch(element) {
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
434 case SE_RadioButtonClickRect:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
435 r = widget.rect();
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
436 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
437 case SE_RadioButtonContents:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
438 r = widget.rect().adjusted(20, 0, 0, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
439 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
440 default:
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
441 r = QWindowsStyle.subElementRect(element, option, widget);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
442 break;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
443 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
444
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
445 if (cast(QRadioButton)(widget))
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
446 r = r.adjusted(5, 0, -5, 0);
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
447
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
448 return r;
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
449 }
5bcfe9e7db7f Committing local changes
maxter <spambox@d-coding.com>
parents: 163
diff changeset
450 }