From: Emmanuele Bassi Date: Wed, 19 May 2010 11:27:09 +0000 (+0100) Subject: tests: Add a constraints interactive test X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=56e8e7d62f782266d510ff52269507a9d7796b93;p=profile%2Fivi%2Fclutter.git tests: Add a constraints interactive test Show how to use constraints and how to animate them. --- diff --git a/.gitignore b/.gitignore index 495821a..9381cac 100644 --- a/.gitignore +++ b/.gitignore @@ -150,6 +150,7 @@ TAGS /tests/interactive/test-animator /tests/interactive/test-stage-sizing /tests/interactive/test-drag +/tests/interactive/test-constraints /tests/conform/stamp-test-conformance /tests/conform/test-anchors /tests/conform/test-cogl-backface-culling diff --git a/tests/interactive/Makefile.am b/tests/interactive/Makefile.am index d45caa8..19f8291 100644 --- a/tests/interactive/Makefile.am +++ b/tests/interactive/Makefile.am @@ -49,7 +49,8 @@ UNIT_TESTS = \ test-flow-layout.c \ test-box-layout.c \ test-stage-sizing.c \ - test-drag.c + test-drag.c \ + test-constraints.c if X11_TESTS UNIT_TESTS += test-pixmap.c diff --git a/tests/interactive/test-constraints.c b/tests/interactive/test-constraints.c new file mode 100644 index 0000000..6c37335 --- /dev/null +++ b/tests/interactive/test-constraints.c @@ -0,0 +1,138 @@ +#include +#include +#include + +#define H_PADDING 32 + +static ClutterActor *center_rect = NULL; +static ClutterActor *left_rect = NULL; +static ClutterActor *right_rect = NULL; + +static gboolean is_expanded = FALSE; + +static gboolean +on_button_release (ClutterActor *actor, + ClutterEvent *event, + gpointer data G_GNUC_UNUSED) +{ + if (!is_expanded) + { + gfloat left_offset = (clutter_actor_get_width (left_rect) + H_PADDING) + * -1.0f; + gfloat right_offset = clutter_actor_get_width (right_rect) + H_PADDING; + + clutter_actor_animate (left_rect, CLUTTER_EASE_OUT_CUBIC, 500, + "opacity", 255, + "@constraints.x-bind.offset", left_offset, + NULL); + clutter_actor_animate (right_rect, CLUTTER_EASE_OUT_CUBIC, 500, + "opacity", 255, + "@constraints.x-bind.offset", right_offset, + NULL); + } + else + { + clutter_actor_animate (left_rect, CLUTTER_EASE_OUT_CUBIC, 500, + "opacity", 0, + "@constraints.x-bind.offset", 0.0f, + NULL); + clutter_actor_animate (right_rect, CLUTTER_EASE_OUT_CUBIC, 500, + "opacity", 0, + "@constraints.x-bind.offset", 0.0f, + NULL); + } + + is_expanded = !is_expanded; + + return TRUE; +} + +G_MODULE_EXPORT int +test_constraints_main (int argc, char *argv[]) +{ + ClutterActor *stage, *rect; + ClutterColor rect_color; + ClutterConstraint *constraint; + + clutter_init (&argc, &argv); + + stage = clutter_stage_new (); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + clutter_stage_set_title (CLUTTER_STAGE (stage), "Constraints"); + clutter_actor_set_size (stage, 800, 600); + + /* main rect */ + clutter_color_from_string (&rect_color, "#73d216ff"); + rect = clutter_rectangle_new (); + g_signal_connect (rect, "button-release-event", + G_CALLBACK (on_button_release), + NULL); + clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &rect_color); + clutter_actor_set_size (rect, 256, 256); + clutter_actor_set_reactive (rect, TRUE); + clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect); + +#if 0 + constraint = clutter_align_constraint_new (stage, CLUTTER_ALIGN_X_AXIS, 0.5); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "x-align"); + clutter_actor_add_constraint (rect, constraint); + + constraint = clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.5); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "y-align"); + clutter_actor_add_constraint (rect, constraint); +#else + clutter_actor_set_position (rect, (800 - 256) / 2.0, (600 - 256) / 2.0); +#endif + + center_rect = rect; + + /* left rectangle */ + clutter_color_from_string (&rect_color, "#cc0000ff"); + rect = clutter_rectangle_new (); + clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &rect_color); + clutter_actor_set_size (rect, 256, 256); + clutter_actor_set_opacity (rect, 0); + clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect); + + constraint = clutter_bind_constraint_new (center_rect, CLUTTER_BIND_X_AXIS, 0.0f); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "x-bind"); + clutter_actor_add_constraint (rect, constraint); + +#if 0 + constraint = clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.5); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "y-align"); + clutter_actor_add_constraint (rect, constraint); +#else + clutter_actor_set_y (rect, (600 - 256) / 2.0); +#endif + + left_rect = rect; + + /* right rectangle */ + clutter_color_from_string (&rect_color, "#3465a4ff"); + rect = clutter_rectangle_new (); + clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &rect_color); + clutter_actor_set_size (rect, 256, 256); + clutter_actor_set_opacity (rect, 0); + clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect); + + constraint = clutter_bind_constraint_new (center_rect, CLUTTER_BIND_X_AXIS, 0.0f); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "x-bind"); + clutter_actor_add_constraint (rect, constraint); + +#if 0 + constraint = clutter_align_constraint_new (stage, CLUTTER_ALIGN_Y_AXIS, 0.5); + clutter_actor_meta_set_name (CLUTTER_ACTOR_META (constraint), "y-align"); + clutter_actor_add_constraint (rect, constraint); +#else + clutter_actor_set_y (rect, (600 - 256) / 2.0); +#endif + + right_rect = rect; + + clutter_actor_show (stage); + + clutter_main (); + + return EXIT_SUCCESS; +}