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() )
|
if( _client.compositingActive() )
|
||||||
{
|
{
|
||||||
QPainter painter( this );
|
QPainter painter( this );
|
||||||
painter.setClipRect( event->rect() );
|
painter.setRenderHints(QPainter::Antialiasing);
|
||||||
|
painter.setClipRegion( event->region() );
|
||||||
paint( painter );
|
paint( painter );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
// create temporary pixmap to avoid flicker
|
||||||
QPixmap pixmap( size() );
|
QPixmap pixmap( size() );
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// create painter
|
||||||
QPainter painter( &pixmap );
|
QPainter painter( &pixmap );
|
||||||
painter.setRenderHints(QPainter::Antialiasing);
|
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 );
|
paint( painter );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.setClipRect( event->rect() );
|
painter.setClipRegion( event->region() );
|
||||||
painter.drawPixmap( QPoint(), pixmap );
|
painter.drawPixmap( QPoint(), pixmap );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -288,6 +301,8 @@ namespace Oxygen
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
painter.restore();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//___________________________________________________
|
//___________________________________________________
|
||||||
|
|
|
@ -172,7 +172,7 @@ namespace Oxygen
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//! parent client
|
//! parent client
|
||||||
const Client &_client;
|
Client &_client;
|
||||||
|
|
||||||
//! helper
|
//! helper
|
||||||
DecoHelper &_helper;
|
DecoHelper &_helper;
|
||||||
|
|
|
@ -1370,15 +1370,47 @@ namespace Oxygen
|
||||||
// factory
|
// factory
|
||||||
if(!( _initialized && _factory->initialized() ) ) return;
|
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
|
// palette
|
||||||
QPalette palette = widget()->palette();
|
QPalette palette = widget()->palette();
|
||||||
palette.setCurrentColorGroup( (isActive() ) ? QPalette::Active : QPalette::Inactive );
|
palette.setCurrentColorGroup( (isActive() ) ? QPalette::Active : QPalette::Inactive );
|
||||||
|
|
||||||
// painter
|
|
||||||
QPainter painter(widget());
|
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
|
||||||
painter.setClipRegion( event->region() );
|
|
||||||
|
|
||||||
// define frame
|
// define frame
|
||||||
QRect frame = widget()->rect();
|
QRect frame = widget()->rect();
|
||||||
|
|
||||||
|
|
|
@ -225,6 +225,8 @@ namespace Oxygen
|
||||||
//! resize event
|
//! resize event
|
||||||
virtual void resizeEvent(QResizeEvent *e);
|
virtual void resizeEvent(QResizeEvent *e);
|
||||||
|
|
||||||
|
virtual void paint( QPainter& );
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
//! triggers widget update in titleRect only
|
//! triggers widget update in titleRect only
|
||||||
|
|
Loading…
Reference in New Issue