Anyone knows that creating transitions (animations) using GTK+ is not the easiest thing to do. So after some discussions with
Renato we came up with a API to make it easier.
So today I sat down and wrote GtkTransition, a class written on top of GtkTimeline [1] that allows you to create transitions as natural as it can be. It's similar to what Flash does to create animations, but with some small differences.
Basically you create a transition with an interval (eg. 2 seconds) and add states for this transition. States work directly on objects properties, so you can say for example, create a state that will complete when the transition reaches 50% that will set the label angle from 0 to 360 degrees. After that create another state that will complete on 100% of the transition that will set the same angle from 360 to 0 degreess and depends on the first state (it will start after the first state has completed).
The code looks something like:
transition = gtk_transition_new (2000);
gtk_timeline_set_loop (GTK_TIMELINE (transition), TRUE);
state1 = gtk_transition_state_new (G_OBJECT (label));
gtk_transition_state_set (state1, "angle", 0.0, 360.0, NULL);
gtk_transition_add_state (transition, state1, NULL, 0.5);
state2 = gtk_transition_state_new (G_OBJECT (label));
gtk_transition_state_set (state2, "angle", 360.0, 0.0, NULL);
gtk_transition_add_state (transition, state2, state1, 1.0);
gtk_timeline_start (GTK_TIMELINE (transition));
The code is not complete yet, but you can grab it with:
$ svn checkout http://andrunko.googlecode.com/svn/trunk/gtk
There is a test1.c that shows the code to rotate the label, and test2.c that translate and resize a GooCanvasItem (you need goocanvas [1] to compile it)
Patches and ideas are welcome!
Hope you enjoy
[1]
http://bugzilla.gnome.org/show_bug.cgi?id=444659[2]
http://sourceforge.net/projects/goocanvasEdit:
updated code snippet