void qDrawWinPanel( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, const QBrush *fill ) { if ( sunken ) qDrawWinShades( p, x, y, w, h, g.dark(), g.light(), g.shadow(), g.midlight(), fill ); else qDrawWinShades( p, x, y, w, h, g.light(), g.shadow(), g.midlight(), g.dark(), fill ); }
/*! Draws a press-sensitive shape. */ void QWindowsStyle::drawButton( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, const QBrush* fill) { if (sunken) drawWinShades( p, x, y, w, h, g.shadow(), g.light(), g.dark(), g.button(), fill?fill: &g.brush( QColorGroup::Button ) ); else drawWinShades( p, x, y, w, h, g.light(), g.shadow(), g.button(), g.dark(), fill?fill:&g.brush( QColorGroup::Button ) ); }
/*!\reimp */ void QWindowsStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken , bool /* editable */, bool enabled, const QBrush *fill ) { qDrawWinPanel(p, x, y, w, h, g, TRUE, fill?fill:(enabled?&g.brush( QColorGroup::Base ): &g.brush( QColorGroup::Background ))); // the special reversed left shadow panel ( slightly different from drawPanel() ) //qDrawWinPanel(p, w-2-16,2,16,h-4, g, sunken); // #### DO SUNKEN! if ( sunken ) drawWinShades( p, x+w-2-16, y+2, 16, h-4, g.dark(), g.dark(), g.button(), g.button(), fill ? fill : &g.brush( QColorGroup::Button ) ); else drawWinShades( p, x+w-2-16, y+2, 16, h-4, g.midlight(), g.shadow(), g.light(), g.dark(), fill ? fill : &g.brush( QColorGroup::Button ) ); drawArrow( p, QStyle::DownArrow, sunken, x+w-2-16+ 2, y+2+ 2, 16- 4, h-4- 4, g, enabled, fill ? fill : &g.brush( QColorGroup::Button ) ); }
/*!\reimp */ void QWindowsStyle::drawSliderGroove( QPainter *p, int x, int y, int w, int h, const QColorGroup& g, QCOORD c, Orientation orient ) { if ( orient == Horizontal ) { qDrawWinPanel( p, x, y + c - 2, w, 4, g, TRUE ); p->setPen( g.shadow() ); p->drawLine( x+1, y + c - 1, x + w - 3, y + c - 1 ); } else { qDrawWinPanel( p, x + c - 2, y, 4, h, g, TRUE ); p->setPen( g.shadow() ); p->drawLine( x + c - 1, y + 1, x + c - 1, y + h - 3 ); } }
/*!\reimp */ void QWindowsStyle::drawPushButton( QPushButton* btn, QPainter *p) { #ifndef QT_NO_PUSHBUTTON QColorGroup g = btn->colorGroup(); int x1, y1, x2, y2; btn->rect().coords( &x1, &y1, &x2, &y2 ); // get coordinates p->setPen( g.foreground() ); p->setBrush( QBrush(g.button(),NoBrush) ); int diw = buttonDefaultIndicatorWidth(); if ( btn->isDefault() || btn->autoDefault() ) { if ( btn->isDefault() ) { p->setPen( g.shadow() ); p->drawRect( x1, y1, x2-x1+1, y2-y1+1 ); } x1 += diw; y1 += diw; x2 -= diw; y2 -= diw; } bool clearButton = TRUE; if ( btn->isDown() ) { if ( btn->isDefault() ) { p->setPen( g.dark() ); p->drawRect( x1, y1, x2-x1+1, y2-y1+1 ); } else { drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, &g.brush( QColorGroup::Button ) ); } } else { if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) { QBrush fill(g.light(), Dense4Pattern ); drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, &fill ); clearButton = FALSE; } else { if ( !btn->isFlat() ) drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, btn->isOn(), &g.brush( QColorGroup::Button ) ); } } if ( clearButton ) { if (btn->isDown()) p->setBrushOrigin(p->brushOrigin() + QPoint(1,1)); p->fillRect( x1+2, y1+2, x2-x1-3, y2-y1-3, g.brush( QColorGroup::Button ) ); if (btn->isDown()) p->setBrushOrigin(p->brushOrigin() - QPoint(1,1)); } if ( p->brush().style() != NoBrush ) p->setBrush( NoBrush ); #endif }
void UserViewItemBase::paintCell(QPainter *p, const QColorGroup &cg, int, int width, int) { UserListBase *view = static_cast<UserListBase*>(listView()); width = view->width() - 4; QScrollBar *vBar = view->verticalScrollBar(); if (vBar->isVisible()) width -= vBar->width(); if (width < 1) width = 1; QPixmap bg(width, height()); QPainter pp(&bg); int margin = 0; if (isSelected() && view->hasFocus() && CorePlugin::m_plugin->getUseDblClick()){ pp.fillRect(QRect(0, 0, width, height()), cg.highlight()); pp.setPen(cg.highlightedText()); }else{ pp.fillRect(QRect(0, 0, width, height()), cg.base()); PaintView pv; pv.p = &pp; pv.pos = view->viewport()->mapToParent(view->itemRect(this).topLeft()); pv.size = QSize(width, height()); pv.win = view; pv.isStatic = false; pv.height = height(); pv.margin = 0; if (CorePlugin::m_plugin->getUseSysColors()){ pp.setPen(cg.text()); }else{ pp.setPen(QColor(CorePlugin::m_plugin->getColorOnline())); } Event e(EventPaintView, &pv); e.process(); view->setStaticBackground(pv.isStatic); margin = pv.margin; } view->drawItem(this, &pp, cg, width, margin); pp.end(); if (view->m_pressedItem == this){ p->drawPixmap(QPoint(1, 1), bg); if (CorePlugin::m_plugin->getUseSysColors()){ p->setPen(cg.text()); }else{ p->setPen(QColor(CorePlugin::m_plugin->getColorOnline())); } p->moveTo(0, 0); p->lineTo(width - 1, 0); p->lineTo(width - 1, height() - 1); p->lineTo(0, height() - 1); p->lineTo(0, 0); p->setPen(cg.shadow()); p->moveTo(width - 2, 1); p->lineTo(1, 1); p->lineTo(1, height() - 2); }else{ p->drawPixmap(QPoint(0, 0), bg); } }
void QWindowsStyle::drawPanel( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, int lineWidth, const QBrush* fill) { if ( lineWidth == 2 ) { if (sunken) drawWinShades( p, x, y, w, h, g.dark(), g.light(), g.shadow(), g.midlight(), fill ); else drawWinShades( p, x, y, w, h, g.light(), g.shadow(), g.midlight(), g.dark(), fill ); } else QStyle::drawPanel( p, x, y, w, h, g, sunken, lineWidth, fill ); }
HTMLColors() { map["black"] = "#000000"; map["green"] = "#008000"; map["silver"] = "#c0c0c0"; map["lime"] = "#00ff00"; map["gray"] = "#808080"; map["olive"] = "#808000"; map["white"] = "#ffffff"; map["yellow"] = "#ffff00"; map["maroon"] = "#800000"; map["navy"] = "#000080"; map["red"] = "#ff0000"; map["blue"] = "#0000ff"; map["purple"] = "#800080"; map["teal"] = "#008080"; map["fuchsia"] = "#ff00ff"; map["aqua"] = "#00ffff"; map["crimson"] = "#dc143c"; map["indigo"] = "#4b0082"; #ifdef __BEOS__ printf( "Warning: HTMLColors::HTMLColors() not initiating all colors\n" ); #else // ### react to style changes // see http://www.richinstyle.com for details QColorGroup cg = kapp->palette().active(); map["activeborder"] = cg.light(); // bordercolor of an active window map["activecaption"] = cg.text(); // caption color of an active window map["appworkspace"] = cg.background(); // background color of an MDI interface map["highlight"] = cg.highlight(); map["highlighttext"] = cg.highlightedText(); cg = kapp->palette().inactive(); map["background"] = cg.background(); // desktop background color map["buttonface"] = cg.button(); // Button background color map["buttonhighlight"] = cg.light(); map["buttonshadow"] = cg.shadow(); map["buttontext"] = cg.buttonText(); map["captiontext"] = cg.text(); map["infobackground"] = QToolTip::palette().inactive().background(); map["menu"] = cg.background(); map["menutext"] = cg.foreground(); map["scrollbar"] = cg.background(); map["threeddarkshadow"] = cg.dark(); map["threedface"] = cg.button(); map["threedhighlight"] = cg.light(); map["threedlightshadow"] = cg.midlight(); map["window"] = cg.background(); map["windowframe"] = cg.background(); map["text"] = cg.text(); cg = kapp->palette().disabled(); map["inactiveborder"] = cg.background(); map["inactivecaption"] = cg.background(); map["inactivecaptiontext"] = cg.text(); map["graytext"] = cg.text(); #endif };
void QWindowsStyle::drawExclusiveIndicator( QPainter* p, int x, int y, int w, int h, const QColorGroup &g, bool on, bool down, bool enabled ) { static const QCOORD pts1[] = { // dark lines 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; static const QCOORD pts2[] = { // black lines 2,8, 1,7, 1,4, 2,3, 2,2, 3,2, 4,1, 7,1, 8,2, 9,2 }; static const QCOORD pts3[] = { // background lines 2,9, 3,9, 4,10, 7,10, 8,9, 9,9, 9,8, 10,7, 10,4, 9,3 }; static const QCOORD pts4[] = { // white lines 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, 11,4, 10,3, 10,2 }; static const QCOORD pts5[] = { // inner fill 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; p->eraseRect( x, y, w, h ); QPointArray a( QCOORDARRLEN(pts1), pts1 ); a.translate( x, y ); p->setPen( g.dark() ); p->drawPolyline( a ); a.setPoints( QCOORDARRLEN(pts2), pts2 ); a.translate( x, y ); p->setPen( g.shadow() ); p->drawPolyline( a ); a.setPoints( QCOORDARRLEN(pts3), pts3 ); a.translate( x, y ); p->setPen( g.midlight() ); p->drawPolyline( a ); a.setPoints( QCOORDARRLEN(pts4), pts4 ); a.translate( x, y ); p->setPen( g.light() ); p->drawPolyline( a ); a.setPoints( QCOORDARRLEN(pts5), pts5 ); a.translate( x, y ); QColor fillColor = ( down || !enabled ) ? g.button() : g.base(); p->setPen( fillColor ); p->setBrush( fillColor ) ; p->drawPolygon( a ); if ( on ) { p->setPen( NoPen ); p->setBrush( g.text() ); p->drawRect( x+5, y+4, 2, 4 ); p->drawRect( x+4, y+5, 4, 2 ); } }
void qDrawShadePanel( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, bool sunken, int lineWidth, const QBrush *fill ) { if ( w == 0 || h == 0 ) return; if ( !( w > 0 && h > 0 && lineWidth >= 0 ) ) { #if defined(QT_CHECK_RANGE) qWarning( "qDrawShadePanel() Invalid parameters." ); #endif } QColor shade = g.dark(); QColor light = g.light(); if ( fill ) { if ( fill->color() == shade ) shade = g.shadow(); if ( fill->color() == light ) light = g.midlight(); } QPen oldPen = p->pen(); // save pen QPointArray a( 4*lineWidth ); if ( sunken ) p->setPen( shade ); else p->setPen( light ); int x1, y1, x2, y2; int i; int n = 0; x1 = x; y1 = y2 = y; x2 = x+w-2; for ( i=0; i<lineWidth; i++ ) { // top shadow a.setPoint( n++, x1, y1++ ); a.setPoint( n++, x2--, y2++ ); } x2 = x1; y1 = y+h-2; for ( i=0; i<lineWidth; i++ ) { // left shadow a.setPoint( n++, x1++, y1 ); a.setPoint( n++, x2++, y2-- ); } p->drawLineSegments( a ); n = 0; if ( sunken ) p->setPen( light ); else p->setPen( shade ); x1 = x; y1 = y2 = y+h-1; x2 = x+w-1; for ( i=0; i<lineWidth; i++ ) { // bottom shadow a.setPoint( n++, x1++, y1-- ); a.setPoint( n++, x2, y2-- ); } x1 = x2; y1 = y; y2 = y+h-lineWidth-1; for ( i=0; i<lineWidth; i++ ) { // right shadow a.setPoint( n++, x1--, y1++ ); a.setPoint( n++, x2--, y2 ); } p->drawLineSegments( a ); if ( fill ) { // fill with fill color QBrush oldBrush = p->brush(); p->setPen( Qt::NoPen ); p->setBrush( *fill ); p->drawRect( x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2 ); p->setBrush( oldBrush ); } p->setPen( oldPen ); // restore pen }
void FreshStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) { #define ADD_LINE_ACTIVE ( activeControl == AddLine ) #define SUB_LINE_ACTIVE ( activeControl == SubLine ) QColorGroup g = sb->colorGroup(); int sliderMin, sliderMax, sliderLength, buttonDim; scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid )); if (sliderStart > sliderMax) { // sanity check sliderStart = sliderMax; } int dimB = buttonDim; QRect addB; QRect subB; QRect addPageR; QRect subPageR; QRect sliderR; int addX, addY, subX, subY; int length = HORIZONTAL ? sb->width() : sb->height(); int extent = HORIZONTAL ? sb->height() : sb->width(); if ( HORIZONTAL ) { subY = addY = ( extent - dimB ) / 2; subX = length - dimB - dimB; addX = length - dimB; } else { subX = addX = ( extent - dimB ) / 2; subY = length - dimB - dimB; addY = length - dimB; } int sliderEnd = sliderStart + sliderLength; int sliderW = extent; if ( HORIZONTAL ) { subB.setRect( subX,subY+1,dimB,dimB-1 ); addB.setRect( addX,addY+1,dimB,dimB-1 ); subPageR.setRect( 0, 0, sliderStart+1, sliderW ); addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW ); sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 ); } else { subB.setRect( subX+1,subY,dimB-1,dimB ); addB.setRect( addX+1,addY,dimB-1,dimB ); subPageR.setRect( 0, 0, sliderW, sliderStart+1 ); addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 ); sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength ); } bool maxedOut = (sb->maxValue() == sb->minValue()); if ( controls & AddLine ) { drawBevelButton( p, addB.x(), addB.y(), addB.width(), addB.height(), g, ADD_LINE_ACTIVE); p->setPen(g.shadow()); drawArrow( p, VERTICAL ? DownArrow : RightArrow, FALSE, addB.x()+2, addB.y()+2, addB.width()-4, addB.height()-4, g, !maxedOut, &g.brush( QColorGroup::Button )); } if ( controls & SubLine ) { drawBevelButton( p, subB.x(), subB.y(), subB.width(), subB.height(), g, SUB_LINE_ACTIVE ); p->setPen(g.shadow()); drawArrow( p, VERTICAL ? UpArrow : LeftArrow, FALSE, subB.x()+2, subB.y()+2, subB.width()-4, subB.height()-4, g, !maxedOut, &g.brush( QColorGroup::Button )); } if ( controls & SubPage ) p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(), subPageR.height(), g.brush( QColorGroup::Mid )); if ( controls & AddPage ) p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(), addPageR.height(), g.brush( QColorGroup::Mid )); if ( controls & Slider ) { QPoint bo = p->brushOrigin(); p->setBrushOrigin(sliderR.topLeft()); drawBevelButton( p, sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height(), g, FALSE, &g.brush( QColorGroup::Button ) ); p->setBrushOrigin(bo); drawRiffles( p, sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height(), g, HORIZONTAL ); } // ### perhaps this should not be able to accept focus if maxedOut? if ( sb->hasFocus() && (controls & Slider) ) p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2, sliderR.width()-5, sliderR.height()-5, sb->backgroundColor() ); }
/*!\reimp */ void QWindowsStyle::drawSlider( QPainter *p, int x, int y, int w, int h, const QColorGroup &g, Orientation orient, bool tickAbove, bool tickBelow ) { #ifndef QT_NO_SLIDER // 4444440 // 4333310 // 4322210 // 4322210 // 4322210 // 4322210 // *43210* // **410** // ***0*** const QColor c0 = g.shadow(); const QColor c1 = g.dark(); // const QColor c2 = g.button(); const QColor c3 = g.midlight(); const QColor c4 = g.light(); int x1 = x; int x2 = x+w-1; int y1 = y; int y2 = y+h-1; p->fillRect( x, y, w, h, g.brush( QColorGroup::Background ) ); if ( tickAbove && tickBelow || !tickAbove && !tickBelow ) { qDrawWinButton( p, QRect(x,y,w,h), g, FALSE, &g.brush( QColorGroup::Button ) ); return; } enum { SlUp, SlDown, SlLeft, SlRight } dir; if ( orient == Horizontal ) if ( tickAbove ) dir = SlUp; else dir = SlDown; else if ( tickAbove ) dir = SlLeft; else dir = SlRight; QPointArray a; int d = 0; switch ( dir ) { case SlUp: y1 = y1 + w/2; d = (w + 1) / 2 - 1; a.setPoints(5, x1,y1, x1,y2, x2,y2, x2,y1, x1+d,y1-d ); break; case SlDown: y2 = y2 - w/2; d = (w + 1) / 2 - 1; a.setPoints(5, x1,y1, x1,y2, x1+d,y2+d, x2,y2, x2,y1 ); break; case SlLeft: d = (h + 1) / 2 - 1; x1 = x1 + h/2; a.setPoints(5, x1,y1, x1-d,y1+d, x1,y2, x2,y2, x2,y1); break; case SlRight: d = (h + 1) / 2 - 1; x2 = x2 - h/2; a.setPoints(5, x1,y1, x1,y2, x2,y2, x2+d,y1+d, x2,y1 ); break; } QBrush oldBrush = p->brush(); p->setBrush( g.brush( QColorGroup::Button ) ); p->setPen( NoPen ); p->drawRect( x1, y1, x2-x1+1, y2-y1+1 ); p->drawPolygon( a ); p->setBrush( oldBrush ); if ( dir != SlUp ) { p->setPen( c4 ); p->drawLine( x1, y1, x2, y1 ); p->setPen( c3 ); p->drawLine( x1, y1+1, x2, y1+1 ); } if ( dir != SlLeft ) { p->setPen( c3 ); p->drawLine( x1+1, y1+1, x1+1, y2 ); p->setPen( c4 ); p->drawLine( x1, y1, x1, y2 ); } if ( dir != SlRight ) { p->setPen( c0 ); p->drawLine( x2, y1, x2, y2 ); p->setPen( c1 ); p->drawLine( x2-1, y1+1, x2-1, y2-1 ); } if ( dir != SlDown ) { p->setPen( c0 ); p->drawLine( x1, y2, x2, y2 ); p->setPen( c1 ); p->drawLine( x1+1, y2-1, x2-1, y2-1 ); } switch ( dir ) { case SlUp: p->setPen( c4 ); p->drawLine( x1, y1, x1+d, y1-d); p->setPen( c0 ); d = w - d - 1; p->drawLine( x2, y1, x2-d, y1-d); d--; p->setPen( c3 ); p->drawLine( x1+1, y1, x1+1+d, y1-d ); p->setPen( c1 ); p->drawLine( x2-1, y1, x2-1-d, y1-d); break; case SlDown: p->setPen( c4 ); p->drawLine( x1, y2, x1+d, y2+d); p->setPen( c0 ); d = w - d - 1; p->drawLine( x2, y2, x2-d, y2+d); d--; p->setPen( c3 ); p->drawLine( x1+1, y2, x1+1+d, y2+d ); p->setPen( c1 ); p->drawLine( x2-1, y2, x2-1-d, y2+d); break; case SlLeft: p->setPen( c4 ); p->drawLine( x1, y1, x1-d, y1+d); p->setPen( c0 ); d = h - d - 1; p->drawLine( x1, y2, x1-d, y2-d); d--; p->setPen( c3 ); p->drawLine( x1, y1+1, x1-d, y1+1+d ); p->setPen( c1 ); p->drawLine( x1, y2-1, x1-d, y2-1-d); break; case SlRight: p->setPen( c4 ); p->drawLine( x2, y1, x2+d, y1+d); p->setPen( c0 ); d = h - d - 1; p->drawLine( x2, y2, x2+d, y2-d); d--; p->setPen( c3 ); p->drawLine( x2, y1+1, x2+d, y1+1+d ); p->setPen( c1 ); p->drawLine( x2, y2-1, x2+d, y2-1-d); break; } #endif }
/*!\reimp */ void QWindowsStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) { #ifndef QT_NO_SCROLLBAR #define ADD_LINE_ACTIVE ( activeControl == AddLine ) #define SUB_LINE_ACTIVE ( activeControl == SubLine ) QColorGroup g = sb->colorGroup(); int sliderMin, sliderMax, sliderLength, buttonDim; scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); if (sliderStart > sliderMax) { // sanity check sliderStart = sliderMax; } int b = 0; int dimB = buttonDim; QRect addB; QRect subB; QRect addPageR; QRect subPageR; QRect sliderR; int addX, addY, subX, subY; int length = HORIZONTAL ? sb->width() : sb->height(); int extent = HORIZONTAL ? sb->height() : sb->width(); if ( HORIZONTAL ) { subY = addY = ( extent - dimB ) / 2; subX = b; addX = length - dimB - b; } else { subX = addX = ( extent - dimB ) / 2; subY = b; addY = length - dimB - b; } subB.setRect( subX,subY,dimB,dimB ); addB.setRect( addX,addY,dimB,dimB ); int sliderEnd = sliderStart + sliderLength; int sliderW = extent - b*2; if ( HORIZONTAL ) { subPageR.setRect( subB.right() + 1, b, sliderStart - subB.right() - 1 , sliderW ); addPageR.setRect( sliderEnd, b, addX - sliderEnd, sliderW ); sliderR .setRect( sliderStart, b, sliderLength, sliderW ); } else { subPageR.setRect( b, subB.bottom() + 1, sliderW, sliderStart - subB.bottom() - 1 ); addPageR.setRect( b, sliderEnd, sliderW, addY - sliderEnd ); sliderR .setRect( b, sliderStart, sliderW, sliderLength ); } bool maxedOut = (sb->maxValue() == sb->minValue()); if ( controls & AddLine ) { qDrawWinPanel( p, addB.x(), addB.y(), addB.width(), addB.height(), g, ADD_LINE_ACTIVE, &g.brush( QColorGroup::Button ) ); drawArrow( p, VERTICAL ? DownArrow : RightArrow, ADD_LINE_ACTIVE, addB.x()+2, addB.y()+2, addB.width()-4, addB.height()-4, g, !maxedOut ); } if ( controls & SubLine ) { qDrawWinPanel( p, subB.x(), subB.y(), subB.width(), subB.height(), g, SUB_LINE_ACTIVE, &g.brush( QColorGroup::Button ) ); drawArrow( p, VERTICAL ? UpArrow : LeftArrow, SUB_LINE_ACTIVE, subB.x()+2, subB.y()+2, subB.width()-4, subB.height()-4, g, !maxedOut ); } QBrush br = g.brush( QColorGroup::Light ).pixmap() ? g.brush( QColorGroup::Light ) : QBrush(g.light(), Dense4Pattern); p->setBrush( br ); p->setPen( NoPen ); p->setBackgroundMode( OpaqueMode ); if ( maxedOut ) { p->drawRect( sliderR ); } else { if ( (controls & SubPage && SubPage == activeControl) || (controls & AddPage && AddPage == activeControl) ) { QBrush b = p->brush(); QColor c = p->backgroundColor(); // p->fillRect( AddPage == activeControl? addPageR : subPageR, g.fillDark() ); p->setBackgroundColor( g.dark() ); p->setBrush( QBrush(g.shadow(), Dense4Pattern) ); p->drawRect( AddPage == activeControl? addPageR : subPageR ); p->setBackgroundColor( c ); p->setBrush( b ); } if ( controls & SubPage && SubPage != activeControl) p->drawRect( subPageR ); if ( controls & AddPage && AddPage != activeControl) p->drawRect( addPageR ); if ( controls & Slider ) { if ( !maxedOut ) { QPoint bo = p->brushOrigin(); if ( !sb->testWState(WState_GlobalBrushOrigin) ) p->setBrushOrigin(sliderR.topLeft()); qDrawWinPanel( p, sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height(), g, FALSE, &g.brush( QColorGroup::Button ) ); p->setBrushOrigin(bo); } } } // ### perhaps this should not be able to accept focus if maxedOut? if ( sb->hasFocus() && (controls & Slider) ) drawFocusRect(p, QRect(sliderR.x()+2, sliderR.y()+2, sliderR.width()-5, sliderR.height()-5), g, &sb->backgroundColor()); #endif }
/*!\reimp */ void QPlatinumStyle::drawComplexControl( ComplexControl control, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how, SCFlags sub, SCFlags subActive, const QStyleOption& opt ) const { switch ( control ) { case CC_ComboBox: { int x, y, w, h; r.rect( &x, &y, &w, &h ); p->fillRect( x + 2, y + 2, w - 4, h - 4, cg.brush(QColorGroup::Button) ); // the bright side p->setPen(cg.shadow()); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.light() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the dark side! p->setPen( cg.mid() ); p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 2 ); p->setPen (cg.shadow() ); p->drawLine( x + 1, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); // top left corner: p->setPen( cg.background() ); p->drawPoint( x, y ); p->drawPoint( x + 1, y ); p->drawPoint( x, y + 1 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + 1 ); p->setPen( white ); p->drawPoint( x + 3, y + 3 ); // bottom left corner: p->setPen( cg.background() ); p->drawPoint( x, y + h - 1 ); p->drawPoint( x + 1, y + h - 1 ); p->drawPoint( x, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + h - 2 ); // top right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y ); p->drawPoint( x + w - 2, y ); p->drawPoint( x + w - 1, y + 1 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + 1 ); // bottom right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y + h - 1 ); p->drawPoint( x + w - 2, y + h - 1 ); p->drawPoint( x + w - 1, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 3, y + h - 3 ); if ( sub & SC_ComboBoxArrow ) { QRect rTmp = querySubControlMetrics( CC_ComboBox, widget, SC_ComboBoxArrow, opt ); int xx = rTmp.x(), yy = rTmp.y(), ww = rTmp.width(), hh = rTmp.height(); // the bright side p->setPen( cg.mid() ); p->drawLine( xx, yy+2, xx, yy+hh-3 ); p->setPen( cg.button() ); p->drawLine( xx+1, yy+1, xx+ww-2, yy+1 ); p->drawLine( xx+1, yy+1, xx+1, yy+hh-2 ); p->setPen( cg.light() ); p->drawLine( xx+2, yy+2, xx+2, yy+hh-2 ); p->drawLine( xx+2, yy+2, xx+ww-2, yy+2 ); // the dark side! p->setPen( cg.mid() ); p->drawLine( xx+3, yy+hh-3 ,xx+ww-3, yy+hh-3 ); p->drawLine( xx+ww-3, yy+3, xx+ww-3, yy+hh-3 ); p->setPen( cg.dark() ); p->drawLine( xx+2, yy+hh-2 ,xx+ww-2, yy+hh-2 ); p->drawLine( xx+ww-2, yy+2, xx+ww-2, yy+hh-2 ); p->setPen( cg.shadow() ); p->drawLine( xx+1, yy+hh-1,xx+ww-1, yy+hh-1 ); p->drawLine( xx+ww-1, yy, xx+ww-1, yy+hh-1 ); // top right corner: p->setPen( cg.background() ); p->drawPoint( xx + ww - 1, yy ); p->drawPoint( xx + ww - 2, yy ); p->drawPoint( xx + ww - 1, yy + 1 ); p->setPen( cg.shadow() ); p->drawPoint( xx + ww - 2, yy + 1 ); // bottom right corner: p->setPen( cg.background() ); p->drawPoint( xx + ww - 1, yy + hh - 1 ); p->drawPoint( xx + ww - 2, yy + hh - 1 ); p->drawPoint( xx + ww - 1, yy + hh - 2 ); p->setPen( cg.shadow() ); p->drawPoint( xx + ww - 2, yy + hh - 2 ); p->setPen( cg.dark() ); p->drawPoint( xx + ww - 3, yy + hh - 3 ); p->setPen( cg.mid() ); p->drawPoint( xx + ww - 4, yy + hh - 4 ); // and the arrows p->setPen( cg.foreground() ); QPointArray a ; a.setPoints( 7, -3,1, 3,1, -2,0, 2,0, -1,-1, 1,-1, 0,-2 ); a.translate( xx + ww / 2, yy + hh / 2 - 3 ); p->drawLineSegments( a, 0, 3 ); // draw arrow p->drawPoint( a[6] ); a.setPoints( 7, -3,-1, 3,-1, -2,0, 2,0, -1,1, 1,1, 0,2 ); a.translate( xx + ww / 2, yy + hh / 2 + 2 ); p->drawLineSegments( a, 0, 3 ); // draw arrow p->drawPoint( a[6] ); } #ifndef QT_NO_COMBOBOX if ( sub & SC_ComboBoxEditField ) { const QComboBox *cmb; cmb = (const QComboBox*)widget; // sadly this is pretty much the windows code, except // for the first fillRect call... QRect re = QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, SC_ComboBoxEditField ), widget ); if ( cmb->hasFocus() && !cmb->editable() ) p->fillRect( re.x() + 1, re.y() + 1, re.width() - 2, re.height() - 2, cg.brush( QColorGroup::Highlight ) ); if ( cmb->hasFocus() ) { p->setPen( cg.highlightedText() ); p->setBackgroundColor( cg.highlight() ); } else { p->setPen( cg.text() ); p->setBackgroundColor( cg.background() ); } if ( cmb->hasFocus() && !cmb->editable() ) { QRect re = QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cmb ), widget ); drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight())); } if ( cmb->editable() ) { // need this for the moment... // was the code in comboButton rect QRect ir( x + 3, y + 3, w - 6 - 16, h - 6 ); if ( QApplication::reverseLayout() ) ir.moveBy( 16, 0 ); // end comboButtonRect... ir.setRect( ir.left() - 1, ir.top() - 1, ir.width() + 2, ir.height() + 2 ); qDrawShadePanel( p, ir, cg, TRUE, 2, 0 ); } } #endif break; } case CC_Slider: { #ifndef QT_NO_SLIDER const QSlider *slider = (const QSlider *) widget; int thickness = pixelMetric( PM_SliderControlThickness, widget ); int len = pixelMetric( PM_SliderLength, widget ); int ticks = slider->tickmarks(); QRect groove = querySubControlMetrics(CC_Slider, widget, SC_SliderGroove, opt), handle = querySubControlMetrics(CC_Slider, widget, SC_SliderHandle, opt); if ((sub & SC_SliderGroove) && groove.isValid()) { p->fillRect( groove, cg.brush(QColorGroup::Background) ); int x, y, w, h; int mid = thickness / 2; if ( ticks & QSlider::Above ) mid += len / 8; if ( ticks & QSlider::Below ) mid -= len / 8; if ( slider->orientation() == Horizontal ) { x = 0; y = groove.y() + mid - 3; w = slider->width(); h = 7; } else { x = groove.x() + mid - 3; y = 0; w = 7; h = slider->height(); } p->fillRect( x, y, w, h, cg.brush( QColorGroup::Dark )); // the dark side p->setPen( cg.dark() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1); p->setPen( cg.shadow() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the bright side! p->setPen(cg.shadow()); p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 ); p->setPen( cg.light() ); p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); // top left corner: p->setPen(cg.background()); p->drawPoint( x, y ); p->drawPoint( x + 1, y ); p->drawPoint( x, y + 1 ); p->setPen(cg.shadow()); p->drawPoint( x + 1, y + 1 ); // bottom left corner: p->setPen( cg.background() ); p->drawPoint( x, y + h - 1 ); p->drawPoint( x + 1, y + h - 1 ); p->drawPoint( x, y + h - 2 ); p->setPen( cg.light() ); p->drawPoint( x + 1, y + h - 2 ); // top right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y ); p->drawPoint( x + w - 2, y ); p->drawPoint( x + w - 1, y + 1 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 2, y + 1 ); // bottom right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y + h - 1 ); p->drawPoint( x + w - 2, y + h - 1 ); p->drawPoint( x + w - 1, y + h - 2 ); p->setPen( cg.light() ); p->drawPoint( x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 3, y + h - 3 ); // ### end slider groove if ( how & Style_HasFocus ) drawPrimitive( PE_FocusRect, p, groove, cg ); } if ((sub & SC_SliderHandle) && handle.isValid()) { const QColor c0 = cg.shadow(); const QColor c1 = cg.dark(); const QColor c3 = cg.light(); int x1 = handle.x(); int x2 = handle.x() + handle.width() - 1; int y1 = handle.y(); int y2 = handle.y() + handle.height() - 1; int mx = handle.width() / 2; int my = handle.height() / 2; if ( slider->orientation() == Vertical ) { // Background QBrush oldBrush = p->brush(); p->setBrush( cg.brush( QColorGroup::Button ) ); p->setPen( NoPen ); QPointArray a(6); a.setPoint( 0, x1 + 1, y1 + 1 ); a.setPoint( 1, x2 - my + 2, y1 + 1 ); a.setPoint( 2, x2 - 1, y1 + my - 1 ); a.setPoint( 3, x2 - 1, y2 - my + 1 ); a.setPoint( 4, x2 - my + 2, y2 - 1 ); a.setPoint( 5, x1 + 1, y2 - 1 ); p->drawPolygon( a ); p->setBrush( oldBrush ); // shadow border p->setPen( c0 ); p->drawLine( x1, y1 + 1, x1,y2 - 1 ); p->drawLine( x2 - my + 2, y1, x2, y1 + my - 2 ); p->drawLine( x2 - my + 2, y2, x2, y1 + my + 2 ); p->drawLine( x2, y1 + my - 2, x2, y1 + my + 2 ); p->drawLine( x1 + 1, y1, x2 - my + 2, y1 ); p->drawLine( x1 + 1, y2, x2 - my + 2, y2 ); // light shadow p->setPen( c3 ); p->drawLine( x1 + 1, y1 + 2, x1 + 1, y2 - 2 ); p->drawLine( x1 + 1, y1 + 1, x2 - my + 2, y1 + 1 ); p->drawLine( x2 - my + 2, y1 + 1, x2 - 1, y1 + my - 2 ); // dark shadow p->setPen(c1); p->drawLine( x2 - 1, y1 + my - 2, x2 - 1, y1 + my + 2 ); p->drawLine( x2 - my + 2, y2 - 1, x2 - 1, y1 + my + 2 ); p->drawLine( x1 + 1, y2 - 1, x2 -my + 2, y2 - 1 ); drawRiffles( p, handle.x(), handle.y() + 2, handle.width() - 3, handle.height() - 4, cg, TRUE ); } else { // Horizontal QBrush oldBrush = p->brush(); p->setBrush( cg.brush( QColorGroup::Button ) ); p->setPen( NoPen ); QPointArray a(6); a.setPoint( 0, x2 - 1, y1 + 1 ); a.setPoint( 1, x2 - 1, y2 - mx + 2 ); a.setPoint( 2, x2 - mx + 1, y2 - 1 ); a.setPoint( 3, x1 + mx - 1, y2 - 1 ); a.setPoint( 4, x1 + 1, y2 - mx + 2 ); a.setPoint( 5, x1 + 1, y1 + 1 ); p->drawPolygon( a ); p->setBrush( oldBrush ); // shadow border p->setPen( c0 ); p->drawLine( x1 + 1, y1, x2 - 1, y1 ); p->drawLine( x1, y2 - mx + 2, x1 + mx - 2, y2 ); p->drawLine( x2, y2 - mx + 2, x1 + mx + 2, y2 ); p->drawLine( x1 + mx - 2, y2, x1 + mx + 2, y2 ); p->drawLine( x1, y1 + 1, x1, y2 - mx + 2 ); p->drawLine( x2, y1 + 1, x2, y2 - mx + 2 ); // light shadow p->setPen(c3); p->drawLine( x1 + 1, y1 + 1, x2 - 1, y1 + 1 ); p->drawLine( x1 + 1, y1 + 1, x1 + 1, y2 - mx + 2 ); // dark shadow p->setPen(c1); p->drawLine( x2 - 1, y1 + 1, x2 - 1, y2 - mx + 2 ); p->drawLine( x1 + 1, y2 - mx + 2, x1 + mx - 2, y2 - 1 ); p->drawLine( x2 - 1, y2 - mx + 2, x1 + mx + 2, y2 - 1 ); p->drawLine( x1 + mx - 2, y2 - 1, x1 + mx + 2, y2 - 1 ); drawRiffles( p, handle.x() + 2, handle.y(), handle.width() - 4, handle.height() - 5, cg, FALSE ); } } if ( sub & SC_SliderTickmarks ) QCommonStyle::drawComplexControl( control, p, widget, r, cg, how, SC_SliderTickmarks, subActive, opt ); #endif break; } default: QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how, sub, subActive, opt ); break; } }
/*!\reimp */ void QPlatinumStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags, const QStyleOption& opt ) const { switch (pe) { case PE_HeaderSection: { // adjust the sunken flag, otherwise headers are drawn // sunken... if ( flags & Style_Sunken ) flags ^= Style_Sunken; drawPrimitive( PE_ButtonBevel, p, r, cg, flags, opt ); break; } case PE_ButtonTool: { // tool buttons don't change color when pushed in platinum, // so we need to make the mid and button color the same QColorGroup myCG = cg; QBrush fill; // quick trick to make sure toolbuttons drawn sunken // when they are activated... if ( flags & Style_On ) flags |= Style_Sunken; fill = myCG.brush( QColorGroup::Button ); myCG.setBrush( QColorGroup::Mid, fill ); drawPrimitive( PE_ButtonBevel, p, r, myCG, flags, opt ); break; } case PE_ButtonBevel: { int x, y, w, h; r.rect( &x, &y, &w, &h ); QPen oldPen = p->pen(); if ( w * h < 1600 || QABS(w - h) > 10 ) { // small buttons if ( !(flags & (Style_Sunken | Style_Down)) ) { p->fillRect( x + 2, y + 2, w - 4, h - 4, cg.brush(QColorGroup::Button) ); // the bright side p->setPen( cg.dark() ); // the bright side p->setPen( cg.dark() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.light() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the dark side p->setPen( cg.mid() ); p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 3 ); p->setPen( cg.dark().dark() ); p->drawLine( x + 1, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y + 1, x + w - 1, y + h - 2 ); } else { p->fillRect(x + 2, y + 2, w - 4, h - 4, cg.brush( QColorGroup::Mid )); // the dark side p->setPen( cg.dark().dark() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.mid().dark()); p->drawLine( x + 1, y + 1, x + w-2, y + 1); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the bright side! p->setPen(cg.button()); p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 ); p->setPen(cg.dark()); p->drawLine(x, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine(x + w - 1, y, x + w - 1, y + h - 1 ); } } else { // big ones if ( !(flags & (Style_Sunken | Style_Down)) ) { p->fillRect( x + 3, y + 3, w - 6, h - 6, cg.brush(QColorGroup::Button) ); // the bright side p->setPen( cg.button().dark() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.button() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); p->setPen( cg.light() ); p->drawLine( x + 2, y + 2, x + 2, y + h - 2 ); p->drawLine( x + 2, y + 2, x + w - 2, y + 2 ); // the dark side! p->setPen( cg.mid() ); p->drawLine( x + 3, y + h - 3, x + w - 3, y + h - 3 ); p->drawLine( x + w - 3, y + 3, x + w - 3, y + h - 3 ); p->setPen( cg.dark() ); p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 2 ); p->setPen( cg.dark().dark() ); p->drawLine( x + 1, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y + 1, x + w - 1, y + h - 1 ); } else { p->fillRect( x + 3, y + 3, w - 6, h - 6, cg.brush( QColorGroup::Mid ) ); // the dark side p->setPen( cg.dark().dark().dark() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.dark().dark() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); p->setPen( cg.mid().dark() ); p->drawLine( x + 2, y + 2, x + 2, y + w - 2 ); p->drawLine( x + 2, y + 2, x + w - 2, y + 2 ); // the bright side! p->setPen( cg.button() ); p->drawLine( x + 2, y + h - 3, x + w - 3, y + h - 3 ); p->drawLine( x + w - 3, y + 3, x + w - 3, y + h - 3 ); p->setPen( cg.midlight() ); p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); // corners p->setPen( mixedColor(cg.dark().dark().dark(), cg.dark()) ); p->drawPoint( x, y + h - 1 ); p->drawPoint( x + w - 1, y ); p->setPen( mixedColor(cg.dark().dark(), cg.midlight()) ); p->drawPoint( x + 1, y + h - 2 ); p->drawPoint( x + w - 2, y + 1 ); p->setPen( mixedColor(cg.mid().dark(), cg.button() ) ); p->drawPoint( x + 2, y + h - 3 ); p->drawPoint( x + w - 3, y + 2 ); } } p->setPen( oldPen ); break; } case PE_ButtonCommand: { QPen oldPen = p->pen(); int x, y, w, h; r.rect( &x, &y, &w, &h); if ( !(flags & (Style_Down | Style_On)) ) { p->fillRect( x+3, y+3, w-6, h-6, cg.brush( QColorGroup::Button )); // the bright side p->setPen( cg.shadow() ); p->drawLine( x, y, x+w-1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.button() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); p->setPen( cg.light() ); p->drawLine( x + 2, y + 2, x + 2, y + h - 2 ); p->drawLine( x + 2, y + 2, x + w - 2, y + 2 ); // the dark side! p->setPen( cg.mid() ); p->drawLine( x + 3, y + h - 3 ,x + w - 3, y + h - 3 ); p->drawLine( x + w - 3, y + 3, x + w - 3, y + h - 3 ); p->setPen( cg.dark() ); p->drawLine( x + 2, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 2, x + w - 2, y + h - 2 ); p->setPen( cg.shadow() ); p->drawLine( x + 1, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); // top left corner: p->setPen( cg.background() ); p->drawPoint( x, y ); p->drawPoint( x + 1, y ); p->drawPoint( x, y+1 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + 1 ); p->setPen( cg.button() ); p->drawPoint( x + 2, y + 2 ); p->setPen( white ); p->drawPoint( x + 3, y + 3 ); // bottom left corner: p->setPen( cg.background() ); p->drawPoint( x, y + h - 1 ); p->drawPoint( x + 1, y + h - 1 ); p->drawPoint( x, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + h - 2 ); p->setPen( cg.dark() ); p->drawPoint( x + 2, y + h - 3 ); // top right corner: p->setPen( cg.background() ); p->drawPoint( x + w -1, y ); p->drawPoint( x + w - 2, y ); p->drawPoint( x + w - 1, y + 1 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + 1 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 3, y + 2 ); // bottom right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y + h - 1 ); p->drawPoint( x + w - 2, y + h - 1 ); p->drawPoint( x + w - 1, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 3, y + h - 3 ); p->setPen( cg.mid() ); p->drawPoint( x + w - 4, y + h - 4 ); } else { p->fillRect( x + 2, y + 2, w - 4, h - 4, cg.brush(QColorGroup::Dark) ); // the dark side p->setPen( cg.shadow() ); p->drawLine( x, y, x + w - 1, y ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.dark().dark() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the bright side! p->setPen( cg.button() ); p->drawLine( x + 1, y + h - 2, x + w - 2, y + h - 2 ); p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); // top left corner: p->setPen( cg.background() ); p->drawPoint( x, y ); p->drawPoint( x + 1, y ); p->drawPoint( x, y + 1 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + 1 ); p->setPen( cg.dark().dark() ); p->drawPoint( x + 3, y + 3 ); // bottom left corner: p->setPen( cg.background() ); p->drawPoint( x, y + h - 1 ); p->drawPoint( x + 1, y + h - 1 ); p->drawPoint( x, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + 1, y + h - 2 ); // top right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y ); p->drawPoint( x + w - 2, y ); p->drawPoint( x + w - 1, y + 1 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + 1 ); // bottom right corner: p->setPen( cg.background() ); p->drawPoint( x + w - 1, y + h - 1 ); p->drawPoint( x + w - 2, y + h - 1 ); p->drawPoint( x + w - 1, y + h - 2 ); p->setPen( cg.shadow() ); p->drawPoint( x + w - 2, y + h - 2 ); p->setPen( cg.dark() ); p->drawPoint( x + w - 3, y + h - 3 ); p->setPen( cg.mid() ); p->drawPoint( x + w - 4, y + h - 4 ); } p->setPen( oldPen ); break; } case PE_Indicator: { drawPrimitive( PE_ButtonBevel, p, QRect(r.x(), r.y(), r.width() - 2, r.height()), cg, flags ); p->fillRect( r.x() + r.width() - 2, r.y(), 2, r.height(), cg.brush( QColorGroup::Background ) ); p->setPen( cg.shadow() ); p->drawRect( r.x(), r.y(), r.width() - 2, r.height() ); static const QCOORD nochange_mark[] = { 3,5, 9,5, 3,6, 9,6 }; static const QCOORD check_mark[] = { 3,5, 5,5, 4,6, 5,6, 5,7, 6,7, 5,8, 6,8, 6,9, 9,9, 6,10, 8,10, 7,11, 8,11, 7,12, 7,12, 8,8, 9,8, 8,7, 10,7, 9,6, 10,6, 9,5, 11,5, 10,4, 11,4, 10,3, 12,3, 11,2, 12,2, 11,1, 13,1, 12,0, 13,0 }; if ( !(flags & Style_Off) ) { QPen oldPen = p->pen(); int x1 = r.x(); int y1 = r.y(); if ( flags & Style_Down ) { x1++; y1++; } QPointArray amark; if ( flags & Style_On ) { amark = QPointArray( sizeof(check_mark)/(sizeof(QCOORD)*2), check_mark ); // ### KLUDGE!! flags ^= Style_On; flags ^= Style_Down; } else if ( flags & Style_NoChange ) { amark = QPointArray( sizeof(nochange_mark) / (sizeof(QCOORD) * 2), nochange_mark ); } amark.translate( x1 + 1, y1 + 1 ); p->setPen( cg.dark() ); p->drawLineSegments( amark ); amark.translate( -1, -1 ); p->setPen( cg.foreground() ); p->drawLineSegments( amark ); p->setPen( oldPen ); } break; } case PE_IndicatorMask: { int x, y, w, h; r.rect( &x, &y, &w, &h ); p->fillRect( x, y, w - 2, h, color1); if ( flags & Style_Off ) { QPen oldPen = p->pen(); p->setPen ( QPen(color1, 2)); p->drawLine( x + 2, y + h / 2 - 1, x + w / 2 - 1, y + h - 4 ); p->drawLine( x + w / 2 - 1, y + h - 4, x + w, 0); p->setPen( oldPen ); } break; } case PE_ExclusiveIndicator: { #define QCOORDARRLEN(x) sizeof(x) / (sizeof(QCOORD) * 2 ) bool down = flags & Style_Down; bool on = flags & Style_On; static const QCOORD pts1[] = { // normal circle 5,0, 8,0, 9,1, 10,1, 11,2, 12,3, 12,4, 13,5, 13,8, 12,9, 12,10, 11,11, 10,12, 9,12, 8,13, 5,13, 4,12, 3,12, 2,11, 1,10, 1,9, 0,8, 0,5, 1,4, 1,3, 2,2, 3,1, 4,1 }; static const QCOORD pts2[] = { // top left shadow 5,1, 8,1, 3,2, 7,2, 2,3, 5,3, 2,4, 4,4, 1,5, 3,5, 1,6, 1,8, 2,6, 2,7 }; static const QCOORD pts3[] = { // bottom right, dark 5,12, 8,12, 7,11, 10,11, 8,10, 11,10, 9,9, 11,9, 10,8, 12,8, 11,7, 11,7, 12,5, 12,7 }; static const QCOORD pts4[] = { // bottom right, light 5,12, 8,12, 7,11, 10,11, 9,10, 11,10, 10,9, 11,9, 11,7, 11,8, 12,5, 12,8 }; static const QCOORD pts5[] = { // check mark 6,4, 8,4, 10,6, 10,8, 8,10, 6,10, 4,8, 4,6 }; static const QCOORD pts6[] = { // check mark extras 4,5, 5,4, 9,4, 10,5, 10,9, 9,10, 5,10, 4,9 }; int x, y; x = r.x(); y = r.y(); p->eraseRect( r ); p->setBrush( (down||on) ? cg.brush( QColorGroup::Dark ) : cg.brush( QColorGroup::Button) ); p->setPen( NoPen ); p->drawEllipse( x, y, 13, 13 ); p->setPen( cg.shadow() ); QPointArray a( QCOORDARRLEN(pts1), pts1 ); a.translate( x, y ); p->drawPolyline( a ); // draw normal circle QColor tc, bc; const QCOORD *bp; int bl; if ( down || on ) { // pressed down or on tc = cg.dark().dark(); bc = cg.light(); bp = pts4; bl = QCOORDARRLEN(pts4); } else { // released tc = cg.light(); bc = cg.dark(); bp = pts3; bl = QCOORDARRLEN(pts3); } p->setPen( tc ); a.setPoints( QCOORDARRLEN(pts2), pts2 ); a.translate( x, y ); p->drawLineSegments( a ); // draw top shadow p->setPen( bc ); a.setPoints( bl, bp ); a.translate( x, y ); p->drawLineSegments( a ); if ( on ) { // draw check mark int x1 = x, y1 = y; p->setBrush( cg.foreground() ); p->setPen( cg.foreground() ); a.setPoints( QCOORDARRLEN(pts5), pts5 ); a.translate( x1, y1 ); p->drawPolygon( a ); p->setBrush( NoBrush ); p->setPen( cg.dark() ); a.setPoints( QCOORDARRLEN(pts6), pts6 ); a.translate( x1, y1 ); p->drawLineSegments( a ); } break; } case PE_ExclusiveIndicatorMask: { static const QCOORD pts1[] = { // normal circle 5,0, 8,0, 9,1, 10,1, 11,2, 12,3, 12,4, 13,5, 13,8, 12,9, 12,10, 11,11, 10,12, 9,12, 8,13, 5,13, 4,12, 3,12, 2,11, 1,10, 1,9, 0,8, 0,5, 1,4, 1,3, 2,2, 3,1, 4,1 }; QPointArray a(QCOORDARRLEN(pts1), pts1); a.translate(r.x(), r.y()); p->setPen(color1); p->setBrush(color1); p->drawPolygon(a); break; } case PE_ScrollBarAddLine: { drawPrimitive( PE_ButtonBevel, p, r, cg, (flags & Style_Enabled) | ((flags & Style_Down) ? Style_Sunken : Style_Raised) ); p->setPen( cg.shadow() ); p->drawRect( r ); drawPrimitive( ((flags & Style_Horizontal) ? PE_ArrowRight : PE_ArrowDown), p, QRect(r.x() + 2, r.y() + 2, r.width() - 4, r.height() - 4), cg, flags ); break; } case PE_ScrollBarSubLine: { drawPrimitive( PE_ButtonBevel, p, r, cg, (flags & Style_Enabled) | ((flags & Style_Down) ? Style_Sunken : Style_Raised) ); p->setPen( cg.shadow() ); p->drawRect( r ); drawPrimitive( ((flags & Style_Horizontal) ? PE_ArrowLeft : PE_ArrowUp ), p, QRect(r.x() + 2, r.y() + 2, r.width() - 4, r.height() - 4), cg, flags ); break; } case PE_ScrollBarAddPage: case PE_ScrollBarSubPage: { QPen oldPen = p->pen(); if ( r.width() < 3 || r.height() < 3 ) { p->fillRect( r, cg.brush(QColorGroup::Mid) ); p->setPen( cg.shadow() ); p->drawRect( r ); p->setPen( oldPen ); } else { int x, y, w, h; r.rect( &x, &y, &w, &h ); if ( flags & Style_Horizontal ) { p->fillRect( x + 2, y + 2, w - 2, h - 4, cg.brush(QColorGroup::Mid) ); // the dark side p->setPen( cg.dark().dark() ); p->drawLine( x, y, x + w - 1, y ); p->setPen( cg.shadow()); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.mid().dark()); p->drawLine( x + 1, y + 1, x + w - 1, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 2 ); // the bright side! p->setPen( cg.button()); p->drawLine( x + 1, y + h - 2, x + w - 1, y + h - 2 ); p->setPen( cg.shadow()); p->drawLine( x, y + h - 1, x + w - 1, y + h - 1 ); } else { p->fillRect( x + 2, y + 2, w - 4, h - 2, cg.brush(QColorGroup::Mid) ); // the dark side p->setPen( cg.dark().dark() ); p->drawLine( x, y, x + w - 1, y ); p->setPen( cg.shadow() ); p->drawLine( x, y, x, y + h - 1 ); p->setPen( cg.mid().dark() ); p->drawLine( x + 1, y + 1, x + w - 2, y + 1 ); p->drawLine( x + 1, y + 1, x + 1, y + h - 1 ); // the bright side! p->setPen( cg.button() ); p->drawLine( x + w - 2, y + 1, x + w - 2, y + h - 1 ); p->setPen( cg.shadow() ); p->drawLine( x + w - 1, y, x + w - 1, y + h - 1 ); } } p->setPen( oldPen ); break; } case PE_ScrollBarSlider: { QPoint bo = p->brushOrigin(); p->setBrushOrigin( r.topLeft() ); drawPrimitive( PE_ButtonBevel, p, r, cg, Style_Raised ); p->setBrushOrigin( bo ); drawRiffles( p, r.x(), r.y(), r.width(), r.height(), cg, flags & Style_Horizontal ); p->setPen( cg.shadow() ); p->drawRect( r ); if ( flags & Style_HasFocus ) { drawPrimitive( PE_FocusRect, p, QRect(r.x() + 2, r.y() + 2, r.width() - 5, r.height() - 5 ), cg, flags ); } break; } default: QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, opt ); break; } }