added double buffering to oxygen-client when compositing is off;
force update of buttons in client->paintEvent(); call _client->paint() from Button, instead of parentWidget()->render();icc-effect-5.14.5
parent
6e0733e0de
commit
8361b13de9
|
@ -175,23 +175,36 @@ namespace Oxygen
|
|||
if( _client.compositingActive() )
|
||||
{
|
||||
QPainter painter( this );
|
||||
painter.setClipRect( event->rect() );
|
||||
painter.setRenderHints(QPainter::Antialiasing);
|
||||
painter.setClipRegion( event->region() );
|
||||
paint( painter );
|
||||
|
||||
} else {
|
||||
|
||||
// create temporary pixmap to avoid flicker
|
||||
QPixmap pixmap( size() );
|
||||
{
|
||||
|
||||
// create painter
|
||||
QPainter painter( &pixmap );
|
||||
painter.setRenderHints(QPainter::Antialiasing);
|
||||
parentWidget()->render( &painter, QPoint(), geometry(), QWidget::DrawWindowBackground );
|
||||
painter.setClipRect( this->rect().intersected( event->rect() ) );
|
||||
|
||||
// render parent background
|
||||
// parentWidget()->render( &painter, QPoint(), geometry(), QWidget::DrawWindowBackground );
|
||||
|
||||
painter.save();
|
||||
painter.translate( -geometry().topLeft() );
|
||||
_client.paint( painter );
|
||||
painter.restore();
|
||||
|
||||
// render buttons
|
||||
paint( painter );
|
||||
|
||||
}
|
||||
|
||||
QPainter painter(this);
|
||||
painter.setClipRect( event->rect() );
|
||||
painter.setClipRegion( event->region() );
|
||||
painter.drawPixmap( QPoint(), pixmap );
|
||||
|
||||
}
|
||||
|
@ -288,6 +301,8 @@ namespace Oxygen
|
|||
|
||||
}
|
||||
|
||||
painter.restore();
|
||||
|
||||
}
|
||||
|
||||
//___________________________________________________
|
||||
|
|
|
@ -172,7 +172,7 @@ namespace Oxygen
|
|||
private:
|
||||
|
||||
//! parent client
|
||||
const Client &_client;
|
||||
Client &_client;
|
||||
|
||||
//! helper
|
||||
DecoHelper &_helper;
|
||||
|
|
|
@ -1370,15 +1370,47 @@ namespace Oxygen
|
|||
// factory
|
||||
if(!( _initialized && _factory->initialized() ) ) return;
|
||||
|
||||
if( compositingActive() )
|
||||
{
|
||||
QPainter painter(widget());
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setClipRegion( event->region() );
|
||||
paint( painter );
|
||||
} else {
|
||||
|
||||
QPixmap pixmap( widget()->size() );
|
||||
{
|
||||
QPainter painter( &pixmap );
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setClipRegion( event->region() );
|
||||
paint( painter );
|
||||
}
|
||||
|
||||
QPainter painter( widget() );
|
||||
painter.setClipRegion( event->region() );
|
||||
painter.drawPixmap( QPoint(), pixmap );
|
||||
|
||||
// update buttons
|
||||
QList<Button*> buttons( widget()->findChildren<Button*>() );
|
||||
foreach( Button* button, buttons )
|
||||
{
|
||||
if( event->rect().intersects( button->geometry() ) )
|
||||
{ button->update(); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//_________________________________________________________
|
||||
void Client::paint( QPainter& painter )
|
||||
{
|
||||
|
||||
// palette
|
||||
QPalette palette = widget()->palette();
|
||||
palette.setCurrentColorGroup( (isActive() ) ? QPalette::Active : QPalette::Inactive );
|
||||
|
||||
// painter
|
||||
QPainter painter(widget());
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setClipRegion( event->region() );
|
||||
|
||||
// define frame
|
||||
QRect frame = widget()->rect();
|
||||
|
||||
|
|
|
@ -225,6 +225,8 @@ namespace Oxygen
|
|||
//! resize event
|
||||
virtual void resizeEvent(QResizeEvent *e);
|
||||
|
||||
virtual void paint( QPainter& );
|
||||
|
||||
public slots:
|
||||
|
||||
//! triggers widget update in titleRect only
|
||||
|
|
Loading…
Reference in New Issue