/******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2011 Arthur Arlt 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 . *********************************************************************/ #ifndef KWIN_OUTLINE_H #define KWIN_OUTLINE_H #include "xcbutils.h" #include #include namespace KWin { /** * @short This class is used to show the outline of a given geometry. * * The class renders an outline by using four windows. One for each border of * the geometry. It is possible to replace the outline with an effect. If an * effect is available the effect will be used, otherwise the outline will be * rendered by using the X implementation. * * @author Arthur Arlt * @since 4.7 */ class Outline { public: Outline(); ~Outline(); /** * Set the outline geometry. * To show the outline use @link showOutline. * @param outlineGeometry The geometry of the outline to be shown * @see showOutline */ void setGeometry(const QRect &outlineGeometry); /** * Shows the outline of a window using either an effect or the X implementation. * To stop the outline process use @link hideOutline. * @see hideOutline */ void show(); /** * Shows the outline for the given @p outlineGeometry. * This is the same as setOutlineGeometry followed by showOutline directly. * To stop the outline process use @link hideOutline. * @param outlineGeometry The geometry of the outline to be shown * @see hideOutline */ void show(const QRect &outlineGeometry); /** * Hides shown outline. * @see showOutline */ void hide(); /** * Return outline window ids * @return The window ids created to represent the outline */ QVector windowIds() const; private: /** * Show the window outline using the X implementation */ void showWithX(); // TODO: variadic template arguments for adding method arguments template void forEachWindow(T method); Xcb::Window m_topOutline; Xcb::Window m_rightOutline; Xcb::Window m_bottomOutline; Xcb::Window m_leftOutline; QRect m_outlineGeometry; bool m_initialized; bool m_active; }; template inline void Outline::forEachWindow(T method) { (m_topOutline.*method)(); (m_rightOutline.*method)(); (m_bottomOutline.*method)(); (m_leftOutline.*method)(); } } #endif