summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/lightstyle.cpp30
-rw-r--r--library/qpestyle.cpp8
2 files changed, 23 insertions, 15 deletions
diff --git a/library/lightstyle.cpp b/library/lightstyle.cpp
index 3bd1623..c5073ca 100644
--- a/library/lightstyle.cpp
+++ b/library/lightstyle.cpp
@@ -1,1284 +1,1288 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "lightstyle.h" 20#include "lightstyle.h"
21 21
22#if QT_VERSION < 0x030000 22#if QT_VERSION < 0x030000
23 23
24#define INCLUDE_MENUITEM_DEF 24#define INCLUDE_MENUITEM_DEF
25#include "qmenubar.h" 25#include "qmenubar.h"
26#include "qapplication.h" 26#include "qapplication.h"
27#include "qpainter.h" 27#include "qpainter.h"
28#include "qpalette.h" 28#include "qpalette.h"
29#include "qframe.h" 29#include "qframe.h"
30#include "qpushbutton.h" 30#include "qpushbutton.h"
31#include "qdrawutil.h" 31#include "qdrawutil.h"
32#include "qscrollbar.h" 32#include "qscrollbar.h"
33#include "qtabbar.h" 33#include "qtabbar.h"
34#include "qguardedptr.h" 34#include "qguardedptr.h"
35#include "qlayout.h" 35#include "qlayout.h"
36#include "qlineedit.h" 36#include "qlineedit.h"
37 37
38 38
39class LightStylePrivate 39class LightStylePrivate
40{ 40{
41public: 41public:
42 LightStylePrivate() 42 LightStylePrivate()
43 : hoverWidget(0), ref(1), savePalette(0) 43 : hoverWidget(0), ref(1), savePalette(0)
44 { 44 {
45 } 45 }
46 46
47 QGuardedPtr<QWidget> hoverWidget; 47 QGuardedPtr<QWidget> hoverWidget;
48 QPalette oldPalette, hoverPalette; 48 QPalette oldPalette, hoverPalette;
49 int ref; 49 int ref;
50 QPoint mousePos; 50 QPoint mousePos;
51 QPalette *savePalette; 51 QPalette *savePalette;
52}; 52};
53 53
54 54
55static LightStylePrivate *singleton = 0; 55static LightStylePrivate *singleton = 0;
56 56
57 57
58LightStyle::LightStyle() 58LightStyle::LightStyle()
59 : QWindowsStyle() 59 : QWindowsStyle()
60{ 60{
61 if (! singleton) { 61 if (! singleton) {
62 singleton = new LightStylePrivate; 62 singleton = new LightStylePrivate;
63 63
64 QPalette pal = QApplication::palette(); 64 QPalette pal = QApplication::palette();
65 singleton->oldPalette = pal; 65 singleton->oldPalette = pal;
66 66
67 QColor bg = pal.color(QPalette::Active, QColorGroup::Background); 67 QColor bg = pal.color(QPalette::Active, QColorGroup::Background);
68 QColor prelight; 68 QColor prelight;
69 69
70 if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) 70 if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128)
71 prelight = pal.color(QPalette::Active, 71 prelight = pal.color(QPalette::Active,
72 QColorGroup::Background).light(110); 72 QColorGroup::Background).light(110);
73 else 73 else
74 prelight = pal.color(QPalette::Active, 74 prelight = pal.color(QPalette::Active,
75 QColorGroup::Background).light(120); 75 QColorGroup::Background).light(120);
76 76
77 QColorGroup active2(pal.color(QPalette::Active, 77 QColorGroup active2(pal.color(QPalette::Active,
78 QColorGroup::Foreground), // foreground 78 QColorGroup::Foreground), // foreground
79 prelight, // button 79 prelight, // button
80 prelight.light(), // light 80 prelight.light(), // light
81 prelight.dark(), // dark 81 prelight.dark(), // dark
82 prelight.dark(120), // mid 82 prelight.dark(120), // mid
83 pal.color(QPalette::Active, 83 pal.color(QPalette::Active,
84 QColorGroup::Text), // text 84 QColorGroup::Text), // text
85 pal.color(QPalette::Active, 85 pal.color(QPalette::Active,
86 QColorGroup::BrightText), // bright text 86 QColorGroup::BrightText), // bright text
87 pal.color(QPalette::Active, 87 pal.color(QPalette::Active,
88 QColorGroup::Base), // base 88 QColorGroup::Base), // base
89 bg); // background 89 bg); // background
90 active2.setColor(QColorGroup::Highlight, 90 active2.setColor(QColorGroup::Highlight,
91 pal.color(QPalette::Active, QColorGroup::Highlight)); 91 pal.color(QPalette::Active, QColorGroup::Highlight));
92 92
93 singleton->hoverPalette = pal; 93 singleton->hoverPalette = pal;
94 singleton->hoverPalette.setActive(active2); 94 singleton->hoverPalette.setActive(active2);
95 singleton->hoverPalette.setInactive(active2); 95 singleton->hoverPalette.setInactive(active2);
96 } else 96 } else
97 singleton->ref++; 97 singleton->ref++;
98} 98}
99 99
100 100
101LightStyle::~LightStyle() 101LightStyle::~LightStyle()
102{ 102{
103 if (singleton && singleton->ref-- <= 0) { 103 if (singleton && singleton->ref-- <= 0) {
104 delete singleton; 104 delete singleton;
105 singleton = 0; 105 singleton = 0;
106 } 106 }
107} 107}
108 108
109 109
110QSize LightStyle::scrollBarExtent() const 110QSize LightStyle::scrollBarExtent() const
111{ 111{
112 return QSize(12 + defaultFrameWidth(), 12 + defaultFrameWidth()); 112 return QSize(12 + defaultFrameWidth(), 12 + defaultFrameWidth());
113} 113}
114 114
115 115
116int LightStyle::buttonDefaultIndicatorWidth() const 116int LightStyle::buttonDefaultIndicatorWidth() const
117{ 117{
118 return 2; 118 return 2;
119} 119}
120 120
121 121
122int LightStyle::sliderThickness() const 122int LightStyle::sliderThickness() const
123{ 123{
124 return 16; 124 return 16;
125} 125}
126 126
127int LightStyle::sliderLength() const 127int LightStyle::sliderLength() const
128{ 128{
129 return 13; 129 return 13;
130} 130}
131 131
132 132
133int LightStyle::buttonMargin() const 133int LightStyle::buttonMargin() const
134{ 134{
135 return 4; 135 return 4;
136} 136}
137 137
138 138
139QSize LightStyle::exclusiveIndicatorSize() const 139QSize LightStyle::exclusiveIndicatorSize() const
140{ 140{
141 return QSize(13, 13); 141 return QSize(13, 13);
142} 142}
143 143
144 144
145int LightStyle::defaultFrameWidth() const 145int LightStyle::defaultFrameWidth() const
146{ 146{
147 return 2; 147 return 2;
148} 148}
149 149
150 150
151QSize LightStyle::indicatorSize() const 151QSize LightStyle::indicatorSize() const
152{ 152{
153 return QSize(13, 13); 153 return QSize(13, 13);
154} 154}
155 155
156 156
157void LightStyle::polish(QWidget *widget) 157void LightStyle::polish(QWidget *widget)
158{ 158{
159 if (widget->inherits("QPushButton")) 159 if (widget->inherits("QPushButton"))
160 widget->installEventFilter(this); 160 widget->installEventFilter(this);
161 161
162#if QT_VERSION >= 0x030000 162#if QT_VERSION >= 0x030000
163 if (widget->inherits("QLineEdit")) { 163 if (widget->inherits("QLineEdit")) {
164 QLineEdit *lineedit = (QLineEdit *) widget; 164 QLineEdit *lineedit = (QLineEdit *) widget;
165 lineedit->setFrameShape(QFrame::StyledPanel); 165 lineedit->setFrameShape(QFrame::StyledPanel);
166 lineedit->setLineWidth(2); 166 lineedit->setLineWidth(2);
167 } 167 }
168#endif 168#endif
169 169
170 QWindowsStyle::polish(widget); 170 QWindowsStyle::polish(widget);
171} 171}
172 172
173 173
174void LightStyle::unPolish(QWidget *widget) 174void LightStyle::unPolish(QWidget *widget)
175{ 175{
176 if (widget->inherits("QPushButton")) 176 if (widget->inherits("QPushButton"))
177 widget->removeEventFilter(this); 177 widget->removeEventFilter(this);
178 178
179#if QT_VERSION >= 0x030000 179#if QT_VERSION >= 0x030000
180 if (widget->inherits("QLineEdit")) { 180 if (widget->inherits("QLineEdit")) {
181 QLineEdit *lineedit = (QLineEdit *) widget; 181 QLineEdit *lineedit = (QLineEdit *) widget;
182 lineedit->setLineWidth(1); 182 lineedit->setLineWidth(1);
183 lineedit->setFrameShape(QFrame::WinPanel); 183 lineedit->setFrameShape(QFrame::WinPanel);
184 } 184 }
185#endif 185#endif
186 186
187 QWindowsStyle::unPolish(widget); 187 QWindowsStyle::unPolish(widget);
188} 188}
189 189
190 190
191void LightStyle::polish(QApplication *app) 191void LightStyle::polish(QApplication *app)
192{ 192{
193 QPalette pal = app->palette(); 193 QPalette pal = app->palette();
194 194
195 QColorGroup active(pal.color(QPalette::Active, 195 QColorGroup active(pal.color(QPalette::Active,
196 QColorGroup::Foreground), // foreground 196 QColorGroup::Foreground), // foreground
197 pal.color(QPalette::Active, 197 pal.color(QPalette::Active,
198 QColorGroup::Button), // button 198 QColorGroup::Button), // button
199 pal.color(QPalette::Active, 199 pal.color(QPalette::Active,
200 QColorGroup::Background).light(), // light 200 QColorGroup::Background).light(), // light
201 pal.color(QPalette::Active, 201 pal.color(QPalette::Active,
202 QColorGroup::Background).dark(175), // dark 202 QColorGroup::Background).dark(175), // dark
203 pal.color(QPalette::Active, 203 pal.color(QPalette::Active,
204 QColorGroup::Background).dark(110), // mid 204 QColorGroup::Background).dark(110), // mid
205 pal.color(QPalette::Active, 205 pal.color(QPalette::Active,
206 QColorGroup::Text), // text 206 QColorGroup::Text), // text
207 pal.color(QPalette::Active, 207 pal.color(QPalette::Active,
208 QColorGroup::BrightText), // bright text 208 QColorGroup::BrightText), // bright text
209 pal.color(QPalette::Active, 209 pal.color(QPalette::Active,
210 QColorGroup::Base), // base 210 QColorGroup::Base), // base
211 pal.color(QPalette::Active, 211 pal.color(QPalette::Active,
212 QColorGroup::Background)), // background 212 QColorGroup::Background)), // background
213 213
214 214
215 disabled(pal.color(QPalette::Disabled, 215 disabled(pal.color(QPalette::Disabled,
216 QColorGroup::Foreground), // foreground 216 QColorGroup::Foreground), // foreground
217 pal.color(QPalette::Disabled, 217 pal.color(QPalette::Disabled,
218 QColorGroup::Button), // button 218 QColorGroup::Button), // button
219 pal.color(QPalette::Disabled, 219 pal.color(QPalette::Disabled,
220 QColorGroup::Background).light(), // light 220 QColorGroup::Background).light(), // light
221 pal.color(QPalette::Disabled, 221 pal.color(QPalette::Disabled,
222 QColorGroup::Background).dark(), // dark 222 QColorGroup::Background).dark(), // dark
223 pal.color(QPalette::Disabled, 223 pal.color(QPalette::Disabled,
224 QColorGroup::Background).dark(110), // mid 224 QColorGroup::Background).dark(110), // mid
225 pal.color(QPalette::Disabled, 225 pal.color(QPalette::Disabled,
226 QColorGroup::Text), // text 226 QColorGroup::Text), // text
227 pal.color(QPalette::Disabled, 227 pal.color(QPalette::Disabled,
228 QColorGroup::BrightText), // bright text 228 QColorGroup::BrightText), // bright text
229 pal.color(QPalette::Disabled, 229 pal.color(QPalette::Disabled,
230 QColorGroup::Base), // base 230 QColorGroup::Base), // base
231 pal.color(QPalette::Disabled, 231 pal.color(QPalette::Disabled,
232 QColorGroup::Background)); // background 232 QColorGroup::Background)); // background
233 233
234 active.setColor(QColorGroup::Highlight, 234 active.setColor(QColorGroup::Highlight,
235 pal.color(QPalette::Active, QColorGroup::Highlight)); 235 pal.color(QPalette::Active, QColorGroup::Highlight));
236 disabled.setColor(QColorGroup::Highlight, 236 disabled.setColor(QColorGroup::Highlight,
237 pal.color(QPalette::Disabled, QColorGroup::Highlight)); 237 pal.color(QPalette::Disabled, QColorGroup::Highlight));
238 238
239 active.setColor(QColorGroup::HighlightedText, 239 active.setColor(QColorGroup::HighlightedText,
240 pal.color(QPalette::Active, QColorGroup::HighlightedText)); 240 pal.color(QPalette::Active, QColorGroup::HighlightedText));
241 disabled.setColor(QColorGroup::HighlightedText, 241 disabled.setColor(QColorGroup::HighlightedText,
242 pal.color(QPalette::Disabled, QColorGroup::HighlightedText)); 242 pal.color(QPalette::Disabled, QColorGroup::HighlightedText));
243 243
244 pal.setActive(active); 244 pal.setActive(active);
245 pal.setInactive(active); 245 pal.setInactive(active);
246 pal.setDisabled(disabled); 246 pal.setDisabled(disabled);
247 247
248 singleton->oldPalette = pal; 248 singleton->oldPalette = pal;
249 249
250 QColor bg = pal.color(QPalette::Active, QColorGroup::Background); 250 QColor bg = pal.color(QPalette::Active, QColorGroup::Background);
251 QColor prelight; 251 QColor prelight;
252 252
253 if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) 253 if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128)
254 prelight = pal.color(QPalette::Active, 254 prelight = pal.color(QPalette::Active,
255 QColorGroup::Background).light(110); 255 QColorGroup::Background).light(110);
256 else 256 else
257 prelight = pal.color(QPalette::Active, 257 prelight = pal.color(QPalette::Active,
258 QColorGroup::Background).light(120); 258 QColorGroup::Background).light(120);
259 259
260 QColorGroup active2(pal.color(QPalette::Active, 260 QColorGroup active2(pal.color(QPalette::Active,
261 QColorGroup::Foreground), // foreground 261 QColorGroup::Foreground), // foreground
262 prelight, // button 262 prelight, // button
263 prelight.light(), // light 263 prelight.light(), // light
264 prelight.dark(), // dark 264 prelight.dark(), // dark
265 prelight.dark(120), // mid 265 prelight.dark(120), // mid
266 pal.color(QPalette::Active, 266 pal.color(QPalette::Active,
267 QColorGroup::Text), // text 267 QColorGroup::Text), // text
268 pal.color(QPalette::Active, 268 pal.color(QPalette::Active,
269 QColorGroup::BrightText), // bright text 269 QColorGroup::BrightText), // bright text
270 pal.color(QPalette::Active, 270 pal.color(QPalette::Active,
271 QColorGroup::Base), // base 271 QColorGroup::Base), // base
272 bg); // background 272 bg); // background
273 active2.setColor(QColorGroup::Highlight, 273 active2.setColor(QColorGroup::Highlight,
274 pal.color(QPalette::Active, QColorGroup::Highlight)); 274 pal.color(QPalette::Active, QColorGroup::Highlight));
275 275
276 singleton->hoverPalette = pal; 276 singleton->hoverPalette = pal;
277 singleton->hoverPalette.setActive(active2); 277 singleton->hoverPalette.setActive(active2);
278 singleton->hoverPalette.setInactive(active2); 278 singleton->hoverPalette.setInactive(active2);
279 279
280 app->setPalette(pal); 280 app->setPalette(pal);
281} 281}
282 282
283 283
284void LightStyle::unPolish(QApplication *app) 284void LightStyle::unPolish(QApplication *app)
285{ 285{
286 app->setPalette(singleton->oldPalette); 286 app->setPalette(singleton->oldPalette);
287} 287}
288 288
289 289
290void LightStyle::polishPopupMenu(QPopupMenu *menu) 290void LightStyle::polishPopupMenu(QPopupMenu *menu)
291{ 291{
292 menu->setMouseTracking(TRUE); 292 menu->setMouseTracking(TRUE);
293} 293}
294 294
295 295
296void LightStyle::drawPushButton(QPushButton *button, QPainter *p) 296void LightStyle::drawPushButton(QPushButton *button, QPainter *p)
297{ 297{
298 int x1, y1, x2, y2; 298 int x1, y1, x2, y2;
299 button->rect().coords(&x1, &y1, &x2, &y2); 299 button->rect().coords(&x1, &y1, &x2, &y2);
300 300
301 if (button->isDefault()) { 301 if (button->isDefault()) {
302 p->save(); 302 p->save();
303 p->setPen(button->palette().active().color(QColorGroup::Highlight)); 303 p->setPen(button->palette().active().color(QColorGroup::Highlight));
304 p->setBrush(button->palette().active().brush(QColorGroup::Highlight)); 304 p->setBrush(button->palette().active().brush(QColorGroup::Highlight));
305 p->drawRoundRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 15, 15); 305 p->drawRoundRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 15, 15);
306 p->restore(); 306 p->restore();
307 } 307 }
308 308
309 if (button->isDefault() || button->autoDefault()) { 309 if (button->isDefault() || button->autoDefault()) {
310 x1 += buttonDefaultIndicatorWidth(); 310 x1 += buttonDefaultIndicatorWidth();
311 y1 += buttonDefaultIndicatorWidth(); 311 y1 += buttonDefaultIndicatorWidth();
312 x2 -= buttonDefaultIndicatorWidth(); 312 x2 -= buttonDefaultIndicatorWidth();
313 y2 -= buttonDefaultIndicatorWidth(); 313 y2 -= buttonDefaultIndicatorWidth();
314 314
315 if (button->isDefault()) { 315 if (button->isDefault()) {
316 QPointArray pa(8); 316 QPointArray pa(8);
317 pa.setPoint(0, x1 + 2, y1 ); 317 pa.setPoint(0, x1 + 2, y1 );
318 pa.setPoint(1, x2 - 1, y1 ); 318 pa.setPoint(1, x2 - 1, y1 );
319 pa.setPoint(2, x2 + 1, y1 + 2); 319 pa.setPoint(2, x2 + 1, y1 + 2);
320 pa.setPoint(3, x2 + 1, y2 - 2); 320 pa.setPoint(3, x2 + 1, y2 - 2);
321 pa.setPoint(4, x2 - 2, y2 + 1); 321 pa.setPoint(4, x2 - 2, y2 + 1);
322 pa.setPoint(5, x1 + 2, y2 + 1); 322 pa.setPoint(5, x1 + 2, y2 + 1);
323 pa.setPoint(6, x1, y2 - 1); 323 pa.setPoint(6, x1, y2 - 1);
324 pa.setPoint(7, x1, y1 + 2); 324 pa.setPoint(7, x1, y1 + 2);
325 QRegion r(pa); 325 QRegion r(pa);
326 p->setClipRegion(r); 326 p->setClipRegion(r);
327 } 327 }
328 } 328 }
329 329
330 QBrush fill; 330 QBrush fill;
331 if (button->isDown() || button->isOn()) 331 if (button->isDown() || button->isOn())
332 fill = button->colorGroup().brush(QColorGroup::Mid); 332 fill = button->colorGroup().brush(QColorGroup::Mid);
333 else 333 else
334 fill = button->colorGroup().brush(QColorGroup::Button); 334 fill = button->colorGroup().brush(QColorGroup::Button);
335 335
336 if ( !button->isFlat() || button->isOn() || button->isDown() ) 336 if ( !button->isFlat() || button->isOn() || button->isDown() )
337 drawButton(p, x1, y1, x2 - x1 + 1, y2 - y1 + 1, 337 drawButton(p, x1, y1, x2 - x1 + 1, y2 - y1 + 1,
338 button->colorGroup(), button->isOn() || button->isDown(), &fill); 338 button->colorGroup(), button->isOn() || button->isDown(), &fill);
339} 339}
340 340
341 341
342void LightStyle::drawButton(QPainter *p, int x, int y, int w, int h, 342void LightStyle::drawButton(QPainter *p, int x, int y, int w, int h,
343 const QColorGroup &g, 343 const QColorGroup &g,
344 bool sunken, const QBrush *fill) 344 bool sunken, const QBrush *fill)
345{ 345{
346 p->save(); 346 p->save();
347 if ( fill ) 347 if ( fill )
348 p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); 348 p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill);
349 else 349 else
350 p->fillRect(x + 2, y + 2, w - 4, h - 4, 350 p->fillRect(x + 2, y + 2, w - 4, h - 4,
351 QBrush(sunken ? g.mid() : g.button())); 351 QBrush(sunken ? g.mid() : g.button()));
352 352
353 // frame 353 // frame
354 p->setPen(g.dark()); 354 p->setPen(g.dark());
355 p->drawLine(x, y + 2, x, y + h - 3); // left 355 p->drawLine(x, y + 2, x, y + h - 3); // left
356 p->drawLine(x + 2, y, x + w - 3, y); // top 356 p->drawLine(x + 2, y, x + w - 3, y); // top
357 p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right 357 p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right
358 p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom 358 p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom
359 p->drawPoint(x + 1, y + 1); 359 p->drawPoint(x + 1, y + 1);
360 p->drawPoint(x + 1, y + h - 2); 360 p->drawPoint(x + 1, y + h - 2);
361 p->drawPoint(x + w - 2, y + 1); 361 p->drawPoint(x + w - 2, y + 1);
362 p->drawPoint(x + w - 2, y + h - 2); 362 p->drawPoint(x + w - 2, y + h - 2);
363 363
364 // bevel 364 // bevel
365 if (sunken) 365 if (sunken)
366 p->setPen(g.mid()); 366 p->setPen(g.mid());
367 else 367 else
368 p->setPen(g.light()); 368 p->setPen(g.light());
369 369
370 p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left 370 p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left
371 p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top 371 p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top
372 372
373 if (sunken) 373 if (sunken)
374 p->setPen(g.light()); 374 p->setPen(g.light());
375 else 375 else
376 p->setPen(g.mid()); 376 p->setPen(g.mid());
377 377
378 p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 378 p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1
379 p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 379 p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1
380 380
381 p->restore(); 381 p->restore();
382} 382}
383 383
384 384
385void LightStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h, 385void LightStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h,
386 const QColorGroup &g, 386 const QColorGroup &g,
387 bool sunken, const QBrush *fill) 387 bool sunken, const QBrush *fill)
388{ 388{
389 drawButton(p, x, y, w, h, g, sunken, fill); 389 drawButton(p, x, y, w, h, g, sunken, fill);
390} 390}
391 391
392 392
393void LightStyle::getButtonShift(int &x, int &y) const 393void LightStyle::getButtonShift(int &x, int &y) const
394{ 394{
395 x = y = 0; 395 x = y = 0;
396} 396}
397 397
398 398
399void LightStyle::drawComboButton(QPainter *p, int x, int y, int w, int h, 399void LightStyle::drawComboButton(QPainter *p, int x, int y, int w, int h,
400 const QColorGroup &g, bool, 400 const QColorGroup &g, bool,
401 bool editable, bool, 401 bool editable, bool,
402 const QBrush *fill) 402 const QBrush *fill)
403{ 403{
404 drawButton(p, x, y, w, h, g, FALSE, fill); 404 drawButton(p, x, y, w, h, g, FALSE, fill);
405 405
406 if (editable) { 406 if (editable) {
407 QRect r = comboButtonRect(x, y, w, h); 407 QRect r = comboButtonRect(x, y, w, h);
408 qDrawShadePanel(p, r.x() - 1, r.y() - 1, 408 qDrawShadePanel(p, r.x() - 1, r.y() - 1,
409 r.width() + defaultFrameWidth(), 409 r.width() + defaultFrameWidth(),
410 r.height() + defaultFrameWidth(), 410 r.height() + defaultFrameWidth(),
411 g, TRUE); 411 g, TRUE);
412 } 412 }
413 413
414 int indent = ((y + h) / 2) - 3; 414 int indent = ((y + h) / 2) - 3;
415 int xpos = x; 415 int xpos = x;
416 416
417#if QT_VERSION >= 0x030000 417#if QT_VERSION >= 0x030000
418 if( QApplication::reverseLayout() ) 418 if( QApplication::reverseLayout() )
419 xpos += indent; 419 xpos += indent;
420 else 420 else
421#endif 421#endif
422 xpos += w - indent - 5; 422 xpos += w - indent - 5;
423 423
424 drawArrow(p, Qt::DownArrow, TRUE, xpos, indent, 5, 5, g, TRUE, fill); 424 drawArrow(p, Qt::DownArrow, TRUE, xpos, indent, 5, 5, g, TRUE, fill);
425} 425}
426 426
427 427
428QRect LightStyle::comboButtonRect( int x, int y, int w, int h ) const 428QRect LightStyle::comboButtonRect( int x, int y, int w, int h ) const
429{ 429{
430 QRect r(x + 3, y + 3, w - 6, h - 6); 430 QRect r(x + 3, y + 3, w - 6, h - 6);
431 int indent = ((y + h) / 2) - 3; 431 int indent = ((y + h) / 2) - 3;
432 r.setRight(r.right() - indent - 10); 432 r.setRight(r.right() - indent - 10);
433 433
434#if QT_VERSION >= 0x030000 434#if QT_VERSION >= 0x030000
435 if( QApplication::reverseLayout() ) 435 if( QApplication::reverseLayout() )
436 r.moveBy( indent + 10, 0 ); 436 r.moveBy( indent + 10, 0 );
437#endif 437#endif
438 438
439 return r; 439 return r;
440} 440}
441 441
442 442
443QRect LightStyle::comboButtonFocusRect(int x, int y, int w, int h ) const 443QRect LightStyle::comboButtonFocusRect(int x, int y, int w, int h ) const
444{ 444{
445 return comboButtonRect(x, y, w, h); 445 return comboButtonRect(x, y, w, h);
446} 446}
447 447
448 448
449void LightStyle::drawPanel(QPainter *p, int x, int y, int w, int h, 449void LightStyle::drawPanel(QPainter *p, int x, int y, int w, int h,
450 const QColorGroup &g, bool sunken, 450 const QColorGroup &g, bool sunken,
451 int lw, const QBrush *fill) 451 int lw, const QBrush *fill)
452{ 452{
453 if (lw >= 2) { 453 if (lw >= 2) {
454 if ( fill ) 454 if ( fill )
455 p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); 455 p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill);
456 456
457 QPen oldpen = p->pen(); 457 QPen oldpen = p->pen();
458 458
459 // frame 459 // frame
460 p->setPen(g.dark()); 460 p->setPen(g.dark());
461 p->drawLine(x, y + 2, x, y + h - 3); // left 461 p->drawLine(x, y + 2, x, y + h - 3); // left
462 p->drawLine(x + 2, y, x + w - 3, y); // top 462 p->drawLine(x + 2, y, x + w - 3, y); // top
463 p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right 463 p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right
464 p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom 464 p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom
465 p->drawPoint(x + 1, y + 1); 465 p->drawPoint(x + 1, y + 1);
466 p->drawPoint(x + 1, y + h - 2); 466 p->drawPoint(x + 1, y + h - 2);
467 p->drawPoint(x + w - 2, y + 1); 467 p->drawPoint(x + w - 2, y + 1);
468 p->drawPoint(x + w - 2, y + h - 2); 468 p->drawPoint(x + w - 2, y + h - 2);
469 469
470 // bevel 470 // bevel
471 if (sunken) 471 if (sunken)
472 p->setPen(g.mid()); 472 p->setPen(g.mid());
473 else 473 else
474 p->setPen(g.light()); 474 p->setPen(g.light());
475 475
476 p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left 476 p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left
477 p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top 477 p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top
478 478
479 if (sunken) 479 if (sunken)
480 p->setPen(g.light()); 480 p->setPen(g.light());
481 else 481 else
482 p->setPen(g.mid()); 482 p->setPen(g.mid());
483 483
484 p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 484 p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1
485 p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 485 p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1
486 486
487 // corners 487 // corners
488 p->setPen(g.background()); 488 p->setPen(g.background());
489 p->drawLine(x, y, x + 1, y); 489 p->drawLine(x, y, x + 1, y);
490 p->drawLine(x, y + h - 1, x + 1, y + h - 1); 490 p->drawLine(x, y + h - 1, x + 1, y + h - 1);
491 p->drawLine(x + w - 2, y, x + w - 1, y); 491 p->drawLine(x + w - 2, y, x + w - 1, y);
492 p->drawLine(x + w - 2, y + h - 1, x + w - 1, y + h - 1); 492 p->drawLine(x + w - 2, y + h - 1, x + w - 1, y + h - 1);
493 p->drawPoint(x, y + 1); 493 p->drawPoint(x, y + 1);
494 p->drawPoint(x, y + h - 2); 494 p->drawPoint(x, y + h - 2);
495 p->drawPoint(x + w - 1, y + 1); 495 p->drawPoint(x + w - 1, y + 1);
496 p->drawPoint(x + w - 1, y + h - 2); 496 p->drawPoint(x + w - 1, y + h - 2);
497 497
498 p->setPen(oldpen); 498 p->setPen(oldpen);
499 } else 499 } else
500 qDrawShadePanel(p, x, y, w, h, g, sunken, lw, fill); 500 qDrawShadePanel(p, x, y, w, h, g, sunken, lw, fill);
501} 501}
502 502
503 503
504void LightStyle::drawIndicator(QPainter *p, int x, int y ,int w, int h, 504void LightStyle::drawIndicator(QPainter *p, int x, int y ,int w, int h,
505 const QColorGroup &g, int state, 505 const QColorGroup &g, int state,
506 bool down, bool) 506 bool down, bool)
507{ 507{
508 drawButton(p, x, y, w, h, g, TRUE, 508 drawButton(p, x, y, w, h, g, TRUE,
509 &g.brush(down ? QColorGroup::Mid : QColorGroup::Base)); 509 &g.brush(down ? QColorGroup::Mid : QColorGroup::Base));
510 510
511 p->save(); 511 p->save();
512 512
513 p->setPen(g.foreground()); 513 p->setPen(g.foreground());
514 if (state == QButton::NoChange) { 514 if (state == QButton::NoChange) {
515 p->drawLine(x + 3, y + h / 2, x + w - 4, y + h / 2); 515 p->drawLine(x + 3, y + h / 2, x + w - 4, y + h / 2);
516 p->drawLine(x + 3, y + 1 + h / 2, x + w - 4, y + 1 + h / 2); 516 p->drawLine(x + 3, y + 1 + h / 2, x + w - 4, y + 1 + h / 2);
517 p->drawLine(x + 3, y - 1 + h / 2, x + w - 4, y - 1 + h / 2); 517 p->drawLine(x + 3, y - 1 + h / 2, x + w - 4, y - 1 + h / 2);
518 } else if (state == QButton::On) { 518 } else if (state == QButton::On) {
519 p->drawLine(x + 4, y + 3, x + w - 4, y + h - 5); 519 p->drawLine(x + 4, y + 3, x + w - 4, y + h - 5);
520 p->drawLine(x + 3, y + 3, x + w - 4, y + h - 4); 520 p->drawLine(x + 3, y + 3, x + w - 4, y + h - 4);
521 p->drawLine(x + 3, y + 4, x + w - 5, y + h - 4); 521 p->drawLine(x + 3, y + 4, x + w - 5, y + h - 4);
522 p->drawLine(x + 3, y + h - 5, x + w - 5, y + 3); 522 p->drawLine(x + 3, y + h - 5, x + w - 5, y + 3);
523 p->drawLine(x + 3, y + h - 4, x + w - 4, y + 3); 523 p->drawLine(x + 3, y + h - 4, x + w - 4, y + 3);
524 p->drawLine(x + 4, y + h - 4, x + w - 4, y + 4); 524 p->drawLine(x + 4, y + h - 4, x + w - 4, y + 4);
525 } 525 }
526 526
527 p->restore(); 527 p->restore();
528} 528}
529 529
530 530
531void LightStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, int h, 531void LightStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, int h,
532 const QColorGroup &g, bool on, 532 const QColorGroup &g, bool on,
533 bool down, bool) 533 bool down, bool)
534{ 534{
535 p->save(); 535 p->save();
536 536
537 p->fillRect(x, y, w, h, g.brush(QColorGroup::Background)); 537 p->fillRect(x, y, w, h, g.brush(QColorGroup::Background));
538 538
539 p->setPen(g.dark()); 539 p->setPen(g.dark());
540 p->drawArc(x, y, w, h, 0, 16*360); 540 p->drawArc(x, y, w, h, 0, 16*360);
541 p->setPen(g.mid()); 541 p->setPen(g.mid());
542 p->drawArc(x + 1, y + 1, w - 2, h - 2, 45*16, 180*16); 542 p->drawArc(x + 1, y + 1, w - 2, h - 2, 45*16, 180*16);
543 p->setPen(g.light()); 543 p->setPen(g.light());
544 p->drawArc(x + 1, y + 1, w - 2, h - 2, 235*16, 180*16); 544 p->drawArc(x + 1, y + 1, w - 2, h - 2, 235*16, 180*16);
545 545
546 p->setPen(down ? g.mid() : g.base()); 546 p->setPen(down ? g.mid() : g.base());
547 p->setBrush(down ? g.mid() : g.base()); 547 p->setBrush(down ? g.mid() : g.base());
548 p->drawEllipse(x + 2, y + 2, w - 4, h - 4); 548 p->drawEllipse(x + 2, y + 2, w - 4, h - 4);
549 549
550 if (on) { 550 if (on) {
551 p->setBrush(g.foreground()); 551 p->setBrush(g.foreground());
552 p->drawEllipse(x + 3, y + 3, w - x - 6, h - y - 6); 552 p->drawEllipse(x + 3, y + 3, w - x - 6, h - y - 6);
553 } 553 }
554 554
555 p->restore(); 555 p->restore();
556} 556}
557 557
558 558
559 559
560#if 1 560#if 1
561//copied from QPE style 561//copied from QPE style
562void LightStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected ) 562void LightStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected )
563{ 563{
564#if 0 564#if 0
565 //We can't do this, because QTabBar::focusInEvent redraws the 565 //We can't do this, because QTabBar::focusInEvent redraws the
566 // tab label with the default font. 566 // tab label with the default font.
567 QFont f = tb->font(); 567 QFont f = tb->font();
568 f.setBold( selected ); 568 f.setBold( selected );
569 p->setFont( f ); 569 p->setFont( f );
570#endif 570#endif
571 QRect r( t->rect() ); 571 QRect r( t->rect() );
572 if ( tb->shape() == QTabBar::RoundedAbove ) { 572 if ( tb->shape() == QTabBar::RoundedAbove ) {
573 p->setPen( tb->colorGroup().light() ); 573 p->setPen( tb->colorGroup().light() );
574 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 574 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
575 if ( r.left() == 0 ) 575 if ( r.left() == 0 )
576 p->drawPoint( tb->rect().bottomLeft() ); 576 p->drawPoint( tb->rect().bottomLeft() );
577 else { 577 else {
578 p->setPen( tb->colorGroup().light() ); 578 p->setPen( tb->colorGroup().light() );
579 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 579 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
580 } 580 }
581 581
582 if ( selected ) { 582 if ( selected ) {
583 p->setPen( tb->colorGroup().background() ); 583 p->setPen( tb->colorGroup().background() );
584 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 584 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
585 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2), 585 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2),
586 tb->colorGroup().brush( QColorGroup::Background )); 586 tb->colorGroup().brush( QColorGroup::Background ));
587 587
588 } else { 588 } else {
589 r.setRect( r.left() + 2, r.top() + 2, 589 r.setRect( r.left() + 2, r.top() + 2,
590 r.width() - 4, r.height() - 2 ); 590 r.width() - 4, r.height() - 2 );
591 p->setPen( tb->colorGroup().button() ); 591 p->setPen( tb->colorGroup().button() );
592 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 592 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
593 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3), 593 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3),
594 tb->colorGroup().brush( QColorGroup::Button )); 594 tb->colorGroup().brush( QColorGroup::Button ));
595 //do shading; will not work for pixmap brushes 595 //do shading; will not work for pixmap brushes
596 QColor bg = tb->colorGroup().button(); 596 QColor bg = tb->colorGroup().button();
597 // int h,s,v; 597 // int h,s,v;
598 // bg.hsv( &h, &s, &v ); 598 // bg.hsv( &h, &s, &v );
599 int n = r.height()/2; 599 int n = r.height()/2;
600 int dark = 100; 600 int dark = 100;
601 for ( int i = 1; i < n; i++ ) { 601 for ( int i = 1; i < n; i++ ) {
602 dark = (dark * (100+(i*15)/n) )/100; 602 dark = (dark * (100+(i*15)/n) )/100;
603 p->setPen( bg.dark( dark ) ); 603 p->setPen( bg.dark( dark ) );
604 int y = r.bottom()-n+i; 604 int y = r.bottom()-n+i;
605 int x1 = r.left()+1; 605 int x1 = r.left()+1;
606 int x2 = r.right()-1; 606 int x2 = r.right()-1;
607 p->drawLine( x1, y, x2, y ); 607 p->drawLine( x1, y, x2, y );
608 } 608 }
609 609
610 } 610 }
611 611
612 p->setPen( tb->colorGroup().light() ); 612 p->setPen( tb->colorGroup().light() );
613 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 ); 613 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 );
614 p->drawPoint( r.left()+1, r.top() + 1 ); 614 p->drawPoint( r.left()+1, r.top() + 1 );
615 p->drawLine( r.left()+2, r.top(), 615 p->drawLine( r.left()+2, r.top(),
616 r.right() - 2, r.top() ); 616 r.right() - 2, r.top() );
617 617
618 p->setPen( tb->colorGroup().dark() ); 618 p->setPen( tb->colorGroup().dark() );
619 p->drawPoint( r.right() - 1, r.top() + 1 ); 619 p->drawPoint( r.right() - 1, r.top() + 1 );
620 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1); 620 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1);
621 } else if ( tb->shape() == QTabBar::RoundedBelow ) { 621 } else if ( tb->shape() == QTabBar::RoundedBelow ) {
622 if ( selected ) { 622 if ( selected ) {
623 p->setPen( tb->colorGroup().background() ); 623 p->setPen( tb->colorGroup().background() );
624 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 624 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
625 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2), 625 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2),
626 tb->palette().normal().brush( QColorGroup::Background )); 626 tb->palette().normal().brush( QColorGroup::Background ));
627 } else { 627 } else {
628 p->setPen( tb->colorGroup().dark() ); 628 p->setPen( tb->colorGroup().dark() );
629 p->drawLine( r.left(), r.top(), 629 p->drawLine( r.left(), r.top(),
630 r.right(), r.top() ); 630 r.right(), r.top() );
631 r.setRect( r.left() + 2, r.top(), 631 r.setRect( r.left() + 2, r.top(),
632 r.width() - 4, r.height() - 2 ); 632 r.width() - 4, r.height() - 2 );
633 p->setPen( tb->colorGroup().button() ); 633 p->setPen( tb->colorGroup().button() );
634 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 634 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
635 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3), 635 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3),
636 tb->palette().normal().brush( QColorGroup::Button )); 636 tb->palette().normal().brush( QColorGroup::Button ));
637 } 637 }
638 638
639 p->setPen( tb->colorGroup().dark() ); 639 p->setPen( tb->colorGroup().dark() );
640 p->drawLine( r.right(), r.top(), 640 p->drawLine( r.right(), r.top(),
641 r.right(), r.bottom() - 2 ); 641 r.right(), r.bottom() - 2 );
642 p->drawPoint( r.right() - 1, r.bottom() - 1 ); 642 p->drawPoint( r.right() - 1, r.bottom() - 1 );
643 p->drawLine( r.right() - 2, r.bottom(), 643 p->drawLine( r.right() - 2, r.bottom(),
644 r.left() + 2, r.bottom() ); 644 r.left() + 2, r.bottom() );
645 645
646 p->setPen( tb->colorGroup().light() ); 646 p->setPen( tb->colorGroup().light() );
647 p->drawLine( r.left(), r.top()+1, 647 p->drawLine( r.left(), r.top()+1,
648 r.left(), r.bottom() - 2 ); 648 r.left(), r.bottom() - 2 );
649 p->drawPoint( r.left() + 1, r.bottom() - 1 ); 649 p->drawPoint( r.left() + 1, r.bottom() - 1 );
650 if ( r.left() == 0 ) 650 if ( r.left() == 0 )
651 p->drawPoint( tb->rect().topLeft() ); 651 p->drawPoint( tb->rect().topLeft() );
652 652
653 } else { 653 } else {
654 QCommonStyle::drawTab( p, tb, t, selected ); 654 QCommonStyle::drawTab( p, tb, t, selected );
655 } 655 }
656} 656}
657 657
658#else 658#else
659 659
660void LightStyle::drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, 660void LightStyle::drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab,
661 bool selected) 661 bool selected)
662{ 662{
663 p->save(); 663 p->save();
664 664
665 QColorGroup g = tabbar->colorGroup(); 665 QColorGroup g = tabbar->colorGroup();
666 QRect fr(tab->r); 666 QRect fr(tab->r);
667 fr.setLeft(fr.left() + 2); 667 fr.setLeft(fr.left() + 2);
668 668
669 if (! selected) { 669 if (! selected) {
670 if (tabbar->shape() == QTabBar::RoundedAbove || 670 if (tabbar->shape() == QTabBar::RoundedAbove ||
671 tabbar->shape() == QTabBar::TriangularAbove) { 671 tabbar->shape() == QTabBar::TriangularAbove) {
672 672
673 fr.setTop(fr.top() + 2); 673 fr.setTop(fr.top() + 2);
674 } else { 674 } else {
675 fr.setBottom(fr.bottom() - 2); 675 fr.setBottom(fr.bottom() - 2);
676 } 676 }
677 } 677 }
678 678
679 QRegion tabr(tab->r); 679 QRegion tabr(tab->r);
680 680
681 QPointArray cliptri(4); 681 QPointArray cliptri(4);
682 cliptri.setPoint(0, fr.left(), fr.top()); 682 cliptri.setPoint(0, fr.left(), fr.top());
683 cliptri.setPoint(1, fr.left(), fr.top() + 5); 683 cliptri.setPoint(1, fr.left(), fr.top() + 5);
684 cliptri.setPoint(2, fr.left() + 5, fr.top()); 684 cliptri.setPoint(2, fr.left() + 5, fr.top());
685 cliptri.setPoint(3, fr.left(), fr.top()); 685 cliptri.setPoint(3, fr.left(), fr.top());
686 QRegion trir(cliptri); 686 QRegion trir(cliptri);
687 p->setClipRegion(tabr - trir); 687 p->setClipRegion(tabr - trir);
688 688
689 p->setPen( NoPen ); 689 p->setPen( NoPen );
690 p->setBrush(g.brush(selected ? QColorGroup::Background : QColorGroup::Mid)); 690 p->setBrush(g.brush(selected ? QColorGroup::Background : QColorGroup::Mid));
691 691
692 fr.setWidth(fr.width() - 1); 692 fr.setWidth(fr.width() - 1);
693 p->drawRect(fr.left() + 1, fr.top() + 1, fr.width() - 2, fr.height() - 2); 693 p->drawRect(fr.left() + 1, fr.top() + 1, fr.width() - 2, fr.height() - 2);
694 694
695 if (tabbar->shape() == QTabBar::RoundedAbove) { 695 if (tabbar->shape() == QTabBar::RoundedAbove) {
696 // "rounded" tabs on top 696 // "rounded" tabs on top
697 fr.setBottom(fr.bottom() - 1); 697 fr.setBottom(fr.bottom() - 1);
698 698
699 p->setPen(g.dark()); 699 p->setPen(g.dark());
700 p->drawLine(fr.left(), fr.top() + 5, fr.left(), fr.bottom() - 1); 700 p->drawLine(fr.left(), fr.top() + 5, fr.left(), fr.bottom() - 1);
701 p->drawLine(fr.left(), fr.top() + 5, fr.left() + 5, fr.top()); 701 p->drawLine(fr.left(), fr.top() + 5, fr.left() + 5, fr.top());
702 p->drawLine(fr.left() + 5, fr.top(), fr.right() - 1, fr.top()); 702 p->drawLine(fr.left() + 5, fr.top(), fr.right() - 1, fr.top());
703 p->drawLine(fr.right(), fr.top() + 1, fr.right(), fr.bottom() - 1); 703 p->drawLine(fr.right(), fr.top() + 1, fr.right(), fr.bottom() - 1);
704 704
705 if (selected) { 705 if (selected) {
706 p->drawLine(fr.right(), fr.bottom(), fr.right() + 2, fr.bottom()); 706 p->drawLine(fr.right(), fr.bottom(), fr.right() + 2, fr.bottom());
707 p->drawPoint(fr.left(), fr.bottom()); 707 p->drawPoint(fr.left(), fr.bottom());
708 } else 708 } else
709 p->drawLine(fr.left(), fr.bottom(), fr.right() + 2, fr.bottom()); 709 p->drawLine(fr.left(), fr.bottom(), fr.right() + 2, fr.bottom());
710 710
711 if (fr.left() == 2) { 711 if (fr.left() == 2) {
712 p->drawPoint(fr.left() - 1, fr.bottom() + 1); 712 p->drawPoint(fr.left() - 1, fr.bottom() + 1);
713 p->drawPoint(fr.left() - 2, fr.bottom() + 2); 713 p->drawPoint(fr.left() - 2, fr.bottom() + 2);
714 } 714 }
715 715
716 if (selected) { 716 if (selected) {
717 p->setPen(g.mid()); 717 p->setPen(g.mid());
718 p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 2); 718 p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 2);
719 } 719 }
720 720
721 p->setPen(g.light()); p->setPen(red); 721 p->setPen(g.light()); p->setPen(red);
722 p->drawLine(fr.left() + 1, fr.top() + 6, fr.left() + 1, 722 p->drawLine(fr.left() + 1, fr.top() + 6, fr.left() + 1,
723 fr.bottom() - (selected ? 0 : 1)); 723 fr.bottom() - (selected ? 0 : 1));
724 p->drawLine(fr.left() + 1, fr.top() + 5, fr.left() + 5, fr.top() + 1); 724 p->drawLine(fr.left() + 1, fr.top() + 5, fr.left() + 5, fr.top() + 1);
725 p->drawLine(fr.left() + 6, fr.top() + 1, fr.right() - 3, fr.top() + 1); 725 p->drawLine(fr.left() + 6, fr.top() + 1, fr.right() - 3, fr.top() + 1);
726 if (selected) { 726 if (selected) {
727 p->drawLine(fr.right() + 1, fr.bottom() + 1, 727 p->drawLine(fr.right() + 1, fr.bottom() + 1,
728 fr.right() + 2, fr.bottom() + 1); 728 fr.right() + 2, fr.bottom() + 1);
729 p->drawLine(fr.left(), fr.bottom() + 1, fr.left() + 1, fr.bottom() + 1); 729 p->drawLine(fr.left(), fr.bottom() + 1, fr.left() + 1, fr.bottom() + 1);
730 } else 730 } else
731 p->drawLine(fr.left(), fr.bottom() + 1, 731 p->drawLine(fr.left(), fr.bottom() + 1,
732 fr.right() + 2, fr.bottom() + 1); 732 fr.right() + 2, fr.bottom() + 1);
733 } else if (tabbar->shape() == QTabBar::RoundedBelow) { 733 } else if (tabbar->shape() == QTabBar::RoundedBelow) {
734 // "rounded" tabs on bottom 734 // "rounded" tabs on bottom
735 fr.setTop(fr.top() + 1); 735 fr.setTop(fr.top() + 1);
736 736
737 p->setPen(g.dark()); 737 p->setPen(g.dark());
738 p->drawLine(fr.left(), fr.top(), fr.left(), fr.bottom() - 1); 738 p->drawLine(fr.left(), fr.top(), fr.left(), fr.bottom() - 1);
739 p->drawLine(fr.left() + 1, fr.bottom(), fr.right() - 1, fr.bottom()); 739 p->drawLine(fr.left() + 1, fr.bottom(), fr.right() - 1, fr.bottom());
740 p->drawLine(fr.right(), fr.top(), fr.right(), fr.bottom() - 1); 740 p->drawLine(fr.right(), fr.top(), fr.right(), fr.bottom() - 1);
741 741
742 if (! selected) 742 if (! selected)
743 p->drawLine(fr.left(), fr.top(), fr.right() + 3, fr.top()); 743 p->drawLine(fr.left(), fr.top(), fr.right() + 3, fr.top());
744 else 744 else
745 p->drawLine(fr.right(), fr.top(), fr.right() + 3, fr.top()); 745 p->drawLine(fr.right(), fr.top(), fr.right() + 3, fr.top());
746 746
747 p->setPen(g.mid()); 747 p->setPen(g.mid());
748 if (selected) 748 if (selected)
749 p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 1); 749 p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 1);
750 else 750 else
751 p->drawLine(fr.left(), fr.top() - 1, fr.right() + 3, fr.top() - 1); 751 p->drawLine(fr.left(), fr.top() - 1, fr.right() + 3, fr.top() - 1);
752 752
753 p->setPen(g.light()); 753 p->setPen(g.light());
754 p->drawLine(fr.left() + 1, fr.top() + (selected ? -1 : 2), 754 p->drawLine(fr.left() + 1, fr.top() + (selected ? -1 : 2),
755 fr.left() + 1, fr.bottom() - 1); 755 fr.left() + 1, fr.bottom() - 1);
756 756
757 } else { 757 } else {
758 // triangular drawing code 758 // triangular drawing code
759 QCommonStyle::drawTab(p, tabbar, tab, selected); 759 QCommonStyle::drawTab(p, tabbar, tab, selected);
760 } 760 }
761 761
762 p->restore(); 762 p->restore();
763} 763}
764#endif 764#endif
765 765
766void LightStyle::drawSlider(QPainter *p, int x, int y, int w, int h, 766void LightStyle::drawSlider(QPainter *p, int x, int y, int w, int h,
767 const QColorGroup &g, Qt::Orientation orientation, 767 const QColorGroup &g, Qt::Orientation orientation,
768 bool above, bool below) 768 bool above, bool below)
769{ 769{
770 drawButton(p, x, y, w, h, g, FALSE, &g.brush(QColorGroup::Button)); 770 drawButton(p, x, y, w, h, g, FALSE, &g.brush(QColorGroup::Button));
771 771
772 if (orientation == Horizontal) { 772 if (orientation == Horizontal) {
773 if (above && below) { 773 if (above && below) {
774 drawArrow(p, Qt::UpArrow, FALSE, x + 1, y + 1, w, h / 2, g, TRUE); 774 drawArrow(p, Qt::UpArrow, FALSE, x + 1, y + 1, w, h / 2, g, TRUE);
775 drawArrow(p, Qt::DownArrow, FALSE, x + 1, y + (h / 2) - 1, 775 drawArrow(p, Qt::DownArrow, FALSE, x + 1, y + (h / 2) - 1,
776 w, h / 2, g, TRUE); 776 w, h / 2, g, TRUE);
777 } else 777 } else
778 drawArrow(p, (above) ? Qt::UpArrow : Qt::DownArrow, 778 drawArrow(p, (above) ? Qt::UpArrow : Qt::DownArrow,
779 FALSE, x + 1, y, w, h, g, TRUE); 779 FALSE, x + 1, y, w, h, g, TRUE);
780 } else { 780 } else {
781 if (above && below) { 781 if (above && below) {
782 drawArrow(p, Qt::LeftArrow, FALSE, x + 1, y, w / 2, h, g, TRUE); 782 drawArrow(p, Qt::LeftArrow, FALSE, x + 1, y, w / 2, h, g, TRUE);
783 drawArrow(p, Qt::RightArrow, FALSE, x + (w / 2) - 2, y, w / 2, h, g, TRUE); 783 drawArrow(p, Qt::RightArrow, FALSE, x + (w / 2) - 2, y, w / 2, h, g, TRUE);
784 } else 784 } else
785 drawArrow(p, (above) ? Qt::LeftArrow : Qt::RightArrow, 785 drawArrow(p, (above) ? Qt::LeftArrow : Qt::RightArrow,
786 FALSE, x, y, w, h, g, TRUE); 786 FALSE, x, y, w, h, g, TRUE);
787 } 787 }
788} 788}
789 789
790 790
791void LightStyle::drawSliderGroove(QPainter *p, int x, int y, int w, int h, 791void LightStyle::drawSliderGroove(QPainter *p, int x, int y, int w, int h,
792 const QColorGroup& g, QCOORD c, 792 const QColorGroup& g, QCOORD c,
793 Qt::Orientation orientation) 793 Qt::Orientation orientation)
794{ 794{
795 if (orientation == Horizontal) 795 if (orientation == Horizontal)
796 drawButton(p, x, y+c - 3, w, 6, g, TRUE, &g.brush(QColorGroup::Mid)); 796 drawButton(p, x, y+c - 3, w, 6, g, TRUE, &g.brush(QColorGroup::Mid));
797 else 797 else
798 drawButton(p, x+c - 3, y, 6, h, g, TRUE, &g.brush(QColorGroup::Mid)); 798 drawButton(p, x+c - 3, y, 6, h, g, TRUE, &g.brush(QColorGroup::Mid));
799} 799}
800 800
801 801
802void LightStyle::scrollBarMetrics(const QScrollBar *scrollbar, 802void LightStyle::scrollBarMetrics(const QScrollBar *scrollbar,
803 int &sliderMin, int &sliderMax, 803 int &sliderMin, int &sliderMax,
804 int &sliderLength, int &buttonDim) const 804 int &sliderLength, int &buttonDim) const
805{ 805{
806 int maxLength; 806 int maxLength;
807 int length = ((scrollbar->orientation() == Horizontal) ? 807 int length = ((scrollbar->orientation() == Horizontal) ?
808 scrollbar->width() : scrollbar->height()); 808 scrollbar->width() : scrollbar->height());
809 int extent = ((scrollbar->orientation() == Horizontal) ? 809 int extent = ((scrollbar->orientation() == Horizontal) ?
810 scrollbar->height() : scrollbar->width()); 810 scrollbar->height() : scrollbar->width());
811 extent--; 811 extent--;
812 812
813 if (length > (extent + defaultFrameWidth() - 1) * 2 + defaultFrameWidth()) 813 if (length > (extent + defaultFrameWidth() - 1) * 2 + defaultFrameWidth())
814 buttonDim = extent - defaultFrameWidth(); 814 buttonDim = extent - defaultFrameWidth();
815 else 815 else
816 buttonDim = (length - defaultFrameWidth()) / 2 - 1; 816 buttonDim = (length - defaultFrameWidth()) / 2 - 1;
817 817
818 sliderMin = buttonDim; 818 sliderMin = buttonDim;
819 maxLength = length - buttonDim * 3; 819 maxLength = length - buttonDim * 3;
820 820
821 if (scrollbar->maxValue() != scrollbar->minValue()) { 821 if (scrollbar->maxValue() != scrollbar->minValue()) {
822 uint range = scrollbar->maxValue() - scrollbar->minValue(); 822 uint range = scrollbar->maxValue() - scrollbar->minValue();
823 sliderLength = (scrollbar->pageStep() * maxLength) / 823 sliderLength = (scrollbar->pageStep() * maxLength) /
824 (range + scrollbar->pageStep()); 824 (range + scrollbar->pageStep());
825 825
826 if (sliderLength < buttonDim || range > INT_MAX / 2) 826 if (sliderLength < buttonDim || range > INT_MAX / 2)
827 sliderLength = buttonDim; 827 sliderLength = buttonDim;
828 if (sliderLength > maxLength) 828 if (sliderLength > maxLength)
829 sliderLength = maxLength; 829 sliderLength = maxLength;
830 } else 830 } else
831 sliderLength = maxLength; 831 sliderLength = maxLength;
832 832
833 sliderMax = sliderMin + maxLength - sliderLength; 833 sliderMax = sliderMin + maxLength - sliderLength;
834} 834}
835 835
836 836
837QStyle::ScrollControl LightStyle::scrollBarPointOver(const QScrollBar *scrollbar, 837QStyle::ScrollControl LightStyle::scrollBarPointOver(const QScrollBar *scrollbar,
838 int sliderStart, const QPoint &p) 838 int sliderStart, const QPoint &p)
839{ 839{
840 if (! scrollbar->rect().contains(p)) 840 if (! scrollbar->rect().contains(p))
841 return NoScroll; 841 return NoScroll;
842 842
843 int sliderMin, sliderMax, sliderLength, buttonDim, pos; 843 int sliderMin, sliderMax, sliderLength, buttonDim, pos;
844 scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); 844 scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim );
845 845
846 if (scrollbar->orientation() == Horizontal) 846 if (scrollbar->orientation() == Horizontal)
847 pos = p.x(); 847 pos = p.x();
848 else 848 else
849 pos = p.y(); 849 pos = p.y();
850 850
851 if (pos < buttonDim) 851 if (pos < buttonDim)
852 return SubLine; 852 return SubLine;
853 if (pos < sliderStart) 853 if (pos < sliderStart)
854 return SubPage; 854 return SubPage;
855 if (pos < sliderStart + sliderLength) 855 if (pos < sliderStart + sliderLength)
856 return Slider; 856 return Slider;
857 if (pos < sliderMax + sliderLength) 857 if (pos < sliderMax + sliderLength)
858 return AddPage; 858 return AddPage;
859 if (pos < sliderMax + sliderLength + buttonDim) 859 if (pos < sliderMax + sliderLength + buttonDim)
860 return SubLine; 860 return SubLine;
861 return AddLine; 861 return AddLine;
862} 862}
863 863
864 864
865 865
866void LightStyle::drawScrollBarControls( QPainter* p, const QScrollBar* scrollbar, 866void LightStyle::drawScrollBarControls( QPainter* p, const QScrollBar* scrollbar,
867 int sliderStart, uint controls, 867 int sliderStart, uint controls,
868 uint activeControl ) 868 uint activeControl )
869{ 869{
870 QColorGroup g = scrollbar->colorGroup(); 870 QColorGroup g = scrollbar->colorGroup();
871 871
872 int sliderMin, sliderMax, sliderLength, buttonDim; 872 int sliderMin, sliderMax, sliderLength, buttonDim;
873 scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); 873 scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim );
874 874
875 if (sliderStart > sliderMax) { // sanity check 875 if (sliderStart > sliderMax) { // sanity check
876 sliderStart = sliderMax; 876 sliderStart = sliderMax;
877 } 877 }
878 878
879 QRect addR, subR, subR2, addPageR, subPageR, sliderR; 879 QRect addR, subR, subR2, addPageR, subPageR, sliderR;
880 int length = ((scrollbar->orientation() == Horizontal) ? 880 int length = ((scrollbar->orientation() == Horizontal) ?
881 scrollbar->width() : scrollbar->height()); 881 scrollbar->width() : scrollbar->height());
882 int extent = ((scrollbar->orientation() == Horizontal) ? 882 int extent = ((scrollbar->orientation() == Horizontal) ?
883 scrollbar->height() : scrollbar->width()); 883 scrollbar->height() : scrollbar->width());
884 884
885 885
886 int fudge = 3; //####disgusting hack 886 int fudge = 3; //####disgusting hack
887 887
888 if (scrollbar->orientation() == Horizontal) { 888 if (scrollbar->orientation() == Horizontal) {
889 subR.setRect(0, defaultFrameWidth(), 889 subR.setRect(0, defaultFrameWidth(),
890 buttonDim + fudge, buttonDim); 890 buttonDim + fudge, buttonDim);
891 subR2.setRect(length - (buttonDim * 2), defaultFrameWidth() , 891 subR2.setRect(length - (buttonDim * 2), defaultFrameWidth() ,
892 buttonDim, buttonDim); 892 buttonDim, buttonDim);
893 addR.setRect(length - buttonDim, defaultFrameWidth(), 893 addR.setRect(length - buttonDim, defaultFrameWidth(),
894 buttonDim, buttonDim); 894 buttonDim, buttonDim);
895 } else { 895 } else {
896 subR.setRect(defaultFrameWidth() + 1, 0, 896 subR.setRect(defaultFrameWidth() + 1, 0,
897 buttonDim, buttonDim + fudge); 897 buttonDim, buttonDim + fudge);
898 subR2.setRect(defaultFrameWidth() + 1, length - (buttonDim * 2), 898 subR2.setRect(defaultFrameWidth() + 1, length - (buttonDim * 2),
899 buttonDim, buttonDim); 899 buttonDim, buttonDim);
900 addR.setRect(defaultFrameWidth() + 1, length - buttonDim, 900 addR.setRect(defaultFrameWidth() + 1, length - buttonDim,
901 buttonDim, buttonDim); 901 buttonDim, buttonDim);
902 } 902 }
903 903
904 int sliderEnd = sliderStart + sliderLength; 904 int sliderEnd = sliderStart + sliderLength;
905 int sliderW = extent - defaultFrameWidth() - 1; 905 int sliderW = extent - defaultFrameWidth() - 1;
906 if (scrollbar->orientation() == Horizontal) { 906 if (scrollbar->orientation() == Horizontal) {
907 subPageR.setRect( subR.right() + 1, defaultFrameWidth(), 907 subPageR.setRect( subR.right() + 1, defaultFrameWidth(),
908 sliderStart - subR.right() - 1 , sliderW ); 908 sliderStart - subR.right() - 1 , sliderW );
909 addPageR.setRect( sliderEnd, defaultFrameWidth(), 909 addPageR.setRect( sliderEnd, defaultFrameWidth(),
910 subR2.left() - sliderEnd, sliderW ); 910 subR2.left() - sliderEnd, sliderW );
911 sliderR.setRect( sliderStart, defaultFrameWidth(), sliderLength, sliderW ); 911 sliderR.setRect( sliderStart, defaultFrameWidth(), sliderLength, sliderW );
912 } else { 912 } else {
913 subPageR.setRect( defaultFrameWidth(), subR.bottom() + 1, 913 subPageR.setRect( defaultFrameWidth(), subR.bottom() + 1,
914 sliderW, sliderStart - subR.bottom() - 1 ); 914 sliderW, sliderStart - subR.bottom() - 1 );
915 addPageR.setRect( defaultFrameWidth(), sliderEnd, 915 addPageR.setRect( defaultFrameWidth(), sliderEnd,
916 sliderW, subR2.top() - sliderEnd ); 916 sliderW, subR2.top() - sliderEnd );
917 sliderR .setRect( defaultFrameWidth(), sliderStart, 917 sliderR .setRect( defaultFrameWidth(), sliderStart,
918 sliderW, sliderLength ); 918 sliderW, sliderLength );
919 } 919 }
920 920
921 if ( controls == ( AddLine | SubLine | AddPage | SubPage | 921 if ( controls == ( AddLine | SubLine | AddPage | SubPage |
922 Slider | First | Last ) ) { 922 Slider | First | Last ) ) {
923 if (scrollbar->orientation() == Horizontal) 923 if (scrollbar->orientation() == Horizontal)
924 qDrawShadePanel(p, 0, 0, length, 2, g, TRUE, 1, 924 qDrawShadePanel(p, 0, 0, length, 2, g, TRUE, 1,
925 &g.brush(QColorGroup::Background)); 925 &g.brush(QColorGroup::Background));
926 else 926 else
927 qDrawShadePanel(p, 0, 0, 2, length, g, TRUE, 1, 927 qDrawShadePanel(p, 0, 0, 2, length, g, TRUE, 1,
928 &g.brush(QColorGroup::Background)); 928 &g.brush(QColorGroup::Background));
929 } 929 }
930 930
931 if ( controls & AddLine ) 931 if ( controls & AddLine )
932 drawArrow( p, (scrollbar->orientation() == Vertical) ? DownArrow : RightArrow, 932 drawArrow( p, (scrollbar->orientation() == Vertical) ? DownArrow : RightArrow,
933 FALSE, addR.x(), addR.y(), 933 FALSE, addR.x(), addR.y(),
934 addR.width(), addR.height(), 934 addR.width(), addR.height(),
935 (( activeControl == AddLine ) ? 935 (( activeControl == AddLine ) ?
936 singleton->hoverPalette.active() : g), 936 singleton->hoverPalette.active() : g),
937 TRUE, &g.brush(QColorGroup::Background)); 937 TRUE, &g.brush(QColorGroup::Background));
938 if ( controls & SubLine ) { 938 if ( controls & SubLine ) {
939 drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, 939 drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow,
940 FALSE, subR.x(), subR.y(), 940 FALSE, subR.x(), subR.y(),
941 subR.width(), subR.height(), 941 subR.width(), subR.height(),
942 (( activeControl == SubLine ) ? 942 (( activeControl == SubLine ) ?
943 singleton->hoverPalette.active() : g), 943 singleton->hoverPalette.active() : g),
944 TRUE, &g.brush(QColorGroup::Background)); 944 TRUE, &g.brush(QColorGroup::Background));
945 drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, 945 drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow,
946 FALSE, subR2.x(), subR2.y(), 946 FALSE, subR2.x(), subR2.y(),
947 subR2.width(), subR2.height(), 947 subR2.width(), subR2.height(),
948 (( activeControl == SubLine ) ? 948 (( activeControl == SubLine ) ?
949 singleton->hoverPalette.active() : g), 949 singleton->hoverPalette.active() : g),
950 TRUE, &g.brush(QColorGroup::Background)); 950 TRUE, &g.brush(QColorGroup::Background));
951 } 951 }
952 952
953 if ( controls & SubPage ) 953 if ( controls & SubPage )
954 p->fillRect( subPageR, 954 p->fillRect( subPageR,
955 ((activeControl == SubPage) ? 955 ((activeControl == SubPage) ?
956 g.brush( QColorGroup::Dark ) : 956 g.brush( QColorGroup::Dark ) :
957 g.brush( QColorGroup::Mid ))); 957 g.brush( QColorGroup::Mid )));
958 if ( controls & AddPage ) 958 if ( controls & AddPage )
959 p->fillRect( addPageR, 959 p->fillRect( addPageR,
960 ((activeControl == AddPage) ? 960 ((activeControl == AddPage) ?
961 g.brush( QColorGroup::Dark ) : 961 g.brush( QColorGroup::Dark ) :
962 g.brush( QColorGroup::Mid ))); 962 g.brush( QColorGroup::Mid )));
963 963
964 if ( controls & Slider ) { 964 if ( controls & Slider ) {
965 965
966 QPoint bo = p->brushOrigin(); 966 QPoint bo = p->brushOrigin();
967 p->setBrushOrigin(sliderR.topLeft()); 967 p->setBrushOrigin(sliderR.topLeft());
968 if ( sliderR.isValid() ) { 968 if ( sliderR.isValid() ) {
969 p->fillRect( sliderR.x(), sliderR.y(), 2, 2, 969 p->fillRect( sliderR.x(), sliderR.y(), 2, 2,
970 g.brush( QColorGroup::Mid )); 970 g.brush( QColorGroup::Mid ));
971 p->fillRect( sliderR.x() + sliderR.width() - 2, 971 p->fillRect( sliderR.x() + sliderR.width() - 2,
972 sliderR.y(), 2, 2, 972 sliderR.y(), 2, 2,
973 g.brush( QColorGroup::Mid )); 973 g.brush( QColorGroup::Mid ));
974 p->fillRect( sliderR.x() + sliderR.width() - 2, 974 p->fillRect( sliderR.x() + sliderR.width() - 2,
975 sliderR.y() + sliderR.height() - 2, 2, 2, 975 sliderR.y() + sliderR.height() - 2, 2, 2,
976 g.brush( QColorGroup::Mid )); 976 g.brush( QColorGroup::Mid ));
977 p->fillRect( sliderR.x(), 977 p->fillRect( sliderR.x(),
978 sliderR.y() + sliderR.height() - 2, 2, 2, 978 sliderR.y() + sliderR.height() - 2, 2, 2,
979 g.brush( QColorGroup::Mid )); 979 g.brush( QColorGroup::Mid ));
980 980
981 QColorGroup cg( g ); 981 QColorGroup cg( g );
982 cg.setBrush( QColorGroup::Background, g.brush( QColorGroup::Mid ) ); 982 cg.setBrush( QColorGroup::Background, g.brush( QColorGroup::Mid ) );
983 drawBevelButton( p, sliderR.x(), sliderR.y(), 983 drawBevelButton( p, sliderR.x(), sliderR.y(),
984 sliderR.width(), sliderR.height(), 984 sliderR.width(), sliderR.height(),
985 cg, FALSE, &g.brush( QColorGroup::Button ) ); 985 cg, FALSE, &g.brush( QColorGroup::Button ) );
986 } 986 }
987 987
988 p->setBrushOrigin(bo); 988 p->setBrushOrigin(bo);
989 } 989 }
990} 990}
991 991
992 992
993void LightStyle::drawToolBarHandle(QPainter *p, const QRect &rect, 993void LightStyle::drawToolBarHandle(QPainter *p, const QRect &rect,
994 Qt::Orientation orientation, 994 Qt::Orientation orientation,
995 bool, const QColorGroup &g, bool) 995 bool, const QColorGroup &g, bool)
996{ 996{
997 p->save(); 997 p->save();
998 p->setPen(g.mid()); 998 p->setPen(g.mid());
999 p->setBrush(g.brush(QColorGroup::Mid)); 999 p->setBrush(g.brush(QColorGroup::Mid));
1000 1000
1001 if (orientation == Qt::Horizontal) { 1001 if (orientation == Qt::Horizontal) {
1002 QRect l, r; 1002 QRect l, r;
1003 l.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 5, rect.height() - 2); 1003 l.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 5, rect.height() - 2);
1004 r.setRect(l.right() + 1, l.y(), 3, l.height()); 1004 r.setRect(l.right() + 1, l.y(), 3, l.height());
1005 1005
1006 p->drawRect(l); 1006 p->drawRect(l);
1007 qDrawShadePanel(p, r, g, FALSE); 1007 qDrawShadePanel(p, r, g, FALSE);
1008 } else { 1008 } else {
1009 QRect t, b; 1009 QRect t, b;
1010 t.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 2, rect.height() - 5); 1010 t.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 2, rect.height() - 5);
1011 b.setRect(t.x(), t.bottom() + 1, t.width(), 3); 1011 b.setRect(t.x(), t.bottom() + 1, t.width(), 3);
1012 1012
1013 p->drawRect(t); 1013 p->drawRect(t);
1014 qDrawShadePanel(p, b, g, FALSE); 1014 qDrawShadePanel(p, b, g, FALSE);
1015 } 1015 }
1016 1016
1017 p->restore(); 1017 p->restore();
1018} 1018}
1019 1019
1020 1020
1021bool LightStyle::eventFilter(QObject *object, QEvent *event) 1021bool LightStyle::eventFilter(QObject *object, QEvent *event)
1022{ 1022{
1023 switch(event->type()) { 1023 switch(event->type()) {
1024 case QEvent::Enter: 1024 case QEvent::Enter:
1025 { 1025 {
1026 if (! object->isWidgetType() || 1026 if (! object->isWidgetType() ||
1027 ! object->inherits("QPushButton")) 1027 ! object->inherits("QPushButton"))
1028 break; 1028 break;
1029 1029
1030 singleton->hoverWidget = (QWidget *) object; 1030 singleton->hoverWidget = (QWidget *) object;
1031 if (! singleton->hoverWidget->isEnabled()) { 1031 if (! singleton->hoverWidget->isEnabled()) {
1032 singleton->hoverWidget = 0; 1032 singleton->hoverWidget = 0;
1033 break; 1033 break;
1034 } 1034 }
1035 1035
1036 QPalette pal = singleton->hoverWidget->palette(); 1036 QPalette pal = singleton->hoverWidget->palette();
1037 if (singleton->hoverWidget->ownPalette()) 1037 if (singleton->hoverWidget->ownPalette())
1038 singleton->savePalette = new QPalette(pal); 1038 singleton->savePalette = new QPalette(pal);
1039 1039
1040 singleton->hoverWidget->setPalette(singleton->hoverPalette); 1040 singleton->hoverWidget->setPalette(singleton->hoverPalette);
1041 1041
1042 break; 1042 break;
1043 } 1043 }
1044 1044
1045 case QEvent::Leave: 1045 case QEvent::Leave:
1046 { 1046 {
1047 if (object != singleton->hoverWidget) 1047 if (object != singleton->hoverWidget)
1048 break; 1048 break;
1049 1049
1050 if (singleton->savePalette) { 1050 if (singleton->savePalette) {
1051 singleton->hoverWidget->setPalette(*(singleton->savePalette)); 1051 singleton->hoverWidget->setPalette(*(singleton->savePalette));
1052 delete singleton->savePalette; 1052 delete singleton->savePalette;
1053 singleton->savePalette = 0; 1053 singleton->savePalette = 0;
1054 } else 1054 } else
1055 singleton->hoverWidget->unsetPalette(); 1055 singleton->hoverWidget->unsetPalette();
1056 1056
1057 singleton->hoverWidget = 0; 1057 singleton->hoverWidget = 0;
1058 1058
1059 break; 1059 break;
1060 } 1060 }
1061 1061
1062 default: 1062 default:
1063 { 1063 {
1064 ; 1064 ;
1065 } 1065 }
1066 } 1066 }
1067 1067
1068 return QWindowsStyle::eventFilter(object, event); 1068 return QWindowsStyle::eventFilter(object, event);
1069} 1069}
1070 1070
1071 1071
1072 static const int motifItemFrame = 1;// menu item frame width 1072 static const int motifItemFrame = 1;// menu item frame width
1073 static const int motifSepHeight = 2;// separator item height 1073 static const int motifSepHeight = 2;// separator item height
1074 static const int motifItemHMargin = 1;// menu item hor text margin 1074 static const int motifItemHMargin = 1;// menu item hor text margin
1075 static const int motifItemVMargin = 2;// menu item ver text margin 1075 static const int motifItemVMargin = 2;// menu item ver text margin
1076 static const int motifArrowHMargin = 0;// arrow horizontal margin 1076 static const int motifArrowHMargin = 0;// arrow horizontal margin
1077 static const int motifTabSpacing = 12;// space between text and tab 1077 static const int motifTabSpacing = 12;// space between text and tab
1078 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark 1078 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark
1079 static const int windowsRightBorder= 8; // right border on windows 1079 static const int windowsRightBorder= 8; // right border on windows
1080static const int windowsCheckMarkWidth = 2; // checkmarks width on windows 1080static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
1081 1081
1082/*! \reimp 1082/*! \reimp
1083*/ 1083*/
1084int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) 1084int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
1085{ 1085{
1086#ifndef QT_NO_MENUDATA 1086#ifndef QT_NO_MENUDATA
1087 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm 1087 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
1088 1088
1089 if ( mi->isSeparator() ) 1089 if ( mi->isSeparator() )
1090 return 10; // arbitrary 1090 return 10; // arbitrary
1091 else if ( mi->pixmap() ) 1091 else if ( mi->pixmap() )
1092 w += mi->pixmap()->width();// pixmap only 1092 w += mi->pixmap()->width();// pixmap only
1093 1093
1094 if ( !mi->text().isNull() ) { 1094 if ( !mi->text().isNull() ) {
1095 if ( mi->text().find('\t') >= 0 )// string contains tab 1095 if ( mi->text().find('\t') >= 0 )// string contains tab
1096 w += motifTabSpacing; 1096 w += motifTabSpacing;
1097 } 1097 }
1098 1098
1099 if ( maxpmw ) { // we have iconsets 1099 if ( maxpmw ) { // we have iconsets
1100 w += maxpmw; 1100 w += maxpmw;
1101 w += 6; // add a little extra border around the iconset 1101 w += 6; // add a little extra border around the iconset
1102 } 1102 }
1103 1103
1104 if ( checkable && maxpmw < windowsCheckMarkWidth ) { 1104 if ( checkable && maxpmw < windowsCheckMarkWidth ) {
1105 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks 1105 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
1106 } 1106 }
1107 1107
1108 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) 1108 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
1109 w += motifCheckMarkHMargin; // add space to separate the columns 1109 w += motifCheckMarkHMargin; // add space to separate the columns
1110 1110
1111 w += windowsRightBorder; // windows has a strange wide border on the right side 1111 w += windowsRightBorder; // windows has a strange wide border on the right side
1112 1112
1113 return w; 1113 return w;
1114#endif 1114#endif
1115} 1115}
1116 1116
1117/*! \reimp 1117/*! \reimp
1118*/ 1118*/
1119int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) 1119int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
1120{ 1120{
1121#ifndef QT_NO_MENUDATA 1121#ifndef QT_NO_MENUDATA
1122 int h = 0; 1122 int h = 0;
1123 if ( mi->isSeparator() ) // separator height 1123 if ( mi->isSeparator() ) // separator height
1124 h = motifSepHeight; 1124 h = motifSepHeight;
1125 else if ( mi->pixmap() ) // pixmap height 1125 else if ( mi->pixmap() ) // pixmap height
1126 h = mi->pixmap()->height() + 2*motifItemFrame; 1126 h = mi->pixmap()->height() + 2*motifItemFrame;
1127 else // text height 1127 else // text height
1128 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; 1128 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame;
1129 1129
1130 if ( !mi->isSeparator() && mi->iconSet() != 0 ) { 1130 if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
1131 h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); 1131 h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame );
1132 } 1132 }
1133 if ( mi->custom() ) 1133 if ( mi->custom() )
1134 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; 1134 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
1135 return h; 1135 return h;
1136#endif 1136#endif
1137} 1137}
1138 1138
1139void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 1139void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
1140 const QPalette& pal, 1140 const QPalette& pal,
1141 bool act, bool enabled, int x, int y, int w, int h) 1141 bool act, bool enabled, int x, int y, int w, int h)
1142{ 1142{
1143#ifndef QT_NO_MENUDATA 1143#ifndef QT_NO_MENUDATA
1144 const QColorGroup & g = pal.active(); 1144 const QColorGroup & g = pal.active();
1145 bool dis = !enabled; 1145 bool dis = !enabled;
1146 QColorGroup itemg = dis ? pal.disabled() : pal.active(); 1146 QColorGroup itemg = dis ? pal.disabled() : pal.active();
1147 1147
1148 if ( checkable ) 1148 if ( checkable )
1149 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks 1149 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
1150 1150
1151 int checkcol = maxpmw; 1151 int checkcol = maxpmw;
1152 1152
1153 if ( mi && mi->isSeparator() ) { // draw separator 1153 if ( mi && mi->isSeparator() ) { // draw separator
1154 p->setPen( g.dark() ); 1154 p->setPen( g.dark() );
1155 p->drawLine( x, y, x+w, y ); 1155 p->drawLine( x, y, x+w, y );
1156 p->setPen( g.light() ); 1156 p->setPen( g.light() );
1157 p->drawLine( x, y+1, x+w, y+1 ); 1157 p->drawLine( x, y+1, x+w, y+1 );
1158 return; 1158 return;
1159 } 1159 }
1160 1160
1161 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1161 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1162 g.brush( QColorGroup::Button ); 1162 g.brush( QColorGroup::Button );
1163 p->fillRect( x, y, w, h, fill); 1163 p->fillRect( x, y, w, h, fill);
1164 1164
1165 if ( !mi ) 1165 if ( !mi )
1166 return; 1166 return;
1167 1167
1168 if ( mi->isChecked() ) { 1168 if ( mi->isChecked() ) {
1169 if ( act && !dis ) { 1169 if ( act && !dis ) {
1170 qDrawShadePanel( p, x, y, checkcol, h, 1170 qDrawShadePanel( p, x, y, checkcol, h,
1171 g, TRUE, 1, &g.brush( QColorGroup::Button ) ); 1171 g, TRUE, 1, &g.brush( QColorGroup::Button ) );
1172 } else { 1172 } else {
1173 qDrawShadePanel( p, x, y, checkcol, h, 1173 qDrawShadePanel( p, x, y, checkcol, h,
1174 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); 1174 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
1175 } 1175 }
1176 } else if ( !act ) { 1176 } else if ( !act ) {
1177 p->fillRect(x, y, checkcol , h, 1177 p->fillRect(x, y, checkcol , h,
1178 g.brush( QColorGroup::Button )); 1178 g.brush( QColorGroup::Button ));
1179 } 1179 }
1180 1180
1181 if ( mi->iconSet() ) { // draw iconset 1181 if ( mi->iconSet() ) { // draw iconset
1182 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; 1182 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
1183 if (act && !dis ) 1183 if (act && !dis )
1184 mode = QIconSet::Active; 1184 mode = QIconSet::Active;
1185 QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); 1185 QPixmap pixmap;
1186 if ( mode == QIconSet::Disabled )
1187 pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode );
1188 else
1189 pixmap = mi->iconSet()->pixmap();
1186 int pixw = pixmap.width(); 1190 int pixw = pixmap.width();
1187 int pixh = pixmap.height(); 1191 int pixh = pixmap.height();
1188 if ( act && !dis ) { 1192 if ( act && !dis ) {
1189 if ( !mi->isChecked() ) 1193 if ( !mi->isChecked() )
1190 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); 1194 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
1191 } 1195 }
1192 QRect cr( x, y, checkcol, h ); 1196 QRect cr( x, y, checkcol, h );
1193 QRect pmr( 0, 0, pixw, pixh ); 1197 QRect pmr( 0, 0, pixw, pixh );
1194 pmr.moveCenter( cr.center() ); 1198 pmr.moveCenter( cr.center() );
1195 p->setPen( itemg.text() ); 1199 p->setPen( itemg.text() );
1196 p->drawPixmap( pmr.topLeft(), pixmap ); 1200 p->drawPixmap( pmr.topLeft(), pixmap );
1197 1201
1198 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1202 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1199 g.brush( QColorGroup::Button ); 1203 g.brush( QColorGroup::Button );
1200 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); 1204 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
1201 } else if ( checkable ) {// just "checking"... 1205 } else if ( checkable ) {// just "checking"...
1202 int mw = checkcol + motifItemFrame; 1206 int mw = checkcol + motifItemFrame;
1203 int mh = h - 2*motifItemFrame; 1207 int mh = h - 2*motifItemFrame;
1204 if ( mi->isChecked() ) { 1208 if ( mi->isChecked() ) {
1205 drawCheckMark( p, x + motifItemFrame + 2, 1209 drawCheckMark( p, x + motifItemFrame + 2,
1206 y+motifItemFrame, mw, mh, itemg, act, dis ); 1210 y+motifItemFrame, mw, mh, itemg, act, dis );
1207 } 1211 }
1208 } 1212 }
1209 1213
1210 p->setPen( act ? g.highlightedText() : g.buttonText() ); 1214 p->setPen( act ? g.highlightedText() : g.buttonText() );
1211 1215
1212 QColor discol; 1216 QColor discol;
1213 if ( dis ) { 1217 if ( dis ) {
1214 discol = itemg.text(); 1218 discol = itemg.text();
1215 p->setPen( discol ); 1219 p->setPen( discol );
1216 } 1220 }
1217 1221
1218 int xm = motifItemFrame + checkcol + motifItemHMargin; 1222 int xm = motifItemFrame + checkcol + motifItemHMargin;
1219 1223
1220 if ( mi->custom() ) { 1224 if ( mi->custom() ) {
1221 int m = motifItemVMargin; 1225 int m = motifItemVMargin;
1222 p->save(); 1226 p->save();
1223 if ( dis && !act ) { 1227 if ( dis && !act ) {
1224 p->setPen( g.light() ); 1228 p->setPen( g.light() );
1225 mi->custom()->paint( p, itemg, act, enabled, 1229 mi->custom()->paint( p, itemg, act, enabled,
1226 x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); 1230 x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
1227 p->setPen( discol ); 1231 p->setPen( discol );
1228 } 1232 }
1229 mi->custom()->paint( p, itemg, act, enabled, 1233 mi->custom()->paint( p, itemg, act, enabled,
1230 x+xm, y+m, w-xm-tab+1, h-2*m ); 1234 x+xm, y+m, w-xm-tab+1, h-2*m );
1231 p->restore(); 1235 p->restore();
1232 } 1236 }
1233 QString s = mi->text(); 1237 QString s = mi->text();
1234 if ( !s.isNull() ) { // draw text 1238 if ( !s.isNull() ) { // draw text
1235 int t = s.find( '\t' ); 1239 int t = s.find( '\t' );
1236 int m = motifItemVMargin; 1240 int m = motifItemVMargin;
1237 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; 1241 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
1238 if ( t >= 0 ) { // draw tab text 1242 if ( t >= 0 ) { // draw tab text
1239 if ( dis && !act ) { 1243 if ( dis && !act ) {
1240 p->setPen( g.light() ); 1244 p->setPen( g.light() );
1241 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, 1245 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
1242 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); 1246 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
1243 p->setPen( discol ); 1247 p->setPen( discol );
1244 } 1248 }
1245 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, 1249 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
1246 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); 1250 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
1247 } 1251 }
1248 if ( dis && !act ) { 1252 if ( dis && !act ) {
1249 p->setPen( g.light() ); 1253 p->setPen( g.light() );
1250 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); 1254 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );
1251 p->setPen( discol ); 1255 p->setPen( discol );
1252 } 1256 }
1253 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); 1257 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
1254 } else if ( mi->pixmap() ) { // draw pixmap 1258 } else if ( mi->pixmap() ) { // draw pixmap
1255 QPixmap *pixmap = mi->pixmap(); 1259 QPixmap *pixmap = mi->pixmap();
1256 if ( pixmap->depth() == 1 ) 1260 if ( pixmap->depth() == 1 )
1257 p->setBackgroundMode( OpaqueMode ); 1261 p->setBackgroundMode( OpaqueMode );
1258 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); 1262 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
1259 if ( pixmap->depth() == 1 ) 1263 if ( pixmap->depth() == 1 )
1260 p->setBackgroundMode( TransparentMode ); 1264 p->setBackgroundMode( TransparentMode );
1261 } 1265 }
1262 if ( mi->popup() ) { // draw sub menu arrow 1266 if ( mi->popup() ) { // draw sub menu arrow
1263 int dim = (h-2*motifItemFrame) / 2; 1267 int dim = (h-2*motifItemFrame) / 2;
1264 if ( act ) { 1268 if ( act ) {
1265 if ( !dis ) 1269 if ( !dis )
1266 discol = white; 1270 discol = white;
1267 QColorGroup g2( discol, g.highlight(), 1271 QColorGroup g2( discol, g.highlight(),
1268 white, white, 1272 white, white,
1269 dis ? discol : white, 1273 dis ? discol : white,
1270 discol, white ); 1274 discol, white );
1271 drawArrow( p, RightArrow, FALSE, 1275 drawArrow( p, RightArrow, FALSE,
1272 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1276 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1273 dim, dim, g2, TRUE ); 1277 dim, dim, g2, TRUE );
1274 } else { 1278 } else {
1275 drawArrow( p, RightArrow, 1279 drawArrow( p, RightArrow,
1276 FALSE, 1280 FALSE,
1277 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1281 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1278 dim, dim, g, mi->isEnabled() ); 1282 dim, dim, g, mi->isEnabled() );
1279 } 1283 }
1280 } 1284 }
1281#endif 1285#endif
1282} 1286}
1283 1287
1284#endif 1288#endif
diff --git a/library/qpestyle.cpp b/library/qpestyle.cpp
index 0566f6b..9503e02 100644
--- a/library/qpestyle.cpp
+++ b/library/qpestyle.cpp
@@ -1,1191 +1,1195 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "qpestyle.h" 21#include "qpestyle.h"
22 22
23 23
24#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) 24#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
25 25
26#if QT_VERSION >= 0x030000 26#if QT_VERSION >= 0x030000
27 27
28#include <qdrawutil.h> 28#include <qdrawutil.h>
29#include <qcombobox.h> 29#include <qcombobox.h>
30#include <qtabbar.h> 30#include <qtabbar.h>
31 31
32QPEStyle::QPEStyle() 32QPEStyle::QPEStyle()
33{ 33{
34} 34}
35 35
36QPEStyle::~QPEStyle() 36QPEStyle::~QPEStyle()
37{ 37{
38} 38}
39 39
40void QPEStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, 40void QPEStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r,
41 const QColorGroup &cg, SFlags flags, const QStyleOption &data) const 41 const QColorGroup &cg, SFlags flags, const QStyleOption &data) const
42{ 42{
43 switch ( pe ) { 43 switch ( pe ) {
44 case PE_ButtonTool: 44 case PE_ButtonTool:
45 { 45 {
46 QColorGroup mycg = cg; 46 QColorGroup mycg = cg;
47 if ( flags & Style_On ) { 47 if ( flags & Style_On ) {
48 QBrush fill( cg.mid(), Dense4Pattern ); 48 QBrush fill( cg.mid(), Dense4Pattern );
49 mycg.setBrush( QColorGroup::Button, fill ); 49 mycg.setBrush( QColorGroup::Button, fill );
50 } 50 }
51 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); 51 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data );
52 break; 52 break;
53 } 53 }
54 case PE_ButtonCommand: 54 case PE_ButtonCommand:
55 case PE_ButtonDefault: 55 case PE_ButtonDefault:
56 case PE_ButtonBevel: 56 case PE_ButtonBevel:
57 case PE_HeaderSection: 57 case PE_HeaderSection:
58 { 58 {
59 QPen oldPen = p->pen(); 59 QPen oldPen = p->pen();
60 p->fillRect( r.x()+1, r.y()+1, r.width()-2, r.height()-2, cg.brush(QColorGroup::Button) ); 60 p->fillRect( r.x()+1, r.y()+1, r.width()-2, r.height()-2, cg.brush(QColorGroup::Button) );
61 61
62 int x2 = r.right(); 62 int x2 = r.right();
63 int y2 = r.bottom(); 63 int y2 = r.bottom();
64 64
65 if ( flags & (Style_Sunken | Style_Down | Style_On) ) 65 if ( flags & (Style_Sunken | Style_Down | Style_On) )
66 p->setPen( cg.dark() ); 66 p->setPen( cg.dark() );
67 else 67 else
68 p->setPen( cg.light() ); 68 p->setPen( cg.light() );
69 p->drawLine( r.x(), r.y()+1, r.x(), y2-1 ); 69 p->drawLine( r.x(), r.y()+1, r.x(), y2-1 );
70 p->drawLine( r.x()+1, r.y(), x2-1, r.y() ); 70 p->drawLine( r.x()+1, r.y(), x2-1, r.y() );
71 71
72 if ( flags & (Style_Sunken | Style_Down | Style_On) ) 72 if ( flags & (Style_Sunken | Style_Down | Style_On) )
73 p->setPen( cg.light() ); 73 p->setPen( cg.light() );
74 else 74 else
75 p->setPen( cg.dark() ); 75 p->setPen( cg.dark() );
76 p->drawLine( x2, r.y()+1, x2, y2-1 ); 76 p->drawLine( x2, r.y()+1, x2, y2-1 );
77 p->drawLine( r.x()+1, y2, x2-1, y2 ); 77 p->drawLine( r.x()+1, y2, x2-1, y2 );
78 p->setPen( oldPen ); 78 p->setPen( oldPen );
79 break; 79 break;
80 } 80 }
81 case PE_FocusRect: 81 case PE_FocusRect:
82 break; 82 break;
83 case PE_Indicator: 83 case PE_Indicator:
84 { 84 {
85 QColorGroup mycg( cg ); 85 QColorGroup mycg( cg );
86 QBrush fill; 86 QBrush fill;
87 if ( flags & Style_Down ) 87 if ( flags & Style_Down )
88 fill = cg.brush( QColorGroup::Button ); 88 fill = cg.brush( QColorGroup::Button );
89 else 89 else
90 fill = cg.brush( (flags&Style_Enabled) ? QColorGroup::Base : QColorGroup::Background ); 90 fill = cg.brush( (flags&Style_Enabled) ? QColorGroup::Base : QColorGroup::Background );
91 mycg.setBrush( QColorGroup::Button, fill ); 91 mycg.setBrush( QColorGroup::Button, fill );
92 if ( flags&Style_Enabled ) 92 if ( flags&Style_Enabled )
93 flags |= Style_Sunken; 93 flags |= Style_Sunken;
94 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags ); 94 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags );
95 if ( flags & Style_On ) { 95 if ( flags & Style_On ) {
96 QPointArray a( 7*2 ); 96 QPointArray a( 7*2 );
97 int i, xx, yy; 97 int i, xx, yy;
98 xx = r.x()+3; 98 xx = r.x()+3;
99 yy = r.y()+5; 99 yy = r.y()+5;
100 for ( i=0; i<3; i++ ) { 100 for ( i=0; i<3; i++ ) {
101 a.setPoint( 2*i, xx, yy ); 101 a.setPoint( 2*i, xx, yy );
102 a.setPoint( 2*i+1, xx, yy+2 ); 102 a.setPoint( 2*i+1, xx, yy+2 );
103 xx++; yy++; 103 xx++; yy++;
104 } 104 }
105 yy -= 2; 105 yy -= 2;
106 for ( i=3; i<7; i++ ) { 106 for ( i=3; i<7; i++ ) {
107 a.setPoint( 2*i, xx, yy ); 107 a.setPoint( 2*i, xx, yy );
108 a.setPoint( 2*i+1, xx, yy+2 ); 108 a.setPoint( 2*i+1, xx, yy+2 );
109 xx++; yy--; 109 xx++; yy--;
110 } 110 }
111 if ( flags & Style_NoChange ) { 111 if ( flags & Style_NoChange ) {
112 p->setPen( mycg.dark() ); 112 p->setPen( mycg.dark() );
113 } else { 113 } else {
114 p->setPen( mycg.text() ); 114 p->setPen( mycg.text() );
115 } 115 }
116 p->drawLineSegments( a ); 116 p->drawLineSegments( a );
117 } 117 }
118 break; 118 break;
119 } 119 }
120 case PE_ExclusiveIndicator: 120 case PE_ExclusiveIndicator:
121 { 121 {
122 static const QCOORD pts1[] = { // dark lines 122 static const QCOORD pts1[] = { // dark lines
123 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; 123 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 };
124 static const QCOORD pts4[] = { // white lines 124 static const QCOORD pts4[] = { // white lines
125 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, 125 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7,
126 11,4, 10,3, 10,2 }; 126 11,4, 10,3, 10,2 };
127 static const QCOORD pts5[] = { // inner fill 127 static const QCOORD pts5[] = { // inner fill
128 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; 128 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 };
129 129
130 int x, y, w, h; 130 int x, y, w, h;
131 r.rect( &x, &y, &w, &h ); 131 r.rect( &x, &y, &w, &h );
132 p->eraseRect( x, y, w, h ); 132 p->eraseRect( x, y, w, h );
133 QPointArray a( QCOORDARRLEN(pts1), pts1 ); 133 QPointArray a( QCOORDARRLEN(pts1), pts1 );
134 a.translate( x, y ); 134 a.translate( x, y );
135 p->setPen( cg.dark() ); 135 p->setPen( cg.dark() );
136 p->drawPolyline( a ); 136 p->drawPolyline( a );
137 a.setPoints( QCOORDARRLEN(pts4), pts4 ); 137 a.setPoints( QCOORDARRLEN(pts4), pts4 );
138 a.translate( x, y ); 138 a.translate( x, y );
139 p->setPen( cg.light() ); 139 p->setPen( cg.light() );
140 p->drawPolyline( a ); 140 p->drawPolyline( a );
141 a.setPoints( QCOORDARRLEN(pts5), pts5 ); 141 a.setPoints( QCOORDARRLEN(pts5), pts5 );
142 a.translate( x, y ); 142 a.translate( x, y );
143 QColor fillColor = ( flags&Style_Down || !(flags&Style_Enabled) ) ? cg.button() : cg.base(); 143 QColor fillColor = ( flags&Style_Down || !(flags&Style_Enabled) ) ? cg.button() : cg.base();
144 p->setPen( fillColor ); 144 p->setPen( fillColor );
145 p->setBrush( fillColor ) ; 145 p->setBrush( fillColor ) ;
146 p->drawPolygon( a ); 146 p->drawPolygon( a );
147 if ( flags&Style_On ) { 147 if ( flags&Style_On ) {
148 p->setPen( NoPen ); 148 p->setPen( NoPen );
149 p->setBrush( cg.text() ); 149 p->setBrush( cg.text() );
150 p->drawRect( x+5, y+4, 2, 4 ); 150 p->drawRect( x+5, y+4, 2, 4 );
151 p->drawRect( x+4, y+5, 4, 2 ); 151 p->drawRect( x+4, y+5, 4, 2 );
152 } 152 }
153 break; 153 break;
154 } 154 }
155 default: 155 default:
156 QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, data ); 156 QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, data );
157 break; 157 break;
158 } 158 }
159} 159}
160 160
161void QPEStyle::drawControl( ControlElement ce, QPainter *p, 161void QPEStyle::drawControl( ControlElement ce, QPainter *p,
162 const QWidget *widget, const QRect &r, 162 const QWidget *widget, const QRect &r,
163 const QColorGroup &cg, SFlags how, const QStyleOption &data) const 163 const QColorGroup &cg, SFlags how, const QStyleOption &data) const
164{ 164{
165 switch ( ce ) { 165 switch ( ce ) {
166 case CE_PushButton: 166 case CE_PushButton:
167 { 167 {
168 const QPushButton *btn = (QPushButton*)widget; 168 const QPushButton *btn = (QPushButton*)widget;
169 SFlags flags; 169 SFlags flags;
170 flags = Style_Default; 170 flags = Style_Default;
171 if ( btn->isDown() ) 171 if ( btn->isDown() )
172 flags |= Style_Down; 172 flags |= Style_Down;
173 if ( btn->isOn() ) 173 if ( btn->isOn() )
174 flags |= Style_On; 174 flags |= Style_On;
175 if ( btn->isEnabled() ) 175 if ( btn->isEnabled() )
176 flags |= Style_Enabled; 176 flags |= Style_Enabled;
177 if ( btn->isDefault() ) 177 if ( btn->isDefault() )
178 flags |= Style_Default; 178 flags |= Style_Default;
179 if (! btn->isFlat() && !(flags & Style_Down)) 179 if (! btn->isFlat() && !(flags & Style_Down))
180 flags |= Style_Raised; 180 flags |= Style_Raised;
181 p->setPen( cg.foreground() ); 181 p->setPen( cg.foreground() );
182 p->setBrush( QBrush(cg.button(), NoBrush) ); 182 p->setBrush( QBrush(cg.button(), NoBrush) );
183 QColorGroup mycg( cg ); 183 QColorGroup mycg( cg );
184 if ( flags & Style_On ) { 184 if ( flags & Style_On ) {
185 QBrush fill = QBrush( cg.mid(), Dense4Pattern ); 185 QBrush fill = QBrush( cg.mid(), Dense4Pattern );
186 mycg.setBrush( QColorGroup::Button, fill ); 186 mycg.setBrush( QColorGroup::Button, fill );
187 } 187 }
188 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); 188 drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data );
189 break; 189 break;
190 } 190 }
191 case CE_TabBarTab: 191 case CE_TabBarTab:
192 { 192 {
193 if ( !widget || !widget->parentWidget() ) 193 if ( !widget || !widget->parentWidget() )
194 break; 194 break;
195 195
196 const QTabBar *tb = (const QTabBar *) widget; 196 const QTabBar *tb = (const QTabBar *) widget;
197 bool selected = how & Style_Selected; 197 bool selected = how & Style_Selected;
198 198
199 QRect r2(r); 199 QRect r2(r);
200 if ( tb->shape() == QTabBar::RoundedAbove ) { 200 if ( tb->shape() == QTabBar::RoundedAbove ) {
201 p->setPen( cg.light() ); 201 p->setPen( cg.light() );
202 p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); 202 p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() );
203 if ( r2.left() == 0 ) 203 if ( r2.left() == 0 )
204 p->drawPoint( tb->rect().bottomLeft() ); 204 p->drawPoint( tb->rect().bottomLeft() );
205 else { 205 else {
206 p->setPen( cg.light() ); 206 p->setPen( cg.light() );
207 p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); 207 p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() );
208 } 208 }
209 209
210 if ( selected ) { 210 if ( selected ) {
211 p->setPen( cg.background() ); 211 p->setPen( cg.background() );
212 p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); 212 p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 );
213 p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-2), 213 p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-2),
214 cg.brush( QColorGroup::Background )); 214 cg.brush( QColorGroup::Background ));
215 } else { 215 } else {
216 r2.setRect( r2.left() + 2, r2.top() + 2, 216 r2.setRect( r2.left() + 2, r2.top() + 2,
217 r2.width() - 4, r2.height() - 2 ); 217 r2.width() - 4, r2.height() - 2 );
218 p->setPen( cg.button() ); 218 p->setPen( cg.button() );
219 p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); 219 p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 );
220 p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-3), 220 p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-3),
221 cg.brush( QColorGroup::Button )); 221 cg.brush( QColorGroup::Button ));
222 222
223 //do shading; will not work for pixmap brushes 223 //do shading; will not work for pixmap brushes
224 QColor bg = cg.button(); 224 QColor bg = cg.button();
225 // int h,s,v; 225 // int h,s,v;
226 // bg.hsv( &h, &s, &v ); 226 // bg.hsv( &h, &s, &v );
227 int n = r2.height()/2; 227 int n = r2.height()/2;
228 int dark = 100; 228 int dark = 100;
229 for ( int i = 1; i < n; i++ ) { 229 for ( int i = 1; i < n; i++ ) {
230 dark = (dark * (100+(i*15)/n) )/100; 230 dark = (dark * (100+(i*15)/n) )/100;
231 p->setPen( bg.dark( dark ) ); 231 p->setPen( bg.dark( dark ) );
232 int y = r2.bottom()-n+i; 232 int y = r2.bottom()-n+i;
233 int x1 = r2.left()+1; 233 int x1 = r2.left()+1;
234 int x2 = r2.right()-1; 234 int x2 = r2.right()-1;
235 p->drawLine( x1, y, x2, y ); 235 p->drawLine( x1, y, x2, y );
236 } 236 }
237 } 237 }
238 238
239 p->setPen( cg.light() ); 239 p->setPen( cg.light() );
240 p->drawLine( r2.left(), r2.bottom()-1, r2.left(), r2.top() + 2 ); 240 p->drawLine( r2.left(), r2.bottom()-1, r2.left(), r2.top() + 2 );
241 p->drawPoint( r2.left()+1, r2.top() + 1 ); 241 p->drawPoint( r2.left()+1, r2.top() + 1 );
242 p->drawLine( r2.left()+2, r2.top(), 242 p->drawLine( r2.left()+2, r2.top(),
243 r2.right() - 2, r2.top() ); 243 r2.right() - 2, r2.top() );
244 244
245 p->setPen( cg.dark() ); 245 p->setPen( cg.dark() );
246 p->drawPoint( r2.right() - 1, r2.top() + 1 ); 246 p->drawPoint( r2.right() - 1, r2.top() + 1 );
247 p->drawLine( r2.right(), r2.top() + 2, r2.right(), r2.bottom() - 1); 247 p->drawLine( r2.right(), r2.top() + 2, r2.right(), r2.bottom() - 1);
248 } else if ( tb->shape() == QTabBar::RoundedBelow ) { 248 } else if ( tb->shape() == QTabBar::RoundedBelow ) {
249 if ( selected ) { 249 if ( selected ) {
250 p->setPen( cg.background() ); 250 p->setPen( cg.background() );
251 p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); 251 p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 );
252 p->fillRect( QRect( r2.left()+1, r2.top(), r2.width()-2, r2.height()-2), 252 p->fillRect( QRect( r2.left()+1, r2.top(), r2.width()-2, r2.height()-2),
253 tb->palette().normal().brush( QColorGroup::Background )); 253 tb->palette().normal().brush( QColorGroup::Background ));
254 } else { 254 } else {
255 p->setPen( cg.dark() ); 255 p->setPen( cg.dark() );
256 p->drawLine( r2.left(), r2.top(), 256 p->drawLine( r2.left(), r2.top(),
257 r2.right(), r2.top() ); 257 r2.right(), r2.top() );
258 r2.setRect( r2.left() + 2, r2.top(), 258 r2.setRect( r2.left() + 2, r2.top(),
259 r2.width() - 4, r2.height() - 2 ); 259 r2.width() - 4, r2.height() - 2 );
260 p->setPen( cg.button() ); 260 p->setPen( cg.button() );
261 p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); 261 p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 );
262 p->fillRect( QRect( r2.left()+1, r2.top()+1, r2.width()-2, r2.height()-3), 262 p->fillRect( QRect( r2.left()+1, r2.top()+1, r2.width()-2, r2.height()-3),
263 tb->palette().normal().brush( QColorGroup::Button )); 263 tb->palette().normal().brush( QColorGroup::Button ));
264 } 264 }
265 265
266 p->setPen( cg.dark() ); 266 p->setPen( cg.dark() );
267 p->drawLine( r2.right(), r2.top(), 267 p->drawLine( r2.right(), r2.top(),
268 r2.right(), r2.bottom() - 2 ); 268 r2.right(), r2.bottom() - 2 );
269 p->drawPoint( r2.right() - 1, r2.bottom() - 1 ); 269 p->drawPoint( r2.right() - 1, r2.bottom() - 1 );
270 p->drawLine( r2.right() - 2, r2.bottom(), 270 p->drawLine( r2.right() - 2, r2.bottom(),
271 r2.left() + 2, r2.bottom() ); 271 r2.left() + 2, r2.bottom() );
272 272
273 p->setPen( cg.light() ); 273 p->setPen( cg.light() );
274 p->drawLine( r2.left(), r2.top()+1, 274 p->drawLine( r2.left(), r2.top()+1,
275 r2.left(), r2.bottom() - 2 ); 275 r2.left(), r2.bottom() - 2 );
276 p->drawPoint( r2.left() + 1, r2.bottom() - 1 ); 276 p->drawPoint( r2.left() + 1, r2.bottom() - 1 );
277 if ( r2.left() == 0 ) 277 if ( r2.left() == 0 )
278 p->drawPoint( tb->rect().topLeft() ); 278 p->drawPoint( tb->rect().topLeft() );
279 279
280 } else { 280 } else {
281 QCommonStyle::drawControl( ce, p, widget, r, cg, how, data ); 281 QCommonStyle::drawControl( ce, p, widget, r, cg, how, data );
282 } 282 }
283 break; 283 break;
284 } 284 }
285 default: 285 default:
286 QWindowsStyle::drawControl( ce, p, widget, r, cg, how, data ); 286 QWindowsStyle::drawControl( ce, p, widget, r, cg, how, data );
287 break; 287 break;
288 } 288 }
289} 289}
290 290
291void QPEStyle::drawComplexControl( ComplexControl control, QPainter *p, 291void QPEStyle::drawComplexControl( ComplexControl control, QPainter *p,
292 const QWidget *widget, const QRect &r, 292 const QWidget *widget, const QRect &r,
293 const QColorGroup &cg, SFlags how, 293 const QColorGroup &cg, SFlags how,
294 SCFlags sub, SCFlags subActive, const QStyleOption &data) const 294 SCFlags sub, SCFlags subActive, const QStyleOption &data) const
295{ 295{
296 switch ( control ) { 296 switch ( control ) {
297 case CC_ComboBox: 297 case CC_ComboBox:
298 if ( sub & SC_ComboBoxArrow ) { 298 if ( sub & SC_ComboBoxArrow ) {
299 SFlags flags = Style_Default; 299 SFlags flags = Style_Default;
300 300
301 drawPrimitive( PE_ButtonBevel, p, r, cg, flags, data ); 301 drawPrimitive( PE_ButtonBevel, p, r, cg, flags, data );
302 302
303 QRect ar = 303 QRect ar =
304 QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, 304 QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget,
305 SC_ComboBoxArrow ), widget ); 305 SC_ComboBoxArrow ), widget );
306 306
307 if ( subActive == SC_ComboBoxArrow ) { 307 if ( subActive == SC_ComboBoxArrow ) {
308 p->setPen( cg.dark() ); 308 p->setPen( cg.dark() );
309 p->setBrush( cg.brush( QColorGroup::Button ) ); 309 p->setBrush( cg.brush( QColorGroup::Button ) );
310 p->drawRect( ar ); 310 p->drawRect( ar );
311 } 311 }
312 312
313 ar.addCoords( 2, 2, -2, -2 ); 313 ar.addCoords( 2, 2, -2, -2 );
314 if ( widget->isEnabled() ) 314 if ( widget->isEnabled() )
315 flags |= Style_Enabled; 315 flags |= Style_Enabled;
316 316
317 if ( subActive & Style_Sunken ) { 317 if ( subActive & Style_Sunken ) {
318 flags |= Style_Sunken; 318 flags |= Style_Sunken;
319 } 319 }
320 drawPrimitive( PE_ArrowDown, p, ar, cg, flags ); 320 drawPrimitive( PE_ArrowDown, p, ar, cg, flags );
321 } 321 }
322 322
323 if ( sub & SC_ComboBoxEditField ) { 323 if ( sub & SC_ComboBoxEditField ) {
324 const QComboBox * cb = (const QComboBox *) widget; 324 const QComboBox * cb = (const QComboBox *) widget;
325 QRect re = 325 QRect re =
326 QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, 326 QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget,
327 SC_ComboBoxEditField ), widget ); 327 SC_ComboBoxEditField ), widget );
328 if ( cb->hasFocus() && !cb->editable() ) 328 if ( cb->hasFocus() && !cb->editable() )
329 p->fillRect( re.x(), re.y(), re.width(), re.height(), 329 p->fillRect( re.x(), re.y(), re.width(), re.height(),
330 cg.brush( QColorGroup::Highlight ) ); 330 cg.brush( QColorGroup::Highlight ) );
331 331
332 if ( cb->hasFocus() ) { 332 if ( cb->hasFocus() ) {
333 p->setPen( cg.highlightedText() ); 333 p->setPen( cg.highlightedText() );
334 p->setBackgroundColor( cg.highlight() ); 334 p->setBackgroundColor( cg.highlight() );
335 335
336 } else { 336 } else {
337 p->setPen( cg.text() ); 337 p->setPen( cg.text() );
338 p->setBackgroundColor( cg.background() ); 338 p->setBackgroundColor( cg.background() );
339 } 339 }
340 340
341 if ( cb->hasFocus() && !cb->editable() ) { 341 if ( cb->hasFocus() && !cb->editable() ) {
342 QRect re = 342 QRect re =
343 QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cb ), widget ); 343 QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cb ), widget );
344 drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight())); 344 drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight()));
345 } 345 }
346 } 346 }
347 break; 347 break;
348 default: 348 default:
349 QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how, 349 QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how,
350 sub, subActive, data ); 350 sub, subActive, data );
351 break; 351 break;
352 } 352 }
353} 353}
354 354
355int QPEStyle::pixelMetric( PixelMetric metric, const QWidget *widget ) const 355int QPEStyle::pixelMetric( PixelMetric metric, const QWidget *widget ) const
356{ 356{
357 int ret; 357 int ret;
358 switch( metric ) { 358 switch( metric ) {
359 case PM_ButtonMargin: 359 case PM_ButtonMargin:
360 ret = 2; 360 ret = 2;
361 break; 361 break;
362 case PM_DefaultFrameWidth: 362 case PM_DefaultFrameWidth:
363 ret = 1; 363 ret = 1;
364 break; 364 break;
365 case PM_ButtonDefaultIndicator: 365 case PM_ButtonDefaultIndicator:
366 ret = 2; 366 ret = 2;
367 break; 367 break;
368 case PM_ButtonShiftHorizontal: 368 case PM_ButtonShiftHorizontal:
369 case PM_ButtonShiftVertical: 369 case PM_ButtonShiftVertical:
370 ret = -1; 370 ret = -1;
371 break; 371 break;
372 case PM_IndicatorWidth: 372 case PM_IndicatorWidth:
373 ret = 15; 373 ret = 15;
374 break; 374 break;
375 case PM_IndicatorHeight: 375 case PM_IndicatorHeight:
376 ret = 13; 376 ret = 13;
377 break; 377 break;
378 case PM_ExclusiveIndicatorHeight: 378 case PM_ExclusiveIndicatorHeight:
379 case PM_ExclusiveIndicatorWidth: 379 case PM_ExclusiveIndicatorWidth:
380 ret = 15; 380 ret = 15;
381 break; 381 break;
382 case PM_ScrollBarExtent: 382 case PM_ScrollBarExtent:
383 ret = 13; 383 ret = 13;
384 break; 384 break;
385 case PM_SliderLength: 385 case PM_SliderLength:
386 ret = 12; 386 ret = 12;
387 break; 387 break;
388 default: 388 default:
389 ret = QWindowsStyle::pixelMetric( metric, widget ); 389 ret = QWindowsStyle::pixelMetric( metric, widget );
390 break; 390 break;
391 } 391 }
392 return ret; 392 return ret;
393} 393}
394 394
395QSize QPEStyle::sizeFromContents( ContentsType contents, const QWidget *widget, 395QSize QPEStyle::sizeFromContents( ContentsType contents, const QWidget *widget,
396 const QSize &contentsSize, const QStyleOption &data) const 396 const QSize &contentsSize, const QStyleOption &data) const
397{ 397{
398 QSize sz(contentsSize); 398 QSize sz(contentsSize);
399 399
400 switch ( contents ) { 400 switch ( contents ) {
401 case CT_PopupMenuItem: 401 case CT_PopupMenuItem:
402 { 402 {
403 if ( !widget || data.isDefault() ) 403 if ( !widget || data.isDefault() )
404 break; 404 break;
405 sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); 405 sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data );
406 sz = QSize( sz.width(), sz.height()-2 ); 406 sz = QSize( sz.width(), sz.height()-2 );
407 break; 407 break;
408 } 408 }
409 default: 409 default:
410 sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); 410 sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data );
411 break; 411 break;
412 } 412 }
413 413
414 return sz; 414 return sz;
415} 415}
416 416
417#else 417#else
418 418
419#include <qfontmetrics.h> 419#include <qfontmetrics.h>
420#include <qpalette.h> 420#include <qpalette.h>
421#include <qdrawutil.h> 421#include <qdrawutil.h>
422#include <qscrollbar.h> 422#include <qscrollbar.h>
423#include <qbutton.h> 423#include <qbutton.h>
424#include <qframe.h> 424#include <qframe.h>
425#include <qtabbar.h> 425#include <qtabbar.h>
426 426
427#define INCLUDE_MENUITEM_DEF 427#define INCLUDE_MENUITEM_DEF
428#include <qmenudata.h> 428#include <qmenudata.h>
429 429
430QPEStyle::QPEStyle() 430QPEStyle::QPEStyle()
431{ 431{
432#if QT_VERSION < 0x030000 432#if QT_VERSION < 0x030000
433 setButtonMargin(buttonMargin()); 433 setButtonMargin(buttonMargin());
434 setScrollBarExtent(scrollBarExtent().width(),scrollBarExtent().height()); 434 setScrollBarExtent(scrollBarExtent().width(),scrollBarExtent().height());
435#endif 435#endif
436} 436}
437 437
438QPEStyle::~QPEStyle() 438QPEStyle::~QPEStyle()
439{ 439{
440} 440}
441 441
442int QPEStyle::buttonMargin() const 442int QPEStyle::buttonMargin() const
443{ 443{
444 return 2; 444 return 2;
445} 445}
446 446
447QSize QPEStyle::scrollBarExtent() const 447QSize QPEStyle::scrollBarExtent() const
448{ 448{
449 return QSize(13,13); 449 return QSize(13,13);
450} 450}
451 451
452void QPEStyle::polish ( QPalette & ) 452void QPEStyle::polish ( QPalette & )
453{ 453{
454} 454}
455 455
456void QPEStyle::polish( QWidget *w ) 456void QPEStyle::polish( QWidget *w )
457{ 457{
458 if ( w->inherits( "QListBox" ) || 458 if ( w->inherits( "QListBox" ) ||
459 w->inherits( "QListView" ) || 459 w->inherits( "QListView" ) ||
460 w->inherits( "QPopupMenu" ) || 460 w->inherits( "QPopupMenu" ) ||
461 w->inherits( "QSpinBox" ) ) { 461 w->inherits( "QSpinBox" ) ) {
462 QFrame *f = (QFrame *)w; 462 QFrame *f = (QFrame *)w;
463 f->setFrameShape( QFrame::StyledPanel ); 463 f->setFrameShape( QFrame::StyledPanel );
464 f->setLineWidth( 1 ); 464 f->setLineWidth( 1 );
465 } 465 }
466} 466}
467 467
468void QPEStyle::unPolish( QWidget *w ) 468void QPEStyle::unPolish( QWidget *w )
469{ 469{
470 if ( w->inherits( "QListBox" ) || 470 if ( w->inherits( "QListBox" ) ||
471 w->inherits( "QListView" ) || 471 w->inherits( "QListView" ) ||
472 w->inherits( "QPopupMenu" ) || 472 w->inherits( "QPopupMenu" ) ||
473 w->inherits( "QSpinBox" ) ) { 473 w->inherits( "QSpinBox" ) ) {
474 QFrame *f = (QFrame *)w; 474 QFrame *f = (QFrame *)w;
475 f->setFrameShape( QFrame::StyledPanel ); 475 f->setFrameShape( QFrame::StyledPanel );
476 f->setLineWidth( 2 ); 476 f->setLineWidth( 2 );
477 } 477 }
478} 478}
479 479
480int QPEStyle::defaultFrameWidth() const 480int QPEStyle::defaultFrameWidth() const
481{ 481{
482 return 1; 482 return 1;
483} 483}
484 484
485void QPEStyle::drawPanel ( QPainter * p, int x, int y, int w, int h, 485void QPEStyle::drawPanel ( QPainter * p, int x, int y, int w, int h,
486 const QColorGroup &g, bool sunken, int lineWidth, const QBrush * fill ) 486 const QColorGroup &g, bool sunken, int lineWidth, const QBrush * fill )
487{ 487{
488 qDrawShadePanel( p, QRect(x, y, w, h), g, sunken, lineWidth, fill ); 488 qDrawShadePanel( p, QRect(x, y, w, h), g, sunken, lineWidth, fill );
489} 489}
490 490
491void QPEStyle::drawButton( QPainter *p, int x, int y, int w, int h, 491void QPEStyle::drawButton( QPainter *p, int x, int y, int w, int h,
492 const QColorGroup &g, bool sunken, const QBrush* fill ) 492 const QColorGroup &g, bool sunken, const QBrush* fill )
493{ 493{
494 QPen oldPen = p->pen(); 494 QPen oldPen = p->pen();
495 if ( sunken ) 495 if ( sunken )
496 p->setPen( g.dark() ); 496 p->setPen( g.dark() );
497 else 497 else
498 p->setPen( g.light() ); 498 p->setPen( g.light() );
499 499
500 int x2 = x+w-1; 500 int x2 = x+w-1;
501 int y2 = y+h-1; 501 int y2 = y+h-1;
502 502
503 p->drawLine( x, y, x, y2 ); 503 p->drawLine( x, y, x, y2 );
504 p->drawLine( x, y, x2, y ); 504 p->drawLine( x, y, x2, y );
505 505
506 if ( sunken ) 506 if ( sunken )
507 p->setPen( g.light() ); 507 p->setPen( g.light() );
508 else 508 else
509 p->setPen( g.dark() ); 509 p->setPen( g.dark() );
510 510
511 p->drawLine( x2, y, x2, y2 ); 511 p->drawLine( x2, y, x2, y2 );
512 p->drawLine( x, y2, x2, y2 ); 512 p->drawLine( x, y2, x2, y2 );
513 p->setPen( oldPen ); 513 p->setPen( oldPen );
514 514
515 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) ); 515 p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) );
516} 516}
517 517
518void QPEStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h ) 518void QPEStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h )
519{ 519{
520 p->fillRect( x, y, w, h, color1 ); 520 p->fillRect( x, y, w, h, color1 );
521} 521}
522 522
523void QPEStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, 523void QPEStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h,
524 const QColorGroup &g, bool sunken, const QBrush* fill ) 524 const QColorGroup &g, bool sunken, const QBrush* fill )
525{ 525{
526 drawButton( p, x, y, w, h, g, sunken, fill ); 526 drawButton( p, x, y, w, h, g, sunken, fill );
527} 527}
528 528
529QRect QPEStyle::comboButtonRect( int x, int y, int w, int h) 529QRect QPEStyle::comboButtonRect( int x, int y, int w, int h)
530{ 530{
531 return QRect(x+1, y+1, w-2-14, h-2); 531 return QRect(x+1, y+1, w-2-14, h-2);
532} 532}
533 533
534 534
535QRect QPEStyle::comboButtonFocusRect( int x, int y, int w, int h) 535QRect QPEStyle::comboButtonFocusRect( int x, int y, int w, int h)
536{ 536{
537 return QRect(x+2, y+2, w-4-14, h-4); 537 return QRect(x+2, y+2, w-4-14, h-4);
538} 538}
539 539
540void QPEStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, 540void QPEStyle::drawComboButton( QPainter *p, int x, int y, int w, int h,
541 const QColorGroup &g, bool sunken, 541 const QColorGroup &g, bool sunken,
542 bool /*editable*/, 542 bool /*editable*/,
543 bool enabled, 543 bool enabled,
544 const QBrush *fill ) 544 const QBrush *fill )
545{ 545{
546 drawBevelButton( p, x, y, w, h, g, FALSE, fill ); 546 drawBevelButton( p, x, y, w, h, g, FALSE, fill );
547 drawBevelButton( p, x+w-14, y, 14, h, g, sunken, fill ); 547 drawBevelButton( p, x+w-14, y, 14, h, g, sunken, fill );
548 drawArrow( p, QStyle::DownArrow, sunken, 548 drawArrow( p, QStyle::DownArrow, sunken,
549 x+w-14+ 2, y+ 2, 14- 4, h- 4, g, enabled, 549 x+w-14+ 2, y+ 2, 14- 4, h- 4, g, enabled,
550 &g.brush( QColorGroup::Button ) ); 550 &g.brush( QColorGroup::Button ) );
551 551
552} 552}
553 553
554 554
555void QPEStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w, 555void QPEStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w,
556 int h, const QColorGroup & g, bool on, bool down, bool enabled ) 556 int h, const QColorGroup & g, bool on, bool down, bool enabled )
557{ 557{
558 static const QCOORD pts1[] = { // dark lines 558 static const QCOORD pts1[] = { // dark lines
559 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; 559 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 };
560 static const QCOORD pts4[] = { // white lines 560 static const QCOORD pts4[] = { // white lines
561 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, 561 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7,
562 11,4, 10,3, 10,2 }; 562 11,4, 10,3, 10,2 };
563 static const QCOORD pts5[] = { // inner fill 563 static const QCOORD pts5[] = { // inner fill
564 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; 564 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 };
565 565
566 p->eraseRect( x, y, w, h ); 566 p->eraseRect( x, y, w, h );
567 QPointArray a( QCOORDARRLEN(pts1), pts1 ); 567 QPointArray a( QCOORDARRLEN(pts1), pts1 );
568 a.translate( x, y ); 568 a.translate( x, y );
569 p->setPen( g.dark() ); 569 p->setPen( g.dark() );
570 p->drawPolyline( a ); 570 p->drawPolyline( a );
571 a.setPoints( QCOORDARRLEN(pts4), pts4 ); 571 a.setPoints( QCOORDARRLEN(pts4), pts4 );
572 a.translate( x, y ); 572 a.translate( x, y );
573 p->setPen( g.light() ); 573 p->setPen( g.light() );
574 p->drawPolyline( a ); 574 p->drawPolyline( a );
575 a.setPoints( QCOORDARRLEN(pts5), pts5 ); 575 a.setPoints( QCOORDARRLEN(pts5), pts5 );
576 a.translate( x, y ); 576 a.translate( x, y );
577 QColor fillColor = ( down || !enabled ) ? g.button() : g.base(); 577 QColor fillColor = ( down || !enabled ) ? g.button() : g.base();
578 p->setPen( fillColor ); 578 p->setPen( fillColor );
579 p->setBrush( fillColor ) ; 579 p->setBrush( fillColor ) ;
580 p->drawPolygon( a ); 580 p->drawPolygon( a );
581 if ( on ) { 581 if ( on ) {
582 p->setPen( NoPen ); 582 p->setPen( NoPen );
583 p->setBrush( g.text() ); 583 p->setBrush( g.text() );
584 p->drawRect( x+5, y+4, 2, 4 ); 584 p->drawRect( x+5, y+4, 2, 4 );
585 p->drawRect( x+4, y+5, 4, 2 ); 585 p->drawRect( x+4, y+5, 4, 2 );
586 } 586 }
587} 587}
588 588
589void QPEStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h, 589void QPEStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h,
590 const QColorGroup & g, int state, bool down, bool enabled ) 590 const QColorGroup & g, int state, bool down, bool enabled )
591{ 591{
592 592
593 QBrush fill; 593 QBrush fill;
594 if ( state == QButton::NoChange ) { 594 if ( state == QButton::NoChange ) {
595 QBrush b = p->brush(); 595 QBrush b = p->brush();
596 QColor c = p->backgroundColor(); 596 QColor c = p->backgroundColor();
597 p->setBackgroundMode( TransparentMode ); 597 p->setBackgroundMode( TransparentMode );
598 p->setBackgroundColor( green ); 598 p->setBackgroundColor( green );
599 fill = QBrush(g.base(), Dense4Pattern); 599 fill = QBrush(g.base(), Dense4Pattern);
600 p->setBackgroundColor( c ); 600 p->setBackgroundColor( c );
601 p->setBrush( b ); 601 p->setBrush( b );
602 } else if ( down ) 602 } else if ( down )
603 fill = g.brush( QColorGroup::Button ); 603 fill = g.brush( QColorGroup::Button );
604 else 604 else
605 fill = g.brush( enabled ? QColorGroup::Base : QColorGroup::Background ); 605 fill = g.brush( enabled ? QColorGroup::Base : QColorGroup::Background );
606 drawPanel( p, x, y, w, h, g, TRUE, 1, &fill ); 606 drawPanel( p, x, y, w, h, g, TRUE, 1, &fill );
607 if ( state != QButton::Off ) { 607 if ( state != QButton::Off ) {
608 QPointArray a( 7*2 ); 608 QPointArray a( 7*2 );
609 int i, xx, yy; 609 int i, xx, yy;
610 xx = x+3; 610 xx = x+3;
611 yy = y+5; 611 yy = y+5;
612 for ( i=0; i<3; i++ ) { 612 for ( i=0; i<3; i++ ) {
613 a.setPoint( 2*i, xx, yy ); 613 a.setPoint( 2*i, xx, yy );
614 a.setPoint( 2*i+1, xx, yy+2 ); 614 a.setPoint( 2*i+1, xx, yy+2 );
615 xx++; yy++; 615 xx++; yy++;
616 } 616 }
617 yy -= 2; 617 yy -= 2;
618 for ( i=3; i<7; i++ ) { 618 for ( i=3; i<7; i++ ) {
619 a.setPoint( 2*i, xx, yy ); 619 a.setPoint( 2*i, xx, yy );
620 a.setPoint( 2*i+1, xx, yy+2 ); 620 a.setPoint( 2*i+1, xx, yy+2 );
621 xx++; yy--; 621 xx++; yy--;
622 } 622 }
623 if ( state == QButton::NoChange ) { 623 if ( state == QButton::NoChange ) {
624 p->setPen( g.dark() ); 624 p->setPen( g.dark() );
625 } else { 625 } else {
626 p->setPen( g.text() ); 626 p->setPen( g.text() );
627 } 627 }
628 p->drawLineSegments( a ); 628 p->drawLineSegments( a );
629 } 629 }
630} 630}
631 631
632 #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal) 632 #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal)
633 #define VERTICAL!HORIZONTAL 633 #define VERTICAL!HORIZONTAL
634 #define MOTIF_BORDER2 634 #define MOTIF_BORDER2
635 #define SLIDER_MIN9 // ### motif says 6 but that's too small 635 #define SLIDER_MIN9 // ### motif says 6 but that's too small
636 636
637/*! \reimp */ 637/*! \reimp */
638 638
639void QPEStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim ) 639void QPEStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim )
640{ 640{
641 int maxLength; 641 int maxLength;
642 int length = HORIZONTAL ? sb->width() : sb->height(); 642 int length = HORIZONTAL ? sb->width() : sb->height();
643 int extent = HORIZONTAL ? sb->height() : sb->width(); 643 int extent = HORIZONTAL ? sb->height() : sb->width();
644 644
645 if ( length > (extent - 1)*2 ) 645 if ( length > (extent - 1)*2 )
646 buttonDim = extent; 646 buttonDim = extent;
647 else 647 else
648 buttonDim = length/2 - 1; 648 buttonDim = length/2 - 1;
649 649
650 sliderMin = 0; 650 sliderMin = 0;
651 maxLength = length - buttonDim*2; 651 maxLength = length - buttonDim*2;
652 652
653 if ( sb->maxValue() == sb->minValue() ) { 653 if ( sb->maxValue() == sb->minValue() ) {
654 sliderLength = maxLength; 654 sliderLength = maxLength;
655 } else { 655 } else {
656 sliderLength = (sb->pageStep()*maxLength)/ 656 sliderLength = (sb->pageStep()*maxLength)/
657 (sb->maxValue()-sb->minValue()+sb->pageStep()); 657 (sb->maxValue()-sb->minValue()+sb->pageStep());
658 uint range = sb->maxValue()-sb->minValue(); 658 uint range = sb->maxValue()-sb->minValue();
659 if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 ) 659 if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 )
660 sliderLength = SLIDER_MIN; 660 sliderLength = SLIDER_MIN;
661 if ( sliderLength > maxLength ) 661 if ( sliderLength > maxLength )
662 sliderLength = maxLength; 662 sliderLength = maxLength;
663 } 663 }
664 664
665 sliderMax = sliderMin + maxLength - sliderLength; 665 sliderMax = sliderMin + maxLength - sliderLength;
666} 666}
667 667
668/*!\reimp 668/*!\reimp
669 */ 669 */
670QStyle::ScrollControl QPEStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ) 670QStyle::ScrollControl QPEStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p )
671{ 671{
672 if ( !sb->rect().contains( p ) ) 672 if ( !sb->rect().contains( p ) )
673 return NoScroll; 673 return NoScroll;
674 int sliderMin, sliderMax, sliderLength, buttonDim, pos; 674 int sliderMin, sliderMax, sliderLength, buttonDim, pos;
675 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); 675 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
676 676
677 if (sb->orientation() == QScrollBar::Horizontal) 677 if (sb->orientation() == QScrollBar::Horizontal)
678 pos = p.x(); 678 pos = p.x();
679 else 679 else
680 pos = p.y(); 680 pos = p.y();
681 681
682 if (pos < sliderStart) 682 if (pos < sliderStart)
683 return SubPage; 683 return SubPage;
684 if (pos < sliderStart + sliderLength) 684 if (pos < sliderStart + sliderLength)
685 return Slider; 685 return Slider;
686 if (pos < sliderMax + sliderLength) 686 if (pos < sliderMax + sliderLength)
687 return AddPage; 687 return AddPage;
688 if (pos < sliderMax + sliderLength + buttonDim) 688 if (pos < sliderMax + sliderLength + buttonDim)
689 return SubLine; 689 return SubLine;
690 return AddLine; 690 return AddLine;
691} 691}
692 692
693/*! \reimp */ 693/*! \reimp */
694 694
695void QPEStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) 695void QPEStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl )
696{ 696{
697#define ADD_LINE_ACTIVE ( activeControl == AddLine ) 697#define ADD_LINE_ACTIVE ( activeControl == AddLine )
698#define SUB_LINE_ACTIVE ( activeControl == SubLine ) 698#define SUB_LINE_ACTIVE ( activeControl == SubLine )
699 QColorGroup g = sb->colorGroup(); 699 QColorGroup g = sb->colorGroup();
700 700
701 int sliderMin, sliderMax, sliderLength, buttonDim; 701 int sliderMin, sliderMax, sliderLength, buttonDim;
702 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); 702 scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
703 703
704 if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) 704 if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) )
705 p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid )); 705 p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid ));
706 706
707 if (sliderStart > sliderMax) { // sanity check 707 if (sliderStart > sliderMax) { // sanity check
708 sliderStart = sliderMax; 708 sliderStart = sliderMax;
709 } 709 }
710 710
711 int dimB = buttonDim; 711 int dimB = buttonDim;
712 QRect addB; 712 QRect addB;
713 QRect subB; 713 QRect subB;
714 QRect addPageR; 714 QRect addPageR;
715 QRect subPageR; 715 QRect subPageR;
716 QRect sliderR; 716 QRect sliderR;
717 int addX, addY, subX, subY; 717 int addX, addY, subX, subY;
718 int length = HORIZONTAL ? sb->width() : sb->height(); 718 int length = HORIZONTAL ? sb->width() : sb->height();
719 int extent = HORIZONTAL ? sb->height() : sb->width(); 719 int extent = HORIZONTAL ? sb->height() : sb->width();
720 720
721 if ( HORIZONTAL ) { 721 if ( HORIZONTAL ) {
722 subY = addY = ( extent - dimB ) / 2; 722 subY = addY = ( extent - dimB ) / 2;
723 subX = length - dimB - dimB; 723 subX = length - dimB - dimB;
724 addX = length - dimB; 724 addX = length - dimB;
725 } else { 725 } else {
726 subX = addX = ( extent - dimB ) / 2; 726 subX = addX = ( extent - dimB ) / 2;
727 subY = length - dimB - dimB; 727 subY = length - dimB - dimB;
728 addY = length - dimB; 728 addY = length - dimB;
729 } 729 }
730 730
731 int sliderEnd = sliderStart + sliderLength; 731 int sliderEnd = sliderStart + sliderLength;
732 int sliderW = extent; 732 int sliderW = extent;
733 if ( HORIZONTAL ) { 733 if ( HORIZONTAL ) {
734 subB.setRect( subX,subY+1,dimB,dimB-1 ); 734 subB.setRect( subX,subY+1,dimB,dimB-1 );
735 addB.setRect( addX,addY+1,dimB,dimB-1 ); 735 addB.setRect( addX,addY+1,dimB,dimB-1 );
736 736
737 subPageR.setRect( 0, 0, 737 subPageR.setRect( 0, 0,
738 sliderStart+1, sliderW ); 738 sliderStart+1, sliderW );
739 addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW ); 739 addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW );
740 sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 ); 740 sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 );
741 741
742 } else { 742 } else {
743 subB.setRect( subX+1,subY,dimB-1,dimB ); 743 subB.setRect( subX+1,subY,dimB-1,dimB );
744 addB.setRect( addX+1,addY,dimB-1,dimB ); 744 addB.setRect( addX+1,addY,dimB-1,dimB );
745 745
746 subPageR.setRect( 0, 0, sliderW, 746 subPageR.setRect( 0, 0, sliderW,
747 sliderStart+1 ); 747 sliderStart+1 );
748 addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 ); 748 addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 );
749 sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength ); 749 sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength );
750 } 750 }
751 751
752 bool maxedOut = (sb->maxValue() == sb->minValue()); 752 bool maxedOut = (sb->maxValue() == sb->minValue());
753 if ( controls & AddLine ) { 753 if ( controls & AddLine ) {
754 drawBevelButton( p, addB.x(), addB.y(), 754 drawBevelButton( p, addB.x(), addB.y(),
755 addB.width(), addB.height(), g, 755 addB.width(), addB.height(), g,
756 ADD_LINE_ACTIVE); 756 ADD_LINE_ACTIVE);
757 p->setPen(g.shadow()); 757 p->setPen(g.shadow());
758 drawArrow( p, VERTICAL ? DownArrow : RightArrow, 758 drawArrow( p, VERTICAL ? DownArrow : RightArrow,
759 FALSE, addB.x()+2, addB.y()+2, 759 FALSE, addB.x()+2, addB.y()+2,
760 addB.width()-4, addB.height()-4, g, !maxedOut, 760 addB.width()-4, addB.height()-4, g, !maxedOut,
761 &g.brush( QColorGroup::Button )); 761 &g.brush( QColorGroup::Button ));
762 } 762 }
763 if ( controls & SubLine ) { 763 if ( controls & SubLine ) {
764 drawBevelButton( p, subB.x(), subB.y(), 764 drawBevelButton( p, subB.x(), subB.y(),
765 subB.width(), subB.height(), g, 765 subB.width(), subB.height(), g,
766 SUB_LINE_ACTIVE ); 766 SUB_LINE_ACTIVE );
767 p->setPen(g.shadow()); 767 p->setPen(g.shadow());
768 drawArrow( p, VERTICAL ? UpArrow : LeftArrow, 768 drawArrow( p, VERTICAL ? UpArrow : LeftArrow,
769 FALSE, subB.x()+2, subB.y()+2, 769 FALSE, subB.x()+2, subB.y()+2,
770 subB.width()-4, subB.height()-4, g, !maxedOut, 770 subB.width()-4, subB.height()-4, g, !maxedOut,
771 &g.brush( QColorGroup::Button )); 771 &g.brush( QColorGroup::Button ));
772 } 772 }
773 773
774 774
775 if ( controls & SubPage ) 775 if ( controls & SubPage )
776 p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(), 776 p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(),
777 subPageR.height(), g.brush( QColorGroup::Mid )); 777 subPageR.height(), g.brush( QColorGroup::Mid ));
778 if ( controls & AddPage ) 778 if ( controls & AddPage )
779 p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(), 779 p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(),
780 addPageR.height(), g.brush( QColorGroup::Mid )); 780 addPageR.height(), g.brush( QColorGroup::Mid ));
781 if ( controls & Slider ) { 781 if ( controls & Slider ) {
782 QPoint bo = p->brushOrigin(); 782 QPoint bo = p->brushOrigin();
783 p->setBrushOrigin(sliderR.topLeft()); 783 p->setBrushOrigin(sliderR.topLeft());
784 drawBevelButton( p, sliderR.x(), sliderR.y(), 784 drawBevelButton( p, sliderR.x(), sliderR.y(),
785 sliderR.width(), sliderR.height(), g, 785 sliderR.width(), sliderR.height(), g,
786 FALSE, &g.brush( QColorGroup::Button ) ); 786 FALSE, &g.brush( QColorGroup::Button ) );
787 p->setBrushOrigin(bo); 787 p->setBrushOrigin(bo);
788 drawRiffles( p, sliderR.x(), sliderR.y(), 788 drawRiffles( p, sliderR.x(), sliderR.y(),
789 sliderR.width(), sliderR.height(), g, HORIZONTAL ); 789 sliderR.width(), sliderR.height(), g, HORIZONTAL );
790 } 790 }
791 791
792 // ### perhaps this should not be able to accept focus if maxedOut? 792 // ### perhaps this should not be able to accept focus if maxedOut?
793 if ( sb->hasFocus() && (controls & Slider) ) 793 if ( sb->hasFocus() && (controls & Slider) )
794 p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2, 794 p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2,
795 sliderR.width()-5, sliderR.height()-5, 795 sliderR.width()-5, sliderR.height()-5,
796 sb->backgroundColor() ); 796 sb->backgroundColor() );
797 797
798} 798}
799 799
800void QPEStyle::drawRiffles( QPainter* p, int x, int y, int w, int h, 800void QPEStyle::drawRiffles( QPainter* p, int x, int y, int w, int h,
801 const QColorGroup &g, bool horizontal ) 801 const QColorGroup &g, bool horizontal )
802{ 802{
803 if (!horizontal) { 803 if (!horizontal) {
804 if (h > 20) { 804 if (h > 20) {
805 y += (h-20)/2 ; 805 y += (h-20)/2 ;
806 h = 20; 806 h = 20;
807 } 807 }
808 if (h > 12) { 808 if (h > 12) {
809 int n = 3; 809 int n = 3;
810 int my = y+h/2-4; 810 int my = y+h/2-4;
811 int i ; 811 int i ;
812 p->setPen(g.light()); 812 p->setPen(g.light());
813 for (i=0; i<n; i++) { 813 for (i=0; i<n; i++) {
814 p->drawLine(x+2, my+3*i, x+w-4, my+3*i); 814 p->drawLine(x+2, my+3*i, x+w-4, my+3*i);
815 } 815 }
816 p->setPen(g.dark()); 816 p->setPen(g.dark());
817 my++; 817 my++;
818 for (i=0; i<n; i++) { 818 for (i=0; i<n; i++) {
819 p->drawLine(x+2, my+3*i, x+w-4, my+3*i); 819 p->drawLine(x+2, my+3*i, x+w-4, my+3*i);
820 } 820 }
821 } 821 }
822 } 822 }
823 else { 823 else {
824 if (w > 20) { 824 if (w > 20) {
825 x += (w-20)/2 ; 825 x += (w-20)/2 ;
826 w = 20; 826 w = 20;
827 } 827 }
828 if (w > 12) { 828 if (w > 12) {
829 int n = 3; 829 int n = 3;
830 int mx = x+w/2-4; 830 int mx = x+w/2-4;
831 int i ; 831 int i ;
832 p->setPen(g.light()); 832 p->setPen(g.light());
833 for (i=0; i<n; i++) { 833 for (i=0; i<n; i++) {
834 p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4); 834 p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4);
835 } 835 }
836 p->setPen(g.dark()); 836 p->setPen(g.dark());
837 mx++; 837 mx++;
838 for (i=0; i<n; i++) { 838 for (i=0; i<n; i++) {
839 p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4); 839 p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4);
840 } 840 }
841 } 841 }
842 } 842 }
843} 843}
844 844
845int QPEStyle::sliderLength() const 845int QPEStyle::sliderLength() const
846{ 846{
847 return 12; 847 return 12;
848} 848}
849 849
850void QPEStyle::drawSlider( QPainter *p, int x, int y, int w, int h, 850void QPEStyle::drawSlider( QPainter *p, int x, int y, int w, int h,
851 const QColorGroup &g, Orientation o, bool tickAbove, bool tickBelow ) 851 const QColorGroup &g, Orientation o, bool tickAbove, bool tickBelow )
852{ 852{
853 int a = tickAbove ? 3 : 0; 853 int a = tickAbove ? 3 : 0;
854 int b = tickBelow ? 3 : 0; 854 int b = tickBelow ? 3 : 0;
855 855
856 if ( o == Horizontal ) { 856 if ( o == Horizontal ) {
857 drawBevelButton( p, x, y+a, w, h-a-b, g, FALSE, &g.brush( QColorGroup::Button ) ); 857 drawBevelButton( p, x, y+a, w, h-a-b, g, FALSE, &g.brush( QColorGroup::Button ) );
858 int xp = x + w/2; 858 int xp = x + w/2;
859 qDrawShadeLine( p, xp, y+a+2, xp, y+h-b-3, g ); 859 qDrawShadeLine( p, xp, y+a+2, xp, y+h-b-3, g );
860 } else { 860 } else {
861 drawBevelButton( p, x+a, y, w-a-b, h, g, FALSE, &g.brush( QColorGroup::Button ) ); 861 drawBevelButton( p, x+a, y, w-a-b, h, g, FALSE, &g.brush( QColorGroup::Button ) );
862 int yp = y + h/2; 862 int yp = y + h/2;
863 qDrawShadeLine( p, x+a+2, yp, x+w-b-3, yp, g ); 863 qDrawShadeLine( p, x+a+2, yp, x+w-b-3, yp, g );
864 } 864 }
865} 865}
866 866
867void QPEStyle::drawSliderMask ( QPainter * p, int x, int y, int w, int h, 867void QPEStyle::drawSliderMask ( QPainter * p, int x, int y, int w, int h,
868 Orientation o, bool tickAbove, bool tickBelow ) 868 Orientation o, bool tickAbove, bool tickBelow )
869{ 869{
870 int a = tickAbove ? 3 : 0; 870 int a = tickAbove ? 3 : 0;
871 int b = tickBelow ? 3 : 0; 871 int b = tickBelow ? 3 : 0;
872 if ( o == Horizontal ) 872 if ( o == Horizontal )
873 p->fillRect( x, y+a, w, h-a-b, color1 ); 873 p->fillRect( x, y+a, w, h-a-b, color1 );
874 else 874 else
875 p->fillRect( x+a, y, w-a-b, h, color1 ); 875 p->fillRect( x+a, y, w-a-b, h, color1 );
876} 876}
877 877
878/*!\reimp 878/*!\reimp
879 */ 879 */
880void QPEStyle::drawSliderGrooveMask( QPainter *p, 880void QPEStyle::drawSliderGrooveMask( QPainter *p,
881 int x, int y, int w, int h, 881 int x, int y, int w, int h,
882 const QColorGroup& , QCOORD c, 882 const QColorGroup& , QCOORD c,
883 Orientation orient ) 883 Orientation orient )
884{ 884{
885 if ( orient == Horizontal ) 885 if ( orient == Horizontal )
886 p->fillRect( x, y + c - 2, w, 4, color1 ); 886 p->fillRect( x, y + c - 2, w, 4, color1 );
887 else 887 else
888 p->fillRect( x + c - 2, y, 4, h, color1 ); 888 p->fillRect( x + c - 2, y, 4, h, color1 );
889} 889}
890 890
891void QPEStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected ) 891void QPEStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected )
892{ 892{
893 QRect r( t->rect() ); 893 QRect r( t->rect() );
894 if ( tb->shape() == QTabBar::RoundedAbove ) { 894 if ( tb->shape() == QTabBar::RoundedAbove ) {
895 p->setPen( tb->colorGroup().light() ); 895 p->setPen( tb->colorGroup().light() );
896 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 896 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
897 if ( r.left() == 0 ) 897 if ( r.left() == 0 )
898 p->drawPoint( tb->rect().bottomLeft() ); 898 p->drawPoint( tb->rect().bottomLeft() );
899 else { 899 else {
900 p->setPen( tb->colorGroup().light() ); 900 p->setPen( tb->colorGroup().light() );
901 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); 901 p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
902 } 902 }
903 903
904 if ( selected ) { 904 if ( selected ) {
905 p->setPen( tb->colorGroup().background() ); 905 p->setPen( tb->colorGroup().background() );
906 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 906 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
907 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2), 907 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2),
908 tb->colorGroup().brush( QColorGroup::Background )); 908 tb->colorGroup().brush( QColorGroup::Background ));
909 } else { 909 } else {
910 r.setRect( r.left() + 2, r.top() + 2, 910 r.setRect( r.left() + 2, r.top() + 2,
911 r.width() - 4, r.height() - 2 ); 911 r.width() - 4, r.height() - 2 );
912 p->setPen( tb->colorGroup().button() ); 912 p->setPen( tb->colorGroup().button() );
913 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); 913 p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
914 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3), 914 p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3),
915 tb->colorGroup().brush( QColorGroup::Button )); 915 tb->colorGroup().brush( QColorGroup::Button ));
916 916
917 //do shading; will not work for pixmap brushes 917 //do shading; will not work for pixmap brushes
918 QColor bg = tb->colorGroup().button(); 918 QColor bg = tb->colorGroup().button();
919 // int h,s,v; 919 // int h,s,v;
920 // bg.hsv( &h, &s, &v ); 920 // bg.hsv( &h, &s, &v );
921 int n = r.height()/2; 921 int n = r.height()/2;
922 int dark = 100; 922 int dark = 100;
923 for ( int i = 1; i < n; i++ ) { 923 for ( int i = 1; i < n; i++ ) {
924 dark = (dark * (100+(i*15)/n) )/100; 924 dark = (dark * (100+(i*15)/n) )/100;
925 p->setPen( bg.dark( dark ) ); 925 p->setPen( bg.dark( dark ) );
926 int y = r.bottom()-n+i; 926 int y = r.bottom()-n+i;
927 int x1 = r.left()+1; 927 int x1 = r.left()+1;
928 int x2 = r.right()-1; 928 int x2 = r.right()-1;
929 p->drawLine( x1, y, x2, y ); 929 p->drawLine( x1, y, x2, y );
930 } 930 }
931 } 931 }
932 932
933 p->setPen( tb->colorGroup().light() ); 933 p->setPen( tb->colorGroup().light() );
934 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 ); 934 p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 );
935 p->drawPoint( r.left()+1, r.top() + 1 ); 935 p->drawPoint( r.left()+1, r.top() + 1 );
936 p->drawLine( r.left()+2, r.top(), 936 p->drawLine( r.left()+2, r.top(),
937 r.right() - 2, r.top() ); 937 r.right() - 2, r.top() );
938 938
939 p->setPen( tb->colorGroup().dark() ); 939 p->setPen( tb->colorGroup().dark() );
940 p->drawPoint( r.right() - 1, r.top() + 1 ); 940 p->drawPoint( r.right() - 1, r.top() + 1 );
941 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1); 941 p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1);
942 } else if ( tb->shape() == QTabBar::RoundedBelow ) { 942 } else if ( tb->shape() == QTabBar::RoundedBelow ) {
943 if ( selected ) { 943 if ( selected ) {
944 p->setPen( tb->colorGroup().background() ); 944 p->setPen( tb->colorGroup().background() );
945 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 945 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
946 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2), 946 p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2),
947 tb->palette().normal().brush( QColorGroup::Background )); 947 tb->palette().normal().brush( QColorGroup::Background ));
948 } else { 948 } else {
949 p->setPen( tb->colorGroup().dark() ); 949 p->setPen( tb->colorGroup().dark() );
950 p->drawLine( r.left(), r.top(), 950 p->drawLine( r.left(), r.top(),
951 r.right(), r.top() ); 951 r.right(), r.top() );
952 r.setRect( r.left() + 2, r.top(), 952 r.setRect( r.left() + 2, r.top(),
953 r.width() - 4, r.height() - 2 ); 953 r.width() - 4, r.height() - 2 );
954 p->setPen( tb->colorGroup().button() ); 954 p->setPen( tb->colorGroup().button() );
955 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); 955 p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
956 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3), 956 p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3),
957 tb->palette().normal().brush( QColorGroup::Button )); 957 tb->palette().normal().brush( QColorGroup::Button ));
958 } 958 }
959 959
960 p->setPen( tb->colorGroup().dark() ); 960 p->setPen( tb->colorGroup().dark() );
961 p->drawLine( r.right(), r.top(), 961 p->drawLine( r.right(), r.top(),
962 r.right(), r.bottom() - 2 ); 962 r.right(), r.bottom() - 2 );
963 p->drawPoint( r.right() - 1, r.bottom() - 1 ); 963 p->drawPoint( r.right() - 1, r.bottom() - 1 );
964 p->drawLine( r.right() - 2, r.bottom(), 964 p->drawLine( r.right() - 2, r.bottom(),
965 r.left() + 2, r.bottom() ); 965 r.left() + 2, r.bottom() );
966 966
967 p->setPen( tb->colorGroup().light() ); 967 p->setPen( tb->colorGroup().light() );
968 p->drawLine( r.left(), r.top()+1, 968 p->drawLine( r.left(), r.top()+1,
969 r.left(), r.bottom() - 2 ); 969 r.left(), r.bottom() - 2 );
970 p->drawPoint( r.left() + 1, r.bottom() - 1 ); 970 p->drawPoint( r.left() + 1, r.bottom() - 1 );
971 if ( r.left() == 0 ) 971 if ( r.left() == 0 )
972 p->drawPoint( tb->rect().topLeft() ); 972 p->drawPoint( tb->rect().topLeft() );
973 973
974 } else { 974 } else {
975 QCommonStyle::drawTab( p, tb, t, selected ); 975 QCommonStyle::drawTab( p, tb, t, selected );
976 } 976 }
977} 977}
978 978
979 static const int motifItemFrame = 0;// menu item frame width 979 static const int motifItemFrame = 0;// menu item frame width
980 static const int motifSepHeight = 2;// separator item height 980 static const int motifSepHeight = 2;// separator item height
981 static const int motifItemHMargin = 1;// menu item hor text margin 981 static const int motifItemHMargin = 1;// menu item hor text margin
982 static const int motifItemVMargin = 2;// menu item ver text margin 982 static const int motifItemVMargin = 2;// menu item ver text margin
983 static const int motifArrowHMargin = 0;// arrow horizontal margin 983 static const int motifArrowHMargin = 0;// arrow horizontal margin
984 static const int motifTabSpacing = 12;// space between text and tab 984 static const int motifTabSpacing = 12;// space between text and tab
985 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark 985 static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark
986 static const int windowsRightBorder= 8; // right border on windows 986 static const int windowsRightBorder= 8; // right border on windows
987static const int windowsCheckMarkWidth = 2; // checkmarks width on windows 987static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
988 988
989/*! \reimp 989/*! \reimp
990*/ 990*/
991int QPEStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) 991int QPEStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
992{ 992{
993#ifndef QT_NO_MENUDATA 993#ifndef QT_NO_MENUDATA
994 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm 994 int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
995 995
996 if ( mi->isSeparator() ) 996 if ( mi->isSeparator() )
997 return 10; // arbitrary 997 return 10; // arbitrary
998 else if ( mi->pixmap() ) 998 else if ( mi->pixmap() )
999 w += mi->pixmap()->width();// pixmap only 999 w += mi->pixmap()->width();// pixmap only
1000 1000
1001 if ( !mi->text().isNull() ) { 1001 if ( !mi->text().isNull() ) {
1002 if ( mi->text().find('\t') >= 0 )// string contains tab 1002 if ( mi->text().find('\t') >= 0 )// string contains tab
1003 w += motifTabSpacing; 1003 w += motifTabSpacing;
1004 } 1004 }
1005 1005
1006 if ( maxpmw ) { // we have iconsets 1006 if ( maxpmw ) { // we have iconsets
1007 w += maxpmw; 1007 w += maxpmw;
1008 w += 6; // add a little extra border around the iconset 1008 w += 6; // add a little extra border around the iconset
1009 } 1009 }
1010 1010
1011 if ( checkable && maxpmw < windowsCheckMarkWidth ) { 1011 if ( checkable && maxpmw < windowsCheckMarkWidth ) {
1012 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks 1012 w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
1013 } 1013 }
1014 1014
1015 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) 1015 if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
1016 w += motifCheckMarkHMargin; // add space to separate the columns 1016 w += motifCheckMarkHMargin; // add space to separate the columns
1017 1017
1018 w += windowsRightBorder; // windows has a strange wide border on the right side 1018 w += windowsRightBorder; // windows has a strange wide border on the right side
1019 1019
1020 return w; 1020 return w;
1021#endif 1021#endif
1022} 1022}
1023 1023
1024/*! \reimp 1024/*! \reimp
1025*/ 1025*/
1026int QPEStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) 1026int QPEStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
1027{ 1027{
1028#ifndef QT_NO_MENUDATA 1028#ifndef QT_NO_MENUDATA
1029 int h = 0; 1029 int h = 0;
1030 if ( mi->isSeparator() ) // separator height 1030 if ( mi->isSeparator() ) // separator height
1031 h = motifSepHeight; 1031 h = motifSepHeight;
1032 else if ( mi->pixmap() ) // pixmap height 1032 else if ( mi->pixmap() ) // pixmap height
1033 h = mi->pixmap()->height() + 2*motifItemFrame; 1033 h = mi->pixmap()->height() + 2*motifItemFrame;
1034 else // text height 1034 else // text height
1035 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1; 1035 h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1;
1036 1036
1037 if ( !mi->isSeparator() && mi->iconSet() != 0 ) { 1037 if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
1038 h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); 1038 h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame );
1039 } 1039 }
1040 if ( mi->custom() ) 1040 if ( mi->custom() )
1041 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; 1041 h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
1042 return h; 1042 return h;
1043#endif 1043#endif
1044} 1044}
1045 1045
1046void QPEStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, 1046void QPEStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
1047 const QPalette& pal, 1047 const QPalette& pal,
1048 bool act, bool enabled, int x, int y, int w, int h) 1048 bool act, bool enabled, int x, int y, int w, int h)
1049{ 1049{
1050#ifndef QT_NO_MENUDATA 1050#ifndef QT_NO_MENUDATA
1051 const QColorGroup & g = pal.active(); 1051 const QColorGroup & g = pal.active();
1052 bool dis = !enabled; 1052 bool dis = !enabled;
1053 QColorGroup itemg = dis ? pal.disabled() : pal.active(); 1053 QColorGroup itemg = dis ? pal.disabled() : pal.active();
1054 1054
1055 if ( checkable ) 1055 if ( checkable )
1056 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks 1056 maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
1057 1057
1058 int checkcol = maxpmw; 1058 int checkcol = maxpmw;
1059 1059
1060 if ( mi && mi->isSeparator() ) { // draw separator 1060 if ( mi && mi->isSeparator() ) { // draw separator
1061 p->setPen( g.dark() ); 1061 p->setPen( g.dark() );
1062 p->drawLine( x, y, x+w, y ); 1062 p->drawLine( x, y, x+w, y );
1063 p->setPen( g.light() ); 1063 p->setPen( g.light() );
1064 p->drawLine( x, y+1, x+w, y+1 ); 1064 p->drawLine( x, y+1, x+w, y+1 );
1065 return; 1065 return;
1066 } 1066 }
1067 1067
1068 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1068 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1069 g.brush( QColorGroup::Button ); 1069 g.brush( QColorGroup::Button );
1070 p->fillRect( x, y, w, h, fill); 1070 p->fillRect( x, y, w, h, fill);
1071 1071
1072 if ( !mi ) 1072 if ( !mi )
1073 return; 1073 return;
1074 1074
1075 if ( mi->isChecked() ) { 1075 if ( mi->isChecked() ) {
1076 if ( act && !dis ) { 1076 if ( act && !dis ) {
1077 qDrawShadePanel( p, x, y, checkcol, h, 1077 qDrawShadePanel( p, x, y, checkcol, h,
1078 g, TRUE, 1, &g.brush( QColorGroup::Button ) ); 1078 g, TRUE, 1, &g.brush( QColorGroup::Button ) );
1079 } else { 1079 } else {
1080 qDrawShadePanel( p, x, y, checkcol, h, 1080 qDrawShadePanel( p, x, y, checkcol, h,
1081 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); 1081 g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
1082 } 1082 }
1083 } else if ( !act ) { 1083 } else if ( !act ) {
1084 p->fillRect(x, y, checkcol , h, 1084 p->fillRect(x, y, checkcol , h,
1085 g.brush( QColorGroup::Button )); 1085 g.brush( QColorGroup::Button ));
1086 } 1086 }
1087 1087
1088 if ( mi->iconSet() ) { // draw iconset 1088 if ( mi->iconSet() ) { // draw iconset
1089 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; 1089 QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
1090 if (act && !dis ) 1090 if (act && !dis )
1091 mode = QIconSet::Active; 1091 mode = QIconSet::Active;
1092 QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); 1092 QPixmap pixmap;
1093 if ( mode == QIconSet::Disabled )
1094 pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode );
1095 else
1096 pixmap = mi->iconSet()->pixmap();
1093 int pixw = pixmap.width(); 1097 int pixw = pixmap.width();
1094 int pixh = pixmap.height(); 1098 int pixh = pixmap.height();
1095 if ( act && !dis ) { 1099 if ( act && !dis ) {
1096 if ( !mi->isChecked() ) 1100 if ( !mi->isChecked() )
1097 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); 1101 qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
1098 } 1102 }
1099 QRect cr( x, y, checkcol, h ); 1103 QRect cr( x, y, checkcol, h );
1100 QRect pmr( 0, 0, pixw, pixh ); 1104 QRect pmr( 0, 0, pixw, pixh );
1101 pmr.moveCenter( cr.center() ); 1105 pmr.moveCenter( cr.center() );
1102 p->setPen( itemg.text() ); 1106 p->setPen( itemg.text() );
1103 p->drawPixmap( pmr.topLeft(), pixmap ); 1107 p->drawPixmap( pmr.topLeft(), pixmap );
1104 1108
1105 QBrush fill = act? g.brush( QColorGroup::Highlight ) : 1109 QBrush fill = act? g.brush( QColorGroup::Highlight ) :
1106 g.brush( QColorGroup::Button ); 1110 g.brush( QColorGroup::Button );
1107 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); 1111 p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
1108 } else if ( checkable ) {// just "checking"... 1112 } else if ( checkable ) {// just "checking"...
1109 int mw = checkcol + motifItemFrame; 1113 int mw = checkcol + motifItemFrame;
1110 int mh = h - 2*motifItemFrame; 1114 int mh = h - 2*motifItemFrame;
1111 if ( mi->isChecked() ) { 1115 if ( mi->isChecked() ) {
1112 drawCheckMark( p, x + motifItemFrame + 2, 1116 drawCheckMark( p, x + motifItemFrame + 2,
1113 y+motifItemFrame, mw, mh, itemg, act, dis ); 1117 y+motifItemFrame, mw, mh, itemg, act, dis );
1114 } 1118 }
1115 } 1119 }
1116 1120
1117 p->setPen( act ? g.highlightedText() : g.buttonText() ); 1121 p->setPen( act ? g.highlightedText() : g.buttonText() );
1118 1122
1119 QColor discol; 1123 QColor discol;
1120 if ( dis ) { 1124 if ( dis ) {
1121 discol = itemg.text(); 1125 discol = itemg.text();
1122 p->setPen( discol ); 1126 p->setPen( discol );
1123 } 1127 }
1124 1128
1125 int xm = motifItemFrame + checkcol + motifItemHMargin; 1129 int xm = motifItemFrame + checkcol + motifItemHMargin;
1126 1130
1127 if ( mi->custom() ) { 1131 if ( mi->custom() ) {
1128 int m = motifItemVMargin; 1132 int m = motifItemVMargin;
1129 p->save(); 1133 p->save();
1130 if ( dis && !act ) { 1134 if ( dis && !act ) {
1131 p->setPen( g.light() ); 1135 p->setPen( g.light() );
1132 mi->custom()->paint( p, itemg, act, enabled, 1136 mi->custom()->paint( p, itemg, act, enabled,
1133 x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); 1137 x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
1134 p->setPen( discol ); 1138 p->setPen( discol );
1135 } 1139 }
1136 mi->custom()->paint( p, itemg, act, enabled, 1140 mi->custom()->paint( p, itemg, act, enabled,
1137 x+xm, y+m, w-xm-tab+1, h-2*m ); 1141 x+xm, y+m, w-xm-tab+1, h-2*m );
1138 p->restore(); 1142 p->restore();
1139 } 1143 }
1140 QString s = mi->text(); 1144 QString s = mi->text();
1141 if ( !s.isNull() ) { // draw text 1145 if ( !s.isNull() ) { // draw text
1142 int t = s.find( '\t' ); 1146 int t = s.find( '\t' );
1143 int m = motifItemVMargin; 1147 int m = motifItemVMargin;
1144 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; 1148 const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
1145 if ( t >= 0 ) { // draw tab text 1149 if ( t >= 0 ) { // draw tab text
1146 if ( dis && !act ) { 1150 if ( dis && !act ) {
1147 p->setPen( g.light() ); 1151 p->setPen( g.light() );
1148 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, 1152 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
1149 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); 1153 y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
1150 p->setPen( discol ); 1154 p->setPen( discol );
1151 } 1155 }
1152 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, 1156 p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
1153 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); 1157 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
1154 } 1158 }
1155 if ( dis && !act ) { 1159 if ( dis && !act ) {
1156 p->setPen( g.light() ); 1160 p->setPen( g.light() );
1157 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); 1161 p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );
1158 p->setPen( discol ); 1162 p->setPen( discol );
1159 } 1163 }
1160 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); 1164 p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
1161 } else if ( mi->pixmap() ) { // draw pixmap 1165 } else if ( mi->pixmap() ) { // draw pixmap
1162 QPixmap *pixmap = mi->pixmap(); 1166 QPixmap *pixmap = mi->pixmap();
1163 if ( pixmap->depth() == 1 ) 1167 if ( pixmap->depth() == 1 )
1164 p->setBackgroundMode( OpaqueMode ); 1168 p->setBackgroundMode( OpaqueMode );
1165 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); 1169 p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
1166 if ( pixmap->depth() == 1 ) 1170 if ( pixmap->depth() == 1 )
1167 p->setBackgroundMode( TransparentMode ); 1171 p->setBackgroundMode( TransparentMode );
1168 } 1172 }
1169 if ( mi->popup() ) { // draw sub menu arrow 1173 if ( mi->popup() ) { // draw sub menu arrow
1170 int dim = (h-2*motifItemFrame) / 2; 1174 int dim = (h-2*motifItemFrame) / 2;
1171 if ( act ) { 1175 if ( act ) {
1172 if ( !dis ) 1176 if ( !dis )
1173 discol = white; 1177 discol = white;
1174 QColorGroup g2( discol, g.highlight(), 1178 QColorGroup g2( discol, g.highlight(),
1175 white, white, 1179 white, white,
1176 dis ? discol : white, 1180 dis ? discol : white,
1177 discol, white ); 1181 discol, white );
1178 drawArrow( p, RightArrow, FALSE, 1182 drawArrow( p, RightArrow, FALSE,
1179 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1183 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1180 dim, dim, g2, TRUE ); 1184 dim, dim, g2, TRUE );
1181 } else { 1185 } else {
1182 drawArrow( p, RightArrow, 1186 drawArrow( p, RightArrow,
1183 FALSE, 1187 FALSE,
1184 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, 1188 x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
1185 dim, dim, g, mi->isEnabled() ); 1189 dim, dim, g, mi->isEnabled() );
1186 } 1190 }
1187 } 1191 }
1188#endif 1192#endif
1189} 1193}
1190 1194
1191#endif 1195#endif