From d0ab0a15952f5d9c3b9b621eca2133d27818bc0f Mon Sep 17 00:00:00 2001 From: Matthias Ettrich Date: Mon, 14 Aug 2000 17:50:51 +0000 Subject: [PATCH] less flicker svn path=/trunk/kdebase/kwin/; revision=61018 --- clients/laptop/laptopclient.cpp | 61 +++++++++++++++++++-------------- clients/laptop/laptopclient.h | 3 +- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/clients/laptop/laptopclient.cpp b/clients/laptop/laptopclient.cpp index acaba705fe..b3fb23d370 100644 --- a/clients/laptop/laptopclient.cpp +++ b/clients/laptop/laptopclient.cpp @@ -26,7 +26,7 @@ extern "C" static unsigned char iconify_bits[] = { 0xff, 0xff, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18}; - + static unsigned char close_bits[] = { 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00 }; @@ -35,7 +35,7 @@ static unsigned char maximize_bits[] = { static unsigned char minmax_bits[] = { 0x0c, 0x18, 0x33, 0x67, 0xcf, 0x9f, 0x3f, 0x3f}; - + static unsigned char unsticky_bits[] = { 0x00, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x00}; @@ -44,7 +44,7 @@ static unsigned char sticky_bits[] = { static unsigned char question_bits[] = { 0x3c, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x18}; - + static QPixmap *titlePix=0; static KPixmap *aUpperGradient=0; static KPixmap *iUpperGradient=0; @@ -94,7 +94,7 @@ static void create_pixmaps() titlePix = new QPixmap(33, 12); QBitmap mask(33, 12); mask.fill(Qt::color0); - + p.begin(titlePix); maskPainter.begin(&mask); maskPainter.setPen(Qt::color1); @@ -177,7 +177,7 @@ static void create_pixmaps() if(qGray(options->color(Options::ButtonBg, true).rgb()) > 128) btnForeground = Qt::black; else - btnForeground = Qt::white; + btnForeground = Qt::white; } @@ -275,7 +275,7 @@ void LaptopClient::slotReset() LaptopClient::LaptopClient( Workspace *ws, WId w, QWidget *parent, const char *name ) - : Client( ws, w, parent, name, WResizeNoErase ) + : Client( ws, w, parent, name, WResizeNoErase | WNorthWestGravity ) { if(titleHeight == -1){ KConfig *config = KGlobal::config(); @@ -286,12 +286,12 @@ LaptopClient::LaptopClient( Workspace *ws, WId w, QWidget *parent, if(titleHeight > 32) titleHeight = 32; } - + create_pixmaps(); connect(options, SIGNAL(resetClients()), this, SLOT(slotReset())); bool help = providesContextHelp(); - + QGridLayout* g = new QGridLayout(this, 0, 0, 0); g->addRowSpacing(0, 3); g->addRowSpacing(2, 1); @@ -301,7 +301,7 @@ LaptopClient::LaptopClient( Workspace *ws, WId w, QWidget *parent, g->addColSpacing(0, 4); g->addColSpacing(2, 4); g->addColSpacing(2, 12); - + button[0] = new SystemButton(28, titleHeight-2, this, "close", close_bits); button[1] = new SystemButton(18, titleHeight-2, this, "sticky"); if(isSticky()) @@ -352,14 +352,15 @@ void LaptopClient::resizeEvent( QResizeEvent* e) Client::resizeEvent( e ); doShape(); - if ( isVisibleToTLW() && !testWFlags( WNorthWestGravity )) { - QPainter p( this ); - QRect t = titlebar->geometry(); - t.setTop( 0 ); - QRegion r = rect(); - r = r.subtract( t ); - p.setClipRegion( r ); - p.eraseRect( rect() ); + if ( isVisibleToTLW() ) { + int dx = 16 + QABS( e->oldSize().width() - width() ); + int dy = 16 + QABS( e->oldSize().height() - height() ); + update( 0, height() - dy + 1, width(), dy ); + update( width() - dx + 1, 0, dx, height() ); + update( QRect( QPoint(4,4), titlebar->geometry().bottomLeft() ) ); + update( QRect( titlebar->geometry().topRight(), QPoint( width() - 4, titlebar->geometry().bottom() ) ) ); + // titlebar needs no background + QApplication::postEvent( this, new QPaintEvent( titlebar->geometry(), FALSE ) ); } } @@ -377,8 +378,8 @@ void LaptopClient::paintEvent( QPaintEvent* ) QRect r(width()-33, height()-33, 33, 33); p.setPen(Qt::black); p.drawRect(r); - qDrawShadePanel(&p, r.x()+1, r.y()+1, r.width()-2, r.height()-2, g, false, 1, - &g.brush(QColorGroup::Background)); + qDrawShadePanel(&p, r.x()+1, r.y()+1, r.width()-2, r.height()-2, g, false, 1 ); +// &g.brush(QColorGroup::Background)); p.setPen(g.light()); p.drawLine(r.right()-7, r.y()+1, r.right()-7, r.bottom()-8); p.drawLine(r.x()+1, r.bottom()-7, r.right()-7, r.bottom()-7); @@ -387,19 +388,17 @@ void LaptopClient::paintEvent( QPaintEvent* ) r = QRect(rect()); r.setHeight(r.height()-8); r.setWidth(r.width()-8); - + p.setPen(Qt::black); p.drawRect(r); qDrawShadeRect(&p, r.x()+1, r.y()+1, r.width()-2, r.height()-2, g, false, - 1, 0, &g.brush(QColorGroup::Background)); - //qDrawShadePanel(&p, r.x()+3, r.y()+17, r.width()-6, r.height()-20, g, - // true, 1); + 1, 0 ); //, &g.brush(QColorGroup::Background)); qDrawShadePanel(&p, r.x()+3, r.y()+titleHeight+3, r.width()-6, r.height()-titleHeight-6, g, true, 1); r = titlebar->geometry(); KPixmap *grPix = isActive() ? aUpperGradient : iUpperGradient; - + if(grPix){ p.drawTiledPixmap(r.x(), r.y(), r.width(), r.height()-1, *grPix); } @@ -409,7 +408,7 @@ void LaptopClient::paintEvent( QPaintEvent* ) if(titlePix && isActive()) p.drawTiledPixmap(r.x(), r.y(), r.width(), r.height()-1, *titlePix); - + QButton *rBtn = providesContextHelp() ? button[4] : button[1]; int x2 = button[3]->x()+button[3]->width(); @@ -488,7 +487,7 @@ void LaptopClient::showEvent(QShowEvent *ev) void LaptopClient::windowWrapperShowEvent( QShowEvent* ) { doShape(); -} +} void LaptopClient::mouseDoubleClickEvent( QMouseEvent * e ) { @@ -512,6 +511,16 @@ void LaptopClient::init() // } +Client::MousePosition LaptopClient::mousePosition( const QPoint& pos) const +{ + QPoint p = pos; + if ( pos.x() > rect().right() - 12 ) + p.rx() += 8; + if ( pos.y() > rect().bottom() - 12 ) + p.ry() += 8; + return Client::mousePosition( p ); +} + void LaptopClient::activeChange(bool) { repaint(false); diff --git a/clients/laptop/laptopclient.h b/clients/laptop/laptopclient.h index 364ea9cd58..b165f79e65 100644 --- a/clients/laptop/laptopclient.h +++ b/clients/laptop/laptopclient.h @@ -31,6 +31,7 @@ class LaptopClient : public Client public: LaptopClient( Workspace *ws, WId w, QWidget *parent=0, const char *name=0 ); ~LaptopClient(){;} + MousePosition mousePosition( const QPoint& ) const; protected: void resizeEvent( QResizeEvent* ); void paintEvent( QPaintEvent* ); @@ -48,7 +49,7 @@ protected slots: private: SystemButton* button[5]; QSpacerItem* titlebar; -}; +};