kwin/effects/coverswitch/coverswitch.h
Martin Gräßlin ad070909a3 Reflection plane in Coverswitch and GLES
CoverSwitch uses new concept of combining a custom fragment shader with the
built-in generic vertex shader. This shader is used to render the reflection
plane on top of the reflected windows.
The fragment shader uses two uniform colors for front and back and interpolates
between them based on the texcoords (which are not used for texture lookup).
The reflection plane vertices could be buffered.
2011-01-30 14:12:02 +01:00

111 lines
3.5 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2008 Martin Gräßlin <ubuntu@martin-graesslin.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_COVERSWITCH_H
#define KWIN_COVERSWITCH_H
#include <QHash>
#include <QRect>
#include <QRegion>
#include <QSize>
#include <QQueue>
#include <kwineffects.h>
#include <kwinglutils.h>
namespace KWin
{
class CoverSwitchEffect
: public Effect
{
public:
CoverSwitchEffect();
~CoverSwitchEffect();
virtual void reconfigure( ReconfigureFlags );
virtual void prePaintScreen( ScreenPrePaintData& data, int time );
virtual void paintScreen( int mask, QRegion region, ScreenPaintData& data );
virtual void postPaintScreen();
virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
virtual void tabBoxAdded( int mode );
virtual void tabBoxClosed();
virtual void tabBoxUpdated();
virtual void windowInputMouseEvent( Window w, QEvent* e );
virtual void windowClosed( EffectWindow* c );
static bool supported();
private:
void paintScene( EffectWindow* frontWindow, const EffectWindowList& leftWindows, const EffectWindowList& rightWindows,
bool reflectedWindows = false );
void paintWindowCover( EffectWindow* w, bool reflectedWindow, WindowPaintData& data );
void paintFrontWindow( EffectWindow* frontWindow, int width, int leftWindows, int rightWindows, bool reflectedWindow );
void paintWindows( const EffectWindowList& windows, bool left, bool reflectedWindows, EffectWindow* additionalWindow = NULL );
void abort();
bool mActivated;
float angle;
bool animateSwitch;
bool animateStart;
bool animateStop;
bool animation;
bool start;
bool stop;
bool reflection;
float mirrorColor[2][4];
bool windowTitle;
int animationDuration;
bool stopRequested;
bool startRequested;
TimeLine timeLine;
QRect area;
Window input;
float zPosition;
float scaleFactor;
enum Direction
{
Left,
Right
};
Direction direction;
QQueue<Direction> scheduled_directions;
EffectWindow* selected_window;
int activeScreen;
QList< EffectWindow* > leftWindows;
QList< EffectWindow* > rightWindows;
EffectWindowList currentWindowList;
EffectWindowList referrencedWindows;
EffectFrame* captionFrame;
QFont captionFont;
bool thumbnails;
bool dynamicThumbnails;
int thumbnailWindows;
bool primaryTabBox;
bool secondaryTabBox;
GLShader *m_reflectionShader;
};
} // namespace
#endif