/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /** * \file effects.h "Special effects" other than compositor effects. * * Before we had a serious compositor, we supported swooping * rectangles for minimising and so on. These are still supported * today, even when the compositor is enabled. The file contains two * parts: * * 1) A set of functions, each of which implements a special effect. * (Only the minimize function does anything interesting; we should * probably get rid of the rest.) * * 2) A set of functions for moving a highlighted wireframe box around * the screen, optionally with height and width shown in the middle. * This is used for moving and resizing when reduced_resources is set. * * There was formerly a system which allowed callers to drop in their * own handlers for various things; it was never used (people who want * their own handlers can just modify this file, after all) and it added * a good deal of extra complexity, so it has been removed. If you want it, * it can be found in svn r3769. */ /* * Copyright (C) 2001 Anders Carlsson, Havoc Pennington * * 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, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef META_EFFECTS_H #define META_EFFECTS_H #include "util.h" #include "screen-private.h" typedef enum { META_EFFECT_MINIMIZE, META_EFFECT_UNMINIMIZE, META_EFFECT_FOCUS, META_EFFECT_CLOSE, META_NUM_EFFECTS } MetaEffectType; /** * A callback which will be called when the effect has finished. */ typedef void (* MetaEffectFinished) (gpointer data); /** * Performs the minimize effect. * * \param window The window we're moving * \param window_rect Its current state * \param target Where it should end up * \param finished Callback for when it's finished * \param data Data for callback */ void meta_effect_run_minimize (MetaWindow *window, MetaRectangle *window_rect, MetaRectangle *target, MetaEffectFinished finished, gpointer data); /** * Performs the unminimize effect. There is no such effect. * FIXME: delete this. * * \param window The window we're moving * \param icon_rect Its current state * \param window_rect Where it should end up * \param finished Callback for when it's finished * \param data Data for callback */ void meta_effect_run_unminimize (MetaWindow *window, MetaRectangle *window_rect, MetaRectangle *icon_rect, MetaEffectFinished finished, gpointer data); /** * Performs the close effect. There is no such effect. * FIXME: delete this. * * \param window The window we're moving * \param finished Callback for when it's finished * \param data Data for callback */ void meta_effect_run_close (MetaWindow *window, MetaEffectFinished finished, gpointer data); /** * Performs the focus effect. There is no such effect. * FIXME: delete this. * * \param window The window we're moving * \param finished Callback for when it's finished * \param data Data for callback */ void meta_effect_run_focus (MetaWindow *window, MetaEffectFinished finished, gpointer data); /** * Grabs the server and paints a wireframe rectangle on the screen. * Since this involves starting a grab, please be considerate of other * users and don't keep the grab for long. You may move the wireframe * around using meta_effects_update_wireframe() and remove it, and undo * the grab, using meta_effects_end_wireframe(). * * \param screen The screen to draw the rectangle on. * \param rect The size of the rectangle to draw. * \param width The width to display in the middle (or 0 not to) * \param height The width to display in the middle (or 0 not to) */ void meta_effects_begin_wireframe (MetaScreen *screen, const MetaRectangle *rect, int width, int height); /** * Moves a wireframe rectangle around after its creation by * meta_effects_begin_wireframe(). (Perhaps we ought to remember the old * positions and not require people to pass them in?) * * \param old_rect Where the rectangle is now * \param old_width The width that was displayed on it (or 0 if there wasn't) * \param old_height The height that was displayed on it (or 0 if there wasn't) * \param new_rect Where the rectangle is going * \param new_width The width that will be displayed on it (or 0 not to) * \param new_height The height that will be displayed on it (or 0 not to) */ void meta_effects_update_wireframe (MetaScreen *screen, const MetaRectangle *old_rect, int old_width, int old_height, const MetaRectangle *new_rect, int new_width, int new_height); /** * Removes a wireframe rectangle from the screen and ends the grab started by * meta_effects_begin_wireframe(). * * \param old_rect Where the rectangle is now * \param old_width The width that was displayed on it (or 0 if there wasn't) * \param old_height The height that was displayed on it (or 0 if there wasn't) */ void meta_effects_end_wireframe (MetaScreen *screen, const MetaRectangle *old_rect, int width, int height); #endif /* META_EFFECTS_H */