diff options
Diffstat (limited to 'examples/themes/wood.cpp')
-rw-r--r-- | examples/themes/wood.cpp | 310 |
1 files changed, 141 insertions, 169 deletions
diff --git a/examples/themes/wood.cpp b/examples/themes/wood.cpp index f5fa72a..085fdea 100644 --- a/examples/themes/wood.cpp +++ b/examples/themes/wood.cpp @@ -769,163 +769,146 @@ NorwegianWoodStyle::NorwegianWoodStyle() : QWindowsStyle() /*! Reimplementation from QStyle */ -void NorwegianWoodStyle::applicationPolish( QStyleControlElementData ceData, ControlElementFlags, void *ptr ) +void NorwegianWoodStyle::applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr ) { - if (ceData.widgetObjectTypes.contains("QApplication")) { - QApplication *app = reinterpret_cast<QApplication*>(ptr); - - oldPalette = app->palette(); - - // we simply create a nice QColorGroup with a couple of fancy wood - // pixmaps here and apply to it all widgets - - QImage img(button_xpm); - QImage orig = img; - orig.detach(); - QPixmap button; - button.convertFromImage(img); - - - int i; - for (i=0; i<img.numColors(); i++) { - QRgb rgb = img.color(i); - QColor c(rgb); - rgb = c.dark(120).rgb(); - img.setColor(i,rgb); - } - QPixmap mid; - mid.convertFromImage(img); - - img = orig; - img.detach(); - for (i=0; i<img.numColors(); i++) { - QRgb rgb = img.color(i); - QColor c(rgb); - rgb = c.light().rgb(); - img.setColor(i,rgb); - } - QPixmap light; - light.convertFromImage(img); - - img = orig; - img.detach(); - for (i=0; i<img.numColors(); i++) { - QRgb rgb = img.color(i); - QColor c(rgb); - rgb = c.dark(180).rgb(); - img.setColor(i,rgb); - } - QPixmap dark; - dark.convertFromImage(img); - - - QImage bgimage(polish_xpm); - QPixmap background; - background.convertFromImage(bgimage); - - img = bgimage; - img.detach(); - for (i=0; i<img.numColors(); i++) { - QRgb rgb = img.color(i); - QColor c(rgb); - rgb = c.dark(180).rgb(); - img.setColor(i,rgb); - } - sunkenDark = new QPixmap; - sunkenDark->convertFromImage(img); - - - img = bgimage; - img.detach(); - for (i=0; i<img.numColors(); i++) { - QRgb rgb = img.color(i); - QColor c(rgb); - rgb = c.light(130).rgb(); - img.setColor(i,rgb); - } - sunkenLight= new QPixmap; - sunkenLight->convertFromImage(img); - - - - QPalette op(QColor(212,140,95)); - // QPalette op(white); - QColorGroup active (op.active().foreground(), - QBrush(op.active().button(),button), - QBrush(op.active().light(), light), - QBrush(op.active().dark(), dark), - QBrush(op.active().mid(), mid), - op.active().text(), - Qt::white, - QColor(236,182,120), - QBrush(op.active().background(), background) - ); - QColorGroup disabled (op.disabled().foreground(), - QBrush(op.disabled().button(),button), - QBrush(op.disabled().light(), light), - op.disabled().dark(), - QBrush(op.disabled().mid(), mid), - op.disabled().text(), - Qt::white, - QColor(236,182,120), - QBrush(op.disabled().background(), background) - ); - - app->setPalette(QPalette(active, disabled, active), TRUE ); + oldPalette = ceData.palette; + + // we simply create a nice QColorGroup with a couple of fancy wood + // pixmaps here and apply to it all widgets + + QImage img(button_xpm); + QImage orig = img; + orig.detach(); + QPixmap button; + button.convertFromImage(img); + + + int i; + for (i=0; i<img.numColors(); i++) { + QRgb rgb = img.color(i); + QColor c(rgb); + rgb = c.dark(120).rgb(); + img.setColor(i,rgb); + } + QPixmap mid; + mid.convertFromImage(img); + + img = orig; + img.detach(); + for (i=0; i<img.numColors(); i++) { + QRgb rgb = img.color(i); + QColor c(rgb); + rgb = c.light().rgb(); + img.setColor(i,rgb); + } + QPixmap light; + light.convertFromImage(img); + + img = orig; + img.detach(); + for (i=0; i<img.numColors(); i++) { + QRgb rgb = img.color(i); + QColor c(rgb); + rgb = c.dark(180).rgb(); + img.setColor(i,rgb); } + QPixmap dark; + dark.convertFromImage(img); + + + QImage bgimage(polish_xpm); + QPixmap background; + background.convertFromImage(bgimage); + + img = bgimage; + img.detach(); + for (i=0; i<img.numColors(); i++) { + QRgb rgb = img.color(i); + QColor c(rgb); + rgb = c.dark(180).rgb(); + img.setColor(i,rgb); + } + sunkenDark = new QPixmap; + sunkenDark->convertFromImage(img); + + + img = bgimage; + img.detach(); + for (i=0; i<img.numColors(); i++) { + QRgb rgb = img.color(i); + QColor c(rgb); + rgb = c.light(130).rgb(); + img.setColor(i,rgb); + } + sunkenLight= new QPixmap; + sunkenLight->convertFromImage(img); + + + + QPalette op(QColor(212,140,95)); + // QPalette op(white); + QColorGroup active (op.active().foreground(), + QBrush(op.active().button(),button), + QBrush(op.active().light(), light), + QBrush(op.active().dark(), dark), + QBrush(op.active().mid(), mid), + op.active().text(), + Qt::white, + QColor(236,182,120), + QBrush(op.active().background(), background) + ); + QColorGroup disabled (op.disabled().foreground(), + QBrush(op.disabled().button(),button), + QBrush(op.disabled().light(), light), + op.disabled().dark(), + QBrush(op.disabled().mid(), mid), + op.disabled().text(), + Qt::white, + QColor(236,182,120), + QBrush(op.disabled().background(), background) + ); + + applicationActionRequest(ceData, elementFlags, ptr, AAR_SetPalette, QStyleApplicationActionRequestData(QPalette(active, disabled, active), TRUE)); } -void NorwegianWoodStyle::applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags, void *ptr ) +void NorwegianWoodStyle::applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr ) { - if (ceData.widgetObjectTypes.contains("QApplication")) { - QApplication *app = reinterpret_cast<QApplication*>(ptr); - - app->setPalette(oldPalette, TRUE); - } + applicationActionRequest(ceData, elementFlags, ptr, AAR_SetPalette, QStyleApplicationActionRequestData(oldPalette, TRUE)); } /*! Reimplementation from QStyle */ -void NorwegianWoodStyle::polish( QStyleControlElementData ceData, ControlElementFlags, void *ptr ) +void NorwegianWoodStyle::polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr ) { - if (ceData.widgetObjectTypes.contains("QWidget")) { - QWidget *w = reinterpret_cast<QWidget*>(ptr); + // the polish function sets some widgets to transparent mode and + // some to translate background mode in order to get the full + // benefit from the nice pixmaps in the color group. - // the polish function sets some widgets to transparent mode and - // some to translate background mode in order to get the full - // benefit from the nice pixmaps in the color group. - - if ( !w->isTopLevel() ) { - if ( w->inherits("QPushButton") - || w->inherits("QToolButton") - || w->inherits("QComboBox") ) { - w->setAutoMask( TRUE ); + if ( !(elementFlags & CEF_IsTopLevel) ) { + if ( (ceData.widgetObjectTypes.contains("QPushButton")) || (ceData.widgetObjectTypes.contains("QToolButton")) || (ceData.widgetObjectTypes.contains("QComboBox")) ) { + widgetActionRequest(ceData, elementFlags, ptr, WAR_SetAutoMask); return; - } - if ( w->backgroundPixmap() ) - w->setBackgroundOrigin( QWidget::WindowOrigin ); + } + if (!ceData.bgPixmap.isNull()) { + widgetActionRequest(ceData, elementFlags, ptr, WAR_SetBackgroundOrigin, QStyleWidgetActionRequestData(QWidget::WindowOrigin)); } } } -void NorwegianWoodStyle::unPolish( QStyleControlElementData ceData, ControlElementFlags, void *ptr ) +void NorwegianWoodStyle::unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr ) { - if (ceData.widgetObjectTypes.contains("QWidget")) { - QWidget *w = reinterpret_cast<QWidget*>(ptr); + // the polish function sets some widgets to transparent mode and + // some to translate background mode in order to get the full + // benefit from the nice pixmaps in the color group. - // the polish function sets some widgets to transparent mode and - // some to translate background mode in order to get the full - // benefit from the nice pixmaps in the color group. - if ( !w->isTopLevel() ) { - if ( w->inherits("QPushButton") - || w->inherits("QToolButton") - || w->inherits("QComboBox") ) { - w->setAutoMask( FALSE ); + if ( !(elementFlags & CEF_IsTopLevel) ) { + if ( (ceData.widgetObjectTypes.contains("QPushButton")) || (ceData.widgetObjectTypes.contains("QToolButton")) || (ceData.widgetObjectTypes.contains("QComboBox")) ) { + widgetActionRequest(ceData, elementFlags, ptr, WAR_UnSetAutoMask); return; - } - if ( w->backgroundPixmap() ) - w->setBackgroundOrigin( QWidget::WidgetOrigin ); + } + if (!ceData.bgPixmap.isNull()) { + widgetActionRequest(ceData, elementFlags, ptr, WAR_SetBackgroundOrigin, QStyleWidgetActionRequestData(QWidget::WidgetOrigin)); } } } @@ -1013,19 +996,17 @@ void NorwegianWoodStyle::drawControl( ControlElement element, switch( element ) { case CE_PushButton: { - const QPushButton *btn; - btn = ( const QPushButton * )widget; QColorGroup myCg( cg ); SFlags flags = Style_Default; - if ( btn->isOn() ) + if ( elementFlags & CEF_IsOn ) flags |= Style_On; - if ( btn->isDown() ) + if ( elementFlags & CEF_IsDown ) flags |= Style_Down; - if ( btn->isOn() || btn->isDown() ) + if ( (elementFlags & CEF_IsOn) || (elementFlags & CEF_IsDown) ) flags |= Style_Sunken; - if ( btn->isDefault() ) + if ( elementFlags & CEF_IsDefault ) flags |= Style_Default; - if ( ! btn->isFlat() && !(flags & Style_Down) ) + if ( ! (elementFlags & CEF_IsFlat) && !(flags & Style_Down) ) flags |= Style_Raised; int x1, y1, x2, y2; @@ -1035,15 +1016,15 @@ void NorwegianWoodStyle::drawControl( ControlElement element, p->setBrush( QBrush( cg.button(), NoBrush ) ); QBrush fill; - if ( btn->isDown() ) + if ( elementFlags & CEF_IsDown ) fill = cg.brush( QColorGroup::Mid ); - else if ( btn->isOn() ) + else if ( elementFlags & CEF_IsOn ) fill = QBrush( cg.mid(), Dense4Pattern ); else fill = cg.brush( QColorGroup::Button ); myCg.setBrush( QColorGroup::Mid, fill ); - if ( btn->isDefault() ) { + if ( elementFlags & CEF_IsDefault ) { x1 += 2; y1 += 2; x2 -= 2; @@ -1054,7 +1035,7 @@ void NorwegianWoodStyle::drawControl( ControlElement element, QRect( x1, y1, x2 - x1 + 1, y2 - y1 + 1), myCg, flags, opt ); - if ( btn->isDefault() ) { + if ( elementFlags & CEF_IsDefault ) { QPen pen( Qt::black, 4 ); pen.setCapStyle( Qt::RoundCap ); pen.setJoinStyle( Qt::RoundJoin ); @@ -1062,12 +1043,12 @@ void NorwegianWoodStyle::drawControl( ControlElement element, drawroundrect( p, x1 - 1, y1 - 1, x2 - x1 + 3, y2 - y1 + 3, 8 ); } - if ( btn->isMenuButton() ) { + if ( elementFlags & CEF_IsMenuWidget ) { int dx = ( y1 - y2 - 4 ) / 3; // reset the flags flags = Style_Default; - if ( btn->isEnabled() ) + if ( elementFlags & CEF_IsEnabled ) flags |= Style_Enabled; drawPrimitive( PE_ArrowDown, p, ceData, elementFlags, QRect( x2 - dx, dx, y1, y2 - y1), @@ -1080,8 +1061,6 @@ void NorwegianWoodStyle::drawControl( ControlElement element, } case CE_PushButtonLabel: { - const QPushButton *btn; - btn = (const QPushButton*)widget; int x, y, w, h; r.rect( &x, &y, &w, &h ); @@ -1089,7 +1068,7 @@ void NorwegianWoodStyle::drawControl( ControlElement element, r.coords( &x1, &y1, &x2, &y2 ); int dx = 0; int dy = 0; - if ( btn->isMenuButton() ) + if ( elementFlags & CEF_IsMenuWidget ) dx = ( y2 - y1 ) / 3; if ( dx || dy ) p->translate( dx, dy ); @@ -1100,9 +1079,9 @@ void NorwegianWoodStyle::drawControl( ControlElement element, 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, (elementFlags & CEF_IsEnabled), + (ceData.fgPixmap.isNull())?NULL:&ceData.fgPixmap, ceData.text, -1, + ((elementFlags & CEF_IsDown) || (elementFlags & CEF_IsOn)) ? &cg.brightText() : &cg.buttonText() ); if ( dx || dy ) p->translate( -dx, -dy ); @@ -1152,9 +1131,6 @@ void NorwegianWoodStyle::drawComplexControl( ComplexControl cc, switch( cc ) { case CC_ComboBox: { - const QComboBox *cmb; - cmb = (const QComboBox*)widget; - int awh, ax, ay, sh, sy, dh, ew; get_combo_parameters( subRect(SR_PushButtonContents, ceData, elementFlags, widget), ew, awh, ax, ay, sh, dh, sy ); @@ -1176,7 +1152,7 @@ void NorwegianWoodStyle::drawComplexControl( ComplexControl cc, p->drawLine( ax + awh - 1, sy + 1, ax + awh - 1, sy + sh - 1 ); p->setPen( oldPen ); - if ( cmb->editable() ) { + if ( elementFlags & CEF_IsEditable ) { QRect r( querySubControlMetrics(CC_ComboBox, ceData, elementFlags, SC_ComboBoxEditField, opt, widget) ); qDrawShadePanel( p, r, cg, TRUE, 1, @@ -1244,19 +1220,17 @@ QRect NorwegianWoodStyle::querySubControlMetrics( ComplexControl control, } case CC_ScrollBar: { - const QScrollBar* sb; - sb = (const QScrollBar*)widget; - bool horz = sb->orientation() == QScrollBar::Horizontal; + bool horz = ceData.orientation == QScrollBar::Horizontal; int b = 2; - int w = horz ? sb->height() : sb->width(); + int w = horz ? ceData.rect.height() : ceData.rect.width(); switch ( sc ) { case SC_ScrollBarAddLine: rect.setRect( b, b, w - 2 * b, w - 2 * b ); if ( horz ) - rect.moveBy( sb->width() - w, 0 ); + rect.moveBy( ceData.rect.width() - w, 0 ); else - rect.moveBy( 0, sb->height() - w ); + rect.moveBy( 0, ceData.rect.height() - w ); break; case SC_ScrollBarSubLine: rect.setRect( b, b, w - 2 * b, w - 2 * b ); @@ -1282,9 +1256,7 @@ QRect NorwegianWoodStyle::subRect( SubRect sr, const QStyleControlElementData ce switch ( sr ) { case SR_PushButtonContents: { - const QPushButton *btn; - btn = (const QPushButton*)widget; - r = btn->rect(); + r = ceData.rect; int d = QMIN( r.width(), r.height() ) / 2; int b = buttonthickness( d ); |