diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2012-04-11 17:47:53 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2012-04-27 12:30:48 +0100 |
commit | 024f6d40d262c55ea7c6a845885b16685bd65ba8 (patch) | |
tree | cda75df6bb5b81c0d4f99b004c342821adb6fdbf | |
parent | c500fc1844618c634670f6771100c40328b35d00 (diff) | |
download | clutter-024f6d40d262c55ea7c6a845885b16685bd65ba8.tar.gz |
keyframe-transition: Add direct accessors for key frames
This should allow modifying key frame details without requiring a full
reset of the KeyframeTransition instance.
-rw-r--r-- | clutter/clutter-keyframe-transition.c | 102 | ||||
-rw-r--r-- | clutter/clutter-keyframe-transition.h | 15 | ||||
-rw-r--r-- | clutter/clutter.symbols | 3 | ||||
-rw-r--r-- | doc/reference/clutter/clutter-sections.txt | 5 |
4 files changed, 125 insertions, 0 deletions
diff --git a/clutter/clutter-keyframe-transition.c b/clutter/clutter-keyframe-transition.c index 0703d7e2e..e19ff56ee 100644 --- a/clutter/clutter-keyframe-transition.c +++ b/clutter/clutter-keyframe-transition.c @@ -626,3 +626,105 @@ clutter_keyframe_transition_clear (ClutterKeyframeTransition *transition) transition->priv->frames = NULL; } } + +/** + * clutter_keyframe_transition_get_n_key_frames: + * @transition: a #ClutterKeyframeTransition + * + * Retrieves the number of key frames inside @transition. + * + * Return value: the number of key frames + * + * Since: 1.12 + */ +guint +clutter_keyframe_transition_get_n_key_frames (ClutterKeyframeTransition *transition) +{ + g_return_val_if_fail (CLUTTER_IS_KEYFRAME_TRANSITION (transition), 0); + + if (transition->priv->frames == NULL) + return 0; + + return transition->priv->frames->len - 1; +} + +/** + * clutter_keyframe_transition_set_key_frame: + * @transition: a #ClutterKeyframeTransition + * @index_: the index of the key frame + * @key: the key of the key frame + * @mode: the easing mode of the key frame + * @value: a #GValue containing the value of the key frame + * + * Sets the details of the key frame at @index_ inside @transition. + * + * The @transition must already have a key frame at @index_, and @index_ + * must be smaller than the number of key frames inside @transition. + * + * Since: 1.12 + */ +void +clutter_keyframe_transition_set_key_frame (ClutterKeyframeTransition *transition, + guint index_, + double key, + ClutterAnimationMode mode, + const GValue *value) +{ + ClutterKeyframeTransitionPrivate *priv; + KeyFrame *frame; + + g_return_if_fail (CLUTTER_IS_KEYFRAME_TRANSITION (transition)); + + priv = transition->priv; + g_return_if_fail (priv->frames != NULL); + g_return_if_fail (index_ < priv->frames->len - 1); + + frame = &g_array_index (priv->frames, KeyFrame, index_); + frame->key = key; + frame->mode = mode; + clutter_interval_set_final_value (frame->interval, value); +} + +/** + * clutter_keyframe_transition_get_key_frame: + * @transition: a #ClutterKeyframeTransition + * @index_: the index of the key frame + * @key: (out) (allow-none): return location for the key, or %NULL + * @mode: (out) (allow-none): return location for the easing mode, or %NULL + * @value: (out caller-allocates): a #GValue initialized with the type of + * the values + * + * Retrieves the details of the key frame at @index_ inside @transition. + * + * The @transition must already have key frames set, and @index_ must be + * smaller than the number of key frames. + * + * Since: 1.12 + */ +void +clutter_keyframe_transition_get_key_frame (ClutterKeyframeTransition *transition, + guint index_, + double *key, + ClutterAnimationMode *mode, + GValue *value) +{ + ClutterKeyframeTransitionPrivate *priv; + const KeyFrame *frame; + + g_return_if_fail (CLUTTER_IS_KEYFRAME_TRANSITION (transition)); + + priv = transition->priv; + g_return_if_fail (priv->frames != NULL); + g_return_if_fail (index_ < priv->frames->len - 1); + + frame = &g_array_index (priv->frames, KeyFrame, index_); + + if (key != NULL) + *key = frame->key; + + if (mode != NULL) + *mode = frame->mode; + + if (value != NULL) + clutter_interval_get_final_value (frame->interval, value); +} diff --git a/clutter/clutter-keyframe-transition.h b/clutter/clutter-keyframe-transition.h index ce1016dce..b6ac500ae 100644 --- a/clutter/clutter-keyframe-transition.h +++ b/clutter/clutter-keyframe-transition.h @@ -98,6 +98,21 @@ void clutter_keyframe_transition_set (Clutter ...); CLUTTER_AVAILABLE_IN_1_12 +void clutter_keyframe_transition_set_key_frame (ClutterKeyframeTransition *transition, + guint index_, + double key, + ClutterAnimationMode mode, + const GValue *value); +CLUTTER_AVAILABLE_IN_1_12 +void clutter_keyframe_transition_get_key_frame (ClutterKeyframeTransition *transition, + guint index_, + double *key, + ClutterAnimationMode *mode, + GValue *value); +CLUTTER_AVAILABLE_IN_1_12 +guint clutter_keyframe_transition_get_n_key_frames (ClutterKeyframeTransition *transition); + +CLUTTER_AVAILABLE_IN_1_12 void clutter_keyframe_transition_clear (ClutterKeyframeTransition *transition); G_END_DECLS diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols index fc1e63194..76d0b3b0f 100644 --- a/clutter/clutter.symbols +++ b/clutter/clutter.symbols @@ -800,9 +800,12 @@ clutter_input_device_ungrab clutter_input_device_update_from_event clutter_input_mode_get_type clutter_keyframe_transition_clear +clutter_keyframe_transition_get_key_frame +clutter_keyframe_transition_get_n_key_frames clutter_keyframe_transition_get_type clutter_keyframe_transition_new clutter_keyframe_transition_set_key_frames +clutter_keyframe_transition_set_key_frame clutter_keyframe_transition_set_modes clutter_keyframe_transition_set_values clutter_keyframe_transition_set diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt index 915b5b4aa..e4073365b 100644 --- a/doc/reference/clutter/clutter-sections.txt +++ b/doc/reference/clutter/clutter-sections.txt @@ -3231,6 +3231,11 @@ clutter_keyframe_transition_set clutter_keyframe_transition_set_key_frames clutter_keyframe_transition_set_modes clutter_keyframe_transition_set_values + +<SUBSECTION> +clutter_keyframe_transition_get_n_key_frames +clutter_keyframe_transition_set_key_frame +clutter_keyframe_transition_get_key_frame clutter_keyframe_transition_clear <SECTION Standard> CLUTTER_TYPE_KEYFRAME_TRANSITION |