00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "webstyle.h"
00021
00022 #ifndef INCLUDE_MENUITEM_DEF
00023 #define INCLUDE_MENUITEM_DEF
00024 #endif
00025
00026 #include <QtGui/QMenuItem>
00027 #include <QtGui/QPalette>
00028 #include <QtGui/QBitmap>
00029 #include <QtGui/QTabBar>
00030 #include <Qt3Support/Q3PointArray>
00031 #include <QtGui/QScrollBar>
00032 #include <QtGui/QFrame>
00033 #include <QtGui/QPushButton>
00034 #include <QtGui/qdrawutil.h>
00035 #include <QtGui/QPainter>
00036
00037 #include <kapplication.h>
00038 #include <kdrawutil.h>
00039 #include <klocale.h>
00040 #include <kiconloader.h>
00041 #include <kdebug.h>
00042
00043 static const int _indicatorSize = 13;
00044 static Q3Button * _highlightedButton = 0;
00045 static const int _scrollBarExtent = 14;
00046
00047 static QFrame * _currentFrame = 0;
00048 static int _savedFrameLineWidth;
00049 static int _savedFrameMidLineWidth;
00050 static ulong _savedFrameStyle;
00051
00052 static QColor contrastingForeground(const QColor & fg, const QColor & bg)
00053 {
00054 int h, s, vbg, vfg;
00055
00056 bg.hsv(&h, &s, &vbg);
00057 fg.hsv(&h, &s, &vfg);
00058
00059 int diff(vbg - vfg);
00060
00061 if ((diff > -72) && (diff < 72))
00062 {
00063 return (vbg < 128) ? Qt::white : Qt::black;
00064 }
00065 else
00066 {
00067 return fg;
00068 }
00069 }
00070
00071
00072
00073 static void
00074 scrollBarControlsMetrics
00075 (
00076 const QScrollBar * sb,
00077 int sliderStart,
00078 int ,
00079 int sliderMax,
00080 int sliderLength,
00081 int buttonDim,
00082 QRect & rSub,
00083 QRect & rAdd,
00084 QRect & rSubPage,
00085 QRect & rAddPage,
00086 QRect & rSlider
00087 )
00088 {
00089 bool horizontal = sb->orientation() == Qt::Horizontal;
00090
00091 int len = horizontal ? sb->width() : sb->height();
00092
00093 int extent = horizontal ? sb->height() : sb->width();
00094
00095 QColorGroup g = sb->colorGroup();
00096
00097 if (sliderStart > sliderMax)
00098 sliderStart = sliderMax;
00099
00100 int sliderEnd = sliderStart + sliderLength;
00101
00102 int addX, addY;
00103 int subX, subY;
00104 int subPageX, subPageY, subPageW, subPageH;
00105 int addPageX, addPageY, addPageW, addPageH;
00106 int sliderX, sliderY, sliderW, sliderH;
00107
00108 if (horizontal)
00109 {
00110 subY = 0;
00111 addY = 0;
00112 subX = 0;
00113 addX = buttonDim;
00114
00115 subPageX = buttonDim * 2;
00116 subPageY = 0;
00117 subPageW = sliderStart - 1;
00118 subPageH = extent;
00119
00120 addPageX = sliderEnd;
00121 addPageY = 0;
00122 addPageW = len - sliderEnd;
00123 addPageH = extent;
00124
00125 sliderX = sliderStart;
00126 sliderY = 0;
00127 sliderW = sliderLength;
00128 sliderH = extent;
00129 }
00130 else
00131 {
00132 subX = 0;
00133 addX = 0;
00134 subY = len - buttonDim * 2;
00135 addY = len - buttonDim;
00136
00137 subPageX = 0;
00138 subPageY = 0;
00139 subPageW = extent;
00140 subPageH = sliderStart;
00141
00142 addPageX = 0;
00143 addPageY = sliderEnd;
00144 addPageW = extent;
00145 addPageH = subY - sliderEnd;
00146
00147 sliderX = 0;
00148 sliderY = sliderStart;
00149 sliderW = extent;
00150 sliderH = sliderLength;
00151 }
00152
00153 rSub .setRect( subX, subY, buttonDim, buttonDim);
00154 rAdd .setRect( addX, addY, buttonDim, buttonDim);
00155 rSubPage .setRect(subPageX, subPageY, subPageW, subPageH);
00156 rAddPage .setRect(addPageX, addPageY, addPageW, addPageH);
00157 rSlider .setRect( sliderX, sliderY, sliderW, sliderH);
00158 }
00159
00160
00161
00162 static void
00163 drawFunkyRect
00164 (
00165 QPainter * p,
00166 int x,
00167 int y,
00168 int w,
00169 int h,
00170 bool small
00171 )
00172 {
00173 p->translate(x, y);
00174
00175 if (small)
00176 {
00177 p->drawLine( 2, 0, w - 3, 0 );
00178 p->drawLine( w - 1, 2, w - 1, h - 3 );
00179 p->drawLine( w - 3, h - 1, 2, h - 1 );
00180 p->drawLine( 0, h - 3, 0, 2 );
00181
00182
00183
00184
00185 QCOORD pointList[] =
00186 {
00187 1, 1,
00188 w - 2, 1,
00189 w - 2, h - 2,
00190 1, h - 2
00191 };
00192
00193 p->drawPoints(Q3PointArray(4, pointList));
00194 }
00195 else
00196 {
00197 p->drawLine( 3, 0, w - 4, 0 );
00198 p->drawLine( w - 1, 3, w - 1, h - 4 );
00199 p->drawLine( w - 4, h - 1, 3, h - 1 );
00200 p->drawLine( 0, h - 4, 0, 3 );
00201
00202 QCOORD pointList[] =
00203 {
00204 1, 2,
00205 2, 1,
00206 w - 3, 1,
00207 w - 2, 2,
00208 w - 2, h - 3,
00209 w - 3, h - 2,
00210 2, h - 2,
00211 1, h - 3
00212 };
00213
00214 p->drawPoints(Q3PointArray(8, pointList));
00215 }
00216
00217 p->translate(-x, -y);
00218 }
00219
00220 WebStyle::WebStyle()
00221 : KStyle()
00222 {
00223 setButtonDefaultIndicatorWidth(6);
00224 setScrollBarExtent(_scrollBarExtent, _scrollBarExtent);
00225 }
00226
00227 WebStyle::~WebStyle()
00228 {
00229
00230 }
00231
00232 void
00233 WebStyle::polish(QApplication *)
00234 {
00235
00236 }
00237
00238 void
00239 WebStyle::polish(QPalette &)
00240 {
00241
00242 }
00243
00244 void
00245 WebStyle::unPolish(QApplication *)
00246 {
00247
00248 }
00249
00250 void
00251 WebStyle::polish(QWidget * w)
00252 {
00253 if (w->inherits("QPushButton"))
00254 w->installEventFilter(this);
00255
00256 else if (w->inherits("QGroupBox") || w->inherits("QFrame"))
00257 {
00258 QFrame * f(static_cast<QFrame *>(w));
00259
00260 if (f->frameStyle() != QFrame::NoFrame)
00261 {
00262 _currentFrame = f;
00263
00264 _savedFrameLineWidth = f->lineWidth();
00265 _savedFrameMidLineWidth = f->midLineWidth();
00266 _savedFrameStyle = f->frameStyle();
00267
00268 if (f->frameShape() == QFrame::HLine || f->frameShape() == QFrame::VLine)
00269 {
00270 f->setMidLineWidth(1);
00271 f->setFrameStyle(f->frameShape() | QFrame::Plain);
00272 }
00273 else
00274 {
00275 f->setLineWidth(1);
00276 f->setFrameStyle(QFrame::Box | QFrame::Plain);
00277 }
00278 }
00279 }
00280 }
00281
00282 void
00283 WebStyle::unPolish(QWidget * w)
00284 {
00285 if (w->inherits("QPushButton"))
00286 w->removeEventFilter(this);
00287
00288 else if (w == _currentFrame)
00289 {
00290 QFrame * f(static_cast<QFrame *>(w));
00291
00292 f->setLineWidth(_savedFrameLineWidth);
00293 f->setMidLineWidth(_savedFrameMidLineWidth);
00294 f->setFrameStyle(_savedFrameStyle);
00295 }
00296 }
00297
00298 bool
00299 WebStyle::eventFilter(QObject * o, QEvent * e)
00300 {
00301 QPushButton * pb(static_cast<QPushButton *>(o));
00302
00303 if (e->type() == QEvent::Enter)
00304 {
00305 _highlightedButton = pb;
00306 pb->repaint(false);
00307 }
00308 else if (e->type() == QEvent::Leave)
00309 {
00310 _highlightedButton = 0;
00311 pb->repaint(false);
00312 }
00313
00314 return false;
00315 }
00316
00317 void
00318 WebStyle::drawButton
00319 (
00320 QPainter * p,
00321 int x,
00322 int y,
00323 int w,
00324 int h,
00325 const QColorGroup & g,
00326 bool sunken,
00327 const QBrush * fill
00328 )
00329 {
00330 p->save();
00331
00332 if (sunken)
00333 p->setPen(contrastingForeground(g.light(), g.button()));
00334 else
00335 p->setPen(contrastingForeground(g.mid(), g.button()));
00336
00337 p->setBrush(0 == fill ? Qt::NoBrush : *fill);
00338
00339 drawFunkyRect(p, x, y, w, h, true);
00340
00341 p->restore();
00342 }
00343
00344 QRect
00345 WebStyle::buttonRect(int x, int y, int w, int h)
00346 {
00347 return QRect(x + 2, y + 2, w - 4, h - 4);
00348 }
00349
00350 void
00351 WebStyle::drawBevelButton
00352 (
00353 QPainter * p,
00354 int x,
00355 int y,
00356 int w,
00357 int h,
00358 const QColorGroup & g,
00359 bool sunken,
00360 const QBrush * fill
00361 )
00362 {
00363 drawButton(p, x, y, w, h, g, sunken, fill);
00364 }
00365
00366 void
00367 WebStyle::drawPushButton(QPushButton * b, QPainter * p)
00368 {
00369
00370
00371 bool sunken(b->isDown() || b->isOn());
00372 bool hl(_highlightedButton == b);
00373
00374 QColor bg(b->colorGroup().button());
00375
00376 p->save();
00377 p->fillRect(b->rect(), b->colorGroup().brush(QPalette::Background));
00378
00379 if (b->isDefault())
00380 {
00381 QColor c(hl ? b->colorGroup().highlight() : b->colorGroup().mid());
00382
00383 p->setPen(contrastingForeground(c, bg));
00384
00385 drawFunkyRect(p, 0, 0, b->width(), b->height(), false);
00386 }
00387
00388 p->fillRect
00389 (
00390 4,
00391 4,
00392 b->width() - 8,
00393 b->height() - 8,
00394 b->colorGroup().brush(QPalette::Button)
00395 );
00396
00397 if (b->isEnabled())
00398 {
00399 if (sunken)
00400 {
00401 p->setPen(contrastingForeground(b->colorGroup().light(), bg));
00402 }
00403 else
00404 {
00405 if (hl)
00406 p->setPen(contrastingForeground(b->colorGroup().highlight(), bg));
00407 else
00408 p->setPen(contrastingForeground(b->colorGroup().mid(), bg));
00409 }
00410 }
00411 else
00412 {
00413 p->setPen(b->colorGroup().button());
00414 }
00415
00416 drawFunkyRect(p, 3, 3, b->width() - 6, b->height() - 6, true);
00417
00418 p->restore();
00419 }
00420
00421 void
00422 WebStyle::drawPushButtonLabel(QPushButton * b, QPainter * p)
00423 {
00424
00425
00426 KStyle::drawPushButtonLabel(b, p);
00427 }
00428
00429 void
00430 WebStyle::drawScrollBarControls
00431 (
00432 QPainter * p,
00433 const QScrollBar * sb,
00434 int sliderStart,
00435 uint controls,
00436 uint activeControl
00437 )
00438 {
00439 p->save();
00440
00441 int sliderMin, sliderMax, sliderLength, buttonDim;
00442
00443 scrollBarMetrics(sb, sliderMin, sliderMax, sliderLength, buttonDim);
00444
00445 QRect rSub, rAdd, rSubPage, rAddPage, rSlider;
00446
00447 scrollBarControlsMetrics
00448 (
00449 sb,
00450 sliderStart,
00451 sliderMin,
00452 sliderMax,
00453 sliderLength,
00454 buttonDim,
00455 rSub,
00456 rAdd,
00457 rSubPage,
00458 rAddPage,
00459 rSlider
00460 );
00461
00462 QColorGroup g(sb->colorGroup());
00463
00464 if (controls & AddLine && rAdd.isValid())
00465 {
00466 bool active(activeControl & AddLine);
00467
00468 QColor c(active ? g.highlight() : g.dark());
00469
00470 p->setPen(c);
00471 p->setBrush(g.button());
00472 p->drawRect(rAdd);
00473
00474 Qt::ArrowType t =
00475 sb->orientation() == Qt::Horizontal ? Qt::RightArrow : Qt::DownArrow;
00476
00477
00478
00479 drawArrow
00480 (
00481 p,
00482 t,
00483 true,
00484 rAdd.x(),
00485 rAdd.y(),
00486 rAdd.width(),
00487 rAdd.height(),
00488 g,
00489 true
00490 );
00491 }
00492
00493 if (controls & SubLine && rSub.isValid())
00494 {
00495 bool active(activeControl & SubLine);
00496
00497 QColor c(active ? g.highlight() : g.dark());
00498
00499 p->setPen(c);
00500 p->setBrush(g.button());
00501 p->drawRect(rSub);
00502
00503 Qt::ArrowType t =
00504 sb->orientation() == Qt::Horizontal ? Qt::LeftArrow : Qt::UpArrow;
00505
00506 drawArrow
00507 (
00508 p,
00509 t,
00510 true,
00511 rSub.x(),
00512 rSub.y(),
00513 rSub.width(),
00514 rSub.height(),
00515 g,
00516 true
00517 );
00518 }
00519
00520 if (controls & SubPage && rSubPage.isValid())
00521 {
00522 p->setPen(g.mid());
00523 p->setBrush(g.base());
00524 p->drawRect(rSubPage);
00525 }
00526
00527 if (controls & AddPage && rAddPage.isValid())
00528 {
00529 p->setPen(g.mid());
00530 p->setBrush(g.base());
00531 p->drawRect(rAddPage);
00532 }
00533
00534 if (controls & Slider && rSlider.isValid())
00535 {
00536 p->setPen(activeControl & Slider ? g.highlight() : g.dark());
00537
00538 p->setBrush(g.button());
00539 p->drawRect(rSlider);
00540
00541 p->setBrush(g.light());
00542 p->setPen(g.dark());
00543
00544 if (sliderLength > _scrollBarExtent * 2)
00545 {
00546 int ellipseSize =
00547 Qt::Horizontal == sb->orientation()
00548 ?
00549 rSlider.height() - 4
00550 :
00551 rSlider.width() - 4
00552 ;
00553
00554 QPoint center(rSlider.center());
00555
00556 if (Qt::Horizontal == sb->orientation())
00557 {
00558 p->drawEllipse
00559 (
00560 center.x() - ellipseSize / 2, rSlider.y() + 2,
00561 ellipseSize, ellipseSize
00562 );
00563 }
00564 else
00565 {
00566 p->drawEllipse
00567 (
00568 rSlider.x() + 2, center.y() - ellipseSize / 2,
00569 ellipseSize, ellipseSize
00570 );
00571 }
00572 }
00573 }
00574
00575 p->restore();
00576 }
00577
00578 QStyle::ScrollControl
00579 WebStyle::scrollBarPointOver
00580 (
00581 const QScrollBar * sb,
00582 int sliderStart,
00583 const QPoint & point
00584 )
00585 {
00586 if (!sb->rect().contains(point))
00587 return NoScroll;
00588
00589 int sliderMin, sliderMax, sliderLength, buttonDim;
00590
00591 scrollBarMetrics(sb, sliderMin, sliderMax, sliderLength, buttonDim);
00592
00593 if (sb->orientation() == Qt::Horizontal)
00594 {
00595 int x = point.x();
00596
00597 if (x <= buttonDim)
00598 return SubLine;
00599
00600 else if (x <= buttonDim * 2)
00601 return AddLine;
00602
00603 else if (x < sliderStart)
00604 return SubPage;
00605
00606 else if (x < sliderStart+sliderLength)
00607 return Slider;
00608
00609 return AddPage;
00610 }
00611 else
00612 {
00613 int y = point.y();
00614
00615 if (y < sliderStart)
00616 return SubPage;
00617
00618 else if (y < sliderStart + sliderLength)
00619 return Slider;
00620
00621 else if (y < sliderMax + sliderLength)
00622 return AddPage;
00623
00624 else if (y < sliderMax + sliderLength + buttonDim)
00625 return SubLine;
00626
00627 return AddLine;
00628 }
00629 }
00630
00631 void
00632 WebStyle::scrollBarMetrics
00633 (
00634 const QScrollBar * sb,
00635 int & sliderMin,
00636 int & sliderMax,
00637 int & sliderLength,
00638 int & buttonDim
00639 )
00640 {
00641 int maxlen;
00642
00643 bool horizontal = sb->orientation() == Qt::Horizontal;
00644
00645 int len = (horizontal) ? sb->width() : sb->height();
00646
00647 int extent = (horizontal) ? sb->height() : sb->width();
00648
00649 if (len > (extent - 1) * 2)
00650 buttonDim = extent;
00651 else
00652 buttonDim = len / 2 - 1;
00653
00654 if (horizontal)
00655 sliderMin = buttonDim * 2;
00656 else
00657 sliderMin = 1;
00658
00659 maxlen = len - buttonDim * 2 - 1;
00660
00661 sliderLength =
00662 (sb->pageStep() * maxlen) /
00663 (sb->maxValue() - sb->minValue() + sb->pageStep());
00664
00665 if (sliderLength < _scrollBarExtent)
00666 sliderLength = _scrollBarExtent;
00667
00668 if (sliderLength > maxlen)
00669 sliderLength = maxlen;
00670
00671 sliderMax = sliderMin + maxlen - sliderLength;
00672 }
00673
00674 QSize
00675 WebStyle::indicatorSize() const
00676 {
00677 return QSize(_indicatorSize, _indicatorSize);
00678 }
00679
00680 void
00681 WebStyle::drawIndicator
00682 (
00683 QPainter * p,
00684 int x,
00685 int y,
00686 int w,
00687 int h,
00688 const QColorGroup & g,
00689 int state,
00690 bool down,
00691 bool enabled
00692 )
00693 {
00694 p->save();
00695
00696 p->fillRect(x, y, w, h, g.background());
00697
00698 if (enabled)
00699 {
00700 p->setPen(down ? g.highlight() : contrastingForeground(g.dark(), g.background()));
00701 }
00702 else
00703 {
00704 g.mid();
00705 }
00706
00707 p->drawRect(x, y, w, h);
00708
00709 if (state != QCheckBox::Off)
00710 {
00711 p->fillRect(x + 2, y + 2, w - 4, h - 4, enabled ? g.highlight() : g.mid());
00712
00713 if (state == QCheckBox::NoChange)
00714 {
00715 p->fillRect(x + 4, y + 4, w - 8, h - 8, g.background());
00716 }
00717 }
00718
00719 p->restore();
00720 }
00721
00722 QSize
00723 WebStyle::exclusiveIndicatorSize() const
00724 {
00725 return QSize(_indicatorSize, _indicatorSize);
00726 }
00727
00728 void
00729 WebStyle::drawExclusiveIndicator
00730 (
00731 QPainter * p,
00732 int x,
00733 int y,
00734 int w,
00735 int h,
00736 const QColorGroup & g,
00737 bool on,
00738 bool down,
00739 bool enabled
00740 )
00741 {
00742 p->save();
00743
00744 p->fillRect(x, y, w, h, g.background());
00745
00746 if (enabled)
00747 {
00748 p->setPen(down ? g.highlight() : contrastingForeground(g.dark(), g.background()));
00749 }
00750 else
00751 {
00752 p->setPen(g.mid());
00753 }
00754
00755 p->setBrush(g.brush(QPalette::Background));
00756
00757
00758
00759 if (0 == w % 2)
00760 --w;
00761
00762 if (0 == h % 2)
00763 --h;
00764
00765 p->drawEllipse(x, y, w, h);
00766
00767 if (on)
00768 {
00769 p->setPen(enabled ? g.highlight() : g.mid());
00770 p->setBrush(enabled ? g.highlight() : g.mid());
00771 p->drawEllipse(x + 3, y + 3, w - 6, h - 6);
00772 }
00773
00774 p->restore();
00775 }
00776
00777 void
00778 WebStyle::drawIndicatorMask
00779 (
00780 QPainter * p,
00781 int x,
00782 int y,
00783 int w,
00784 int h,
00785 int
00786 )
00787 {
00788 p->fillRect(x, y, w, h, Qt::color1);
00789 }
00790
00791 void
00792 WebStyle::drawExclusiveIndicatorMask
00793 (
00794 QPainter * p,
00795 int x,
00796 int y,
00797 int w,
00798 int h,
00799 bool
00800 )
00801 {
00802 if (0 == w % 2)
00803 --w;
00804
00805 if (0 == h % 2)
00806 --h;
00807
00808 p->setPen(Qt::color1);
00809 p->setBrush(Qt::color1);
00810 p->drawEllipse(x, y, w, h);
00811 }
00812
00813 void
00814 WebStyle::drawComboButton
00815 (
00816 QPainter * p,
00817 int x,
00818 int y,
00819 int w,
00820 int h,
00821 const QColorGroup & g,
00822 bool sunken,
00823 bool editable,
00824 bool enabled,
00825 const QBrush * fill
00826 )
00827 {
00828 p->save();
00829
00830 p->setPen(Qt::NoPen);
00831 p->setBrush(0 == fill ? g.brush(QPalette::Background) : *fill);
00832 p->drawRect(x, y, w, h);
00833
00834 if (enabled)
00835 {
00836 if (sunken)
00837 p->setPen(contrastingForeground(g.highlight(), g.background()));
00838 else
00839 p->setPen(contrastingForeground(g.mid(), g.background()));
00840 }
00841 else
00842 {
00843 p->setPen(contrastingForeground(g.mid(), g.background()));
00844 }
00845
00846 drawFunkyRect(p, x, y, w, h, true);
00847
00848 p->drawPoint(w - 10, h - 6);
00849 p->drawPoint(w - 9, h - 6);
00850 p->drawPoint(w - 8, h - 6);
00851 p->drawPoint(w - 7, h - 6);
00852 p->drawPoint(w - 6, h - 6);
00853
00854 p->drawPoint(w - 9, h - 7);
00855 p->drawPoint(w - 8, h - 7);
00856 p->drawPoint(w - 7, h - 7);
00857 p->drawPoint(w - 6, h - 7);
00858
00859 p->drawPoint(w - 8, h - 8);
00860 p->drawPoint(w - 7, h - 8);
00861 p->drawPoint(w - 6, h - 8);
00862
00863 p->drawPoint(w - 7, h - 9);
00864 p->drawPoint(w - 6, h - 9);
00865
00866 p->drawPoint(w - 6, h - 10);
00867
00868 if (editable)
00869 p->fillRect(comboButtonFocusRect(x, y, w, h), Qt::red);
00870
00871 p->restore();
00872 }
00873
00874 QRect
00875 WebStyle::comboButtonRect(int x, int y, int w, int h)
00876 {
00877 return QRect(x + 2, y + 2, w - 20, h - 4);
00878 }
00879
00880 QRect
00881 WebStyle::comboButtonFocusRect(int x, int y, int w, int h)
00882 {
00883 return QRect(x + 2, y + 2, w - 20, h - 4);
00884 }
00885
00886 int
00887 WebStyle::sliderLength() const
00888 {
00889 return 13;
00890 }
00891
00892 void
00893 WebStyle::drawSliderGroove
00894 (
00895 QPainter * p,
00896 int x,
00897 int y,
00898 int w,
00899 int h,
00900 const QColorGroup & g,
00901 QCOORD ,
00902 Qt::Orientation o
00903 )
00904 {
00905 p->save();
00906
00907 p->setPen(QPen(g.dark(), 0, Qt::DotLine));
00908
00909 if( o == Qt::Horizontal )
00910 p->drawLine(x, y + h / 2, w, y + h / 2);
00911 else
00912 if( o == Qt::Vertical )
00913 p->drawLine(x + w / 2, y, x + w / 2, h);
00914
00915 p->restore();
00916 }
00917
00918 void
00919 WebStyle::drawArrow
00920 (
00921 QPainter * p,
00922 Qt::ArrowType type,
00923 bool down,
00924 int x,
00925 int y,
00926 int w,
00927 int h,
00928 const QColorGroup & g,
00929 bool enabled,
00930 const QBrush * fill
00931 )
00932 {
00933 KStyle::drawArrow(p, type, down, x, y, w, h, g, enabled, fill);
00934 }
00935
00936 void
00937 WebStyle::drawSlider
00938 (
00939 QPainter * p,
00940 int x,
00941 int y,
00942 int w,
00943 int h,
00944 const QColorGroup & g,
00945 Qt::Orientation o,
00946 bool ,
00947 bool
00948 )
00949 {
00950 p->save();
00951
00952 p->fillRect(x + 1, y + 1, w - 2, h - 2, g.background());
00953 p->setPen(g.dark());
00954 p->setBrush(g.light());
00955
00956 int sl = sliderLength();
00957
00958 if( o == Qt::Horizontal )
00959 p->drawEllipse(x, y + h / 2 - sl / 2, sl, sl);
00960 else
00961 if( o == Qt::Vertical )
00962 p->drawEllipse(x + w / 2 - sl / 2, y, sl, sl);
00963
00964 p->restore();
00965 }
00966
00967 void
00968 WebStyle::drawKToolBar
00969 (
00970 QPainter * p,
00971 int x,
00972 int y,
00973 int w,
00974 int h,
00975 const QColorGroup & g,
00976 KToolBarPos ,
00977 QBrush *
00978 )
00979 {
00980 p->save();
00981 p->setPen(g.background());
00982 p->setBrush(g.background());
00983 p->drawRect(x, y, w, h);
00984 p->restore();
00985 }
00986
00987 void
00988 WebStyle::drawKBarHandle
00989 (
00990 QPainter * p,
00991 int x,
00992 int y,
00993 int w,
00994 int h,
00995 const QColorGroup & g,
00996 KToolBarPos ,
00997 QBrush *
00998 )
00999 {
01000 p->save();
01001 p->setPen(g.mid());
01002 p->setBrush(g.background());
01003 p->drawRect(x + 1, y + 1, w - 2, h - 2);
01004 p->restore();
01005 }
01006
01007 void
01008 WebStyle::drawKMenuBar
01009 (
01010 QPainter * p,
01011 int x,
01012 int y,
01013 int w,
01014 int h,
01015 const QColorGroup & g,
01016 bool ,
01017 QBrush *
01018 )
01019 {
01020 p->save();
01021 p->setPen(g.mid());
01022 p->setBrush(g.background());
01023 p->drawRect(x, y, w, h);
01024 p->restore();
01025 }
01026
01027 void
01028 WebStyle::drawKToolBarButton
01029 (
01030 QPainter * p,
01031 int x,
01032 int y,
01033 int w,
01034 int h,
01035 const QColorGroup & g,
01036 bool sunken,
01037 bool raised,
01038 bool enabled,
01039 bool popup,
01040 KToolButtonType type,
01041 const QString & btext,
01042 const QPixmap * pixmap,
01043 QFont * font,
01044 QWidget * button
01045 )
01046 {
01047 bool toggleAndOn = false;
01048
01049 if (button->inherits("QButton"))
01050 {
01051 Q3Button * b = static_cast<Q3Button *>(button);
01052 toggleAndOn = b->isToggleButton() && b->isOn();
01053 }
01054
01055 p->save();
01056
01057 QColor borderColour;
01058 QColor textColour;
01059 QColor fillColour;
01060
01061 if (!enabled)
01062 {
01063 borderColour = g.background();
01064 fillColour = g.background();
01065 textColour = g.text();
01066 }
01067 else
01068 {
01069 if (toggleAndOn)
01070 {
01071 borderColour = g.dark();
01072 fillColour = g.button();
01073 textColour = g.buttonText();
01074 }
01075 else if (sunken)
01076 {
01077 borderColour = g.light();
01078 fillColour = g.button();
01079 textColour = g.buttonText();
01080 }
01081 else if (raised)
01082 {
01083 borderColour = g.highlight();
01084 fillColour = g.background();
01085 textColour = g.text();
01086 }
01087 else
01088 {
01089 borderColour = g.background();
01090 fillColour = g.background();
01091 textColour = g.text();
01092 }
01093 }
01094
01095 p->setPen(borderColour);
01096 p->setBrush(fillColour);
01097
01098 p->drawRect(x, y, w, h);
01099
01100 p->setPen(g.background());
01101
01102 p->drawPoint(x, y);
01103 p->drawPoint(x + w, y);
01104 p->drawPoint(x, y + h);
01105 p->drawPoint(x + w, y + h);
01106
01107 switch (type)
01108 {
01109 case Icon:
01110
01111 if (0 != pixmap)
01112 p->drawPixmap
01113 (
01114 x + (w - pixmap->width()) / 2,
01115 y + (h - pixmap->height()) / 2,
01116 *pixmap
01117 );
01118 break;
01119
01120 case Text:
01121
01122 if (!btext.isNull())
01123 {
01124 if (0 != font)
01125 p->setFont(*font);
01126
01127 p->setPen(textColour);
01128
01129 p->drawText
01130 (
01131 x,
01132 y,
01133 w,
01134 h,
01135 Qt::AlignCenter,
01136 btext
01137 );
01138 }
01139
01140 break;
01141
01142 case IconTextRight:
01143
01144 if (0 != pixmap)
01145 p->drawPixmap
01146 (
01147 x + 2,
01148 y + (h - pixmap->height()) / 2,
01149 *pixmap
01150 );
01151
01152 if (!btext.isNull())
01153 {
01154 if (0 != font)
01155 p->setFont(*font);
01156
01157 p->setPen(textColour);
01158
01159 if (0 != pixmap)
01160 {
01161 int textLeft = pixmap->width() + 4;
01162
01163 p->drawText
01164 (
01165 x + textLeft,
01166 y,
01167 w - textLeft,
01168 h,
01169 Qt::AlignVCenter | Qt::AlignLeft,
01170 btext
01171 );
01172 }
01173 else
01174 {
01175 p->drawText
01176 (
01177 x,
01178 y,
01179 w,
01180 h,
01181 Qt::AlignVCenter | Qt::AlignLeft,
01182 btext
01183 );
01184 }
01185 }
01186 break;
01187
01188 case IconTextBottom:
01189
01190 if (0 != pixmap)
01191 p->drawPixmap
01192 (
01193 x + (w - pixmap->width()) / 2,
01194 y + 2,
01195 *pixmap
01196 );
01197
01198 if (!btext.isNull())
01199 {
01200 if (0 != font)
01201 p->setFont(*font);
01202
01203 p->setPen(textColour);
01204
01205 if (0 != pixmap)
01206 {
01207 int textTop = y + pixmap->height() + 4;
01208
01209 p->drawText
01210 (
01211 x + 2,
01212 textTop,
01213 w - 4,
01214 h - x - textTop,
01215 Qt::AlignCenter,
01216 btext
01217 );
01218 }
01219 else
01220 {
01221 p->drawText
01222 (
01223 x,
01224 y,
01225 w,
01226 h,
01227 Qt::AlignCenter,
01228 btext
01229 );
01230 }
01231 }
01232 break;
01233
01234 default:
01235 break;
01236 }
01237
01238 if (popup)
01239 {
01240 p->setPen(g.dark());
01241 for (int px = 0; px < 5; ++px)
01242 for (int py = 0; py < 5 - px; ++py)
01243 p->drawPoint(w - 6 - px, h - 6 - py);
01244 }
01245
01246 p->restore();
01247 }
01248
01249 void
01250 WebStyle::drawKMenuItem
01251 (
01252 QPainter * p,
01253 int x,
01254 int y,
01255 int w,
01256 int h,
01257 const QColorGroup & g,
01258 bool active,
01259 QMenuItem * mi,
01260 QBrush *
01261 )
01262 {
01263 p->save();
01264
01265 QColor bg(active ? g.highlight() : g.background());
01266
01267 p->fillRect(x, y, w, h, bg);
01268
01269 QColor textColour =
01270 active ?
01271