kwin/effects/presentwindows.h
Rivo Laks 33f8a0758c Add Expose-like effect to show all windows of active desktop side by side.
Another window can then be activated by clicking on it.
Also add interpolate() utility function to Effect

svn path=/branches/work/kwin_composite/; revision=622634
2007-01-12 14:14:53 +00:00

82 lines
2.5 KiB
C++

/*****************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2007 Rivo Laks <rivolaks@hot.ee>
You can Freely distribute this program under the GNU General Public
License. See the file "COPYING" for the exact licensing terms.
******************************************************************/
#ifndef KWIN_PRESENTWINDOWS_H
#define KWIN_PRESENTWINDOWS_H
// Include with base class for effects.
#include <effects.h>
namespace KWinInternal
{
/**
* Expose-like effect which shows all windows on current desktop side-by-side,
* letting the user select active window.
**/
class PresentWindowsEffect
: public QObject, public Effect
{
Q_OBJECT
public:
PresentWindowsEffect(Workspace* ws);
virtual void prePaintScreen( int* mask, QRegion* region, int time );
virtual void prePaintWindow( Scene::Window* w, int* mask, QRegion* region, int time );
virtual void paintWindow( Scene::Window* w, int mask, QRegion region, WindowPaintData& data );
virtual void postPaintScreen();
virtual void windowDeleted( Toplevel* c );
virtual void windowActivated( Toplevel* c );
virtual void windowInputMouseEvent( Window w, QEvent* e );
public slots:
void setActive(bool active);
void toggleActive() { setActive(!mActivated); }
protected:
// Updates window tranformations, i.e. destination pos and scale of the window
void rearrangeWindows();
void calculateWindowTransformationsDumb(ClientList clientlist);
void calculateWindowTransformationsKompose(ClientList clientlist);
// Helper methods for layout calculation
float clientAspectRatio(Client* c);
int clientWidthForHeight(Client* c, int h);
int clientHeightForWidth(Client* c, int w);
// Called once the effect is activated (and wasn't activated before)
void effectActivated();
// Called once the effect has terminated
void effectTerminated();
private:
// Whether the effect is currently activated by the user
bool mActivated;
// 0 = not active, 1 = fully active
float mActiveness;
Workspace* mWorkspace;
Window mInput;
struct WindowData
{
QRect area;
float scale;
};
QMap<Toplevel*, WindowData> mWindowData;
QList<Client*> mTemporarilyUnminimized;
};
} // namespace
#endif