## ClutterAnimatable

ClutterAnimatable — Interface for animatable classes

## Synopsis

                        ClutterAnimatable;
    struct              ClutterAnimatableIface;
    gboolean            clutter_animatable_animate_property (ClutterAnimatable *animatable,
                                                             ClutterAnimation *animation,
                                                             const gchar *property_name,
                                                             const GValue *initial_value,
                                                             const GValue *final_value,
                                                             gdouble progress,
                                                             GValue *value);
    GParamSpec *        clutter_animatable_find_property    (ClutterAnimatable *animatable,
                                                             const gchar *property_name);
    void                clutter_animatable_get_initial_state
                                                            (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             GValue *value);
    void                clutter_animatable_set_final_state  (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             const GValue *value);
    gboolean            clutter_animatable_interpolate_value
                                                            (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             ClutterInterval *interval,
                                                             gdouble progress,
                                                             GValue *value);

## Object Hierarchy

      GInterface
       +----ClutterAnimatable

## Prerequisites

ClutterAnimatable requires GObject.

## Known Implementations

ClutterAnimatable is implemented by ClutterActor, ClutterBox, ClutterCairoTexture, ClutterClone, ClutterGroup, ClutterRectangle, ClutterStage, ClutterText and ClutterTexture.

## Description

ClutterAnimatable is an interface that allows a GObject class to control how a ClutterAnimation will animate a property.

Each ClutterAnimatable should implement the `animate_property` virtual function of the interface to compute the animation state between two values of an interval depending on a progress factor, expressed as a floating point value.

If a ClutterAnimatable is animated by a ClutterAnimation instance, the ClutterAnimation will call `clutter_animatable_animate_property()` passing the name of the currently animated property; the initial and final values of the animation interval; the progress factor. The ClutterAnimatable implementation should return the computed value for the animated property.

ClutterAnimatable is available since Clutter 1.0

## Details

### ClutterAnimatable

    typedef struct _ClutterAnimatable ClutterAnimatable;

ClutterAnimatable is an opaque structure whose members cannot be directly accessed

Since 1.0

### struct ClutterAnimatableIface

    struct ClutterAnimatableIface {
      gboolean    (* animate_property)  (ClutterAnimatable *animatable,
                                         ClutterAnimation  *animation,
                                         const gchar       *property_name,
                                         const GValue      *initial_value,
                                         const GValue      *final_value,
                                         gdouble            progress,
                                         GValue            *value);
      GParamSpec *(* find_property)     (ClutterAnimatable *animatable,
                                         const gchar       *property_name);
      void        (* get_initial_state) (ClutterAnimatable *animatable,
                                         const gchar       *property_name,
                                         GValue            *value);
      void        (* set_final_state)   (ClutterAnimatable *animatable,
                                         const gchar       *property_name,
                                         const GValue      *value);
      gboolean    (* interpolate_value) (ClutterAnimatable *animatable,
                                         const gchar       *property_name,
                                         ClutterInterval   *interval,
                                         gdouble            progress,
                                         GValue            *value);
    };

Base interface for GObjects that can be animated by a a ClutterAnimation.

`animate_property` () | virtual function for custom interpolation of a property. This virtual function is deprecated
`find_property` () | virtual function for retrieving the GParamSpec of an animatable property
`get_initial_state` () | virtual function for retrieving the initial state of an animatable property
`set_final_state` () | virtual function for setting the state of an animatable property
`interpolate_value` () | virtual function for interpolating the progress of a property

Since 1.0

### clutter_animatable_animate_property ()

    gboolean            clutter_animatable_animate_property (ClutterAnimatable *animatable,
                                                             ClutterAnimation *animation,
                                                             const gchar *property_name,
                                                             const GValue *initial_value,
                                                             const GValue *final_value,
                                                             gdouble progress,
                                                             GValue *value);

### Warning

`clutter_animatable_animate_property` has been deprecated since version 1.8 and should not be used in newly-written code. Use `clutter_animatable_interpolate_value()` instead

Calls the `animate_property()` virtual function for `animatable`.

The `initial_value` and `final_value` GValues must contain the same type; `value` must have been initialized to the same type of `initial_value` and `final_value`.

All implementation of the ClutterAnimatable interface must implement this function.

`animatable` : | a ClutterAnimatable
`animation` : | a ClutterAnimation
`property_name` : | the name of the animated property
`initial_value` : | the initial value of the animation interval
`final_value` : | the final value of the animation interval
`progress` : | the progress factor
`value` : | return location for the animation value
Returns : | `TRUE` if the value has been validated and can be applied to the ClutterAnimatable, and `FALSE` otherwise

Since 1.0

### clutter_animatable_find_property ()

    GParamSpec *        clutter_animatable_find_property    (ClutterAnimatable *animatable,
                                                             const gchar *property_name);

Finds the GParamSpec for `property_name`

`animatable` : | a ClutterAnimatable
`property_name` : | the name of the animatable property to find
Returns : | The GParamSpec for the given property or `NULL`. [transfer none]

Since 1.4

### clutter_animatable_get_initial_state ()

    void                clutter_animatable_get_initial_state
                                                            (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             GValue *value);

Retrieves the current state of `property_name` and sets `value` with it

`animatable` : | a ClutterAnimatable
`property_name` : | the name of the animatable property to retrieve
`value` : | a GValue initialized to the type of the property to retrieve

Since 1.4

### clutter_animatable_set_final_state ()

    void                clutter_animatable_set_final_state  (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             const GValue *value);

Sets the current state of `property_name` to `value`

`animatable` : | a ClutterAnimatable
`property_name` : | the name of the animatable property to set
`value` : | the value of the animatable property to set

Since 1.4

### clutter_animatable_interpolate_value ()

    gboolean            clutter_animatable_interpolate_value
                                                            (ClutterAnimatable *animatable,
                                                             const gchar *property_name,
                                                             ClutterInterval *interval,
                                                             gdouble progress,
                                                             GValue *value);

Asks a ClutterAnimatable implementation to interpolate a a named property between the initial and final values of a ClutterInterval, using `progress` as the interpolation value, and store the result inside `value`.

This function should be used for every property animation involving ClutterAnimatables.

This function replaces `clutter_animatable_animate_property()`.

`animatable` : | a ClutterAnimatable
`property_name` : | the name of the property to interpolate
`interval` : | a ClutterInterval with the animation range
`progress` : | the progress to use to interpolate between the initial and final values of the `interval`
`value` : | return location for an initialized GValue using the same type of the `interval`. [out]
Returns : | `TRUE` if the interpolation was successful, and `FALSE` otherwise

Since 1.8