From 553f446315f6d6122fd75277e4fde1d9526532f5 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 14 Feb 2012 16:50:52 +0000 Subject: [PATCH] interactive/actor: Add more animations Rotation along the Y axis and depth change. --- tests/interactive/test-actor.c | 74 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/tests/interactive/test-actor.c b/tests/interactive/test-actor.c index ebcba65..6f34d18 100644 --- a/tests/interactive/test-actor.c +++ b/tests/interactive/test-actor.c @@ -5,9 +5,8 @@ #define SIZE 128 static gboolean -on_button_press (ClutterActor *actor, - ClutterEvent *event, - gpointer data) +animate_color (ClutterActor *actor, + ClutterEvent *event) { static gboolean toggled = TRUE; const ClutterColor *end_color; @@ -26,6 +25,58 @@ on_button_press (ClutterActor *actor, return CLUTTER_EVENT_STOP; } +static gboolean +on_crossing (ClutterActor *actor, + ClutterEvent *event, + gpointer data) +{ + gboolean is_enter = GPOINTER_TO_UINT (data); + float depth; + + if (is_enter) + depth = -250.0; + else + depth = 0.0; + + clutter_actor_animate (actor, CLUTTER_EASE_OUT_BOUNCE, 500, + "depth", depth, + NULL); + + return CLUTTER_EVENT_STOP; +} + +static void +restore_actor (ClutterActor *actor) +{ + clutter_actor_set_rotation (actor, CLUTTER_Y_AXIS, 0.0, + SIZE / 2.0, + 0.f, + 0.f); + clutter_actor_set_reactive (actor, TRUE); +} + +static gboolean +animate_rotation (ClutterActor *actor, + ClutterEvent *event) +{ + ClutterVertex center; + + center.x = SIZE / 2.0; + center.y = 0.f; + center.z = 0.f; + + clutter_actor_animate (actor, CLUTTER_EASE_OUT_EXPO, 500, + "fixed::reactive", FALSE, + "fixed::rotation-center-y", ¢er, + "rotation-angle-y", 360.0, + "signal-swapped-after::completed", + G_CALLBACK (restore_actor), + actor, + NULL); + + return CLUTTER_EVENT_STOP; +} + G_MODULE_EXPORT int test_actor_main (int argc, char *argv[]) { @@ -56,23 +107,34 @@ test_actor_main (int argc, char *argv[]) clutter_actor_set_size (flowers[0], SIZE, SIZE); clutter_actor_set_background_color (flowers[0], CLUTTER_COLOR_Red); clutter_actor_set_reactive (flowers[0], TRUE); - g_signal_connect (flowers[0], "button-press-event", - G_CALLBACK (on_button_press), - GUINT_TO_POINTER (0)); clutter_actor_add_child (vase, flowers[0]); + g_signal_connect (flowers[0], "button-press-event", + G_CALLBACK (animate_color), + NULL); flowers[1] = clutter_actor_new (); clutter_actor_set_name (flowers[1], "flower.2"); clutter_actor_set_size (flowers[1], SIZE, SIZE); clutter_actor_set_background_color (flowers[1], CLUTTER_COLOR_Yellow); + clutter_actor_set_reactive (flowers[1], TRUE); clutter_actor_add_child (vase, flowers[1]); + g_signal_connect (flowers[1], "enter-event", + G_CALLBACK (on_crossing), + GUINT_TO_POINTER (TRUE)); + g_signal_connect (flowers[1], "leave-event", + G_CALLBACK (on_crossing), + GUINT_TO_POINTER (FALSE)); /* the third one is green */ flowers[2] = clutter_actor_new (); clutter_actor_set_name (flowers[2], "flower.3"); clutter_actor_set_size (flowers[2], SIZE, SIZE); clutter_actor_set_background_color (flowers[2], CLUTTER_COLOR_Green); + clutter_actor_set_reactive (flowers[2], TRUE); clutter_actor_add_child (vase, flowers[2]); + g_signal_connect (flowers[2], "button-press-event", + G_CALLBACK (animate_rotation), + NULL); clutter_actor_show (stage); -- 2.7.4