/** * clutter_score_rewind: * @score: A #ClutterScore * * Rewinds a #ClutterScore to its initial state. * * Since: 0.6 */ void clutter_score_rewind (ClutterScore *score) { gboolean was_playing; g_return_if_fail (CLUTTER_IS_SCORE (score)); was_playing = clutter_score_is_playing (score); clutter_score_stop (score); if (was_playing) clutter_score_start (score); }
int main(int argc, char ** argv) { ClutterColor stage_color = {0x00, 0x00, 0x00, 0xFF}; // Black ClutterColor rect_color = {0x00, 0xFF, 0xFF, 0xFF}; // Purple clutter_init(&argc, &argv); ClutterActor * stage = clutter_stage_get_default(); clutter_actor_set_size(stage, 200, 200); clutter_stage_set_color(CLUTTER_STAGE(stage), &stage_color); rect = clutter_rectangle_new_with_color(&rect_color); clutter_actor_set_size(rect, 70, 70); clutter_actor_set_position(rect, 50, 100); clutter_container_add_actor(CLUTTER_CONTAINER(stage), rect); clutter_actor_show(rect); clutter_actor_show(stage); ClutterScore * score = clutter_score_new(); clutter_score_set_loop(score, TRUE); ClutterTimeline * rtimeline = clutter_timeline_new(10, //frames 120 //fps ); g_signal_connect(rtimeline, "new-frame", G_CALLBACK(on_timeline_rotation_new_frame), NULL); clutter_score_append(score, NULL, rtimeline); ClutterTimeline * mtimeline = clutter_timeline_new(10, //frames 120 //fps ); g_signal_connect(mtimeline, "new-frame", G_CALLBACK(on_timeline_move_new_frame), NULL); clutter_score_append(score, rtimeline, mtimeline); clutter_score_start(score); clutter_main(); g_object_unref(rtimeline); g_object_unref(mtimeline); g_object_unref(score); return EXIT_SUCCESS; }
static void on_timeline_completed (ClutterTimeline *timeline, ClutterScoreEntry *entry) { ClutterScorePrivate *priv = entry->score->priv; g_hash_table_remove (priv->running_timelines, GUINT_TO_POINTER (entry->id)); g_signal_handler_disconnect (timeline, entry->complete_id); entry->complete_id = 0; CLUTTER_NOTE (SCHEDULER, "timeline [%p] ('%lu') completed", entry->timeline, entry->id); g_signal_emit (entry->score, score_signals[TIMELINE_COMPLETED], 0, entry->timeline); /* start every child */ if (entry->node->children) { g_node_children_foreach (entry->node, G_TRAVERSE_ALL, start_children_entries, NULL); } /* score has finished - fire 'completed' signal */ if (g_hash_table_size (priv->running_timelines) == 0) { CLUTTER_NOTE (SCHEDULER, "looks like we finished"); g_signal_emit (entry->score, score_signals[COMPLETED], 0); clutter_score_stop (entry->score); if (priv->loop) clutter_score_start (entry->score); } }