From 371b12c4afca0197a0c460e0a423357d7a1e317e Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 25 Apr 2013 17:16:15 -0700 Subject: [PATCH] tests: add an interactive test for rotate and zoom actions https://bugzilla.gnome.org/show_bug.cgi?id=698836 --- tests/interactive/Makefile.am | 3 +- tests/interactive/test-rotate-zoom.c | 98 ++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 tests/interactive/test-rotate-zoom.c diff --git a/tests/interactive/Makefile.am b/tests/interactive/Makefile.am index 381d1e969..8e87edf44 100644 --- a/tests/interactive/Makefile.am +++ b/tests/interactive/Makefile.am @@ -49,7 +49,8 @@ UNIT_TESTS = \ test-content.c \ test-keyframe-transition.c \ test-bind-constraint.c \ - test-touch-events.c + test-touch-events.c \ + test-rotate-zoom.c if X11_TESTS UNIT_TESTS += test-pixmap.c diff --git a/tests/interactive/test-rotate-zoom.c b/tests/interactive/test-rotate-zoom.c new file mode 100644 index 000000000..0e9cc0a39 --- /dev/null +++ b/tests/interactive/test-rotate-zoom.c @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2013 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU Lesser General Public License, + * version 2.1, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + * Boston, MA 02111-1307, USA. + * + */ +#include +#include +#include +#include +#include +#include + +#define STAGE_WIDTH 800 +#define STAGE_HEIGHT 550 + +static ClutterActor * +create_hand (void) +{ + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL); + ClutterContent *image = clutter_image_new (); + ClutterActor *actor = clutter_actor_new (); + + clutter_image_set_data (CLUTTER_IMAGE (image), + gdk_pixbuf_get_pixels (pixbuf), + gdk_pixbuf_get_has_alpha (pixbuf) + ? COGL_PIXEL_FORMAT_RGBA_8888 + : COGL_PIXEL_FORMAT_RGB_888, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf), + gdk_pixbuf_get_rowstride (pixbuf), + NULL); + clutter_actor_set_content (actor, image); + clutter_actor_set_size (actor, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf)); + clutter_actor_set_reactive (actor, TRUE); + + g_object_unref (pixbuf); + + return actor; +} + +G_MODULE_EXPORT int +test_rotate_zoom_main (int argc, char *argv[]) +{ + ClutterActor *stage, *actor; + gfloat width, height; + +#ifdef CLUTTER_WINDOWING_X11 + clutter_x11_enable_xinput (); +#endif + + /* initialize Clutter */ + if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) + return EXIT_FAILURE; + + /* create a resizable stage */ + stage = clutter_stage_new (); + g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); + clutter_stage_set_title (CLUTTER_STAGE (stage), "Rotate and Zoom actions"); + clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE); + clutter_actor_set_size (stage, STAGE_WIDTH, STAGE_HEIGHT); + clutter_actor_set_reactive (stage, FALSE); + clutter_actor_show (stage); + + actor = create_hand (); + clutter_actor_add_action (actor, clutter_rotate_action_new ()); + clutter_actor_add_action (actor, clutter_zoom_action_new ()); + clutter_actor_add_child (stage, actor); + + clutter_actor_get_size (actor, &width, &height); + clutter_actor_set_position (actor, + STAGE_WIDTH / 2 - width / 2, + STAGE_HEIGHT / 2 - height / 2); + + clutter_main (); + + return EXIT_SUCCESS; +} + +G_MODULE_EXPORT const char * +test_rotate_zoom_describe (void) +{ + return "Rotates and zooms an actor using touch events"; +}