mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 14:14:10 +00:00
animatable: Deprecate and replace animate_property()
The animate_property() method of the Animatable interface is far less than optimal: • it has a direct reference to ClutterAnimation; • it has an interval decomposed as two values. These issues tie the Animatable interface with the Animation object, even though it's neither necessary nor future-proof. Let's introduce a new method, interpolate_value(), which does not reference ClutterAnimation and uses a ClutterInterval to express the initial and final states.
This commit is contained in:
parent
473f3817d4
commit
8b861cea8f
@ -84,6 +84,9 @@ clutter_animatable_default_init (ClutterAnimatableInterface *iface)
|
|||||||
* be applied to the #ClutterAnimatable, and %FALSE otherwise
|
* be applied to the #ClutterAnimatable, and %FALSE otherwise
|
||||||
*
|
*
|
||||||
* Since: 1.0
|
* Since: 1.0
|
||||||
|
*
|
||||||
|
* Deprecated: 1.8: Use clutter_animatable_interpolate_value()
|
||||||
|
* instead
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
||||||
@ -94,6 +97,7 @@ clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
|||||||
gdouble progress,
|
gdouble progress,
|
||||||
GValue *value)
|
GValue *value)
|
||||||
{
|
{
|
||||||
|
ClutterAnimatableIface *iface;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), FALSE);
|
g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), FALSE);
|
||||||
@ -107,14 +111,26 @@ clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
|||||||
G_VALUE_TYPE (value) == G_VALUE_TYPE (final_value),
|
G_VALUE_TYPE (value) == G_VALUE_TYPE (final_value),
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
res =
|
iface = CLUTTER_ANIMATABLE_GET_IFACE (animatable);
|
||||||
CLUTTER_ANIMATABLE_GET_IFACE (animatable)->animate_property (animatable,
|
if (iface->animate_property == NULL)
|
||||||
animation,
|
{
|
||||||
property_name,
|
ClutterInterval *interval;
|
||||||
initial_value,
|
|
||||||
final_value,
|
interval = clutter_animation_get_interval (animation, property_name);
|
||||||
progress,
|
if (interval == NULL)
|
||||||
value);
|
return FALSE;
|
||||||
|
|
||||||
|
res = clutter_animatable_interpolate_value (animatable, property_name,
|
||||||
|
interval,
|
||||||
|
progress,
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
res = iface->animate_property (animatable, animation,
|
||||||
|
property_name,
|
||||||
|
initial_value, final_value,
|
||||||
|
progress,
|
||||||
|
value);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -207,3 +223,33 @@ clutter_animatable_set_final_state (ClutterAnimatable *animatable,
|
|||||||
else
|
else
|
||||||
g_object_set_property (G_OBJECT (animatable), property_name, value);
|
g_object_set_property (G_OBJECT (animatable), property_name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
|
||||||
|
const gchar *property_name,
|
||||||
|
ClutterInterval *interval,
|
||||||
|
gdouble progress,
|
||||||
|
GValue *value)
|
||||||
|
{
|
||||||
|
ClutterAnimatableIface *iface;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_ANIMATABLE (animatable), FALSE);
|
||||||
|
g_return_val_if_fail (property_name != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), FALSE);
|
||||||
|
g_return_val_if_fail (value != NULL, FALSE);
|
||||||
|
|
||||||
|
CLUTTER_NOTE (ANIMATION, "Interpolating '%s' (progress: %.3f)",
|
||||||
|
property_name,
|
||||||
|
progress);
|
||||||
|
|
||||||
|
iface = CLUTTER_ANIMATABLE_GET_IFACE (animatable);
|
||||||
|
if (iface->interpolate_value != NULL)
|
||||||
|
{
|
||||||
|
return iface->interpolate_value (animatable, property_name,
|
||||||
|
interval,
|
||||||
|
progress,
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return clutter_interval_compute_value (interval, progress, value);
|
||||||
|
}
|
||||||
|
@ -53,13 +53,15 @@ typedef struct _ClutterAnimatableIface ClutterAnimatableIface;
|
|||||||
/**
|
/**
|
||||||
* ClutterAnimatableIface:
|
* ClutterAnimatableIface:
|
||||||
* @animate_property: virtual function for custom interpolation of a
|
* @animate_property: virtual function for custom interpolation of a
|
||||||
* property
|
* property. This virtual function is deprecated
|
||||||
* @find_property: virtual function for retrieving the #GParamSpec of
|
* @find_property: virtual function for retrieving the #GParamSpec of
|
||||||
* an animatable property
|
* an animatable property
|
||||||
* @get_initial_state: virtual function for retrieving the initial
|
* @get_initial_state: virtual function for retrieving the initial
|
||||||
* state of an animatable property
|
* state of an animatable property
|
||||||
* @set_final_state: virtual function for setting the state of an
|
* @set_final_state: virtual function for setting the state of an
|
||||||
* animatable property
|
* animatable property
|
||||||
|
* @interpolate_value: virtual function for interpolating the progress
|
||||||
|
* of a property
|
||||||
*
|
*
|
||||||
* Base interface for #GObject<!-- -->s that can be animated by a
|
* Base interface for #GObject<!-- -->s that can be animated by a
|
||||||
* a #ClutterAnimation.
|
* a #ClutterAnimation.
|
||||||
@ -87,10 +89,16 @@ struct _ClutterAnimatableIface
|
|||||||
void (* set_final_state) (ClutterAnimatable *animatable,
|
void (* set_final_state) (ClutterAnimatable *animatable,
|
||||||
const gchar *property_name,
|
const gchar *property_name,
|
||||||
const GValue *value);
|
const GValue *value);
|
||||||
|
gboolean (* interpolate_value) (ClutterAnimatable *animatable,
|
||||||
|
const gchar *property_name,
|
||||||
|
ClutterInterval *interval,
|
||||||
|
gdouble progress,
|
||||||
|
GValue *value);
|
||||||
};
|
};
|
||||||
|
|
||||||
GType clutter_animatable_get_type (void) G_GNUC_CONST;
|
GType clutter_animatable_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
#ifndef CLUTTER_DISABLE_DEPRECATED
|
||||||
gboolean clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
gboolean clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
||||||
ClutterAnimation *animation,
|
ClutterAnimation *animation,
|
||||||
const gchar *property_name,
|
const gchar *property_name,
|
||||||
@ -98,6 +106,7 @@ gboolean clutter_animatable_animate_property (ClutterAnimatable *animatable,
|
|||||||
const GValue *final_value,
|
const GValue *final_value,
|
||||||
gdouble progress,
|
gdouble progress,
|
||||||
GValue *value);
|
GValue *value);
|
||||||
|
#endif /* CLUTTER_DISABLE_DEPRECATED */
|
||||||
|
|
||||||
GParamSpec *clutter_animatable_find_property (ClutterAnimatable *animatable,
|
GParamSpec *clutter_animatable_find_property (ClutterAnimatable *animatable,
|
||||||
const gchar *property_name);
|
const gchar *property_name);
|
||||||
@ -107,6 +116,11 @@ void clutter_animatable_get_initial_state (ClutterAnimatable *animatable,
|
|||||||
void clutter_animatable_set_final_state (ClutterAnimatable *animatable,
|
void clutter_animatable_set_final_state (ClutterAnimatable *animatable,
|
||||||
const gchar *property_name,
|
const gchar *property_name,
|
||||||
const GValue *value);
|
const GValue *value);
|
||||||
|
gboolean clutter_animatable_interpolate_value (ClutterAnimatable *animatable,
|
||||||
|
const gchar *property_name,
|
||||||
|
ClutterInterval *interval,
|
||||||
|
gdouble progress,
|
||||||
|
GValue *value);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user