mirror of
https://github.com/brl/mutter.git
synced 2024-12-25 12:32:05 +00:00
cookbook: Added example of connecting signals in ClutterScript
To support recipe about connecting signals in script.
This commit is contained in:
parent
b369cb51dc
commit
a67111a17c
@ -19,6 +19,7 @@ noinst_PROGRAMS = \
|
|||||||
textures-crossfade-cogl \
|
textures-crossfade-cogl \
|
||||||
textures-crossfade-slideshow \
|
textures-crossfade-slideshow \
|
||||||
script-ui \
|
script-ui \
|
||||||
|
script-signals \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
@ -56,5 +57,6 @@ textures_crossfade_SOURCES = textures-crossfade.c
|
|||||||
textures_crossfade_cogl_SOURCES = textures-crossfade-cogl.c
|
textures_crossfade_cogl_SOURCES = textures-crossfade-cogl.c
|
||||||
textures_crossfade_slideshow_SOURCES = textures-crossfade-slideshow.c
|
textures_crossfade_slideshow_SOURCES = textures-crossfade-slideshow.c
|
||||||
script_ui_SOURCES = script-ui.c
|
script_ui_SOURCES = script-ui.c
|
||||||
|
script_signals_SOURCES = script-signals.c
|
||||||
|
|
||||||
-include $(top_srcdir)/build/autotools/Makefile.am.gitignore
|
-include $(top_srcdir)/build/autotools/Makefile.am.gitignore
|
||||||
|
91
doc/cookbook/examples/script-signals.c
Normal file
91
doc/cookbook/examples/script-signals.c
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
/* callbacks cannot be declared static as they
|
||||||
|
* are looked up dynamically by ClutterScript
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
foo_pointer_motion_cb (ClutterActor *actor,
|
||||||
|
ClutterEvent *event,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
gfloat x, y;
|
||||||
|
clutter_event_get_coords (event, &x, &y);
|
||||||
|
|
||||||
|
g_print ("Pointer movement at %.0f,%.0f\n", x, y);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
foo_button_clicked_cb (ClutterClickAction *action,
|
||||||
|
ClutterActor *actor,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
/* get the UI definition passed to the handler */
|
||||||
|
ClutterScript *ui = CLUTTER_SCRIPT (user_data);
|
||||||
|
|
||||||
|
/* get the rectangle defined in the JSON */
|
||||||
|
ClutterActor *rectangle;
|
||||||
|
clutter_script_get_objects (ui,
|
||||||
|
"rectangle", &rectangle,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
/* do nothing if the actor is already animating */
|
||||||
|
if (clutter_actor_get_animation (rectangle) != NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* get the current rotation and increment it */
|
||||||
|
gfloat z_angle;
|
||||||
|
z_angle = clutter_actor_get_rotation (rectangle,
|
||||||
|
CLUTTER_Z_AXIS,
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
|
z_angle += 90.0;
|
||||||
|
|
||||||
|
/* animate to new rotation angle */
|
||||||
|
clutter_actor_animate (rectangle,
|
||||||
|
CLUTTER_EASE_OUT_CUBIC,
|
||||||
|
1000,
|
||||||
|
"rotation-angle-z", z_angle,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
clutter_init (&argc, &argv);
|
||||||
|
|
||||||
|
ClutterScript *ui = clutter_script_new ();
|
||||||
|
|
||||||
|
gchar *filename = "script-signals.json";
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
clutter_script_load_from_file (ui, filename, &error);
|
||||||
|
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
g_critical ("Error loading ClutterScript file %s\n%s", filename, error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClutterActor *stage;
|
||||||
|
clutter_script_get_objects (ui,
|
||||||
|
"stage", &stage,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
/* make the objects in the script available to all signals
|
||||||
|
* by passing the script as the second argument
|
||||||
|
* to clutter_script_connect_signals()
|
||||||
|
*/
|
||||||
|
clutter_script_connect_signals (ui, ui);
|
||||||
|
|
||||||
|
clutter_actor_show (stage);
|
||||||
|
|
||||||
|
clutter_main ();
|
||||||
|
|
||||||
|
g_object_unref (ui);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
40
doc/cookbook/examples/script-signals.json
Normal file
40
doc/cookbook/examples/script-signals.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id" : "stage",
|
||||||
|
"type" : "ClutterStage",
|
||||||
|
"width" : 300,
|
||||||
|
"height" : 300,
|
||||||
|
"color" : "#335",
|
||||||
|
|
||||||
|
"signals" : [
|
||||||
|
{ "name" : "destroy", "handler" : "clutter_main_quit" }
|
||||||
|
],
|
||||||
|
|
||||||
|
"children" : [ "rectangle" ]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"id" : "rectangle",
|
||||||
|
"type" : "ClutterRectangle",
|
||||||
|
"width" : 200,
|
||||||
|
"height" : 200,
|
||||||
|
"x" : 50,
|
||||||
|
"y" : 50,
|
||||||
|
"color" : "#a90",
|
||||||
|
"rotation-center-z-gravity" : "center",
|
||||||
|
"reactive" : true,
|
||||||
|
|
||||||
|
"signals" : [
|
||||||
|
{ "name" : "motion-event", "handler" : "foo_pointer_motion_cb" }
|
||||||
|
],
|
||||||
|
|
||||||
|
"actions" : [
|
||||||
|
{
|
||||||
|
"type" : "ClutterClickAction",
|
||||||
|
"signals" : [
|
||||||
|
{ "name" : "clicked", "handler" : "foo_button_clicked_cb" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in New Issue
Block a user