summaryrefslogtreecommitdiff
path: root/src/effects.h
blob: 5ae7bcb5c439e907cc7de7cfcea535c47999f045 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */

/* Metacity animation effects */

/* 
 * 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., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */

#ifndef META_EFFECTS_H
#define META_EFFECTS_H

#include "util.h"
#include "screen.h"

typedef struct MetaEffect MetaEffect;
typedef struct MetaEffectPriv MetaEffectPriv;

#define META_MINIMIZE_ANIMATION_LENGTH 0.25
#define META_SHADE_ANIMATION_LENGTH 0.2

typedef enum
{
  META_BOX_ANIM_SCALE,
  META_BOX_ANIM_SLIDE_UP

} MetaBoxAnimType;

typedef enum
{
  META_EFFECT_MINIMIZE,
  META_EFFECT_UNMINIMIZE,
  META_EFFECT_MENU_MAP,
  META_EFFECT_MENU_UNMAP,
  META_EFFECT_DIALOG_MAP,
  META_EFFECT_DIALOG_UNMAP,
  META_EFFECT_TOPLEVEL_MAP,
  META_EFFECT_TOPLEVEL_UNMAP,
  META_EFFECT_WIREFRAME_BEGIN,
  META_EFFECT_WIREFRAME_UPDATE,
  META_EFFECT_WIREFRAME_END,
  META_EFFECT_FOCUS,
  META_EFFECT_CLOSE,
  META_NUM_EFFECTS
} MetaEffectType;

typedef void (* MetaEffectHandler) (MetaEffect *effect,
				    gpointer    data);
typedef void (* MetaEffectFinished) (const MetaEffect *effect,
				     gpointer	      data);

typedef struct
{
  MetaRectangle window_rect;
  MetaRectangle icon_rect;
} MetaMinimizeEffect, MetaUnminimizeEffect;

#if 0
/* Solaris abhors an empty struct. #397296. */
typedef struct
{
    
} MetaCloseEffect;

typedef struct
{
} MetaFocusEffect;
#endif

struct MetaEffect
{
  MetaWindow *window;
  MetaEffectType type;
  gpointer info;		/* effect handler can hang data here */
  
  union
  {
    MetaMinimizeEffect	    minimize;
    MetaUnminimizeEffect    unminimize;
#if 0
    /* These don't currently exist, so we aren't using them. #397296. */
    MetaCloseEffect	    close;
    MetaFocusEffect	    focus;
#endif
  } u;
  
  MetaEffectPriv *priv;
};

void        meta_push_effect_handler (MetaEffectHandler   handler,
				      gpointer            data);
void	    meta_pop_effect_handler  (void);

void        meta_effect_run_minimize     (MetaWindow         *window,
					  MetaRectangle	     *window_rect,
					  MetaRectangle	     *target,
					  MetaEffectFinished  finished,
					  gpointer            data);
void        meta_effect_run_unminimize (MetaWindow         *window,
					MetaRectangle      *window_rect,
					MetaRectangle	     *icon_rect,
					MetaEffectFinished  finished,
					gpointer            data);
void        meta_effect_run_close        (MetaWindow         *window,
					  MetaEffectFinished  finished,
					  gpointer            data);
void        meta_effect_run_focus        (MetaWindow         *window,
					  MetaEffectFinished  finished,
					  gpointer            data);
void        meta_effect_end              (MetaEffect         *effect);



/* Stuff that should become static functions */

void meta_effects_draw_box_animation (MetaScreen     *screen,
                                      MetaRectangle  *initial_rect,
                                      MetaRectangle  *destination_rect,
                                      double          seconds_duration,
                                      MetaBoxAnimType anim_type);

void meta_effects_begin_wireframe  (MetaScreen          *screen,
                                    const MetaRectangle *rect,
                                    int                  width,
                                    int                  height);
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);
void meta_effects_end_wireframe    (MetaScreen          *screen,
                                    const MetaRectangle *old_rect,
                                    int                  width,
                                    int                  height);

#endif /* META_EFFECTS_H */