Репозитории ALT
5.1: | 3.5.10-alt20.M51.2 |
4.1: | 3.5.10-alt16.M41.1 |
4.0: | 3.5.9-alt1.M40.1 |
3.0: | 3.4.1-alt12 |
+updates: | 3.4.1-alt12.1.M30 |
+backports: | 3.5.6-alt7.0.M30 |
Группа :: Графические оболочки/KDE
Пакет: kdebase
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: mach_blass_legacy.diff
Скачать
Скачать
--- ksmserver/shutdowndlg.cpp 2005/12/21 12:31:45 1.37
+++ ksmserver/shutdowndlg.cpp 2005/12/21 12:50:31
@@ -34,6 +34,7 @@
#include <kuser.h>
#include <kpixmap.h>
#include <kimageeffect.h>
+#include <kpixmapeffect.h>
#include <kdialog.h>
#include <kseparator.h>
@@ -47,6 +48,9 @@
#include "shutdowndlg.moc"
+static const int max_faded = 2300;
+static const int slice = 20;
+
KSMShutdownFeedback * KSMShutdownFeedback::s_pSelf = 0L;
KSMShutdownFeedback::KSMShutdownFeedback()
@@ -54,32 +58,86 @@
m_currentY( 0 )
{
setBackgroundMode( QWidget::NoBackground );
- setGeometry( QApplication::desktop()->geometry() );
- QTimer::singleShot( 10, this, SLOT( slotPaintEffect() ) );
- m_root.resize( width(), height() );
+ QRect geo( QApplication::desktop()->geometry() );
+ setGeometry( geo );
+ int dep = QPixmap::defaultDepth();
+ if (dep == 24 || dep == 16)
+ dep = 32;
+ grabbed.create( geo.size(), dep);
+ QTimer::singleShot( 0, this, SLOT( slotGrab() ) );
+}
+
+void KSMShutdownFeedback::slotGrab()
+{
+ // we start the passed early
+ if ( m_currentY * 4 >= height() * 3 && passed.isNull())
+ passed.start();
+
+ if ( m_currentY >= height() ) {
+ slotPaintEffect();
+ 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::slotPaintEffect()
{
- if ( m_currentY >= height() ) {
- if ( backgroundMode() == QWidget::NoBackground ) {
- setBackgroundMode( QWidget::NoBackground );
- setBackgroundPixmap( m_root );
+ const unsigned int shift_scale = 10;
+ const unsigned int scale = 1 << shift_scale;
+
+ //kdDebug() << "passed before paint " << passed.elapsed() << endl;
+ int current_fade = QMIN(scale, passed.elapsed() * scale / max_faded);
+ QImage copy;
+ if ( grabbed.depth() == 32 ) {
+ 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 h, s, v;
+
+ 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);
}
- return;
+
+ } else {
+ // old code - now used for 8bit
+ copy = grabbed;
+ copy = KImageEffect::desaturate(copy, current_fade);
+ copy = KImageEffect::fade(copy, 0.1 * current_fade, Qt::black);
}
+ //kdDebug() << "passed before bitBlt " << passed.elapsed() << endl;
+ bitBlt( this, 0, 0, ©);
+ //kdDebug() << "passed after bitBlt " << passed.elapsed() << endl;
+
+ if ( current_fade >= scale )
+ return;
- KPixmap pixmap;
- pixmap = QPixmap::grabWindow( qt_xrootwin(), 0, m_currentY, width(), 10 );
- QImage image = pixmap.convertToImage();
- KImageEffect::blend( Qt::black, image, 0.4 );
- KImageEffect::toGray( image, true );
- pixmap.convertFromImage( image );
- bitBlt( this, 0, m_currentY, &pixmap );
- bitBlt( &m_root, 0, m_currentY, &pixmap );
- m_currentY += 10;
- QTimer::singleShot( 1, this, SLOT( slotPaintEffect() ) );
+ QTimer::singleShot( 0, this, SLOT( slotPaintEffect() ) );
}
//////
--- ksmserver/shutdowndlg.h 2005/12/21 12:22:05 1.3
+++ ksmserver/shutdowndlg.h 2005/12/21 12:51:36
@@ -9,7 +9,9 @@
#include <qpixmap.h>
#include <qdialog.h>
+#include <qdatetime.h>
#include <kpushbutton.h>
+#include <qimage.h>
class QPushButton;
class QVButtonGroup;
class QPopupMenu;
@@ -32,12 +34,14 @@
private slots:
void slotPaintEffect();
+ void slotGrab();
private:
static KSMShutdownFeedback * s_pSelf;
KSMShutdownFeedback();
int m_currentY;
- QPixmap m_root;
+ QTime passed;
+ QImage grabbed;
};