offscreen-effect: Add public accessor for target size
authorEmmanuele Bassi <ebassi@linux.intel.com>
Mon, 28 Feb 2011 14:31:59 +0000 (14:31 +0000)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Mon, 28 Feb 2011 14:34:36 +0000 (14:34 +0000)
The OffscreenEffect class needs to expose a way for sub-classes to
track the size of FBO it creates, in case it has to do some geometry
deformations like the DeformEffect sub-classes.

Let's move the private symbol we used internally in 1.6 to fix
DeformEffect to the list of public symbols of OffscreenEffect.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2570

clutter/clutter-deform-effect.c
clutter/clutter-offscreen-effect-private.h
clutter/clutter-offscreen-effect.c
clutter/clutter-offscreen-effect.h
doc/reference/clutter/clutter-sections.txt

index 9d6a7f3..b976d61 100644 (file)
@@ -184,7 +184,10 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect)
       actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
       opacity = clutter_actor_get_paint_opacity (actor);
 
-      if (!_clutter_offscreen_effect_get_target_size (effect, &width, &height))
+      /* if we don't have a target size, fall back to the actor's
+       * allocation, though wrong it might be
+       */
+      if (!clutter_offscreen_effect_get_target_size (effect, &width, &height))
         clutter_actor_get_size (actor, &width, &height);
 
       for (i = 0; i < priv->y_tiles + 1; i++)
index 6a9137b..a5249da 100644 (file)
@@ -5,10 +5,6 @@
 
 G_BEGIN_DECLS
 
-gboolean        _clutter_offscreen_effect_get_target_size       (ClutterOffscreenEffect *effect,
-                                                                 gfloat                 *width,
-                                                                 gfloat                 *height);
-
 G_END_DECLS
 
 #endif /* __CLUTTER_OFFSCREEN_EFFECT_PRIVATE_H__ */
index 2696408..804a362 100644 (file)
@@ -476,12 +476,34 @@ clutter_offscreen_effect_create_texture (ClutterOffscreenEffect *effect,
                                                                       height);
 }
 
+/**
+ * clutter_offscreen_effect_get_target_size:
+ * @effect: a #ClutterOffscreenEffect
+ * @width: (out): return location for the target width, or %NULL
+ * @height: (out): return location for the target height, or %NULL
+ *
+ * Retrieves the size of the offscreen buffer used by @effect to
+ * paint the actor to which it has been applied.
+ *
+ * This function should only be called by #ClutterOffscreenEffect
+ * implementations, from within the <function>paint_target()</function>
+ * virtual function.
+ *
+ * Return value: %TRUE if the offscreen buffer has a valid size,
+ *   and %FALSE otherwise
+ *
+ * Since: 1.8
+ */
 gboolean
-_clutter_offscreen_effect_get_target_size (ClutterOffscreenEffect *effect,
-                                           gfloat                 *width,
-                                           gfloat                 *height)
+clutter_offscreen_effect_get_target_size (ClutterOffscreenEffect *effect,
+                                          gfloat                 *width,
+                                          gfloat                 *height)
 {
-  ClutterOffscreenEffectPrivate *priv = effect->priv;
+  ClutterOffscreenEffectPrivate *priv;
+
+  g_return_val_if_fail (CLUTTER_IS_OFFSCREEN_EFFECT (effect), FALSE);
+  
+  priv = effect->priv;
 
   if (priv->target == NULL)
     return FALSE;
index 0f16c9f..72636ed 100644 (file)
@@ -93,12 +93,15 @@ struct _ClutterOffscreenEffectClass
 
 GType clutter_offscreen_effect_get_type (void) G_GNUC_CONST;
 
-CoglMaterial *clutter_offscreen_effect_get_target     (ClutterOffscreenEffect *effect);
-
-void          clutter_offscreen_effect_paint_target   (ClutterOffscreenEffect *effect);
-CoglHandle    clutter_offscreen_effect_create_texture (ClutterOffscreenEffect *effect,
-                                                       gfloat                  width,
-                                                       gfloat                  height);
+CoglMaterial *  clutter_offscreen_effect_get_target             (ClutterOffscreenEffect *effect);
+
+void            clutter_offscreen_effect_paint_target           (ClutterOffscreenEffect *effect);
+CoglHandle      clutter_offscreen_effect_create_texture         (ClutterOffscreenEffect *effect,
+                                                                 gfloat                  width,
+                                                                 gfloat                  height);
+gboolean        clutter_offscreen_effect_get_target_size        (ClutterOffscreenEffect *effect,
+                                                                 gfloat                 *width,
+                                                                 gfloat                 *height);
 
 G_END_DECLS
 
index ba95702..3bad594 100644 (file)
@@ -2486,6 +2486,7 @@ ClutterOffscreenEffectClass
 clutter_offscreen_effect_get_target
 clutter_offscreen_effect_create_texture
 clutter_offscreen_effect_paint_target
+clutter_offscreen_effect_get_target_size
 <SUBSECTION Standard>
 CLUTTER_TYPE_OFFSCREEN_EFFECT
 CLUTTER_OFFSCREEN_EFFECT