diff --git a/clients/oxygen/oxygenbutton.cpp b/clients/oxygen/oxygenbutton.cpp index 1a9e3cac30..4069bfc3ba 100644 --- a/clients/oxygen/oxygenbutton.cpp +++ b/clients/oxygen/oxygenbutton.cpp @@ -172,9 +172,35 @@ namespace Oxygen if( _client.hideTitleBar() ) return; - QPainter painter(this); - painter.setClipRect(this->rect().intersected( event->rect() ) ); - painter.setRenderHints(QPainter::Antialiasing); + if( _client.compositingActive() ) + { + QPainter painter( this ); + painter.setClipRect( event->rect() ); + paint( painter ); + + } else { + + QPixmap pixmap( size() ); + { + + QPainter painter( &pixmap ); + painter.setRenderHints(QPainter::Antialiasing); + parentWidget()->render( &painter, QPoint(), geometry(), QWidget::DrawWindowBackground ); + paint( painter ); + + } + + QPainter painter(this); + painter.setClipRect( event->rect() ); + painter.drawPixmap( QPoint(), pixmap ); + + } + + } + + //___________________________________________________ + void Button::paint( QPainter& painter ) + { QPalette palette( this->palette() ); palette.setCurrentColorGroup( isActive() ? QPalette::Active : QPalette::Inactive); diff --git a/clients/oxygen/oxygenbutton.h b/clients/oxygen/oxygenbutton.h index 03c42891c4..7a07d7f1f1 100644 --- a/clients/oxygen/oxygenbutton.h +++ b/clients/oxygen/oxygenbutton.h @@ -109,6 +109,9 @@ namespace Oxygen //! paint void paintEvent(QPaintEvent* ); + //! paint + void paint(QPainter& ); + //! draw icon void drawIcon(QPainter*);