|
Lines 113-119
Link Here
|
| 113 |
void KSMShutdownFeedback::slotPaintEffect() |
113 |
void KSMShutdownFeedback::slotPaintEffect() |
| 114 |
{ |
114 |
{ |
| 115 |
// determine which fade to use |
115 |
// determine which fade to use |
| 116 |
if (TDEConfigGroup(TDEGlobal::config(), "Logout").readBoolEntry("doFancyLogout", true)) { |
116 |
if ( (TDEConfigGroup(TDEGlobal::config(), "Logout").readBoolEntry("doFadeaway", true)) && |
|
|
117 |
(TDEConfigGroup(TDEGlobal::config(), "Logout").readBoolEntry("doFancyLogout", true)) ) { |
| 117 |
// fancy logout fade |
118 |
// fancy logout fade |
| 118 |
float doFancyLogoutAdditionalDarkness = (float)TDEConfigGroup(TDEGlobal::config(), "Logout").readDoubleNumEntry("doFancyLogoutAdditionalDarkness", 0.6); |
119 |
float doFancyLogoutAdditionalDarkness = (float)TDEConfigGroup(TDEGlobal::config(), "Logout").readDoubleNumEntry("doFancyLogoutAdditionalDarkness", 0.6); |
| 119 |
float doFancyLogoutFadeTime = (float)TDEConfigGroup(TDEGlobal::config(), "Logout").readDoubleNumEntry("doFancyLogoutFadeTime", 4000); |
120 |
float doFancyLogoutFadeTime = (float)TDEConfigGroup(TDEGlobal::config(), "Logout").readDoubleNumEntry("doFancyLogoutFadeTime", 4000); |
|
Lines 363-511
Link Here
|
| 363 |
} |
364 |
} |
| 364 |
} |
365 |
} |
| 365 |
else { |
366 |
else { |
| 366 |
// standard logout fade |
367 |
if (TDEConfigGroup(TDEGlobal::config(), "Logout").readBoolEntry("doFadeaway", true)) { |
| 367 |
if (kapp->isX11CompositionAvailable()) { |
368 |
// standard logout fade |
| 368 |
// We can do this in a different (simpler) manner because we have compositing support! |
369 |
if (kapp->isX11CompositionAvailable()) { |
| 369 |
// The end effect will be very similar to the old style logout |
370 |
// We can do this in a different (simpler) manner because we have compositing support! |
| 370 |
float doFancyLogoutFadeTime = 1000; |
371 |
// The end effect will be very similar to the old style logout |
| 371 |
float doFancyLogoutFadeBackTime = 0; |
372 |
float doFancyLogoutFadeTime = 1000; |
| 372 |
if ( m_greyImageCreated == false ) { |
373 |
float doFancyLogoutFadeBackTime = 0; |
| 373 |
m_greyImageCreated = true; |
374 |
if ( m_greyImageCreated == false ) { |
| 374 |
|
375 |
m_greyImageCreated = true; |
| 375 |
// eliminate nasty flicker on first show |
376 |
|
| 376 |
m_root.resize( width(), height() ); |
377 |
// eliminate nasty flicker on first show |
| 377 |
TQImage blendedImage = m_grayImage; |
378 |
m_root.resize( width(), height() ); |
| 378 |
TQPainter p; |
379 |
TQImage blendedImage = m_grayImage; |
| 379 |
p.begin( &m_root ); |
380 |
TQPainter p; |
| 380 |
blendedImage.setAlphaBuffer(false); |
381 |
p.begin( &m_root ); |
| 381 |
p.drawImage( 0, 0, blendedImage ); |
382 |
blendedImage.setAlphaBuffer(false); |
| 382 |
p.end(); |
383 |
p.drawImage( 0, 0, blendedImage ); |
| 383 |
|
384 |
p.end(); |
| 384 |
setBackgroundPixmap( m_root ); |
385 |
|
| 385 |
setGeometry( TQApplication::desktop()->geometry() ); |
386 |
setBackgroundPixmap( m_root ); |
| 386 |
setBackgroundMode( TQWidget::NoBackground ); |
387 |
setGeometry( TQApplication::desktop()->geometry() ); |
| 387 |
|
388 |
setBackgroundMode( TQWidget::NoBackground ); |
| 388 |
m_unfadedImage = m_grayImage.copy(); |
389 |
|
| 389 |
|
390 |
m_unfadedImage = m_grayImage.copy(); |
| 390 |
register uchar * r = m_grayImage.bits(); |
391 |
|
| 391 |
uchar * end = m_grayImage.bits() + m_grayImage.numBytes(); |
392 |
register uchar * r = m_grayImage.bits(); |
| 392 |
|
393 |
uchar * end = m_grayImage.bits() + m_grayImage.numBytes(); |
| 393 |
while ( r != end ) { |
394 |
|
| 394 |
*reinterpret_cast<TQRgb*>(r) = tqRgba(0, 0, 0, 107); |
395 |
while ( r != end ) { |
| 395 |
r += 4; |
396 |
*reinterpret_cast<TQRgb*>(r) = tqRgba(0, 0, 0, 107); |
|
|
397 |
r += 4; |
| 398 |
} |
| 399 |
|
| 400 |
// start timer which is used for cpu-speed-independent fading |
| 401 |
m_fadeTime.start(); |
| 402 |
m_rowsDone = 0; |
| 403 |
} |
| 404 |
|
| 405 |
// return if fading is completely done... |
| 406 |
if ( ( m_grayOpacity >= 1.0f && m_fadeBackwards == FALSE ) || ( m_grayOpacity <= 0.0f && m_fadeBackwards == TRUE ) ) { |
| 407 |
return; |
| 408 |
} |
| 409 |
|
| 410 |
if ( m_fadeBackwards == FALSE ) { |
| 411 |
m_grayOpacity = m_fadeTime.elapsed() / doFancyLogoutFadeTime; |
| 412 |
if ( m_grayOpacity > 1.0f ) |
| 413 |
m_grayOpacity = 1.0f; |
| 414 |
} |
| 415 |
else { |
| 416 |
m_grayOpacity = 1.0f - m_fadeTime.elapsed() / doFancyLogoutFadeBackTime - m_compensation; |
| 417 |
if ( m_grayOpacity < 0.0f ) |
| 418 |
m_grayOpacity = 0.0f; |
| 419 |
} |
| 420 |
|
| 421 |
const int imgWidth = m_unfadedImage.width(); |
| 422 |
int imgHeight = m_unfadedImage.height(); |
| 423 |
int heightUnit = imgHeight / 3; |
| 424 |
if( heightUnit < 1 ) |
| 425 |
heightUnit = 1; |
| 426 |
|
| 427 |
int y1 = static_cast<int>( imgHeight*m_grayOpacity - heightUnit + m_grayOpacity*heightUnit*2.0f ); |
| 428 |
if( y1 > imgHeight ) { |
| 429 |
y1 = imgHeight; |
| 430 |
} |
| 431 |
|
| 432 |
int y2 = y1+heightUnit; |
| 433 |
if( y2 > imgHeight ) { |
| 434 |
y2 = imgHeight; |
| 396 |
} |
435 |
} |
| 397 |
|
436 |
|
| 398 |
// start timer which is used for cpu-speed-independent fading |
437 |
if( m_fadeBackwards == FALSE ) |
| 399 |
m_fadeTime.start(); |
|
|
| 400 |
m_rowsDone = 0; |
| 401 |
} |
| 402 |
|
| 403 |
// return if fading is completely done... |
| 404 |
if ( ( m_grayOpacity >= 1.0f && m_fadeBackwards == FALSE ) || ( m_grayOpacity <= 0.0f && m_fadeBackwards == TRUE ) ) { |
| 405 |
return; |
| 406 |
} |
| 407 |
|
| 408 |
if ( m_fadeBackwards == FALSE ) { |
| 409 |
m_grayOpacity = m_fadeTime.elapsed() / doFancyLogoutFadeTime; |
| 410 |
if ( m_grayOpacity > 1.0f ) |
| 411 |
m_grayOpacity = 1.0f; |
| 412 |
} |
| 413 |
else { |
| 414 |
m_grayOpacity = 1.0f - m_fadeTime.elapsed() / doFancyLogoutFadeBackTime - m_compensation; |
| 415 |
if ( m_grayOpacity < 0.0f ) |
| 416 |
m_grayOpacity = 0.0f; |
| 417 |
} |
| 418 |
|
| 419 |
const int imgWidth = m_unfadedImage.width(); |
| 420 |
int imgHeight = m_unfadedImage.height(); |
| 421 |
int heightUnit = imgHeight / 3; |
| 422 |
if( heightUnit < 1 ) |
| 423 |
heightUnit = 1; |
| 424 |
|
| 425 |
int y1 = static_cast<int>( imgHeight*m_grayOpacity - heightUnit + m_grayOpacity*heightUnit*2.0f ); |
| 426 |
if( y1 > imgHeight ) { |
| 427 |
y1 = imgHeight; |
| 428 |
} |
| 429 |
|
| 430 |
int y2 = y1+heightUnit; |
| 431 |
if( y2 > imgHeight ) { |
| 432 |
y2 = imgHeight; |
| 433 |
} |
| 434 |
|
| 435 |
if( m_fadeBackwards == FALSE ) |
| 436 |
{ |
| 437 |
if( y1 > 0 && y1 < imgHeight && y1-m_rowsDone > 0 && m_rowsDone < imgHeight ) |
| 438 |
{ |
438 |
{ |
| 439 |
TQImage img( imgWidth, y1-m_rowsDone, 32 ); |
439 |
if( y1 > 0 && y1 < imgHeight && y1-m_rowsDone > 0 && m_rowsDone < imgHeight ) |
| 440 |
memcpy( img.bits(), m_grayImage.scanLine( m_rowsDone ), imgWidth*(y1-m_rowsDone)*4 ); |
440 |
{ |
| 441 |
bitBlt( this, 0, m_rowsDone, &img ); |
441 |
TQImage img( imgWidth, y1-m_rowsDone, 32 ); |
| 442 |
m_rowsDone = y1; |
442 |
memcpy( img.bits(), m_grayImage.scanLine( m_rowsDone ), imgWidth*(y1-m_rowsDone)*4 ); |
|
|
443 |
bitBlt( this, 0, m_rowsDone, &img ); |
| 444 |
m_rowsDone = y1; |
| 445 |
} |
| 443 |
} |
446 |
} |
| 444 |
} |
447 |
else { |
| 445 |
else { |
448 |
// when fading back we have to blit area which isnt gray anymore to unfaded image |
| 446 |
// when fading back we have to blit area which isnt gray anymore to unfaded image |
449 |
if( y2 > 0 && y2 < imgHeight && m_rowsDone > y2 ) |
| 447 |
if( y2 > 0 && y2 < imgHeight && m_rowsDone > y2 ) |
450 |
{ |
| 448 |
{ |
451 |
TQImage img( imgWidth, m_rowsDone-y2, 32 ); |
| 449 |
TQImage img( imgWidth, m_rowsDone-y2, 32 ); |
452 |
memcpy( img.bits(), m_unfadedImage.scanLine( y2 ), imgWidth*(m_rowsDone-y2)*4 ); |
| 450 |
memcpy( img.bits(), m_unfadedImage.scanLine( y2 ), imgWidth*(m_rowsDone-y2)*4 ); |
453 |
bitBlt( this, 0, y2, &img ); |
| 451 |
bitBlt( this, 0, y2, &img ); |
454 |
m_rowsDone = y2; |
| 452 |
m_rowsDone = y2; |
455 |
} |
| 453 |
} |
456 |
} |
| 454 |
} |
457 |
|
| 455 |
|
458 |
int start_y1 = y1; |
| 456 |
int start_y1 = y1; |
459 |
if( start_y1 < 0 ) { |
| 457 |
if( start_y1 < 0 ) { |
460 |
start_y1 = 0; |
| 458 |
start_y1 = 0; |
461 |
} |
| 459 |
} |
462 |
if( y2 > start_y1 ) { |
| 460 |
if( y2 > start_y1 ) { |
463 |
TQImage img( imgWidth, y2-start_y1, 32 ); |
| 461 |
TQImage img( imgWidth, y2-start_y1, 32 ); |
464 |
memcpy( img.bits(), m_grayImage.scanLine( start_y1 ), ( y2-start_y1 ) * imgWidth * 4 ); |
| 462 |
memcpy( img.bits(), m_grayImage.scanLine( start_y1 ), ( y2-start_y1 ) * imgWidth * 4 ); |
465 |
register uchar * rs = m_unfadedImage.scanLine( start_y1 ); |
| 463 |
register uchar * rs = m_unfadedImage.scanLine( start_y1 ); |
466 |
register uchar * rd = img.bits(); |
| 464 |
register uchar * rd = img.bits(); |
467 |
for( int y = start_y1; y < y2; ++y ) |
| 465 |
for( int y = start_y1; y < y2; ++y ) |
|
|
| 466 |
{ |
| 467 |
// linear gradients look bad, so use cos-function |
| 468 |
for( short int x = 0; x < imgWidth; ++x ) |
| 469 |
{ |
468 |
{ |
| 470 |
*reinterpret_cast<TQRgb*>(rd) = tqRgba(0, 0, 0, 107); |
469 |
// linear gradients look bad, so use cos-function |
| 471 |
rs += 4; rd += 4; |
470 |
for( short int x = 0; x < imgWidth; ++x ) |
|
|
471 |
{ |
| 472 |
*reinterpret_cast<TQRgb*>(rd) = tqRgba(0, 0, 0, 107); |
| 473 |
rs += 4; rd += 4; |
| 474 |
} |
| 472 |
} |
475 |
} |
|
|
476 |
bitBlt( this, 0, start_y1, &img ); |
| 473 |
} |
477 |
} |
| 474 |
bitBlt( this, 0, start_y1, &img ); |
478 |
|
| 475 |
} |
479 |
TQTimer::singleShot( 1, this, TQT_SLOT( slotPaintEffect() ) ); |
| 476 |
|
480 |
} |
| 477 |
TQTimer::singleShot( 1, this, TQT_SLOT( slotPaintEffect() ) ); |
481 |
else { |
| 478 |
} |
482 |
if ( m_currentY >= height() ) { |
| 479 |
else { |
483 |
if ( backgroundMode() == TQWidget::NoBackground ) { |
| 480 |
if ( m_currentY >= height() ) { |
484 |
setBackgroundMode( TQWidget::NoBackground ); |
| 481 |
if ( backgroundMode() == TQWidget::NoBackground ) { |
485 |
setBackgroundPixmap( m_root ); |
|
|
486 |
} |
| 487 |
return; |
| 488 |
} |
| 489 |
|
| 490 |
if ( m_currentY == 0 ) { |
| 482 |
setBackgroundMode( TQWidget::NoBackground ); |
491 |
setBackgroundMode( TQWidget::NoBackground ); |
| 483 |
setBackgroundPixmap( m_root ); |
492 |
setGeometry( TQApplication::desktop()->geometry() ); |
|
|
493 |
m_root.resize( width(), height() ); // for the default logout |
| 494 |
|
| 495 |
KPixmap pixmap; |
| 496 |
pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, 0, width(), height() )); |
| 497 |
bitBlt( this, 0, 0, &pixmap ); |
| 498 |
bitBlt( &m_root, 0, 0, &pixmap ); |
| 484 |
} |
499 |
} |
| 485 |
return; |
500 |
|
| 486 |
} |
|
|
| 487 |
|
| 488 |
if ( m_currentY == 0 ) { |
| 489 |
setBackgroundMode( TQWidget::NoBackground ); |
| 490 |
setGeometry( TQApplication::desktop()->geometry() ); |
| 491 |
m_root.resize( width(), height() ); // for the default logout |
| 492 |
|
| 493 |
KPixmap pixmap; |
501 |
KPixmap pixmap; |
| 494 |
pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, 0, width(), height() )); |
502 |
pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, m_currentY, width(), 10 )); |
| 495 |
bitBlt( this, 0, 0, &pixmap ); |
503 |
TQImage image = pixmap.convertToImage(); |
| 496 |
bitBlt( &m_root, 0, 0, &pixmap ); |
504 |
KImageEffect::blend( Qt::black, image, 0.4 ); |
|
|
505 |
KImageEffect::toGray( image, true ); |
| 506 |
pixmap.convertFromImage( image ); |
| 507 |
bitBlt( this, 0, m_currentY, &pixmap ); |
| 508 |
bitBlt( &m_root, 0, m_currentY, &pixmap ); |
| 509 |
m_currentY += 10; |
| 510 |
TQTimer::singleShot( 1, this, TQT_SLOT( slotPaintEffect() ) ); |
| 497 |
} |
511 |
} |
| 498 |
|
|
|
| 499 |
KPixmap pixmap; |
| 500 |
pixmap = TQPixmap(TQPixmap::grabWindow( tqt_xrootwin(), 0, m_currentY, width(), 10 )); |
| 501 |
TQImage image = pixmap.convertToImage(); |
| 502 |
KImageEffect::blend( Qt::black, image, 0.4 ); |
| 503 |
KImageEffect::toGray( image, true ); |
| 504 |
pixmap.convertFromImage( image ); |
| 505 |
bitBlt( this, 0, m_currentY, &pixmap ); |
| 506 |
bitBlt( &m_root, 0, m_currentY, &pixmap ); |
| 507 |
m_currentY += 10; |
| 508 |
TQTimer::singleShot( 1, this, TQT_SLOT( slotPaintEffect() ) ); |
| 509 |
} |
512 |
} |
| 510 |
} |
513 |
} |
| 511 |
|
514 |
|