/***************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2007 Philip Falkner You can Freely distribute this program under the GNU General Public License. See the file "COPYING" for the exact licensing terms. ******************************************************************/ #ifndef KWIN_BOXSWITCH_H #define KWIN_BOXSWITCH_H #include #include #include #include #include #include #include #include #ifdef HAVE_XRENDER #include #endif namespace KWin { class BoxSwitchEffect : public Effect { public: BoxSwitchEffect(); ~BoxSwitchEffect(); virtual void paintScreen( int mask, QRegion region, ScreenPaintData& data ); virtual void prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int time ); virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data ); virtual void windowInputMouseEvent( Window w, QEvent* e ); virtual void windowDamaged( EffectWindow* w, const QRect& damage ); virtual void windowGeometryShapeChanged( EffectWindow* w, const QRect& old ); virtual void tabBoxAdded( int mode ); virtual void tabBoxClosed(); virtual void tabBoxUpdated(); private: class ItemInfo; void setActive(); void setInactive(); void moveResizeInputWindow( int x, int y, int width, int height ); void calculateFrameSize(); void calculateItemSizes(); void paintFrame(); void paintHighlight( QRect area ); void paintWindowThumbnail( EffectWindow* w ); void paintDesktopThumbnail( int iDesktop ); void paintWindowIcon( EffectWindow* w ); void paintText( const QString& text ); bool mActivated; Window mInput; int mMode; QRect frame_area; int frame_margin; // TODO graphical background int highlight_margin; // TODO graphical background QSize item_max_size; // maximum item display size (including highlight) QRect text_area; QFont text_font; QColor color_frame; QColor color_highlight; QColor color_text; QHash< EffectWindow*, ItemInfo* > windows; EffectWindowList original_windows; EffectWindow* selected_window; QHash< int, ItemInfo* > desktops; QList< int > original_desktops; int selected_desktop; int painting_desktop; #ifdef HAVE_XRENDER XRenderPictFormat* alphaFormat; #endif }; class BoxSwitchEffect::ItemInfo { public: QRect area; // maximal painting area, including any frames/highlights/etc. QRegion clickable; QRect thumbnail; QPixmap icon; #ifdef HAVE_OPENGL GLTexture iconTexture; #endif #ifdef HAVE_XRENDER Picture iconPicture; #endif }; } // namespace #endif