update to 1.10.4
[profile/ivi/clutter.git] / clutter / clutter-effect.h
1 /*
2  * Clutter.
3  *
4  * An OpenGL based 'interactive canvas' library.
5  *
6  * Copyright (C) 2010  Intel Corporation.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20  *
21  * Author:
22  *   Emmanuele Bassi <ebassi@linux.intel.com>
23  */
24
25 #if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
26 #error "Only <clutter/clutter.h> can be included directly."
27 #endif
28
29 #ifndef __CLUTTER_EFFECT_H__
30 #define __CLUTTER_EFFECT_H__
31
32 #include <clutter/clutter-actor-meta.h>
33
34 G_BEGIN_DECLS
35
36 #define CLUTTER_TYPE_EFFECT             (clutter_effect_get_type ())
37 #define CLUTTER_EFFECT(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_EFFECT, ClutterEffect))
38 #define CLUTTER_IS_EFFECT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_EFFECT))
39 #define CLUTTER_EFFECT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_EFFECT, ClutterEffectClass))
40 #define CLUTTER_IS_EFFECT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_EFFECT))
41 #define CLUTTER_EFFECT_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_EFFECT, ClutterEffectClass))
42
43 typedef struct _ClutterEffectClass      ClutterEffectClass;
44
45 /**
46  * ClutterEffect:
47  *
48  * The #ClutterEffect structure contains only private data and should
49  * be accessed using the provided API
50  *
51  * Since: 1.4
52  */
53 struct _ClutterEffect
54 {
55   /*< private >*/
56   ClutterActorMeta parent_instance;
57 };
58
59 /**
60  * ClutterEffectClass:
61  * @pre_paint: virtual function
62  * @post_paint: virtual function
63  * @get_paint_volume: virtual function
64  * @paint: virtual function
65  * @pick: virtual function
66  *
67  * The #ClutterEffectClass structure contains only private data
68  *
69  * Since: 1.4
70  */
71 struct _ClutterEffectClass
72 {
73   /*< private >*/
74   ClutterActorMetaClass parent_class;
75
76   /*< public >*/
77   gboolean (* pre_paint)        (ClutterEffect           *effect);
78   void     (* post_paint)       (ClutterEffect           *effect);
79
80   gboolean (* get_paint_volume) (ClutterEffect           *effect,
81                                  ClutterPaintVolume      *volume);
82
83   void     (* paint)            (ClutterEffect           *effect,
84                                  ClutterEffectPaintFlags  flags);
85   void     (* pick)             (ClutterEffect           *effect,
86                                  ClutterEffectPaintFlags  flags);
87
88   /*< private >*/
89   void (* _clutter_effect4) (void);
90   void (* _clutter_effect5) (void);
91   void (* _clutter_effect6) (void);
92 };
93
94 GType clutter_effect_get_type (void) G_GNUC_CONST;
95
96 void    clutter_effect_queue_repaint    (ClutterEffect *effect);
97
98 /*
99  * ClutterActor API
100  */
101
102 void           clutter_actor_add_effect            (ClutterActor  *self,
103                                                     ClutterEffect *effect);
104 void           clutter_actor_add_effect_with_name  (ClutterActor  *self,
105                                                     const gchar   *name,
106                                                     ClutterEffect *effect);
107 void           clutter_actor_remove_effect         (ClutterActor  *self,
108                                                     ClutterEffect *effect);
109 void           clutter_actor_remove_effect_by_name (ClutterActor  *self,
110                                                     const gchar   *name);
111 GList *        clutter_actor_get_effects           (ClutterActor  *self);
112 ClutterEffect *clutter_actor_get_effect            (ClutterActor  *self,
113                                                     const gchar   *name);
114 void           clutter_actor_clear_effects         (ClutterActor  *self);
115
116 gboolean        clutter_actor_has_effects           (ClutterActor *self);
117
118 G_END_DECLS
119
120 #endif /* __CLUTTER_EFFECT_H__ */