4 * An OpenGL based 'interactive canvas' library.
6 * Copyright (C) 2010 Intel Corporation.
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.
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.
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/>.
22 #ifndef __CLUTTER_ACTOR_PRIVATE_H__
23 #define __CLUTTER_ACTOR_PRIVATE_H__
25 #include <clutter/clutter-actor.h>
31 * @CLUTTER_REDRAW_CLIPPED_TO_ALLOCATION: Tells clutter the maximum
32 * extents of what needs to be redrawn lies within the actors
33 * current allocation. (Only use this for 2D actors though because
34 * any actor with depth may be projected outside of its allocation)
36 * Flags passed to the clutter_actor_queue_redraw_with_clip ()
43 CLUTTER_REDRAW_CLIPPED_TO_ALLOCATION = 1 << 0
47 * ClutterActorTraverseFlags:
48 * CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST: Traverse the graph in
49 * a depth first order.
50 * CLUTTER_ACTOR_TRAVERSE_BREADTH_FIRST: Traverse the graph in a
51 * breadth first order.
53 * Controls some options for how clutter_actor_traverse() iterates
57 CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST = 1L<<0,
58 CLUTTER_ACTOR_TRAVERSE_BREADTH_FIRST = 1L<<1
59 } ClutterActorTraverseFlags;
62 * ClutterActorTraverseVisitFlags:
63 * CLUTTER_ACTOR_TRAVERSE_VISIT_CONTINUE: Continue traversing as
65 * CLUTTER_ACTOR_TRAVERSE_VISIT_SKIP_CHILDREN: Don't traverse the
66 * children of the last visited actor. (Not applicable when using
67 * %CLUTTER_ACTOR_TRAVERSE_DEPTH_FIRST_POST_ORDER since the children
68 * are visited before having an opportunity to bail out)
69 * CLUTTER_ACTOR_TRAVERSE_VISIT_BREAK: Immediately bail out without
70 * visiting any more actors.
72 * Each time an actor is visited during a scenegraph traversal the
73 * ClutterTraverseCallback can return a set of flags that may affect
74 * the continuing traversal. It may stop traversal completely, just
75 * skip over children for the current actor or continue as normal.
78 CLUTTER_ACTOR_TRAVERSE_VISIT_CONTINUE = 1L<<0,
79 CLUTTER_ACTOR_TRAVERSE_VISIT_SKIP_CHILDREN = 1L<<1,
80 CLUTTER_ACTOR_TRAVERSE_VISIT_BREAK = 1L<<2
81 } ClutterActorTraverseVisitFlags;
84 * ClutterTraverseCallback:
86 * The callback prototype used with clutter_actor_traverse. The
87 * returned flags can be used to affect the continuing traversal
88 * either by continuing as normal, skipping over children of an
89 * actor or bailing out completely.
91 typedef ClutterActorTraverseVisitFlags (*ClutterTraverseCallback) (ClutterActor *actor,
96 * ClutterForeachCallback:
97 * @actor: The actor being iterated
98 * @user_data: The private data specified when starting the iteration
100 * A generic callback for iterating over actor, such as with
101 * _clutter_actor_foreach_child. The difference when compared to
102 * #ClutterCallback is that it returns a boolean so it is possible to break
103 * out of an iteration early.
105 * Return value: %TRUE to continue iterating or %FALSE to break iteration
108 typedef gboolean (*ClutterForeachCallback) (ClutterActor *actor,
111 typedef struct _AnchorCoord AnchorCoord;
112 typedef struct _SizeRequest SizeRequest;
114 typedef struct _ClutterLayoutInfo ClutterLayoutInfo;
115 typedef struct _ClutterTransformInfo ClutterTransformInfo;
116 typedef struct _ClutterAnimationInfo ClutterAnimationInfo;
118 /* Internal helper struct to represent a point that can be stored in
119 either direct pixel coordinates or as a fraction of the actor's
120 size. It is used for the anchor point, scale center and rotation
124 gboolean is_fractional;
128 /* Used when is_fractional == TRUE */
135 /* Use when is_fractional == FALSE */
150 * @fixed_x: the fixed position of the actor, set using clutter_actor_set_x()
151 * @fixed_y: the fixed position of the actor, set using clutter_actor_set_y()
152 * @margin: the composed margin of the actor
153 * @x_expand: whether the actor should expand horizontally
154 * @y_expand: whether the actor should expand vertically
155 * @x_align: the horizontal alignment, if the actor expands horizontally
156 * @y_align: the vertical alignment, if the actor expands vertically
157 * @min_width: the minimum width, set using clutter_actor_set_min_width()
158 * @min_height: the minimum height, set using clutter_actor_set_min_height()
159 * @natural_width: the natural width, set using clutter_actor_set_natural_width()
160 * @natural_height: the natural height, set using clutter_actor_set_natural_height()
162 * Ancillary layout information for an actor.
164 struct _ClutterLayoutInfo
166 /* fixed position coordinates */
170 ClutterMargin margin;
181 float natural_height;
184 const ClutterLayoutInfo * _clutter_actor_get_layout_info_or_defaults (ClutterActor *self);
185 ClutterLayoutInfo * _clutter_actor_get_layout_info (ClutterActor *self);
187 struct _ClutterTransformInfo
189 /* rotation (angle and center) */
191 AnchorCoord rx_center;
194 AnchorCoord ry_center;
197 AnchorCoord rz_center;
202 AnchorCoord scale_center;
211 const ClutterTransformInfo * _clutter_actor_get_transform_info_or_defaults (ClutterActor *self);
212 ClutterTransformInfo * _clutter_actor_get_transform_info (ClutterActor *self);
214 typedef struct _AState {
215 guint easing_duration;
217 ClutterAnimationMode easing_mode;
220 struct _ClutterAnimationInfo
225 GHashTable *transitions;
228 const ClutterAnimationInfo * _clutter_actor_get_animation_info_or_defaults (ClutterActor *self);
229 ClutterAnimationInfo * _clutter_actor_get_animation_info (ClutterActor *self);
231 ClutterTransition * _clutter_actor_create_transition (ClutterActor *self,
234 ClutterTransition * _clutter_actor_get_transition (ClutterActor *self,
236 void _clutter_actor_update_transition (ClutterActor *self,
240 gboolean _clutter_actor_foreach_child (ClutterActor *self,
241 ClutterForeachCallback callback,
243 void _clutter_actor_traverse (ClutterActor *actor,
244 ClutterActorTraverseFlags flags,
245 ClutterTraverseCallback before_children_callback,
246 ClutterTraverseCallback after_children_callback,
248 ClutterActor *_clutter_actor_get_stage_internal (ClutterActor *actor);
250 void _clutter_actor_apply_modelview_transform (ClutterActor *self,
252 void _clutter_actor_apply_relative_transformation_matrix (ClutterActor *self,
253 ClutterActor *ancestor,
256 void _clutter_actor_rerealize (ClutterActor *self,
257 ClutterCallback callback,
260 void _clutter_actor_set_opacity_override (ClutterActor *self,
262 gint _clutter_actor_get_opacity_override (ClutterActor *self);
263 void _clutter_actor_set_in_clone_paint (ClutterActor *self,
264 gboolean is_in_clone_paint);
266 void _clutter_actor_set_enable_model_view_transform (ClutterActor *self,
269 void _clutter_actor_set_enable_paint_unmapped (ClutterActor *self,
272 void _clutter_actor_set_has_pointer (ClutterActor *self,
273 gboolean has_pointer);
275 void _clutter_actor_queue_redraw_with_clip (ClutterActor *self,
276 ClutterRedrawFlags flags,
277 ClutterPaintVolume *clip_volume);
278 void _clutter_actor_queue_redraw_full (ClutterActor *self,
279 ClutterRedrawFlags flags,
280 ClutterPaintVolume *volume,
281 ClutterEffect *effect);
283 ClutterPaintVolume *_clutter_actor_get_queue_redraw_clip (ClutterActor *self);
284 void _clutter_actor_set_queue_redraw_clip (ClutterActor *self,
285 ClutterPaintVolume *clip_volume);
286 void _clutter_actor_finish_queue_redraw (ClutterActor *self,
287 ClutterPaintVolume *clip);
289 gboolean _clutter_actor_set_default_paint_volume (ClutterActor *self,
291 ClutterPaintVolume *volume);
293 const gchar * _clutter_actor_get_debug_name (ClutterActor *self);
295 void _clutter_actor_push_clone_paint (void);
296 void _clutter_actor_pop_clone_paint (void);
298 guint32 _clutter_actor_get_pick_id (ClutterActor *self);
300 void _clutter_actor_shader_pre_paint (ClutterActor *actor,
302 void _clutter_actor_shader_post_paint (ClutterActor *actor);
306 #endif /* __CLUTTER_ACTOR_PRIVATE_H__ */