2006-07-04 20:51:01 +00:00
|
|
|
/*****************************************************************
|
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
|
|
|
|
|
|
|
Copyright (C) 2006 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
|
|
|
|
You can Freely distribute this program under the GNU General Public
|
|
|
|
License. See the file "COPYING" for the exact licensing terms.
|
|
|
|
******************************************************************/
|
|
|
|
|
|
|
|
#include "effects.h"
|
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
#include "toplevel.h"
|
|
|
|
#include "client.h"
|
|
|
|
#include "scene.h"
|
|
|
|
|
2006-07-04 20:51:01 +00:00
|
|
|
namespace KWinInternal
|
|
|
|
{
|
|
|
|
|
|
|
|
//****************************************
|
|
|
|
// Effect
|
|
|
|
//****************************************
|
|
|
|
|
|
|
|
Effect::~Effect()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
void Effect::windowUserMovedResized( Toplevel* , bool, bool )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
void Effect::windowAdded( Toplevel* )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
void Effect::windowDeleted( Toplevel* )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void Effect::prePaintScreen( int* mask, QRegion* region, int time )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintScreen( mask, region, time );
|
2006-07-04 20:51:01 +00:00
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
void Effect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|
|
|
{
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintScreen( mask, region, data );
|
2006-10-16 10:12:48 +00:00
|
|
|
}
|
2006-10-29 19:07:10 +00:00
|
|
|
|
|
|
|
void Effect::postPaintScreen()
|
|
|
|
{
|
|
|
|
effects->postPaintScreen();
|
|
|
|
}
|
2006-10-16 10:12:48 +00:00
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void Effect::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
2006-10-16 18:46:07 +00:00
|
|
|
{
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintWindow( w, mask, region, time );
|
2006-10-16 18:46:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Effect::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
|
|
|
{
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintWindow( w, mask, region, data );
|
2006-10-16 18:46:07 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void Effect::postPaintWindow( Scene::Window* w )
|
|
|
|
{
|
|
|
|
effects->postPaintWindow( w );
|
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void MakeHalfTransparent::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
2006-07-06 13:17:44 +00:00
|
|
|
{
|
2006-10-22 10:15:19 +00:00
|
|
|
const Client* c = dynamic_cast< const Client* >( w->window());
|
|
|
|
if(( c != NULL && ( c->isMove() || c->isResize())) || w->window()->isDialog())
|
|
|
|
{
|
|
|
|
*mask |= Scene::PAINT_WINDOW_TRANSLUCENT;
|
|
|
|
*mask &= ~Scene::PAINT_WINDOW_OPAQUE;
|
|
|
|
}
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintWindow( w, mask, region, time );
|
2006-10-22 10:15:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MakeHalfTransparent::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
|
|
|
{
|
|
|
|
const Client* c = dynamic_cast< const Client* >( w->window());
|
|
|
|
if( w->window()->isDialog())
|
2006-07-06 13:17:44 +00:00
|
|
|
data.opacity *= 0.8;
|
2006-10-22 10:15:19 +00:00
|
|
|
if( c->isMove() || c->isResize())
|
|
|
|
data.opacity *= 0.5;
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintWindow( w, mask, region, data );
|
2006-07-06 13:17:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MakeHalfTransparent::windowUserMovedResized( Toplevel* c, bool first, bool last )
|
|
|
|
{
|
|
|
|
if( first || last )
|
2006-10-24 19:28:17 +00:00
|
|
|
c->addDamageFull();
|
2006-07-06 13:17:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ShakyMove::ShakyMove()
|
|
|
|
{
|
|
|
|
connect( &timer, SIGNAL( timeout()), SLOT( tick()));
|
|
|
|
}
|
|
|
|
|
|
|
|
static const int shaky_diff[] = { 0, 1, 2, 3, 2, 1, 0, -1, -2, -3, -2, -1 };
|
|
|
|
static const int SHAKY_MAX = sizeof( shaky_diff ) / sizeof( shaky_diff[ 0 ] );
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void ShakyMove::prePaintScreen( int* mask, QRegion* region, int time )
|
2006-07-06 13:17:44 +00:00
|
|
|
{
|
2006-10-22 10:15:19 +00:00
|
|
|
if( !windows.isEmpty())
|
|
|
|
*mask |= Scene::PAINT_WINDOW_TRANSFORMED;
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintScreen( mask, region, time );
|
2006-10-22 10:15:19 +00:00
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void ShakyMove::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
2006-10-22 10:15:19 +00:00
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
*mask |= Scene::PAINT_WINDOW_TRANSFORMED;
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintWindow( w, mask, region, time );
|
2006-10-22 10:15:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ShakyMove::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
data.xTranslate += shaky_diff[ windows[ w->window() ]];
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintWindow( w, mask, region, data );
|
2006-07-06 13:17:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ShakyMove::windowUserMovedResized( Toplevel* c, bool first, bool last )
|
|
|
|
{
|
|
|
|
if( first )
|
|
|
|
{
|
|
|
|
if( windows.isEmpty())
|
|
|
|
timer.start( 50 );
|
|
|
|
windows[ c ] = 0;
|
|
|
|
}
|
|
|
|
else if( last )
|
|
|
|
{
|
|
|
|
windows.remove( c );
|
2006-10-22 10:15:19 +00:00
|
|
|
// just damage whole screen, transformation is involved
|
2006-10-24 19:28:17 +00:00
|
|
|
c->workspace()->addDamageFull();
|
2006-07-06 13:17:44 +00:00
|
|
|
if( windows.isEmpty())
|
|
|
|
timer.stop();
|
|
|
|
}
|
|
|
|
}
|
2006-07-04 20:51:01 +00:00
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
void ShakyMove::windowDeleted( Toplevel* c )
|
2006-07-06 09:55:10 +00:00
|
|
|
{
|
2006-07-06 13:17:44 +00:00
|
|
|
windows.remove( c );
|
|
|
|
if( windows.isEmpty())
|
|
|
|
timer.stop();
|
|
|
|
}
|
2006-07-06 09:55:10 +00:00
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
void ShakyMove::tick()
|
2006-07-06 09:55:10 +00:00
|
|
|
{
|
2006-10-22 10:15:19 +00:00
|
|
|
for( QMap< const Toplevel*, int >::Iterator it = windows.begin();
|
2006-07-06 13:17:44 +00:00
|
|
|
it != windows.end();
|
|
|
|
++it )
|
|
|
|
{
|
|
|
|
if( *it == SHAKY_MAX - 1 )
|
|
|
|
*it = 0;
|
|
|
|
else
|
|
|
|
++(*it);
|
2006-10-22 10:15:19 +00:00
|
|
|
// just damage whole screen, transformation is involved
|
2006-10-24 19:28:17 +00:00
|
|
|
it.key()->workspace()->addDamageFull();
|
2006-07-06 13:17:44 +00:00
|
|
|
}
|
2006-07-06 09:55:10 +00:00
|
|
|
}
|
|
|
|
|
2006-10-22 10:15:19 +00:00
|
|
|
#if 0
|
2006-07-06 18:22:01 +00:00
|
|
|
void GrowMove::transformWindow( Toplevel* c, Matrix& matrix, EffectData& )
|
|
|
|
{
|
|
|
|
if( Client* c2 = dynamic_cast< Client* >( c ))
|
|
|
|
if( c2->isMove())
|
|
|
|
{
|
|
|
|
Matrix m;
|
|
|
|
m.m[ 0 ][ 0 ] = 1.2;
|
|
|
|
m.m[ 1 ][ 1 ] = 1.4;
|
|
|
|
matrix *= m;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void GrowMove::windowUserMovedResized( Toplevel* c, bool first, bool last )
|
|
|
|
{
|
|
|
|
if( first || last )
|
|
|
|
{
|
2006-10-07 21:18:36 +00:00
|
|
|
// TODO damage whole screen, transformation is involved
|
|
|
|
c->workspace()->addDamage( c->geometry());
|
2006-07-06 18:22:01 +00:00
|
|
|
}
|
|
|
|
}
|
2006-10-21 18:07:00 +00:00
|
|
|
#endif
|
2006-07-06 18:22:01 +00:00
|
|
|
|
2006-07-06 19:02:14 +00:00
|
|
|
ShiftWorkspaceUp::ShiftWorkspaceUp( Workspace* ws )
|
|
|
|
: up( false )
|
2006-10-24 19:17:48 +00:00
|
|
|
, diff( 0 )
|
2006-07-06 19:02:14 +00:00
|
|
|
, wspace( ws )
|
|
|
|
{
|
|
|
|
connect( &timer, SIGNAL( timeout()), SLOT( tick()));
|
|
|
|
timer.start( 2000 );
|
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void ShiftWorkspaceUp::prePaintScreen( int* mask, QRegion* region, int time )
|
2006-07-06 19:02:14 +00:00
|
|
|
{
|
2006-10-24 19:17:48 +00:00
|
|
|
if( up && diff < 1000 )
|
|
|
|
diff = qBound( 0, diff + time, 1000 ); // KDE3: note this differs from KCLAMP
|
|
|
|
if( !up && diff > 0 )
|
|
|
|
diff = qBound( 0, diff - time, 1000 );
|
|
|
|
if( diff != 0 )
|
2006-10-21 18:07:00 +00:00
|
|
|
*mask |= Scene::PAINT_SCREEN_TRANSFORMED;
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintScreen( mask, region, time );
|
2006-10-21 18:07:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ShiftWorkspaceUp::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|
|
|
{
|
2006-10-24 19:17:48 +00:00
|
|
|
if( diff != 0 )
|
|
|
|
data.yTranslate -= diff / 100;
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintScreen( mask, region, data );
|
2006-07-06 19:02:14 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void ShiftWorkspaceUp::postPaintScreen()
|
|
|
|
{
|
|
|
|
if( up ? diff < 1000 : diff > 0 )
|
|
|
|
wspace->addDamageFull(); // trigger next animation repaint
|
|
|
|
effects->postPaintScreen();
|
|
|
|
}
|
|
|
|
|
2006-07-06 19:02:14 +00:00
|
|
|
void ShiftWorkspaceUp::tick()
|
|
|
|
{
|
|
|
|
up = !up;
|
2006-10-24 19:28:17 +00:00
|
|
|
wspace->addDamageFull();
|
2006-07-06 19:02:14 +00:00
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
|
|
|
|
void FadeIn::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
{
|
|
|
|
windows[ w->window() ] += time / 1000.; // complete change in 1000ms
|
|
|
|
if( windows[ w->window() ] < 1 )
|
|
|
|
{
|
|
|
|
*mask |= Scene::PAINT_WINDOW_TRANSLUCENT;
|
|
|
|
*mask &= ~Scene::PAINT_WINDOW_OPAQUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
windows.remove( w->window());
|
|
|
|
}
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintWindow( w, mask, region, time );
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void FadeIn::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
{
|
|
|
|
data.opacity *= windows[ w->window()];
|
|
|
|
}
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintWindow( w, mask, region, data );
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void FadeIn::postPaintWindow( Scene::Window* w )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
w->window()->addDamageFull(); // trigger next animation repaint
|
|
|
|
effects->postPaintWindow( w );
|
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void FadeIn::windowAdded( Toplevel* c )
|
|
|
|
{
|
|
|
|
Client* cc = dynamic_cast< Client* >( c );
|
|
|
|
if( cc == NULL || cc->isOnCurrentDesktop())
|
|
|
|
{
|
|
|
|
windows[ c ] = 0;
|
2006-10-24 19:28:17 +00:00
|
|
|
c->addDamageFull();
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void FadeIn::windowDeleted( Toplevel* c )
|
|
|
|
{
|
|
|
|
windows.remove( c );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ScaleIn::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
{
|
|
|
|
windows[ w->window() ] += time / 500.; // complete change in 500ms
|
|
|
|
if( windows[ w->window() ] < 1 )
|
|
|
|
*mask |= Scene::PAINT_WINDOW_TRANSFORMED;
|
|
|
|
else
|
|
|
|
windows.remove( w->window());
|
|
|
|
}
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->prePaintWindow( w, mask, region, time );
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ScaleIn::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
{
|
|
|
|
data.xScale *= windows[ w->window()];
|
|
|
|
data.yScale *= windows[ w->window()];
|
2006-10-29 19:07:10 +00:00
|
|
|
data.xTranslate += int( w->window()->width() / 2 * ( 1 - windows[ w->window()] ));
|
|
|
|
data.yTranslate += int( w->window()->height() / 2 * ( 1 - windows[ w->window()] ));
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
2006-10-29 19:06:32 +00:00
|
|
|
effects->paintWindow( w, mask, region, data );
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void ScaleIn::postPaintWindow( Scene::Window* w )
|
|
|
|
{
|
|
|
|
if( windows.contains( w->window()))
|
|
|
|
w->window()->addDamageFull(); // trigger next animation repaint
|
|
|
|
effects->postPaintWindow( w );
|
|
|
|
}
|
|
|
|
|
2006-10-24 19:17:48 +00:00
|
|
|
void ScaleIn::windowAdded( Toplevel* c )
|
|
|
|
{
|
|
|
|
Client* cc = dynamic_cast< Client* >( c );
|
|
|
|
if( cc == NULL || cc->isOnCurrentDesktop())
|
|
|
|
{
|
|
|
|
windows[ c ] = 0;
|
2006-10-24 19:28:17 +00:00
|
|
|
c->addDamageFull();
|
2006-10-24 19:17:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void ScaleIn::windowDeleted( Toplevel* c )
|
|
|
|
{
|
|
|
|
windows.remove( c );
|
|
|
|
}
|
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
//****************************************
|
|
|
|
// EffectsHandler
|
|
|
|
//****************************************
|
|
|
|
|
2006-07-06 19:02:14 +00:00
|
|
|
EffectsHandler::EffectsHandler( Workspace* ws )
|
2006-10-16 10:12:48 +00:00
|
|
|
: current_paint_window( 0 )
|
|
|
|
, current_paint_screen( 0 )
|
2006-07-06 09:55:10 +00:00
|
|
|
{
|
2006-07-10 18:34:57 +00:00
|
|
|
if( !compositing())
|
|
|
|
return;
|
2006-10-22 10:16:54 +00:00
|
|
|
// effects.append( new MakeHalfTransparent );
|
|
|
|
// effects.append( new ShakyMove );
|
2006-10-16 10:12:48 +00:00
|
|
|
// effects.append( new GrowMove );
|
2006-10-21 18:08:58 +00:00
|
|
|
// effects.append( new ShiftWorkspaceUp( ws ));
|
2006-10-24 19:17:48 +00:00
|
|
|
effects.append( new FadeIn );
|
|
|
|
effects.append( new ScaleIn );
|
2006-07-06 09:55:10 +00:00
|
|
|
}
|
2006-10-21 18:07:00 +00:00
|
|
|
|
2006-07-10 18:34:57 +00:00
|
|
|
EffectsHandler::~EffectsHandler()
|
|
|
|
{
|
2006-10-16 10:12:48 +00:00
|
|
|
foreach( Effect* e, effects )
|
|
|
|
delete e;
|
2006-07-10 18:34:57 +00:00
|
|
|
}
|
2006-07-06 09:55:10 +00:00
|
|
|
|
2006-07-06 13:17:44 +00:00
|
|
|
void EffectsHandler::windowUserMovedResized( Toplevel* c, bool first, bool last )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
2006-10-16 10:12:48 +00:00
|
|
|
foreach( Effect* e, effects )
|
|
|
|
e->windowUserMovedResized( c, first, last );
|
2006-07-04 20:51:01 +00:00
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
void EffectsHandler::windowAdded( Toplevel* c )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
2006-10-16 10:12:48 +00:00
|
|
|
foreach( Effect* e, effects )
|
|
|
|
e->windowAdded( c );
|
2006-07-04 20:51:01 +00:00
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
void EffectsHandler::windowDeleted( Toplevel* c )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
2006-10-16 10:12:48 +00:00
|
|
|
foreach( Effect* e, effects )
|
|
|
|
e->windowDeleted( c );
|
2006-07-04 20:51:01 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:06:32 +00:00
|
|
|
// start another painting pass
|
|
|
|
void EffectsHandler::startPaint()
|
2006-10-16 10:12:48 +00:00
|
|
|
{
|
2006-10-16 18:46:07 +00:00
|
|
|
assert( current_paint_screen == 0 );
|
|
|
|
assert( current_paint_window == 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
// the idea is that effects call this function again which calls the next one
|
2006-10-29 19:06:32 +00:00
|
|
|
void EffectsHandler::prePaintScreen( int* mask, QRegion* region, int time )
|
2006-10-16 18:46:07 +00:00
|
|
|
{
|
2006-10-29 19:07:10 +00:00
|
|
|
if( current_paint_screen < effects.size())
|
2006-10-29 19:06:32 +00:00
|
|
|
{
|
|
|
|
effects[ current_paint_screen++ ]->prePaintScreen( mask, region, time );
|
|
|
|
--current_paint_screen;
|
|
|
|
}
|
|
|
|
// no special final code
|
2006-10-16 10:12:48 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:06:32 +00:00
|
|
|
void EffectsHandler::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
2006-07-04 20:51:01 +00:00
|
|
|
{
|
2006-10-29 19:07:10 +00:00
|
|
|
if( current_paint_screen < effects.size())
|
2006-10-29 19:06:32 +00:00
|
|
|
{
|
|
|
|
effects[ current_paint_screen++ ]->paintScreen( mask, region, data );
|
|
|
|
--current_paint_screen;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
scene->finalPaintScreen( mask, region, data );
|
2006-07-04 20:51:01 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void EffectsHandler::postPaintScreen()
|
|
|
|
{
|
|
|
|
if( current_paint_screen < effects.size())
|
|
|
|
{
|
|
|
|
effects[ current_paint_screen++ ]->postPaintScreen();
|
|
|
|
--current_paint_screen;
|
|
|
|
}
|
|
|
|
// no special final code
|
|
|
|
}
|
|
|
|
|
2006-10-29 19:06:32 +00:00
|
|
|
void EffectsHandler::prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time )
|
2006-10-16 18:46:07 +00:00
|
|
|
{
|
2006-10-29 19:07:10 +00:00
|
|
|
if( current_paint_window < effects.size())
|
2006-10-29 19:06:32 +00:00
|
|
|
{
|
|
|
|
effects[ current_paint_window++ ]->prePaintWindow( w, mask, region, time );
|
|
|
|
--current_paint_window;
|
|
|
|
}
|
|
|
|
// no special final code
|
2006-10-16 18:46:07 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:06:32 +00:00
|
|
|
void EffectsHandler::paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data )
|
2006-10-16 18:46:07 +00:00
|
|
|
{
|
2006-10-29 19:07:10 +00:00
|
|
|
if( current_paint_window < effects.size())
|
2006-10-29 19:06:32 +00:00
|
|
|
{
|
|
|
|
effects[ current_paint_window++ ]->paintWindow( w, mask, region, data );
|
|
|
|
--current_paint_window;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
scene->finalPaintWindow( w, mask, region, data );
|
2006-10-16 18:46:07 +00:00
|
|
|
}
|
|
|
|
|
2006-10-29 19:07:10 +00:00
|
|
|
void EffectsHandler::postPaintWindow( Scene::Window* w )
|
|
|
|
{
|
|
|
|
if( current_paint_window < effects.size())
|
|
|
|
{
|
|
|
|
effects[ current_paint_window++ ]->postPaintWindow( w );
|
|
|
|
--current_paint_window;
|
|
|
|
}
|
|
|
|
// no special final code
|
|
|
|
}
|
|
|
|
|
2006-07-04 20:51:01 +00:00
|
|
|
EffectsHandler* effects;
|
|
|
|
|
|
|
|
} // namespace
|
2006-07-06 13:17:44 +00:00
|
|
|
|
|
|
|
#include "effects.moc"
|