diff options
Diffstat (limited to 'opensuse/tdebase/mach_blass.diff')
-rw-r--r-- | opensuse/tdebase/mach_blass.diff | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/opensuse/tdebase/mach_blass.diff b/opensuse/tdebase/mach_blass.diff new file mode 100644 index 000000000..8ea798d13 --- /dev/null +++ b/opensuse/tdebase/mach_blass.diff @@ -0,0 +1,160 @@ +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -35,6 +35,7 @@ Copyright (C) 2000 Matthias Ettrich <ett + #include <kuser.h> + #include <kpixmap.h> + #include <kimageeffect.h> ++#include <kpixmapeffect.h> + #include <kdialog.h> + #include <kseparator.h> + +@@ -48,6 +49,9 @@ Copyright (C) 2000 Matthias Ettrich <ett + + #include "shutdowndlg.moc" + ++static const int max_faded = 2300; ++static const int slice = 20; ++ + KSMShutdownFeedback * KSMShutdownFeedback::s_pSelf = 0L; + + KSMShutdownFeedback::KSMShutdownFeedback() +@@ -56,12 +60,22 @@ KSMShutdownFeedback::KSMShutdownFeedback + { + setBackgroundMode( QWidget::NoBackground ); + setGeometry( QApplication::desktop()->geometry() ); +- QTimer::singleShot( 10, this, SLOT( slotPaintEffect() ) ); +- m_root.resize( width(), height() ); +-} ++ if( QPixmap::defaultDepth() > 8 ) ++ { ++ grabbed.create( size(), 32 ); ++ QTimer::singleShot( 0, this, SLOT( slotGrab() ) ); ++ } ++ else ++ { ++ QTimer::singleShot( 10, this, SLOT( slotPaintEffectOld() ) ); ++ m_root.resize( width(), height() ); ++ } + + +-void KSMShutdownFeedback::slotPaintEffect() ++} ++ ++// the upstream KDE effect ++void KSMShutdownFeedback::slotPaintEffectOld() + { + if ( m_currentY >= height() ) { + if ( backgroundMode() == QWidget::NoBackground ) { +@@ -80,7 +94,76 @@ void KSMShutdownFeedback::slotPaintEffec + bitBlt( this, 0, m_currentY, &pixmap ); + bitBlt( &m_root, 0, m_currentY, &pixmap ); + m_currentY += 10; +- QTimer::singleShot( 1, this, SLOT( slotPaintEffect() ) ); ++ QTimer::singleShot( 1, this, SLOT( slotPaintEffectOld() ) ); ++} ++ ++// the SUSE effect ++void KSMShutdownFeedback::slotGrab() ++{ ++ // we start the passed early ++ if ( m_currentY * 4 >= height() * 3 && passed.isNull()) ++ passed.start(); ++ ++ if ( m_currentY >= height() ) { ++ slotPaintEffectNew(); ++ return; ++ } ++ ++ QImage img; ++ img = QPixmap::grabWindow( qt_xrootwin(), 0, ++ m_currentY, width(), ++ slice ); ++ bitBlt(&grabbed, 0, m_currentY, &img); ++ m_currentY += slice; ++ QTimer::singleShot(0, this, SLOT(slotGrab())); ++} ++ ++void KSMShutdownFeedback::slotPaintEffectNew() ++{ ++ const unsigned int shift_scale = 10; ++ const unsigned int scale = 1 << shift_scale; ++ ++ //kdDebug() << "passed before paint " << passed.elapsed() << endl; ++ unsigned int current_fade = QMIN(scale, passed.elapsed() * scale / max_faded); ++ QImage copy; ++ copy.create( grabbed.size(), grabbed.depth() ); ++ unsigned int pixels = grabbed.width()*grabbed.height(); ++ QRgb *orig = ( QRgb* )grabbed.bits(); ++ QRgb *dest = ( QRgb* )copy.bits(); ++ QColor clr; ++ ++ int r, g, b, tg; ++ ++ for ( unsigned int i = 0; i < pixels; ++i ) ++ { ++ r = qRed( orig[i] ); ++ g = qGreen( orig[i] ); ++ b = qBlue( orig[i] ); ++ ++ // qGray formla ++ tg = (r*11 + g*16 + b*5)/32; ++ // make it a bit darker than gray ++ tg = tg - tg / 5; ++ ++ r = ( ( r << shift_scale ) + current_fade * ( tg - r ) ) >> shift_scale; ++ g = ( ( g << shift_scale ) + current_fade * ( tg - g ) ) >> shift_scale; ++ b = ( ( b << shift_scale ) + current_fade * ( tg - b ) ) >> shift_scale; ++ ++ dest[i] = qRgb(r, g, b); ++ } ++ //kdDebug() << "passed before bitBlt " << passed.elapsed() << endl; ++ bitBlt( this, 0, 0, ©); ++ //kdDebug() << "passed after bitBlt " << passed.elapsed() << endl; ++ ++ if ( current_fade >= scale ) { ++ if ( backgroundMode() == QWidget::NoBackground ) { ++ setBackgroundMode( QWidget::NoBackground ); ++ setBackgroundPixmap( copy ); ++ } ++ return; ++ } ++ ++ QTimer::singleShot( 0, this, SLOT( slotPaintEffectNew() ) ); + } + + ////// +Index: ksmserver/shutdowndlg.h +=================================================================== +--- ksmserver/shutdowndlg.h.orig ++++ ksmserver/shutdowndlg.h +@@ -9,7 +9,9 @@ Copyright (C) 2000 Matthias Ettrich <ett + + #include <qpixmap.h> + #include <qdialog.h> ++#include <qdatetime.h> + #include <kpushbutton.h> ++#include <qimage.h> + class QPushButton; + class QVButtonGroup; + class QPopupMenu; +@@ -31,13 +33,17 @@ protected: + ~KSMShutdownFeedback() {} + + private slots: +- void slotPaintEffect(); ++ void slotPaintEffectOld(); ++ void slotPaintEffectNew(); ++ void slotGrab(); + + private: + static KSMShutdownFeedback * s_pSelf; + KSMShutdownFeedback(); + int m_currentY; + QPixmap m_root; ++ QTime passed; ++ QImage grabbed; + }; + + |