kwin/effects/_test/test_input.cpp
Lucas Murray 846496d2c1 Cleaned up the effects/ directory by moving each individual effect into
its own directory, cleaned up the effect config macros and renamed
"MakeTransparent" to "Translucency" so that it matches its visible name.

svn path=/trunk/KDE/kdebase/workspace/; revision=921749
2009-02-05 15:35:38 +00:00

74 lines
2.1 KiB
C++

/*****************************************************************
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.
******************************************************************/
/*
Testing of handling input in effects. This testing effect moves all windows
by 100 pixels down, creates an input window that'll intercept all mouse events
and activates the window that's been clicked (click position needs to be
transformed). This is useful for effects that present something on the screen
and let the user interact with it (e.g. a list of window thumbnails and the
user can activate the window by clicking its thumbnail).
*/
#include "test_input.h"
#include <assert.h>
#include <qcursor.h>
#include <qevent.h>
namespace KWin
{
KWIN_EFFECT( test_input, TestInputEffect )
TestInputEffect::TestInputEffect()
{
input = effects->createInputWindow( this, 0, 0, displayWidth(), displayHeight(), Qt::CrossCursor );
}
TestInputEffect::~TestInputEffect()
{
effects->destroyInputWindow( input );
}
void TestInputEffect::prePaintScreen( ScreenPrePaintData& data, int time )
{
data.mask |= PAINT_SCREEN_TRANSFORMED;
effects->prePaintScreen( data, time );
}
void TestInputEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
{
data.yTranslate += 100;
effects->paintScreen( mask, region, data );
}
void TestInputEffect::windowInputMouseEvent( Window w, QEvent* e )
{
assert( w == input );
if( e->type() != QEvent::MouseButtonPress )
return;
QPoint pos = static_cast< QMouseEvent* >( e )->pos();
pos -= QPoint( 0, 100 ); // adjust for transformation
foreach( EffectWindow* c, effects->stackingOrder())
{
if( /* TODO c->isShown( true ) && */c->isOnCurrentDesktop()
&& c->geometry().contains( pos ))
{
effects->activateWindow( c );
return;
}
}
}
} // namespace