本文整理汇总了C++中QColorGroup::mid方法的典型用法代码示例。如果您正苦于以下问题:C++ QColorGroup::mid方法的具体用法?C++ QColorGroup::mid怎么用?C++ QColorGroup::mid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QColorGroup
的用法示例。
在下文中一共展示了QColorGroup::mid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: paintCell
// Overridden to highlight the changed items
void VarItem::paintCell(QPainter *p, const QColorGroup &cg,
int column, int width, int align)
{
if (p == 0) {
return;
}
if (column == VALUE_COLUMN) {
// Show color values as colors, and make the text color the same
// as the base color
if (dataType_ == COLOR_TYPE) {
QRegExp color_re("\\s(#.*)>");
if (color_re.search(text(column)) != -1) {
QColorGroup color_cg( cg.foreground(), cg.background(),
cg.light(), cg.dark(), cg.mid(),
QColor(color_re.cap(1)), QColor(color_re.cap(1)) );
QListViewItem::paintCell(p, color_cg, column, width, align);
return;
}
}
// Highlight recently changed items in red
if (highlight_) {
QColorGroup hl_cg( cg.foreground(), cg.background(),
cg.light(), cg.dark(), cg.mid(),
red, cg.base() );
QListViewItem::paintCell(p, hl_cg, column, width, align);
return;
}
}
QListViewItem::paintCell(p, cg, column, width, align);
return;
}
示例2: drawArrowNeedle
/*!
Draw a needle looking like an arrow
*/
void QwtDialSimpleNeedle::drawArrowNeedle(
QPainter *painter, const QColorGroup &cg,
const QPoint ¢er, int length, int width,
double direction, bool hasKnob)
{
direction *= M_PI / 180.0;
painter->save();
if ( width <= 0 )
{
width = (int)QMAX(length * 0.06, 9);
if ( width % 2 == 0 )
width++;
}
const int peak = 3;
const QPoint p1(center.x() + 1, center.y() + 1);
const QPoint p2 = qwtPolar2Pos(p1, length - peak, direction);
const QPoint p3 = qwtPolar2Pos(p1, length, direction);
QPointArray pa(5);
pa.setPoint(0, qwtPolar2Pos(p1, width / 2, direction - M_PI_2));
pa.setPoint(1, qwtPolar2Pos(p2, 1, direction - M_PI_2));
pa.setPoint(2, p3);
pa.setPoint(3, qwtPolar2Pos(p2, 1, direction + M_PI_2));
pa.setPoint(4, qwtPolar2Pos(p1, width / 2, direction + M_PI_2));
painter->setPen(Qt::NoPen);
painter->setBrush(cg.brush(QColorGroup::Mid));
painter->drawPolygon(pa);
QPointArray shadowPa(3);
const int colorOffset = 10;
int i;
for ( i = 0; i < 3; i++ )
shadowPa.setPoint(i, pa[i]);
painter->setPen(cg.mid().dark(100 + colorOffset));
painter->drawPolyline(shadowPa);
for ( i = 0; i < 3; i++ )
shadowPa.setPoint(i, pa[i + 2]);
painter->setPen(cg.mid().dark(100 - colorOffset));
painter->drawPolyline(shadowPa);
if ( hasKnob )
{
drawKnob(painter, center, qRound(width * 1.3),
cg.brush(QColorGroup::Base), FALSE);
}
painter->restore();
}
示例3: QWidget
/** Constructor */
MReportViewer::MReportViewer(QWidget *parent, const char *name) :
QWidget(parent, name), progress(0), totalSteps(0), printer(0),
posprinter(0), numCopies_(1), printToPos_(false),
printerName_(QString::null), dpi_(300), colorMode_(PrintColor)
{
#if defined(Q_OS_WIN32) || defined(Q_OS_MACX)
psprinter = 0;
#endif
// Create the scrollview
scroller = new QScrollView(this);
// Create the report engine
rptEngine = 0;
report = new MPageCollection(this);
// Get the current color palette
QPalette p = palette();
QColorGroup g = p.active();
// Set the scroller's background color
scroller->viewport() ->setBackgroundColor(g.mid());
// Create the report display widget
display = new MPageDisplay(scroller->viewport());
// Set the display's default background color
display->setBackgroundColor(white);
// Add the display to the scrollview
scroller->addChild(display);
//Hide the display, we don't have a report yet ..
display->hide();
}
示例4: paintCell
void SourceDirTreeNode::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
{
QColorGroup myCg(cg);
if (!m_sourceDir->found()) {
myCg.setColor(QColorGroup::Text, cg.mid());
}
switch (column) {
case SourceDirTree::COLUMN_TEXT: {
KListViewItem::paintCell(p, myCg, column, width, alignment);
break;
}
case SourceDirTree::COLUMN_SELECTED: {
QFont oldFont = p->font();
if (m_selectedFilesCount > 0) {
QFont font = QFont(oldFont);
font.setBold(true);
p->setFont(font);
}
KListViewItem::paintCell(p, myCg, column, width, alignment);
p->setFont(oldFont);
break;
}
case SourceDirTree::COLUMN_INCLUDED: {
TreeHelper::drawCheckBox(p, cg, backgroundColor(SourceDirTree::COLUMN_INCLUDED), width, this->height(), true, m_sourceDir->include() ? TreeHelper::CHECKED : TreeHelper::NOT_CHECKED);
break;
}
}
}
示例5: switch
void
QWindowsStyle::drawArrow( QPainter *p, ArrowType type, bool down,
int x, int y, int w, int h,
const QColorGroup &g, bool enabled, const QBrush *fill )
{
QPointArray a; // arrow polygon
switch ( type ) {
case UpArrow:
a.setPoints( 7, -4,1, 2,1, -3,0, 1,0, -2,-1, 0,-1, -1,-2 );
break;
case DownArrow:
a.setPoints( 7, -4,-2, 2,-2, -3,-1, 1,-1, -2,0, 0,0, -1,1 );
break;
case LeftArrow:
a.setPoints( 7, 1,-3, 1,3, 0,-2, 0,2, -1,-1, -1,1, -2,0 );
break;
case RightArrow:
a.setPoints( 7, -1,-3, -1,3, 0,-2, 0,2, 1,-1, 1,1, 2,0 );
break;
}
if ( a.isNull() )
return;
if ( down ) {
x++;
y++;
}
QPen savePen = p->pen(); // save current pen
if (down)
p->setBrushOrigin(p->brushOrigin() + QPoint(1,1));
if ( fill )
p->fillRect( x, y, w, h, *fill );
if (down)
p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
if ( enabled ) {
a.translate( x+w/2, y+h/2 );
p->setPen( g.buttonText() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
} else {
a.translate( x+w/2+1, y+h/2+1 );
p->setPen( g.light() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
a.translate( -1, -1 );
p->setPen( g.mid() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
}
p->setPen( savePen ); // restore pen
}
示例6: qDrawWinArrow
static void qDrawWinArrow( QPainter *p, Qt::ArrowType type, bool down,
int x, int y, int w, int h,
const QColorGroup &g, bool enabled )
{
QPointArray a; // arrow polygon
switch ( type ) {
case Qt::UpArrow:
a.setPoints( 7, -3,1, 3,1, -2,0, 2,0, -1,-1, 1,-1, 0,-2 );
break;
case Qt::DownArrow:
a.setPoints( 7, -3,-1, 3,-1, -2,0, 2,0, -1,1, 1,1, 0,2 );
break;
case Qt::LeftArrow:
a.setPoints( 7, 1,-3, 1,3, 0,-2, 0,2, -1,-1, -1,1, -2,0 );
break;
case Qt::RightArrow:
a.setPoints( 7, -1,-3, -1,3, 0,-2, 0,2, 1,-1, 1,1, 2,0 );
break;
}
if ( a.isNull() )
return;
if ( down ) {
x++;
y++;
}
QPen savePen = p->pen(); // save current pen
if (down)
p->setBrushOrigin(p->brushOrigin() + QPoint(1,1));
p->fillRect( x, y, w, h, g.brush( QColorGroup::Button ) );
if (down)
p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
if ( enabled ) {
a.translate( x+w/2, y+h/2 );
p->setPen( g.foreground() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
} else {
a.translate( x+w/2+1, y+h/2+1 );
p->setPen( g.light() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
a.translate( -1, -1 );
p->setPen( g.mid() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
}
p->setPen( savePen ); // restore pen
}
示例7: drawRayNeedle
/*!
Draw a needle looking like a ray
*/
void QwtDialSimpleNeedle::drawRayNeedle(
QPainter *painter, const QColorGroup &cg,
const QPoint ¢er, int length, int width, double direction,
bool hasKnob)
{
if ( width <= 0 )
width = 5;
direction *= M_PI / 180.0;
painter->save();
const QPoint p1(center.x() + 1, center.y() + 2);
const QPoint p2 = qwtPolar2Pos(p1, length, direction);
if ( width == 1 )
{
painter->setPen(QPen(cg.mid(), 1));
painter->drawLine(p1, p2);
}
else
{
QPointArray pa(4);
pa.setPoint(0, qwtPolar2Pos(p1, width / 2, direction + M_PI_2));
pa.setPoint(1, qwtPolar2Pos(p2, width / 2, direction + M_PI_2));
pa.setPoint(2, qwtPolar2Pos(p2, width / 2, direction - M_PI_2));
pa.setPoint(3, qwtPolar2Pos(p1, width / 2, direction - M_PI_2));
painter->setPen(Qt::NoPen);
painter->setBrush(cg.brush(QColorGroup::Mid));
painter->drawPolygon(pa);
}
if ( hasKnob )
{
int knobWidth = QMAX(qRound(width * 0.7), 5);
if ( knobWidth % 2 == 0 )
knobWidth++;
drawKnob(painter, center, knobWidth,
cg.brush(QColorGroup::Base), FALSE);
}
painter->restore();
}
示例8: drawPrimitive
/*!\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 );
//.........这里部分代码省略.........
示例9: qDrawMotifArrow
// motif arrows look the same whether they are used or not
// is this correct?
static void qDrawMotifArrow( QPainter *p, Qt::ArrowType type, bool down,
int x, int y, int w, int h,
const QColorGroup &g, bool )
{
QPointArray bFill; // fill polygon
QPointArray bTop; // top shadow.
QPointArray bBot; // bottom shadow.
QPointArray bLeft; // left shadow.
#ifndef QT_NO_TRANSFORMATIONS
QWMatrix matrix; // xform matrix
#endif
bool vertical = type == Qt::UpArrow || type == Qt::DownArrow;
bool horizontal = !vertical;
int dim = w < h ? w : h;
int colspec = 0x0000; // color specification array
if ( dim < 2 ) // too small arrow
return;
if ( dim > 3 ) {
if ( dim > 6 )
bFill.resize( dim & 1 ? 3 : 4 );
bTop.resize( (dim/2)*2 );
bBot.resize( dim & 1 ? dim + 1 : dim );
bLeft.resize( dim > 4 ? 4 : 2 );
bLeft.putPoints( 0, 2, 0,0, 0,dim-1 );
if ( dim > 4 )
bLeft.putPoints( 2, 2, 1,2, 1,dim-3 );
bTop.putPoints( 0, 4, 1,0, 1,1, 2,1, 3,1 );
bBot.putPoints( 0, 4, 1,dim-1, 1,dim-2, 2,dim-2, 3,dim-2 );
for( int i=0; i<dim/2-2 ; i++ ) {
bTop.putPoints( i*2+4, 2, 2+i*2,2+i, 5+i*2, 2+i );
bBot.putPoints( i*2+4, 2, 2+i*2,dim-3-i, 5+i*2,dim-3-i );
}
if ( dim & 1 ) // odd number size: extra line
bBot.putPoints( dim-1, 2, dim-3,dim/2, dim-1,dim/2 );
if ( dim > 6 ) { // dim>6: must fill interior
bFill.putPoints( 0, 2, 1,dim-3, 1,2 );
if ( dim & 1 ) // if size is an odd number
bFill.setPoint( 2, dim - 3, dim / 2 );
else
bFill.putPoints( 2, 2, dim-4,dim/2-1, dim-4,dim/2 );
}
}
else {
if ( dim == 3 ) { // 3x3 arrow pattern
bLeft.setPoints( 4, 0,0, 0,2, 1,1, 1,1 );
bTop .setPoints( 2, 1,0, 1,0 );
bBot .setPoints( 2, 1,2, 2,1 );
}
else { // 2x2 arrow pattern
bLeft.setPoints( 2, 0,0, 0,1 );
bTop .setPoints( 2, 1,0, 1,0 );
bBot .setPoints( 2, 1,1, 1,1 );
}
}
if ( type == Qt::UpArrow || type == Qt::LeftArrow ) {
#ifndef QT_NO_TRANSFORMATIONS // #### fix me!
matrix.translate( x, y );
if ( vertical ) {
matrix.translate( 0, h - 1 );
matrix.rotate( -90 );
} else {
matrix.translate( w - 1, h - 1 );
matrix.rotate( 180 );
}
#endif
if ( down )
colspec = horizontal ? 0x2334 : 0x2343;
else
colspec = horizontal ? 0x1443 : 0x1434;
}
else if ( type == Qt::DownArrow || type == Qt::RightArrow ) {
#ifndef QT_NO_TRANSFORMATIONS // #### fix me!
matrix.translate( x, y );
if ( vertical ) {
matrix.translate( w-1, 0 );
matrix.rotate( 90 );
}
#endif
if ( down )
colspec = horizontal ? 0x2443 : 0x2434;
else
colspec = horizontal ? 0x1334 : 0x1343;
}
QColor *cols[5];
cols[0] = 0;
cols[1] = (QColor *)&g.button();
cols[2] = (QColor *)&g.mid();
cols[3] = (QColor *)&g.light();
cols[4] = (QColor *)&g.dark();
#define CMID *cols[ (colspec>>12) & 0xf ]
#define CLEFT *cols[ (colspec>>8) & 0xf ]
#define CTOP *cols[ (colspec>>4) & 0xf ]
#define CBOT *cols[ colspec & 0xf ]
//.........这里部分代码省略.........
示例10: qDrawShadeLine
void qDrawShadeLine( QPainter *p, int x1, int y1, int x2, int y2,
const QColorGroup &g, bool sunken,
int lineWidth, int midLineWidth )
{
if (!( p && lineWidth >= 0 && midLineWidth >= 0 ) ) {
#if defined(QT_CHECK_RANGE)
qWarning( "qDrawShadeLine invalid parameters." );
#endif
return;
}
int tlw = lineWidth*2 + midLineWidth; // total line width
QPen oldPen = p->pen(); // save pen
if ( sunken )
p->setPen( g.dark() );
else
p->setPen( g.light() );
QPointArray a;
int i;
if ( y1 == y2 ) { // horizontal line
int y = y1 - tlw/2;
if ( x1 > x2 ) { // swap x1 and x2
int t = x1;
x1 = x2;
x2 = t;
}
x2--;
for ( i=0; i<lineWidth; i++ ) { // draw top shadow
a.setPoints( 3, x1+i, y+tlw-1-i,
x1+i, y+i,
x2-i, y+i );
p->drawPolyline( a );
}
if ( midLineWidth > 0 ) {
p->setPen( g.mid() );
for ( i=0; i<midLineWidth; i++ ) // draw lines in the middle
p->drawLine( x1+lineWidth, y+lineWidth+i,
x2-lineWidth, y+lineWidth+i );
}
if ( sunken )
p->setPen( g.light() );
else
p->setPen( g.dark() );
for ( i=0; i<lineWidth; i++ ) { // draw bottom shadow
a.setPoints( 3, x1+i, y+tlw-i-1,
x2-i, y+tlw-i-1,
x2-i, y+i+1 );
p->drawPolyline( a );
}
}
else if ( x1 == x2 ) { // vertical line
int x = x1 - tlw/2;
if ( y1 > y2 ) { // swap y1 and y2
int t = y1;
y1 = y2;
y2 = t;
}
y2--;
for ( i=0; i<lineWidth; i++ ) { // draw left shadow
a.setPoints( 3, x+i, y2,
x+i, y1+i,
x+tlw-1, y1+i );
p->drawPolyline( a );
}
if ( midLineWidth > 0 ) {
p->setPen( g.mid() );
for ( i=0; i<midLineWidth; i++ ) // draw lines in the middle
p->drawLine( x+lineWidth+i, y1+lineWidth, x+lineWidth+i, y2 );
}
if ( sunken )
p->setPen( g.light() );
else
p->setPen( g.dark() );
for ( i=0; i<lineWidth; i++ ) { // draw right shadow
a.setPoints( 3, x+lineWidth, y2-i,
x+tlw-i-1, y2-i,
x+tlw-i-1, y1+lineWidth );
p->drawPolyline( a );
}
}
p->setPen( oldPen );
}
示例11: drawComplexControl
/*!\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 );
//.........这里部分代码省略.........
示例12: qDrawShadeRect
void qDrawShadeRect( QPainter *p, int x, int y, int w, int h,
const QColorGroup &g, bool sunken,
int lineWidth, int midLineWidth,
const QBrush *fill )
{
if ( w == 0 || h == 0 )
return;
if ( ! ( w > 0 && h > 0 && lineWidth >= 0 && midLineWidth >= 0 ) ) {
#if defined(QT_CHECK_RANGE)
qWarning( "qDrawShadeRect(): Invalid parameters" );
#endif
return;
}
QPen oldPen = p->pen();
if ( sunken )
p->setPen( g.dark() );
else
p->setPen( g.light() );
int x1=x, y1=y, x2=x+w-1, y2=y+h-1;
QPointArray a;
if ( lineWidth == 1 && midLineWidth == 0 ) {// standard shade rectangle
p->drawRect( x1, y1, w-1, h-1 );
if ( sunken )
p->setPen( g.light() );
else
p->setPen( g.dark() );
a.setPoints( 8, x1+1,y1+1, x2-2,y1+1, x1+1,y1+2, x1+1,y2-2,
x1,y2, x2,y2, x2,y1, x2,y2-1 );
p->drawLineSegments( a ); // draw bottom/right lines
} else { // more complicated
int m = lineWidth+midLineWidth;
int i, j=0, k=m;
for ( i=0; i<lineWidth; i++ ) { // draw top shadow
a.setPoints( 8, x1+i, y2-i, x1+i, y1+i, x1+i, y1+i, x2-i, y1+i,
x1+k, y2-k, x2-k, y2-k, x2-k, y2-k, x2-k, y1+k );
p->drawLineSegments( a );
k++;
}
p->setPen( g.mid() );
j = lineWidth*2;
for ( i=0; i<midLineWidth; i++ ) { // draw lines in the middle
p->drawRect( x1+lineWidth+i, y1+lineWidth+i, w-j, h-j );
j += 2;
}
if ( sunken )
p->setPen( g.light() );
else
p->setPen( g.dark() );
k = m;
for ( i=0; i<lineWidth; i++ ) { // draw bottom shadow
a.setPoints( 8, x1+1+i,y2-i, x2-i, y2-i, x2-i, y2-i, x2-i, y1+i+1,
x1+k, y2-k, x1+k, y1+k, x1+k, y1+k, x2-k, y1+k );
p->drawLineSegments( a );
k++;
}
}
if ( fill ) {
QBrush oldBrush = p->brush();
int tlw = lineWidth + midLineWidth;
p->setPen( Qt::NoPen );
p->setBrush( *fill );
p->drawRect( x+tlw, y+tlw, w-2*tlw, h-2*tlw );
p->setBrush( oldBrush );
}
p->setPen( oldPen ); // restore pen
}
示例13: paintCell
void PlaylistItem::paintCell( QPainter *painter, const QColorGroup &cg, int column, int width, int align )
{
//TODO add spacing on either side of items
//p->translate( 2, 0 ); width -= 3;
// Don't try to draw if width or height is 0, as this crashes Qt
if( !painter || !listView() || width <= 0 || height() == 0 )
return;
static const QImage currentTrackLeft = locate( "data", "amarok/images/currenttrack_bar_left.png" );
static const QImage currentTrackMid = locate( "data", "amarok/images/currenttrack_bar_mid.png" );
static const QImage currentTrackRight = locate( "data", "amarok/images/currenttrack_bar_right.png" );
if( column == Mood && !moodbar().dataExists() )
moodbar().load(); // Only has an effect the first time
// The moodbar column can have text in it, like "Calculating".
// moodbarType is 0 if column != Mood, 1 if we're displaying
// a moodbar, and 2 if we're displaying text
const int moodbarType =
column != Mood ? 0 : moodbar().state() == Moodbar::Loaded ? 1 : 2;
const QString colText = text( column );
const bool isCurrent = this == listView()->currentTrack();
QPixmap buf( width, height() );
QPainter p( &buf, true );
if( isCurrent )
{
static paintCacheItem paintCache[NUM_COLUMNS];
// Convert intensity to string, so we can use it as a key
const QString colorKey = QString::number( glowIntensity );
const bool cacheValid =
paintCache[column].width == width &&
paintCache[column].height == height() &&
paintCache[column].text == colText &&
paintCache[column].font == painter->font() &&
paintCache[column].color == glowBase &&
paintCache[column].selected == isSelected() &&
!s_pixmapChanged;
// If any parameter changed, we must regenerate all pixmaps
if ( !cacheValid )
{
for( int i = 0; i < NUM_COLUMNS; ++i)
paintCache[i].map.clear();
s_pixmapChanged = false;
}
// Determine if we need to repaint the pixmap, or paint from cache
if ( paintCache[column].map.find( colorKey ) == paintCache[column].map.end() )
{
// Update painting cache
paintCache[column].width = width;
paintCache[column].height = height();
paintCache[column].text = colText;
paintCache[column].font = painter->font();
paintCache[column].color = glowBase;
paintCache[column].selected = isSelected();
QColor bg;
if( isSelected() )
bg = listView()->colorGroup().highlight();
else
bg = isAlternate() ? listView()->alternateBackground() :
listView()->viewport()->backgroundColor();
buf.fill( bg );
// Draw column divider line
p.setPen( listView()->viewport()->colorGroup().mid() );
p.drawLine( width - 1, 0, width - 1, height() - 1 );
// Here we draw the background bar graphics for the current track:
//
// Illustration of design, L = Left, M = Middle, R = Right:
// <LMMMMMMMMMMMMMMMR>
int leftOffset = 0;
int rightOffset = 0;
int margin = listView()->itemMargin();
const float colorize = 0.8;
const double intensity = 1.0 - glowIntensity * 0.021;
// Left part
if( column == listView()->m_firstColumn ) {
QImage tmpImage = currentTrackLeft.smoothScale( 1, height(), QImage::ScaleMax );
KIconEffect::colorize( tmpImage, glowBase, colorize );
imageTransparency( tmpImage, intensity );
p.drawImage( 0, 0, tmpImage, 0, 0, tmpImage.width() - 1 ); //HACK
leftOffset = tmpImage.width() - 1; //HACK Subtracting 1, to work around the black line bug
margin += 6;
}
// Right part
else
if( column == Playlist::instance()->mapToLogicalColumn( Playlist::instance()->numVisibleColumns() - 1 ) )
//.........这里部分代码省略.........
示例14: drawControl
/*!\reimp
*/
void QPlatinumStyle::drawControl( ControlElement element,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QColorGroup &cg,
SFlags how,
const QStyleOption& opt ) const
{
switch( element ) {
case CE_PushButton:
{
#ifndef QT_NO_PUSHBUTTON
QColorGroup myCg( cg );
const QPushButton *btn;
int x1, y1, x2, y2;
bool useBevelButton;
SFlags flags;
flags = Style_Default;
btn = (const QPushButton*)widget;
p->setBrushOrigin( -widget->backgroundOffset().x(),
-widget->backgroundOffset().y() );
// take care of the flags based on what we know...
if ( btn->isDown() )
flags |= Style_Down;
if ( btn->isOn() )
flags |= Style_On;
if ( btn->isEnabled() )
flags |= Style_Enabled;
if ( btn->isDefault() )
flags |= Style_Default;
if (! btn->isFlat() && !(flags & Style_Down))
flags |= Style_Raised;
r.coords( &x1, &y1, &x2, &y2 );
p->setPen( cg.foreground() );
p->setBrush( QBrush(cg.button(), NoBrush) );
QBrush fill;
if ( btn->isDown() ) {
fill = cg.brush( QColorGroup::Dark );
// this could be done differently, but this
// makes a down Bezel drawn correctly...
myCg.setBrush( QColorGroup::Mid, fill );
} else if ( btn->isOn() ) {
fill = QBrush( cg.mid(), Dense4Pattern );
myCg.setBrush( QColorGroup::Mid, fill );
}
// to quote the old QPlatinumStlye drawPushButton...
// small or square image buttons as well as toggle buttons are
// bevel buttons (what a heuristic....)
if ( btn->isToggleButton()
|| ( btn->pixmap() &&
(btn->width() * btn->height() < 1600 ||
QABS( btn->width() - btn->height()) < 10 )) )
useBevelButton = TRUE;
else
useBevelButton = FALSE;
int diw = pixelMetric( PM_ButtonDefaultIndicator, widget );
if ( btn->isDefault() ) {
x1 += 1;
y1 += 1;
x2 -= 1;
y2 -= 1;
QColorGroup cg2( myCg );
SFlags myFlags = flags;
// don't draw the default button sunken, unless it's necessary.
if ( myFlags & Style_Down )
myFlags ^= Style_Down;
if ( myFlags & Style_Sunken )
myFlags ^= Style_Sunken;
cg2.setColor( QColorGroup::Button, cg.mid() );
if ( useBevelButton ) {
drawPrimitive( PE_ButtonBevel, p, QRect( x1, y1,
x2 - x1 + 1,
y2 - y1 + 1 ),
myCg, myFlags, opt );
} else {
drawPrimitive( PE_ButtonCommand, p, QRect( x1, y1,
x2 - x1 + 1,
y2 - y1 + 1 ),
cg2, myFlags, opt );
}
}
if ( btn->isDefault() || btn->autoDefault() ) {
x1 += diw;
y1 += diw;
x2 -= diw;
y2 -= diw;
}
if ( !btn->isFlat() || btn->isOn() || btn->isDown() ) {
if ( useBevelButton ) {
// fix for toggle buttons...
//.........这里部分代码省略.........
示例15: drawControl
void MetalStyle::drawControl( ControlElement element,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QColorGroup &cg,
SFlags how,
const QStyleOption& opt ) const
{
switch( element ) {
case CE_PushButton:
{
const QPushButton *btn;
btn = (const QPushButton*)widget;
int x1, y1, x2, y2;
r.coords( &x1, &y1, &x2, &y2 );
p->setPen( cg.foreground() );
p->setBrush( QBrush(cg.button(), NoBrush) );
QBrush fill;
if ( btn->isDown() )
fill = cg.brush( QColorGroup::Mid );
else if ( btn->isOn() )
fill = QBrush( cg.mid(), Dense4Pattern );
else
fill = cg.brush( QColorGroup::Button );
if ( btn->isDefault() ) {
QPointArray a;
a.setPoints( 9,
x1, y1, x2, y1, x2, y2, x1, y2, x1, y1+1,
x2-1, y1+1, x2-1, y2-1, x1+1, y2-1, x1+1, y1+1 );
p->setPen( Qt::black );
p->drawPolyline( a );
x1 += 2;
y1 += 2;
x2 -= 2;
y2 -= 2;
}
SFlags flags = Style_Default;
if ( btn->isOn() )
flags |= Style_On;
if ( btn->isDown() )
flags |= Style_Down;
if ( !btn->isFlat() && !btn->isDown() )
flags |= Style_Raised;
drawPrimitive( PE_ButtonCommand, p,
QRect( x1, y1, x2 - x1 + 1, y2 - y1 + 1),
cg, flags, opt );
if ( btn->isMenuButton() ) {
flags = Style_Default;
if ( btn->isEnabled() )
flags |= Style_Enabled;
int dx = ( y1 - y2 - 4 ) / 3;
drawPrimitive( PE_ArrowDown, p,
QRect(x2 - dx, dx, y1, y2 - y1),
cg, flags, opt );
}
if ( p->brush().style() != NoBrush )
p->setBrush( NoBrush );
break;
}
case CE_PushButtonLabel:
{
const QPushButton *btn;
btn = (const QPushButton*)widget;
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int x1, y1, x2, y2;
r.coords( &x1, &y1, &x2, &y2 );
int dx = 0;
int dy = 0;
if ( btn->isMenuButton() )
dx = ( y2 - y1 ) / 3;
if ( btn->isOn() || btn->isDown() ) {
dx--;
dy--;
}
if ( dx || dy )
p->translate( dx, dy );
x += 2;
y += 2;
w -= 4;
h -= 4;
drawItem( p, QRect( x, y, w, h ),
AlignCenter|ShowPrefix,
cg, btn->isEnabled(),
btn->pixmap(), btn->text(), -1,
(btn->isDown() || btn->isOn())? &cg.brightText() : &cg.buttonText() );
if ( dx || dy )
p->translate( -dx, -dy );
break;
}
default:
QWindowsStyle::drawControl( element, p, widget, r, cg, how, opt );
//.........这里部分代码省略.........