The official excuse for this effect is that I wanted to try
drawing a window several times. svn path=/branches/work/kwin_composite/; revision=642577
This commit is contained in:
parent
a0133cb048
commit
5cabf743ae
4 changed files with 113 additions and 0 deletions
|
@ -76,6 +76,7 @@ set(kwin_KDEINIT_SRCS
|
||||||
effects/desktopchangeslide.cpp
|
effects/desktopchangeslide.cpp
|
||||||
effects/boxswitch.cpp
|
effects/boxswitch.cpp
|
||||||
effects/fallapart.cpp
|
effects/fallapart.cpp
|
||||||
|
effects/drunken.cpp
|
||||||
effects/test_input.cpp
|
effects/test_input.cpp
|
||||||
effects/test_thumbnail.cpp
|
effects/test_thumbnail.cpp
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,6 +18,7 @@ License. See the file "COPYING" for the exact licensing terms.
|
||||||
#include "effects/boxswitch.h"
|
#include "effects/boxswitch.h"
|
||||||
#include "effects/desktopchangeslide.h"
|
#include "effects/desktopchangeslide.h"
|
||||||
#include "effects/dialogparent.h"
|
#include "effects/dialogparent.h"
|
||||||
|
#include "effects/drunken.h"
|
||||||
#include "effects/fade.h"
|
#include "effects/fade.h"
|
||||||
#include "effects/howto.h"
|
#include "effects/howto.h"
|
||||||
#include "effects/maketransparent.h"
|
#include "effects/maketransparent.h"
|
||||||
|
@ -194,6 +195,7 @@ EffectsHandler::EffectsHandler()
|
||||||
registerEffect("DialogParent", new GenericEffectFactory<DialogParentEffect>);
|
registerEffect("DialogParent", new GenericEffectFactory<DialogParentEffect>);
|
||||||
registerEffect("DesktopChangeSlide", new GenericEffectFactory<DesktopChangeSlideEffect>);
|
registerEffect("DesktopChangeSlide", new GenericEffectFactory<DesktopChangeSlideEffect>);
|
||||||
registerEffect("BoxSwitch", new GenericEffectFactory<BoxSwitchEffect>);
|
registerEffect("BoxSwitch", new GenericEffectFactory<BoxSwitchEffect>);
|
||||||
|
registerEffect("Drunken", new GenericEffectFactory<DrunkenEffect>);
|
||||||
|
|
||||||
registerEffect("TestInput", new GenericEffectFactory<TestInputEffect>);
|
registerEffect("TestInput", new GenericEffectFactory<TestInputEffect>);
|
||||||
registerEffect("TestThumbnail", new GenericEffectFactory<TestThumbnailEffect>);
|
registerEffect("TestThumbnail", new GenericEffectFactory<TestThumbnailEffect>);
|
||||||
|
|
75
effects/drunken.cpp
Normal file
75
effects/drunken.cpp
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*****************************************************************
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
Copyright (C) 2007 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 "drunken.h"
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
namespace KWinInternal
|
||||||
|
{
|
||||||
|
|
||||||
|
void DrunkenEffect::prePaintScreen( int* mask, QRegion* region, int time )
|
||||||
|
{
|
||||||
|
if( !windows.isEmpty())
|
||||||
|
*mask |= Scene::PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS;
|
||||||
|
effects->prePaintScreen( mask, region, time );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrunkenEffect::prePaintWindow( EffectWindow* w, int* mask, QRegion* region, int time )
|
||||||
|
{
|
||||||
|
if( windows.contains( w ))
|
||||||
|
{
|
||||||
|
windows[ w ] += time / 1000.;
|
||||||
|
if( windows[ w ] < 1 )
|
||||||
|
*mask |= Scene::PAINT_WINDOW_TRANSFORMED;
|
||||||
|
else
|
||||||
|
windows.remove( w );
|
||||||
|
}
|
||||||
|
effects->prePaintWindow( w, mask, region, time );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrunkenEffect::paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data )
|
||||||
|
{
|
||||||
|
if( !windows.contains( w ))
|
||||||
|
{
|
||||||
|
effects->paintWindow( w, mask, region, data );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WindowPaintData d1 = data;
|
||||||
|
// 4 cycles, decreasing amplitude
|
||||||
|
int diff = int( sin( windows[ w ] * 8 * M_PI ) * ( 1 - windows[ w ] ) * 10 );
|
||||||
|
d1.xTranslate -= diff;
|
||||||
|
d1.opacity *= 0.5;
|
||||||
|
effects->paintWindow( w, mask, region, d1 );
|
||||||
|
WindowPaintData d2 = data;
|
||||||
|
d2.xTranslate += diff;
|
||||||
|
d2.opacity *= 0.5;
|
||||||
|
effects->paintWindow( w, mask, region, d2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrunkenEffect::postPaintWindow( EffectWindow* w )
|
||||||
|
{
|
||||||
|
if( windows.contains( w ))
|
||||||
|
w->window()->addRepaintFull();
|
||||||
|
effects->postPaintWindow( w );
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrunkenEffect::windowAdded( EffectWindow* w )
|
||||||
|
{
|
||||||
|
windows[ w ] = 0;
|
||||||
|
w->window()->addRepaintFull();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrunkenEffect::windowClosed( EffectWindow* w )
|
||||||
|
{
|
||||||
|
windows.remove( w );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
35
effects/drunken.h
Normal file
35
effects/drunken.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*****************************************************************
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
Copyright (C) 2007 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.
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#ifndef KWIN_DRUNKEN_H
|
||||||
|
#define KWIN_DRUNKEN_H
|
||||||
|
|
||||||
|
#include <effects.h>
|
||||||
|
|
||||||
|
namespace KWinInternal
|
||||||
|
{
|
||||||
|
|
||||||
|
class DrunkenEffect
|
||||||
|
: public Effect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void prePaintScreen( int* mask, QRegion* region, int time );
|
||||||
|
virtual void prePaintWindow( EffectWindow* w, int* mask, QRegion* region, int time );
|
||||||
|
virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
|
||||||
|
virtual void postPaintWindow( EffectWindow* w );
|
||||||
|
virtual void windowAdded( EffectWindow* w );
|
||||||
|
virtual void windowClosed( EffectWindow* w );
|
||||||
|
private:
|
||||||
|
QHash< EffectWindow*, double > windows; // progress
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue