kwin/effects/_test/drunken.cpp

76 lines
1.9 KiB
C++
Raw Normal View History

/*****************************************************************
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 KWin
{
2011-01-30 14:34:42 +00:00
KWIN_EFFECT(drunken, DrunkenEffect)
2011-01-30 14:34:42 +00:00
void DrunkenEffect::prePaintScreen(ScreenPrePaintData& data, int time)
{
if (!windows.isEmpty())
data.mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS;
2011-01-30 14:34:42 +00:00
effects->prePaintScreen(data, time);
}
2011-01-30 14:34:42 +00:00
void DrunkenEffect::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time)
{
if (windows.contains(w)) {
windows[ w ] += time / 1000.;
2011-01-30 14:34:42 +00:00
if (windows[ w ] < 1)
data.setTransformed();
else
2011-01-30 14:34:42 +00:00
windows.remove(w);
}
2011-01-30 14:34:42 +00:00
effects->prePaintWindow(w, data, time);
}
2011-01-30 14:34:42 +00:00
void DrunkenEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data)
{
if (!windows.contains(w)) {
effects->paintWindow(w, mask, region, data);
return;
2011-01-30 14:34:42 +00:00
}
WindowPaintData d1 = data;
// 4 cycles, decreasing amplitude
2011-01-30 14:34:42 +00:00
int diff = int(sin(windows[ w ] * 8 * M_PI) * (1 - windows[ w ]) * 10);
d1.xTranslate -= diff;
d1.opacity *= 0.5;
2011-01-30 14:34:42 +00:00
effects->paintWindow(w, mask, region, d1);
WindowPaintData d2 = data;
d2.xTranslate += diff;
d2.opacity *= 0.5;
2011-01-30 14:34:42 +00:00
effects->paintWindow(w, mask, region, d2);
}
2011-01-30 14:34:42 +00:00
void DrunkenEffect::postPaintWindow(EffectWindow* w)
{
if (windows.contains(w))
w->addRepaintFull();
2011-01-30 14:34:42 +00:00
effects->postPaintWindow(w);
}
2011-01-30 14:34:42 +00:00
void DrunkenEffect::windowAdded(EffectWindow* w)
{
windows[ w ] = 0;
w->addRepaintFull();
2011-01-30 14:34:42 +00:00
}
2011-01-30 14:34:42 +00:00
void DrunkenEffect::windowClosed(EffectWindow* w)
{
windows.remove(w);
}
} // namespace