You can use the paint signal to invoke a callback that will be executed before the actor's paint implementation:
g_signal_connect (actor, "paint", G_CALLBACK (on_paint), NULL);
You can paint something after the actor's paint implementation
by using the g_signal_connect_after()
function
instead of g_signal_connect()
:
g_signal_connect_after (actor, "paint", G_CALLBACK (on_paint_after), NULL);
The signature for the handler of the "paint" signal is:
void on_paint (ClutterActor *actor, gpointer user_data);
The paint cycle in Clutter works its way recursively from the stage through every child.
Whenever an Actor is going to be painted it will be positioned in a new frame of reference according to the list of transformations (scaling, rotation and additional translations). After that, the "paint" signal will be emitted.
The "paint" signal is defined as run-last,
that is the signal handlers connected to it using
g_signal_connetc()
will be called first; then the
default handler defined by the Actor's sub-class will be called;
finally, all the signal handlers connected to the signal using
g_signal_connect_after()
will be called.
This allows pre- and post-default paint handlers, and it also allows completely overriding the way an Actor draws itself by default; for instance:
void on_paint (ClutterActor *actor) { do_my_paint (actor); g_signal_stop_emission_by_name (actor, "paint"); }
The code above will prevent the default paint implementation of the actor from running.