diff --git a/clutter/clutter/clutter-image.c b/clutter/clutter/clutter-image.c deleted file mode 100644 index 2a28240b3..000000000 --- a/clutter/clutter/clutter-image.c +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive image' library. - * - * Copyright (C) 2012 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that 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 library. If not, see . - * - * Author: - * Emmanuele Bassi - */ - -/** - * ClutterImage: - * - * Image data content - * - * #ClutterImage is a #ClutterContent implementation that displays - * image data inside a [class@Actor]. - */ - -#include "config.h" - -#include "clutter/clutter-image.h" - -#include "clutter/clutter-actor-private.h" -#include "clutter/clutter-content-private.h" -#include "clutter/clutter-debug.h" -#include "clutter/clutter-paint-node.h" -#include "clutter/clutter-paint-nodes.h" -#include "clutter/clutter-private.h" - -typedef struct -{ - CoglTexture *texture; - gint width; - gint height; -} ClutterImagePrivate; - -static void clutter_content_iface_init (ClutterContentInterface *iface); - -G_DEFINE_TYPE_WITH_CODE (ClutterImage, clutter_image, G_TYPE_OBJECT, - G_ADD_PRIVATE (ClutterImage) - G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT, - clutter_content_iface_init)) - -static CoglTexture * -create_texture_from_data (unsigned int width, - unsigned int height, - CoglPixelFormat pixel_format, - unsigned int row_stride, - const uint8_t *data, - GError **error) -{ - ClutterContext *context = _clutter_context_get_default (); - ClutterBackend *backend = clutter_context_get_backend (context); - CoglContext *cogl_context = clutter_backend_get_cogl_context (backend); - CoglTexture *texture_2d; - - texture_2d = cogl_texture_2d_new_from_data (cogl_context, - width, - height, - pixel_format, - row_stride, - data, - error); - - return texture_2d; -} - -static void -update_image_size (ClutterImage *self) -{ - ClutterImagePrivate *priv = clutter_image_get_instance_private (self); - gint width, height; - - if (priv->texture == NULL) - return; - - width = cogl_texture_get_width (priv->texture); - height = cogl_texture_get_height (priv->texture); - - if (priv->width == width && - priv->height == height) - return; - - priv->width = width; - priv->height = height; - - clutter_content_invalidate_size (CLUTTER_CONTENT (self)); -} - -static void -clutter_image_finalize (GObject *gobject) -{ - ClutterImage *image = CLUTTER_IMAGE (gobject); - ClutterImagePrivate *priv = clutter_image_get_instance_private (image); - - g_clear_object (&priv->texture); - - G_OBJECT_CLASS (clutter_image_parent_class)->finalize (gobject); -} - -static void -clutter_image_class_init (ClutterImageClass *klass) -{ - G_OBJECT_CLASS (klass)->finalize = clutter_image_finalize; -} - -static void -clutter_image_init (ClutterImage *self) -{ -} - -static void -clutter_image_paint_content (ClutterContent *content, - ClutterActor *actor, - ClutterPaintNode *root, - ClutterPaintContext *paint_context) -{ - ClutterImage *image = CLUTTER_IMAGE (content); - ClutterImagePrivate *priv = clutter_image_get_instance_private (image); - ClutterPaintNode *node; - - if (priv->texture == NULL) - return; - - node = clutter_actor_create_texture_paint_node (actor, priv->texture); - clutter_paint_node_set_static_name (node, "Image Content"); - clutter_paint_node_add_child (root, node); - clutter_paint_node_unref (node); -} - -static gboolean -clutter_image_get_preferred_size (ClutterContent *content, - gfloat *width, - gfloat *height) -{ - ClutterImage *image = CLUTTER_IMAGE (content); - ClutterImagePrivate *priv = clutter_image_get_instance_private (image); - - if (priv->texture == NULL) - return FALSE; - - if (width != NULL) - *width = cogl_texture_get_width (priv->texture); - - if (height != NULL) - *height = cogl_texture_get_height (priv->texture); - - return TRUE; -} - -static void -clutter_content_iface_init (ClutterContentInterface *iface) -{ - iface->get_preferred_size = clutter_image_get_preferred_size; - iface->paint_content = clutter_image_paint_content; -} - -/** - * clutter_image_new: - * - * Creates a new #ClutterImage instance. - * - * Return value: (transfer full): the newly created #ClutterImage instance. - * Use g_object_unref() when done. - */ -ClutterContent * -clutter_image_new (void) -{ - return g_object_new (CLUTTER_TYPE_IMAGE, NULL); -} - -/** - * clutter_image_set_data: - * @image: a #ClutterImage - * @data: (array): the image data, as an array of bytes - * @pixel_format: the Cogl pixel format of the image data - * @width: the width of the image data - * @height: the height of the image data - * @row_stride: the length of each row inside @data - * @error: return location for a #GError, or %NULL - * - * Sets the image data to be displayed by @image. - * - * If the image data was successfully loaded, the @image will be invalidated. - * - * In case of error, the @error value will be set, and this function will - * return %FALSE. - * - * The image data is copied in texture memory. - * - * The image data is expected to be a linear array of RGBA or RGB pixel data; - * how to retrieve that data is left to platform specific image loaders. For - * instance, if you use the GdkPixbuf library: - * - * ```c - * ClutterContent *image = clutter_image_new (); - * - * GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (filename, NULL); - * - * 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), - * &error); - * - * g_object_unref (pixbuf); - * ``` - * - * Return value: %TRUE if the image data was successfully loaded, - * and %FALSE otherwise. - */ -gboolean -clutter_image_set_data (ClutterImage *image, - const guint8 *data, - CoglPixelFormat pixel_format, - guint width, - guint height, - guint row_stride, - GError **error) -{ - ClutterImagePrivate *priv; - - g_return_val_if_fail (CLUTTER_IS_IMAGE (image), FALSE); - g_return_val_if_fail (data != NULL, FALSE); - - priv = clutter_image_get_instance_private (image); - - if (priv->texture != NULL) - g_object_unref (priv->texture); - - priv->texture = create_texture_from_data (width, - height, - pixel_format, - row_stride, - data, - error); - - if (priv->texture == NULL) - return FALSE; - - clutter_content_invalidate (CLUTTER_CONTENT (image)); - update_image_size (image); - - return TRUE; -} - -/** - * clutter_image_set_bytes: - * @image: a #ClutterImage - * @data: the image data, as a #GBytes - * @pixel_format: the Cogl pixel format of the image data - * @width: the width of the image data - * @height: the height of the image data - * @row_stride: the length of each row inside @data - * @error: return location for a #GError, or %NULL - * - * Sets the image data stored inside a #GBytes to be displayed by @image. - * - * If the image data was successfully loaded, the @image will be invalidated. - * - * In case of error, the @error value will be set, and this function will - * return %FALSE. - * - * The image data contained inside the #GBytes is copied in texture memory, - * and no additional reference is acquired on the @data. - * - * Return value: %TRUE if the image data was successfully loaded, - * and %FALSE otherwise. - */ -gboolean -clutter_image_set_bytes (ClutterImage *image, - GBytes *data, - CoglPixelFormat pixel_format, - guint width, - guint height, - guint row_stride, - GError **error) -{ - ClutterImagePrivate *priv; - - g_return_val_if_fail (CLUTTER_IS_IMAGE (image), FALSE); - g_return_val_if_fail (data != NULL, FALSE); - - priv = clutter_image_get_instance_private (image); - - if (priv->texture != NULL) - g_object_unref (priv->texture); - - priv->texture = create_texture_from_data (width, - height, - pixel_format, - row_stride, - g_bytes_get_data (data, NULL), - error); - - if (priv->texture == NULL) - return FALSE; - - clutter_content_invalidate (CLUTTER_CONTENT (image)); - update_image_size (image); - - return TRUE; -} - -/** - * clutter_image_set_area: - * @image: a #ClutterImage - * @data: (array): the image data, as an array of bytes - * @pixel_format: the Cogl pixel format of the image data - * @rect: a rectangle indicating the area that should be set - * @row_stride: the length of each row inside @data - * @error: return location for a #GError, or %NULL - * - * Sets the image data to be display by @image, using @rect to indicate - * the position and size of the image data to be set. - * - * If the @image does not have any image data set when this function is - * called, a new texture will be created with the size of the width and - * height of the rectangle, i.e. calling this function on a newly created - * #ClutterImage will be the equivalent of calling [method@Clutter.Image.set_data]. - * - * If the image data was successfully loaded, the @image will be invalidated. - * - * In case of error, the @error value will be set, and this function will - * return %FALSE. - * - * The image data is copied in texture memory. - * - * Return value: %TRUE if the image data was successfully loaded, - * and %FALSE otherwise. - */ -gboolean -clutter_image_set_area (ClutterImage *image, - const guint8 *data, - CoglPixelFormat pixel_format, - const MtkRectangle *area, - guint row_stride, - GError **error) -{ - ClutterImagePrivate *priv; - - g_return_val_if_fail (CLUTTER_IS_IMAGE (image), FALSE); - g_return_val_if_fail (data != NULL, FALSE); - g_return_val_if_fail (area != NULL, FALSE); - - priv = clutter_image_get_instance_private (image); - - if (priv->texture == NULL) - { - priv->texture = create_texture_from_data (area->width, - area->height, - pixel_format, - row_stride, - data, - error); - } - else - { - gboolean res; - - res = cogl_texture_set_region (priv->texture, - 0, 0, - area->x, area->y, - area->width, area->height, - area->width, area->height, - pixel_format, - row_stride, - data); - - if (!res) - { - g_clear_object (&priv->texture); - } - } - - if (priv->texture == NULL) - return FALSE; - - clutter_content_invalidate (CLUTTER_CONTENT (image)); - update_image_size (image); - - return TRUE; -} - -/** - * clutter_image_get_texture: - * @image: a #ClutterImage - * - * Retrieves a pointer to the Cogl texture used by @image. - * - * If you change the contents of the returned Cogl texture you will need - * to manually invalidate the @image with [method@Clutter.Content.invalidate] - * in order to update the actors using @image as their content. - * - * Return value: (transfer none): a pointer to the Cogl texture, or %NULL - */ -CoglTexture * -clutter_image_get_texture (ClutterImage *image) -{ - ClutterImagePrivate *priv; - - g_return_val_if_fail (CLUTTER_IS_IMAGE (image), NULL); - - priv = clutter_image_get_instance_private (image); - return priv->texture; -} diff --git a/clutter/clutter/clutter-image.h b/clutter/clutter/clutter-image.h deleted file mode 100644 index fcdee356e..000000000 --- a/clutter/clutter/clutter-image.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive image' library. - * - * Copyright (C) 2012 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that 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 library. If not, see . - * - * Author: - * Emmanuele Bassi - */ - -#pragma once - -#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION) -#error "Only can be included directly." -#endif - -#include "cogl/cogl.h" -#include "clutter/clutter-types.h" -#include "mtk/mtk.h" - -G_BEGIN_DECLS - -#define CLUTTER_TYPE_IMAGE (clutter_image_get_type ()) - -CLUTTER_EXPORT -G_DECLARE_DERIVABLE_TYPE (ClutterImage, clutter_image, CLUTTER, IMAGE, GObject) - -/** - * ClutterImageClass: - * - * The #ClutterImageClass structure contains - * private data. - */ -struct _ClutterImageClass -{ - /*< private >*/ - GObjectClass parent_class; -}; - -CLUTTER_EXPORT -ClutterContent * clutter_image_new (void); -CLUTTER_EXPORT -gboolean clutter_image_set_data (ClutterImage *image, - const guint8 *data, - CoglPixelFormat pixel_format, - guint width, - guint height, - guint row_stride, - GError **error); -CLUTTER_EXPORT -gboolean clutter_image_set_area (ClutterImage *image, - const guint8 *data, - CoglPixelFormat pixel_format, - const MtkRectangle *rect, - guint row_stride, - GError **error); -CLUTTER_EXPORT -gboolean clutter_image_set_bytes (ClutterImage *image, - GBytes *data, - CoglPixelFormat pixel_format, - guint width, - guint height, - guint row_stride, - GError **error); - -CLUTTER_EXPORT -CoglTexture * clutter_image_get_texture (ClutterImage *image); - -G_END_DECLS diff --git a/clutter/clutter/clutter.h b/clutter/clutter/clutter.h index 4864d91bd..1fd0eff99 100644 --- a/clutter/clutter/clutter.h +++ b/clutter/clutter/clutter.h @@ -66,7 +66,6 @@ #include "clutter/clutter-gesture.h" #include "clutter/clutter-grab.h" #include "clutter/clutter-grid-layout.h" -#include "clutter/clutter-image.h" #include "clutter/clutter-input-device.h" #include "clutter/clutter-input-device-tool.h" #include "clutter/clutter-input-method.h" diff --git a/clutter/clutter/meson.build b/clutter/clutter/meson.build index 8f2d802ac..3cbf4c980 100644 --- a/clutter/clutter/meson.build +++ b/clutter/clutter/meson.build @@ -38,7 +38,6 @@ clutter_headers = [ 'clutter-gesture.h', 'clutter-grab.h', 'clutter-grid-layout.h', - 'clutter-image.h', 'clutter-input-device.h', 'clutter-input-device-tool.h', 'clutter-input-focus.h', @@ -127,7 +126,6 @@ clutter_sources = [ 'clutter-gesture.c', 'clutter-grab.c', 'clutter-grid-layout.c', - 'clutter-image.c', 'clutter-input-device.c', 'clutter-input-device-tool.c', 'clutter-input-focus.c', diff --git a/src/tests/clutter/interactive/meson.build b/src/tests/clutter/interactive/meson.build index 6ceb474af..eb0089637 100644 --- a/src/tests/clutter/interactive/meson.build +++ b/src/tests/clutter/interactive/meson.build @@ -14,7 +14,6 @@ clutter_tests_interactive_link_args = [ clutter_tests_interactive_test_sources = [ 'test-events.c', - 'test-actors.c', 'test-grab.c', 'test-cogl-shader-glsl.c', 'test-cogl-tex-tile.c', @@ -26,11 +25,8 @@ clutter_tests_interactive_test_sources = [ 'test-stage-sizing.c', 'test-swipe-action.c', 'test-cogl-point-sprites.c', - 'test-devices.c', 'test-content.c', 'test-keyframe-transition.c', - 'test-rotate-zoom.c', - 'test-image.c', ] gen_test_unit_names = find_program('meson/gen-test-unit-names.sh') diff --git a/src/tests/clutter/interactive/test-actors.c b/src/tests/clutter/interactive/test-actors.c deleted file mode 100644 index d4b8be44e..000000000 --- a/src/tests/clutter/interactive/test-actors.c +++ /dev/null @@ -1,260 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -#include "test-utils.h" -#include "tests/clutter-test-utils.h" - -#define NHANDS 6 - -typedef struct SuperOH -{ - ClutterActor **hand; - ClutterActor *bgtex; - ClutterActor *real_hand; - ClutterActor *group; - ClutterActor *stage; - - gint stage_width; - gint stage_height; - gfloat radius; - - ClutterTimeline *timeline; -} SuperOH; - -int -test_actors_main (int argc, char *argv[]); - -static void -on_group_destroy (ClutterActor *actor, - SuperOH *oh) -{ - oh->group = NULL; -} - -static void -on_hand_destroy (ClutterActor *actor, - SuperOH *oh) -{ - int i; - - for (i = 0; i < NHANDS; i++) - { - if (oh->hand[i] == actor) - oh->hand[i] = NULL; - } -} - -static gboolean -on_button_press_event (ClutterActor *actor, - ClutterEvent *event, - SuperOH *oh) -{ - gfloat x, y; - - clutter_event_get_coords (event, &x, &y); - - g_print ("*** button press event (button:%d) at %.2f, %.2f on %s ***\n", - clutter_event_get_button (event), - x, y, - clutter_actor_get_name (actor)); - - clutter_actor_hide (actor); - - return TRUE; -} - -static gboolean -input_cb (ClutterActor *stage, - ClutterEvent *event, - gpointer data) -{ - SuperOH *oh = data; - - if (clutter_event_type (event) == CLUTTER_KEY_RELEASE) - { - g_print ("*** key press event (key:%c) ***\n", - clutter_event_get_key_symbol (event)); - - if (clutter_event_get_key_symbol (event) == CLUTTER_KEY_q) - { - clutter_test_quit (); - - return TRUE; - } - else if (clutter_event_get_key_symbol (event) == CLUTTER_KEY_r) - { - gint i; - - for (i = 0; i < NHANDS; i++) - { - if (oh->hand[i] != NULL) - clutter_actor_show (oh->hand[i]); - } - - return TRUE; - } - } - - return FALSE; -} - -/* Timeline handler */ -static void -frame_cb (ClutterTimeline *timeline, - gint msecs, - gpointer data) -{ - SuperOH *oh = data; - gint i; - float rotation = (float) (clutter_timeline_get_progress (timeline) * 360.0); - - /* Rotate everything clockwise about stage center*/ - if (oh->group != NULL) - clutter_actor_set_rotation_angle (oh->group, CLUTTER_Z_AXIS, rotation); - - for (i = 0; i < NHANDS; i++) - { - /* Rotate each hand around there centers - to get this we need - * to take into account any scaling. - */ - if (oh->hand[i] != NULL) - clutter_actor_set_rotation_angle (oh->hand[i], - CLUTTER_Z_AXIS, - -6.0 * rotation); - } -} - -static void -stop_and_quit (ClutterActor *stage, - SuperOH *data) -{ - clutter_timeline_stop (data->timeline); - - clutter_test_quit (); -} - -G_MODULE_EXPORT int -test_actors_main (int argc, char *argv[]) -{ - SuperOH *oh; - gint i; - GError *error; - ClutterActor *real_hand; - gchar *file; - - error = NULL; - - clutter_test_init (&argc, &argv); - - oh = g_new (SuperOH, 1); - - oh->stage = clutter_test_get_stage (); - clutter_actor_set_size (oh->stage, 800, 600); - clutter_actor_set_name (oh->stage, "Default Stage"); - clutter_actor_set_background_color (oh->stage, &COGL_COLOR_INIT (114, 159, 207, 255)); - g_signal_connect (oh->stage, "destroy", G_CALLBACK (stop_and_quit), oh); - - /* Create a timeline to manage animation */ - oh->timeline = clutter_timeline_new_for_actor (oh->stage, 6000); - clutter_timeline_set_repeat_count (oh->timeline, -1); - - /* fire a callback for frame change */ - g_signal_connect (oh->timeline, "new-frame", G_CALLBACK (frame_cb), oh); - - file = g_build_filename (TESTS_DATADIR, "redhand.png", NULL); - real_hand = clutter_test_utils_create_texture_from_file (file, &error); - if (real_hand == NULL) - g_error ("image load failed: %s", error->message); - - g_free (file); - - /* create a new actor to hold other actors */ - oh->group = clutter_actor_new (); - clutter_actor_set_pivot_point (oh->group, 0.5, 0.5); - clutter_actor_set_layout_manager (oh->group, clutter_fixed_layout_new ()); - clutter_actor_set_name (oh->group, "Group"); - g_signal_connect (oh->group, "destroy", G_CALLBACK (on_group_destroy), oh); - clutter_actor_add_constraint (oh->group, clutter_align_constraint_new (oh->stage, CLUTTER_ALIGN_BOTH, 0.5)); - clutter_actor_add_constraint (oh->group, clutter_bind_constraint_new (oh->stage, CLUTTER_BIND_SIZE, 0.0f)); - - oh->hand = g_new (ClutterActor *, NHANDS); - - oh->stage_width = (int) clutter_actor_get_width (oh->stage); - oh->stage_height = (int) clutter_actor_get_height (oh->stage); - oh->radius = (oh->stage_width + oh->stage_height) / NHANDS; - - for (i = 0; i < NHANDS; i++) - { - gint x, y, w, h; - - if (i == 0) - { - oh->hand[i] = real_hand; - clutter_actor_set_name (oh->hand[i], "Real Hand"); - } - else - { - oh->hand[i] = clutter_clone_new (real_hand); - clutter_actor_set_name (oh->hand[i], "Clone Hand"); - } - - clutter_actor_set_reactive (oh->hand[i], TRUE); - - clutter_actor_set_size (oh->hand[i], 200, 213); - - /* Place around a circle */ - w = (int) clutter_actor_get_width (oh->hand[i]); - h = (int) clutter_actor_get_height (oh->hand[i]); - - x = (int) (oh->stage_width / 2 - + oh->radius - * cos (i * G_PI / (NHANDS / 2)) - - w / 2); - - y = (int) (oh->stage_height / 2 - + oh->radius - * sin (i * G_PI / (NHANDS / 2)) - - h / 2); - - clutter_actor_set_position (oh->hand[i], x, y); - clutter_actor_set_translation (oh->hand[i], -100.f, -106.5, 0); - - /* Add to our group group */ - clutter_actor_add_child (oh->group, oh->hand[i]); - - g_signal_connect (oh->hand[i], "button-press-event", - G_CALLBACK (on_button_press_event), - oh); - - g_signal_connect (oh->hand[i], "destroy", - G_CALLBACK (on_hand_destroy), - oh); - } - - /* Add the group to the stage */ - clutter_actor_add_child (oh->stage, oh->group); - - /* Show everying */ - clutter_actor_show (oh->stage); - - g_signal_connect (oh->stage, "key-release-event", G_CALLBACK (input_cb), oh); - - /* and start it */ - clutter_timeline_start (oh->timeline); - - clutter_test_main (); - - clutter_timeline_stop (oh->timeline); - - /* clean up */ - g_object_unref (oh->timeline); - g_free (oh->hand); - g_free (oh); - - return EXIT_SUCCESS; -} diff --git a/src/tests/clutter/interactive/test-devices.c b/src/tests/clutter/interactive/test-devices.c deleted file mode 100644 index 043c4b331..000000000 --- a/src/tests/clutter/interactive/test-devices.c +++ /dev/null @@ -1,233 +0,0 @@ -#include -#include -#include - -#include "test-utils.h" -#include "tests/clutter-test-utils.h" - -typedef struct { - ClutterActor *stage; - - GHashTable *devices; -} TestDevicesApp; - -int -test_devices_main (int argc, char **argv); - -static const gchar * -device_type_name (ClutterInputDevice *device) -{ - ClutterInputDeviceType d_type; - - d_type = clutter_input_device_get_device_type (device); - switch (d_type) - { - case CLUTTER_POINTER_DEVICE: - return "Pointer"; - - case CLUTTER_KEYBOARD_DEVICE: - return "Keyboard"; - - case CLUTTER_EXTENSION_DEVICE: - return "Extension"; - - case CLUTTER_PEN_DEVICE: - return "Pen"; - - case CLUTTER_ERASER_DEVICE: - return "Eraser"; - - case CLUTTER_CURSOR_DEVICE: - return "Cursor"; - - default: - return "Unknown"; - } -} - -static gboolean -stage_button_event_cb (ClutterActor *actor, - ClutterEvent *event, - TestDevicesApp *app) -{ - ClutterInputDevice *device; - ClutterInputDevice *source_device; - ClutterActor *hand = NULL; - - device = clutter_event_get_device (event); - source_device = clutter_event_get_source_device (event); - - hand = g_hash_table_lookup (app->devices, device); - - g_print ("Device: '%s' (type: %s, source: '%s')\n", - clutter_input_device_get_device_name (device), - device_type_name (device), - source_device != device - ? clutter_input_device_get_device_name (source_device) - : ""); - - if (hand != NULL) - { - gfloat event_x, event_y; - - clutter_event_get_coords (event, &event_x, &event_y); - clutter_actor_set_position (hand, event_x, event_y); - } - - return FALSE; -} - -static gboolean -stage_motion_event_cb (ClutterActor *actor, - ClutterEvent *event, - TestDevicesApp *app) -{ - ClutterInputDevice *device; - ClutterActor *hand = NULL; - - device = clutter_event_get_device (event); - - hand = g_hash_table_lookup (app->devices, device); - if (hand != NULL) - { - gfloat event_x, event_y; - - clutter_event_get_coords (event, &event_x, &event_y); - clutter_actor_set_position (hand, event_x, event_y); - - return TRUE; - } - - return FALSE; -} - -static void -seat_device_added_cb (ClutterSeat *seat, - ClutterInputDevice *device, - TestDevicesApp *app) -{ - ClutterInputDeviceType device_type; - ClutterActor *hand = NULL; - - g_print ("got a %s device '%s'\n", - device_type_name (device), - clutter_input_device_get_device_name (device)); - - device_type = clutter_input_device_get_device_type (device); - if (device_type == CLUTTER_POINTER_DEVICE || - device_type == CLUTTER_PEN_DEVICE || - device_type == CLUTTER_POINTER_DEVICE) - { - g_print ("*** enabling device '%s' ***\n", - clutter_input_device_get_device_name (device)); - - hand = clutter_test_utils_create_texture_from_file (TESTS_DATADIR - G_DIR_SEPARATOR_S - "redhand.png", - NULL); - g_hash_table_insert (app->devices, device, hand); - - clutter_actor_add_child (app->stage, hand); - } -} - -static void -seat_device_removed_cb (ClutterSeat *seat, - ClutterInputDevice *device, - TestDevicesApp *app) -{ - ClutterInputDeviceType device_type; - ClutterActor *hand = NULL; - - g_print ("removed a %s device '%s'\n", - device_type_name (device), - clutter_input_device_get_device_name (device)); - - device_type = clutter_input_device_get_device_type (device); - if (device_type == CLUTTER_POINTER_DEVICE || - device_type == CLUTTER_PEN_DEVICE || - device_type == CLUTTER_POINTER_DEVICE) - { - hand = g_hash_table_lookup (app->devices, device); - if (hand != NULL) - clutter_actor_add_child (app->stage, hand); - - g_hash_table_remove (app->devices, device); - } -} - -G_MODULE_EXPORT int -test_devices_main (int argc, char **argv) -{ - ClutterActor *stage; - TestDevicesApp *app; - ClutterSeat *seat; - GList *stage_devices, *l; - - clutter_test_init (&argc, &argv); - - app = g_new0 (TestDevicesApp, 1); - app->devices = g_hash_table_new (g_direct_hash, g_direct_equal) ; - - stage = clutter_test_get_stage (); - clutter_actor_set_background_color (stage, &COGL_COLOR_INIT (114, 159, 207, 255)); - g_signal_connect (stage, - "destroy", G_CALLBACK (clutter_test_quit), - NULL); - g_signal_connect (stage, - "motion-event", G_CALLBACK (stage_motion_event_cb), - app); - g_signal_connect (stage, - "button-press-event", G_CALLBACK (stage_button_event_cb), - app); - app->stage = stage; - - clutter_actor_show (stage); - - seat = clutter_test_get_default_seat (); - g_signal_connect (seat, - "device-added", G_CALLBACK (seat_device_added_cb), - app); - g_signal_connect (seat, - "device-removed", G_CALLBACK (seat_device_removed_cb), - app); - - stage_devices = clutter_seat_list_devices (seat); - - if (stage_devices == NULL) - g_error ("No input devices found."); - - for (l = stage_devices; l != NULL; l = l->next) - { - ClutterInputDevice *device = l->data; - ClutterInputDeviceType device_type; - ClutterActor *hand = NULL; - - g_print ("got a %s device '%s'\n", - device_type_name (device), - clutter_input_device_get_device_name (device)); - - device_type = clutter_input_device_get_device_type (device); - if (device_type == CLUTTER_POINTER_DEVICE || - device_type == CLUTTER_PEN_DEVICE || - device_type == CLUTTER_POINTER_DEVICE) - { - g_print ("*** enabling device '%s' ***\n", - clutter_input_device_get_device_name (device)); - - hand = clutter_test_utils_create_texture_from_file (TESTS_DATADIR - G_DIR_SEPARATOR_S - "redhand.png", - NULL); - g_hash_table_insert (app->devices, device, hand); - - clutter_actor_add_child (stage, hand); - } - } - - g_list_free (stage_devices); - - clutter_test_main (); - - return EXIT_SUCCESS; -} diff --git a/src/tests/clutter/interactive/test-image.c b/src/tests/clutter/interactive/test-image.c deleted file mode 100644 index 3ea63311c..000000000 --- a/src/tests/clutter/interactive/test-image.c +++ /dev/null @@ -1,260 +0,0 @@ -#include -#include -#include -#include - -#include "tests/clutter-test-utils.h" - -typedef struct _SolidContent { - GObject parent_instance; - - double red; - double green; - double blue; - double alpha; - - float padding; -} SolidContent; - -typedef struct _SolidContentClass { - GObjectClass parent_class; -} SolidContentClass; - -static void clutter_content_iface_init (ClutterContentInterface *iface); - -GType solid_content_get_type (void); - -const char * -test_image_describe (void); - -int -test_image_main (int argc, char *argv[]); - -G_DEFINE_TYPE_WITH_CODE (SolidContent, solid_content, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT, - clutter_content_iface_init)) - -static void -solid_content_paint_content (ClutterContent *content, - ClutterActor *actor, - ClutterPaintNode *root, - ClutterPaintContext *paint_context) -{ - SolidContent *self = (SolidContent *) content; - ClutterActorBox box, content_box; - CoglColor color; - PangoLayout *layout; - PangoRectangle logical; - ClutterPaintNode *node; - -#if 0 - g_debug ("Painting content [%p] " - "{ r:%.2f, g:%.2f, b:%.2f, a:%.2f } " - "for actor [%p] (context: [%p])", - content, - self->red, - self->green, - self->blue, - self->alpha, - actor, context); -#endif - - clutter_actor_get_content_box (actor, &content_box); - - box = content_box; - box.x1 += self->padding; - box.y1 += self->padding; - box.x2 -= self->padding; - box.y2 -= self->padding; - - color.alpha = (uint8_t) (self->alpha * 255); - - color.red = (uint8_t) (self->red * 255); - color.green = (uint8_t) (self->green * 255); - color.blue = (uint8_t) (self->blue * 255); - - node = clutter_color_node_new (&color); - clutter_paint_node_add_rectangle (node, &box); - clutter_paint_node_add_child (root, node); - clutter_paint_node_unref (node); - - color.red = (uint8_t) ((1.0 - self->red) * 255); - color.green = (uint8_t) ((1.0 - self->green) * 255); - color.blue = (uint8_t) ((1.0 - self->blue) * 255); - - layout = clutter_actor_create_pango_layout (actor, "A"); - pango_layout_get_pixel_extents (layout, NULL, &logical); - - node = clutter_text_node_new (layout, &color); - - /* top-left */ - box.x1 = clutter_actor_box_get_x (&content_box); - box.y1 = clutter_actor_box_get_y (&content_box); - box.x2 = box.x1 + logical.width; - box.y2 = box.y1 + logical.height; - clutter_paint_node_add_rectangle (node, &box); - - /* top-right */ - box.x1 = clutter_actor_box_get_x (&content_box) - + clutter_actor_box_get_width (&content_box) - - logical.width; - box.y1 = clutter_actor_box_get_y (&content_box); - box.x2 = box.x1 + logical.width; - box.y2 = box.y1 + logical.height; - clutter_paint_node_add_rectangle (node, &box); - - /* bottom-right */ - box.x1 = clutter_actor_box_get_x (&content_box) - + clutter_actor_box_get_width (&content_box) - - logical.width; - box.y1 = clutter_actor_box_get_y (&content_box) - + clutter_actor_box_get_height (&content_box) - - logical.height; - box.x2 = box.x1 + logical.width; - box.y2 = box.y1 + logical.height; - clutter_paint_node_add_rectangle (node, &box); - - /* bottom-left */ - box.x1 = clutter_actor_box_get_x (&content_box); - box.y1 = clutter_actor_box_get_y (&content_box) - + clutter_actor_box_get_height (&content_box) - - logical.height; - box.x2 = box.x1 + logical.width; - box.y2 = box.y1 + logical.height; - clutter_paint_node_add_rectangle (node, &box); - - /* center */ - box.x1 = clutter_actor_box_get_x (&content_box) - + (clutter_actor_box_get_width (&content_box) - logical.width) / 2.0f; - box.y1 = clutter_actor_box_get_y (&content_box) - + (clutter_actor_box_get_height (&content_box) - logical.height) / 2.0f; - box.x2 = box.x1 + logical.width; - box.y2 = box.y1 + logical.height; - clutter_paint_node_add_rectangle (node, &box); - - clutter_paint_node_add_child (root, node); - clutter_paint_node_unref (node); - - g_object_unref (layout); -} - -static void -clutter_content_iface_init (ClutterContentInterface *iface) -{ - iface->paint_content = solid_content_paint_content; -} - -static void -solid_content_class_init (SolidContentClass *klass) -{ -} - -static void -solid_content_init (SolidContent *self) -{ -} - -static ClutterContent * -solid_content_new (double red, - double green, - double blue, - double alpha, - float padding) -{ - SolidContent *self = g_object_new (solid_content_get_type (), NULL); - - self->red = red; - self->green = green; - self->blue = blue; - self->alpha = alpha; - self->padding = padding; - - return (ClutterContent *) self; -} - -G_MODULE_EXPORT const char * -test_image_describe (void) -{ - return "A test with image content."; -} - -G_MODULE_EXPORT int -test_image_main (int argc, char *argv[]) -{ - ClutterActor *stage, *grid; - ClutterContent *color, *image; - GdkPixbuf *pixbuf; - int i, n_rects; - - clutter_test_init (&argc, &argv); - - stage = clutter_test_get_stage (); - clutter_actor_set_name (stage, "Stage"); - g_signal_connect (stage, "destroy", G_CALLBACK (clutter_test_quit), NULL); - clutter_actor_show (stage); - - grid = clutter_actor_new (); - clutter_actor_set_name (grid, "Grid"); - clutter_actor_set_margin_top (grid, 12); - clutter_actor_set_margin_right (grid, 12); - clutter_actor_set_margin_bottom (grid, 12); - clutter_actor_set_margin_left (grid, 12); - clutter_actor_set_layout_manager (grid, clutter_flow_layout_new (CLUTTER_ORIENTATION_HORIZONTAL)); - clutter_actor_add_constraint (grid, clutter_bind_constraint_new (stage, CLUTTER_BIND_SIZE, 0.0)); - clutter_actor_add_child (stage, grid); - - color = solid_content_new (g_random_double_range (0.0, 1.0), - g_random_double_range (0.0, 1.0), - g_random_double_range (0.0, 1.0), - 1.0, - 2.0); - - pixbuf = gdk_pixbuf_new_from_file (TESTS_DATADIR G_DIR_SEPARATOR_S "redhand.png", NULL); - image = clutter_image_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); - g_object_unref (pixbuf); - - n_rects = g_random_int_range (12, 24); - for (i = 0; i < n_rects; i++) - { - ClutterActor *box = clutter_actor_new (); - CoglColor bg_color = { - g_random_int_range (0, 255), - g_random_int_range (0, 255), - g_random_int_range (0, 255), - 255 - }; - char *name, *str; - - str = cogl_color_to_string (&bg_color); - name = g_strconcat ("Box <", color, ">", NULL); - clutter_actor_set_name (box, name); - - g_free (name); - g_free (str); - - if ((i % 2) == 0) - clutter_actor_set_content (box, color); - else - clutter_actor_set_content (box, image); - - clutter_actor_set_size (box, 64, 64); - - clutter_actor_add_child (grid, box); - } - - clutter_test_main (); - - g_object_unref (color); - g_object_unref (image); - - return EXIT_SUCCESS; -} diff --git a/src/tests/clutter/interactive/test-layout.c b/src/tests/clutter/interactive/test-layout.c deleted file mode 100644 index 3afcea375..000000000 --- a/src/tests/clutter/interactive/test-layout.c +++ /dev/null @@ -1,675 +0,0 @@ -#include -#include - -#include -#include - -#include -#include "test-utils.h" -#include "tests/clutter-test-utils.h" - -/* layout actor, by Lucas Rocha */ - -#define MY_TYPE_THING (my_thing_get_type ()) -#define MY_THING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_THING, MyThing)) -#define MY_IS_THING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_THING)) -#define MY_THING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_THING, MyThingClass)) -#define MY_IS_THING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_THING)) -#define MY_THING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MY_TYPE_THING, MyThingClass)) - -typedef struct _MyThing MyThing; -typedef struct _MyThingPrivate MyThingPrivate; -typedef struct _MyThingClass MyThingClass; - -struct _MyThing -{ - ClutterActor parent_instance; - - MyThingPrivate *priv; -}; - -struct _MyThingClass -{ - ClutterActorClass parent_class; -}; - -enum -{ - PROP_0, - - PROP_SPACING, - PROP_PADDING, - PROP_USE_TRANSFORMED_BOX -}; - -struct _MyThingPrivate -{ - gfloat spacing; - gfloat padding; - - guint use_transformed_box : 1; -}; - -GType my_thing_get_type (void); - -int -test_layout_main (int argc, char *argv[]); - -const char * -test_layout_describe (void); - -G_DEFINE_TYPE_WITH_PRIVATE (MyThing, my_thing, CLUTTER_TYPE_ACTOR) - -#define MY_THING_GET_PRIVATE(obj) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_THING, MyThingPrivate)) - -static void -my_thing_set_property (GObject *gobject, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MyThingPrivate *priv = MY_THING (gobject)->priv; - gboolean needs_relayout = TRUE; - - switch (prop_id) - { - case PROP_SPACING: - priv->spacing = g_value_get_float (value); - break; - - case PROP_PADDING: - priv->padding = g_value_get_float (value); - break; - - case PROP_USE_TRANSFORMED_BOX: - priv->use_transformed_box = g_value_get_boolean (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); - needs_relayout = FALSE; - break; - } - - /* setting spacing or padding queues a relayout - because they are supposed to change the internal - allocation of children */ - if (needs_relayout) - clutter_actor_queue_relayout (CLUTTER_ACTOR (gobject)); -} - -static void -my_thing_get_property (GObject *gobject, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MyThingPrivate *priv = MY_THING (gobject)->priv; - - switch (prop_id) - { - case PROP_SPACING: - g_value_set_float (value, priv->spacing); - break; - - case PROP_PADDING: - g_value_set_float (value, priv->padding); - break; - - case PROP_USE_TRANSFORMED_BOX: - g_value_set_boolean (value, priv->use_transformed_box); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); - break; - } -} - -static void -my_thing_get_preferred_width (ClutterActor *self, - gfloat for_height, - gfloat *min_width_p, - gfloat *natural_width_p) -{ - ClutterActorIter iter; - ClutterActor *child; - gfloat min_left, min_right; - gfloat natural_left, natural_right; - - min_left = 0; - min_right = 0; - natural_left = 0; - natural_right = 0; - - clutter_actor_iter_init (&iter, self); - while (clutter_actor_iter_next (&iter, &child)) - { - gfloat child_x, child_min, child_natural; - - child_x = clutter_actor_get_x (child); - - clutter_actor_get_preferred_size (child, - &child_min, NULL, - &child_natural, NULL); - - if (child == clutter_actor_get_first_child (self)) - { - /* First child */ - min_left = child_x; - natural_left = child_x; - min_right = min_left + child_min; - natural_right = natural_left + child_natural; - } - else - { - /* Union of extents with previous children */ - if (child_x < min_left) - min_left = child_x; - - if (child_x < natural_left) - natural_left = child_x; - - if (child_x + child_min > min_right) - min_right = child_x + child_min; - - if (child_x + child_natural > natural_right) - natural_right = child_x + child_natural; - } - } - - if (min_left < 0) - min_left = 0; - - if (natural_left < 0) - natural_left = 0; - - if (min_right < 0) - min_right = 0; - - if (natural_right < 0) - natural_right = 0; - - g_assert_true (min_right >= min_left); - g_assert_true (natural_right >= natural_left); - - if (min_width_p) - *min_width_p = min_right - min_left; - - if (natural_width_p) - *natural_width_p = natural_right - min_left; -} - -static void -my_thing_get_preferred_height (ClutterActor *self, - gfloat for_width, - gfloat *min_height_p, - gfloat *natural_height_p) -{ - ClutterActorIter iter; - ClutterActor *child; - gfloat min_top, min_bottom; - gfloat natural_top, natural_bottom; - - min_top = 0; - min_bottom = 0; - natural_top = 0; - natural_bottom = 0; - - clutter_actor_iter_init (&iter, self); - while (clutter_actor_iter_next (&iter, &child)) - { - gfloat child_y, child_min, child_natural; - - child_y = clutter_actor_get_y (child); - - clutter_actor_get_preferred_size (child, - NULL, &child_min, - NULL, &child_natural); - - if (child == clutter_actor_get_first_child (self)) - { - /* First child */ - min_top = child_y; - natural_top = child_y; - min_bottom = min_top + child_min; - natural_bottom = natural_top + child_natural; - } - else - { - /* Union of extents with previous children */ - if (child_y < min_top) - min_top = child_y; - - if (child_y < natural_top) - natural_top = child_y; - - if (child_y + child_min > min_bottom) - min_bottom = child_y + child_min; - - if (child_y + child_natural > natural_bottom) - natural_bottom = child_y + child_natural; - } - } - - if (min_top < 0) - min_top = 0; - - if (natural_top < 0) - natural_top = 0; - - if (min_bottom < 0) - min_bottom = 0; - - if (natural_bottom < 0) - natural_bottom = 0; - - g_assert_true (min_bottom >= min_top); - g_assert_true (natural_bottom >= natural_top); - - if (min_height_p) - *min_height_p = min_bottom - min_top; - - if (natural_height_p) - *natural_height_p = natural_bottom - min_top; -} - -static void -my_thing_allocate (ClutterActor *self, - const ClutterActorBox *box) -{ - MyThingPrivate *priv; - gfloat current_x, current_y, max_row_height; - ClutterActorIter iter; - ClutterActor *child; - - clutter_actor_set_allocation (self, box); - - priv = MY_THING (self)->priv; - - current_x = priv->padding; - current_y = priv->padding; - max_row_height = 0; - - /* The allocation logic here is to horizontally place children - * side-by-side and reflow into a new row when we run out of - * space - */ - clutter_actor_iter_init (&iter, self); - while (clutter_actor_iter_next (&iter, &child)) - { - gfloat natural_width, natural_height; - ClutterActorBox child_box; - - clutter_actor_get_preferred_size (child, - NULL, NULL, - &natural_width, - &natural_height); - - /* if it fits in the current row, keep it there; otherwise - * reflow into another row - */ - if (current_x + natural_width > box->x2 - box->x1 - priv->padding) - { - current_x = priv->padding; - current_y += max_row_height + priv->spacing; - max_row_height = 0; - } - - child_box.x1 = current_x; - child_box.y1 = current_y; - child_box.x2 = child_box.x1 + natural_width; - child_box.y2 = child_box.y1 + natural_height; - - clutter_actor_allocate (child, &child_box); - - /* if we take into account the transformation of the children - * then we first check if it's transformed; then we get the - * onscreen coordinates of the two points of the bounding box - * of the actor (origin(x, y) and (origin + size)(x,y)) and - * we update the coordinates and area given to the next child - */ - if (priv->use_transformed_box) - { - if (clutter_actor_is_scaled (child) || - clutter_actor_is_rotated (child)) - { - graphene_point3d_t v1 = { 0, }, v2 = { 0, }; - ClutterActorBox transformed_box = { 0, }; - - v1.x = box->x1; - v1.y = box->y1; - - clutter_actor_apply_transform_to_point (child, &v1, &v2); - transformed_box.x1 = v2.x; - transformed_box.y1 = v2.y; - - /* size */ - v1.x = natural_width; - v1.y = natural_height; - clutter_actor_apply_transform_to_point (child, &v1, &v2); - transformed_box.x2 = v2.x; - transformed_box.y2 = v2.y; - - natural_width = transformed_box.x2 - transformed_box.x1; - natural_height = transformed_box.y2 - transformed_box.y1; - } - } - - /* Record the maximum child height on current row to know - * what's the increment that should be used for the next - * row - */ - if (natural_height > max_row_height) - max_row_height = natural_height; - - current_x += natural_width + priv->spacing; - } -} - -#define MIN_SIZE 24 -#define MAX_SIZE 64 - -static void -my_thing_class_init (MyThingClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); - - gobject_class->set_property = my_thing_set_property; - gobject_class->get_property = my_thing_get_property; - - actor_class->get_preferred_width = my_thing_get_preferred_width; - actor_class->get_preferred_height = my_thing_get_preferred_height; - actor_class->allocate = my_thing_allocate; - - g_object_class_install_property (gobject_class, - PROP_SPACING, - g_param_spec_float ("spacing", NULL, NULL, - 0, G_MAXFLOAT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_PADDING, - g_param_spec_float ("padding", NULL, NULL, - 0, G_MAXFLOAT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_USE_TRANSFORMED_BOX, - g_param_spec_boolean ("use-transformed-box", NULL, NULL, - FALSE, - G_PARAM_READWRITE)); -} - -static void -my_thing_init (MyThing *thing) -{ - thing->priv = MY_THING_GET_PRIVATE (thing); -} - -static ClutterActor * -my_thing_new (gfloat padding, - gfloat spacing) -{ - return g_object_new (MY_TYPE_THING, - "padding", padding, - "spacing", spacing, - NULL); -} - -/* test code */ - -static ClutterActor *box = NULL; -static ClutterActor *icon = NULL; -static ClutterTimeline *main_timeline = NULL; - -static void -toggle_property_value (ClutterActor *actor, - const gchar *property_name) -{ - gboolean value; - - g_object_get (actor, property_name, &value, NULL); - - value = !value; - - g_object_set (box, property_name, value, NULL); -} - -static void -increase_property_value (ClutterActor *actor, - const char *property_name) -{ - gfloat value; - - g_object_get (actor, property_name, &value, NULL); - - value = value + 10.0; - - g_object_set (box, property_name, value, NULL); -} - -static void -decrease_property_value (ClutterActor *actor, - const char *property_name) -{ - gfloat value; - - g_object_get (actor, property_name, &value, NULL); - - value = MAX (0, value - 10.0); - - g_object_set (box, property_name, value, NULL); -} - -static ClutterActor * -create_item (void) -{ - ClutterActor *clone = clutter_clone_new (icon); - - gint32 size = g_random_int_range (MIN_SIZE, MAX_SIZE); - - clutter_actor_set_size (clone, size, size); - clutter_actor_animate_with_timeline (clone, CLUTTER_EASE_OUT_CUBIC, - main_timeline, - "scale-x", 2.0, - "scale-y", 2.0, - NULL); - - return clone; -} - -static gboolean -keypress_cb (ClutterActor *actor, - ClutterEvent *event, - gpointer data) -{ - switch (clutter_event_get_key_symbol (event)) - { - case CLUTTER_KEY_q: - clutter_test_quit (); - break; - - case CLUTTER_KEY_a: - { - if (icon != NULL) - { - ClutterActor *clone = create_item (); - - /* Add one item to container */ - clutter_actor_add_child (box, clone); - } - break; - } - - case CLUTTER_KEY_d: - { - ClutterActor *last_child; - - last_child = clutter_actor_get_last_child (box); - if (last_child != NULL) - { - /* Remove last item on container */ - clutter_actor_remove_child (box, last_child); - } - break; - } - - case CLUTTER_KEY_w: - { - decrease_property_value (box, "padding"); - break; - } - - case CLUTTER_KEY_e: - { - increase_property_value (box, "padding"); - break; - } - - case CLUTTER_KEY_r: - { - decrease_property_value (box, "spacing"); - break; - } - - case CLUTTER_KEY_s: - { - toggle_property_value (box, "use-transformed-box"); - break; - } - - case CLUTTER_KEY_t: - { - increase_property_value (box, "spacing"); - break; - } - - case CLUTTER_KEY_z: - { - if (clutter_timeline_is_playing (main_timeline)) - clutter_timeline_pause (main_timeline); - else - clutter_timeline_start (main_timeline); - - break; - } - - default: - break; - } - - return FALSE; -} - -static void -relayout_on_frame (ClutterTimeline *timeline) -{ - gboolean use_transformed_box; - - /* if we care about transformations updating the layout, we need to inform - * the layout that a transformation is happening; this is either done by - * attaching a notification on the transformation properties or by simply - * queuing a relayout on each frame of the timeline used to drive the - * behaviour. for simplicity's sake, we used the latter - */ - - g_object_get (G_OBJECT (box), - "use-transformed-box", &use_transformed_box, - NULL); - - if (use_transformed_box) - clutter_actor_queue_relayout (box); -} - -G_MODULE_EXPORT int -test_layout_main (int argc, char *argv[]) -{ - ClutterActor *stage, *instructions; - gint i, size; - GError *error = NULL; - - clutter_test_init (&argc, &argv); - - stage = clutter_test_get_stage (); - clutter_actor_set_size (stage, 800, 600); - g_signal_connect (stage, "destroy", G_CALLBACK (clutter_test_quit), NULL); - - main_timeline = clutter_timeline_new_for_actor (stage, 2000); - clutter_timeline_set_repeat_count (main_timeline, -1); - clutter_timeline_set_auto_reverse (main_timeline, TRUE); - g_signal_connect (main_timeline, "new-frame", - G_CALLBACK (relayout_on_frame), - NULL); - - - box = my_thing_new (10, 10); - - clutter_actor_set_position (box, 20, 20); - clutter_actor_set_size (box, 350, -1); - - icon = clutter_test_utils_create_texture_from_file (TESTS_DATADIR - G_DIR_SEPARATOR_S - "redhand.png", - &error); - if (error) - g_error ("Unable to load 'redhand.png': %s", error->message); - - size = g_random_int_range (MIN_SIZE, MAX_SIZE); - clutter_actor_set_size (icon, size, size); - clutter_actor_add_child (box, icon); - clutter_actor_animate_with_timeline (icon, CLUTTER_EASE_OUT_CUBIC, - main_timeline, - "scale-x", 2.0, - "scale-y", 2.0, - NULL); - - for (i = 1; i < 33; i++) - { - ClutterActor *clone = create_item (); - - clutter_actor_add_child (box, clone); - } - - clutter_actor_add_child (stage, box); - - instructions = clutter_text_new_with_text (NULL, - "Instructions:\n" - "a - add a new item\n" - "d - remove last item\n" - "z - start/pause behaviour\n" - "w - decrease padding\n" - "e - increase padding\n" - "r - decrease spacing\n" - "t - increase spacing\n" - "s - use transformed box\n" - "q - quit"); - - clutter_text_set_use_markup (CLUTTER_TEXT (instructions), TRUE); - clutter_actor_set_position (instructions, 450, 10); - clutter_actor_add_child (stage, instructions); - - g_signal_connect (stage, "key-release-event", - G_CALLBACK (keypress_cb), - NULL); - - clutter_timeline_stop (main_timeline); - - clutter_actor_show (stage); - - clutter_test_main (); - - g_object_unref (main_timeline); - - return EXIT_SUCCESS; -} - -G_MODULE_EXPORT const char * -test_layout_describe (void) -{ - return "Container implementing a layout policy."; -} diff --git a/src/tests/clutter/interactive/test-rotate-zoom.c b/src/tests/clutter/interactive/test-rotate-zoom.c deleted file mode 100644 index e8e5e3666..000000000 --- a/src/tests/clutter/interactive/test-rotate-zoom.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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, see . - * - */ -#include -#include -#include -#include -#include - -#include "tests/clutter-test-utils.h" - -#define STAGE_WIDTH 800 -#define STAGE_HEIGHT 550 - -int -test_rotate_zoom_main (int argc, char *argv[]); - -const char * -test_rotate_zoom_describe (void); - -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; - - /* initialize Clutter */ - clutter_test_init (&argc, &argv); - - /* create a resizable stage */ - stage = clutter_test_get_stage (); - g_signal_connect (stage, "destroy", G_CALLBACK (clutter_test_quit), NULL); - 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_test_main (); - - return EXIT_SUCCESS; -} - -G_MODULE_EXPORT const char * -test_rotate_zoom_describe (void) -{ - return "Rotates and zooms an actor using touch events"; -} diff --git a/src/tests/clutter/interactive/test-shader-effects.c b/src/tests/clutter/interactive/test-shader-effects.c deleted file mode 100644 index b0dfadcf7..000000000 --- a/src/tests/clutter/interactive/test-shader-effects.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include - -#include -#include - -#include -#include "test-utils.h" -#include "tests/clutter-test-utils.h" - -int -test_shader_effects_main (int argc, char *argv[]); - -G_MODULE_EXPORT int -test_shader_effects_main (int argc, char *argv[]) -{ - ClutterTimeline *timeline; - ClutterActor *stage, *hand, *label, *rect; - gchar *file; - - clutter_test_init (&argc, &argv); - - stage = clutter_test_get_stage (); - clutter_actor_set_background_color (stage, &COGL_COLOR_INIT (186, 189, 182, 255)); - g_signal_connect (stage, "destroy", G_CALLBACK (clutter_test_quit), NULL); - - /* Make a timeline */ - timeline = clutter_timeline_new_for_actor (stage, 7692); - clutter_timeline_set_repeat_count (timeline, -1); - - /* Make a hand */ - file = g_build_filename (TESTS_DATADIR, "redhand.png", NULL); - hand = clutter_test_utils_create_texture_from_file (file, NULL); - if (!hand) - g_error("Unable to load '%s'", file); - - g_free (file); - - clutter_actor_set_position (hand, 326, 265); - clutter_actor_add_effect_with_name (hand, "desaturate", clutter_desaturate_effect_new (0.75)); - clutter_actor_add_effect_with_name (hand, "blur", clutter_blur_effect_new ()); - clutter_actor_animate_with_timeline (hand, CLUTTER_LINEAR, timeline, - "@effects.desaturate.factor", 1.0, - "rotation-angle-z", 360.0, - "fixed::anchor-x", 86.0, - "fixed::anchor-y", 125.0, - "opacity", 128, - NULL); - - rect = clutter_actor_new (); - clutter_actor_set_background_color (rect, &COGL_COLOR_INIT (206, 92, 0, 255)); - clutter_actor_add_effect_with_name (rect, "blur", clutter_blur_effect_new ()); - clutter_actor_set_position (rect, 415, 215); - clutter_actor_set_size (rect, 150, 150); - clutter_actor_animate_with_timeline (rect, CLUTTER_LINEAR, timeline, - "rotation-angle-z", 360.0, - "fixed::anchor-x", 75.0, - "fixed::anchor-y", 75.0, - NULL); - - label = clutter_text_new_with_text ("Mono 16", - "The Wonder\n" - "of the\n" - "Spinning Hand"); - clutter_text_set_line_alignment (CLUTTER_TEXT (label), PANGO_ALIGN_CENTER); - clutter_actor_set_position (label, 336, 275); - clutter_actor_set_size (label, 500, 100); - clutter_actor_animate_with_timeline (label, CLUTTER_LINEAR, timeline, - "rotation-angle-z", 360.0, - "fixed::anchor-x", 86.0, - "fixed::anchor-y", 125.0, - NULL); - - clutter_actor_add_child (stage, rect); - clutter_actor_add_child (stage, hand); - clutter_actor_add_child (stage, label); - - /* start the timeline and thus the animations */ - clutter_timeline_start (timeline); - - clutter_actor_show (stage); - - clutter_test_main (); - - g_object_unref (timeline); - - return 0; -} diff --git a/src/tests/clutter/test-utils.h b/src/tests/clutter/test-utils.h index 1513ba8dc..a2c7f04be 100644 --- a/src/tests/clutter/test-utils.h +++ b/src/tests/clutter/test-utils.h @@ -3,34 +3,6 @@ static GQuark pixbuf_key = 0; -static inline ClutterActor * -clutter_test_utils_create_texture_from_file (const char *filename, - GError **error) -{ - g_autoptr (ClutterContent) image = NULL; - g_autoptr (GdkPixbuf) pixbuf = NULL; - - pixbuf = gdk_pixbuf_new_from_file (filename, error); - if (!pixbuf) - return NULL; - - image = clutter_image_new (); - if (!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), - error)) - return NULL; - - return g_object_new (CLUTTER_TYPE_ACTOR, - "content", image, - NULL); -} - static inline CoglBitmap * clutter_test_create_bitmap_from_file (CoglContext *ctx, const char *filename,