summaryrefslogtreecommitdiff
path: root/clutter/tests/interactive/test-cogl-tex-polygon.c
diff options
context:
space:
mode:
Diffstat (limited to 'clutter/tests/interactive/test-cogl-tex-polygon.c')
-rw-r--r--clutter/tests/interactive/test-cogl-tex-polygon.c425
1 files changed, 0 insertions, 425 deletions
diff --git a/clutter/tests/interactive/test-cogl-tex-polygon.c b/clutter/tests/interactive/test-cogl-tex-polygon.c
deleted file mode 100644
index 2bfc60ae6..000000000
--- a/clutter/tests/interactive/test-cogl-tex-polygon.c
+++ /dev/null
@@ -1,425 +0,0 @@
-#include <glib.h>
-#include <gmodule.h>
-#include <stdlib.h>
-#include <clutter/clutter.h>
-#include <cogl/cogl.h>
-
-/* Coglbox declaration
- *--------------------------------------------------*/
-
-G_BEGIN_DECLS
-
-#define TEST_TYPE_COGLBOX test_coglbox_get_type()
-
-#define TEST_COGLBOX(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- TEST_TYPE_COGLBOX, TestCoglbox))
-
-#define TEST_COGLBOX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- TEST_TYPE_COGLBOX, TestCoglboxClass))
-
-#define TEST_IS_COGLBOX(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- TEST_TYPE_COGLBOX))
-
-#define TEST_IS_COGLBOX_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- TEST_TYPE_COGLBOX))
-
-#define TEST_COGLBOX_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- TEST_TYPE_COGLBOX, TestCoglboxClass))
-
-typedef struct _TestCoglbox TestCoglbox;
-typedef struct _TestCoglboxClass TestCoglboxClass;
-typedef struct _TestCoglboxPrivate TestCoglboxPrivate;
-
-struct _TestCoglbox
-{
- ClutterActor parent;
-
- /*< private >*/
- TestCoglboxPrivate *priv;
-};
-
-struct _TestCoglboxClass
-{
- ClutterActorClass parent_class;
-
- /* padding for future expansion */
- void (*_test_coglbox1) (void);
- void (*_test_coglbox2) (void);
- void (*_test_coglbox3) (void);
- void (*_test_coglbox4) (void);
-};
-
-static GType test_coglbox_get_type (void) G_GNUC_CONST;
-
-int
-test_cogl_tex_polygon_main (int argc, char *argv[]);
-
-const char *
-test_cogl_tex_polygon_describe (void);
-
-G_END_DECLS
-
-/* Coglbox private declaration
- *--------------------------------------------------*/
-
-struct _TestCoglboxPrivate
-{
- CoglHandle sliced_tex, not_sliced_tex;
- gint frame;
- gboolean use_sliced;
- gboolean use_linear_filtering;
-};
-
-G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
-
-#define TEST_COGLBOX_GET_PRIVATE(obj) \
-((TestCoglboxPrivate *)test_coglbox_get_instance_private (TEST_COGLBOX ((obj))))
-
-/* Coglbox implementation
- *--------------------------------------------------*/
-
-static void
-test_coglbox_fade_texture (gfloat x1,
- gfloat y1,
- gfloat x2,
- gfloat y2,
- gfloat tx1,
- gfloat ty1,
- gfloat tx2,
- gfloat ty2)
-{
- CoglTextureVertex vertices[4];
- int i;
-
- vertices[0].x = x1;
- vertices[0].y = y1;
- vertices[0].z = 0;
- vertices[0].tx = tx1;
- vertices[0].ty = ty1;
- vertices[1].x = x1;
- vertices[1].y = y2;
- vertices[1].z = 0;
- vertices[1].tx = tx1;
- vertices[1].ty = ty2;
- vertices[2].x = x2;
- vertices[2].y = y2;
- vertices[2].z = 0;
- vertices[2].tx = tx2;
- vertices[2].ty = ty2;
- vertices[3].x = x2;
- vertices[3].y = y1;
- vertices[3].z = 0;
- vertices[3].tx = tx2;
- vertices[3].ty = ty1;
-
- for (i = 0; i < 4; i++)
- {
- cogl_color_init_from_4ub (&(vertices[i].color),
- 255,
- 255,
- 255,
- ((i ^ (i >> 1)) & 1) ? 0 : 128);
- cogl_color_premultiply (&(vertices[i].color));
- }
-
- cogl_polygon (vertices, 4, TRUE);
-}
-
-static void
-test_coglbox_triangle_texture (int tex_width,
- int tex_height,
- gfloat x,
- gfloat y,
- gfloat tx1,
- gfloat ty1,
- gfloat tx2,
- gfloat ty2,
- gfloat tx3,
- gfloat ty3)
-{
- CoglTextureVertex vertices[3];
-
- vertices[0].x = x + tx1 * tex_width;
- vertices[0].y = y + ty1 * tex_height;
- vertices[0].z = 0;
- vertices[0].tx = tx1;
- vertices[0].ty = ty1;
-
- vertices[1].x = x + tx2 * tex_width;
- vertices[1].y = y + ty2 * tex_height;
- vertices[1].z = 0;
- vertices[1].tx = tx2;
- vertices[1].ty = ty2;
-
- vertices[2].x = x + tx3 * tex_width;
- vertices[2].y = y + ty3 * tex_height;
- vertices[2].z = 0;
- vertices[2].tx = tx3;
- vertices[2].ty = ty3;
-
- cogl_polygon (vertices, 3, FALSE);
-}
-
-static void
-test_coglbox_paint (ClutterActor *self)
-{
- TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (self);
- CoglHandle tex_handle = priv->use_sliced ? priv->sliced_tex
- : priv->not_sliced_tex;
- int tex_width = cogl_texture_get_width (tex_handle);
- int tex_height = cogl_texture_get_height (tex_handle);
- CoglHandle material = cogl_material_new ();
-
- cogl_material_set_layer (material, 0, tex_handle);
-
- cogl_material_set_layer_filters (material, 0,
- priv->use_linear_filtering
- ? COGL_MATERIAL_FILTER_LINEAR :
- COGL_MATERIAL_FILTER_NEAREST,
- priv->use_linear_filtering
- ? COGL_MATERIAL_FILTER_LINEAR :
- COGL_MATERIAL_FILTER_NEAREST);
-
- cogl_push_matrix ();
- cogl_translate (tex_width / 2, 0, 0);
- cogl_rotate (priv->frame, 0, 1, 0);
- cogl_translate (-tex_width / 2, 0, 0);
-
- /* Draw a hand and refect it */
- cogl_set_source (material);
- cogl_rectangle_with_texture_coords (0, 0, tex_width, tex_height,
- 0, 0, 1, 1);
- test_coglbox_fade_texture (0, tex_height,
- tex_width, (tex_height * 3 / 2),
- 0.0, 1.0,
- 1.0, 0.5);
-
- cogl_pop_matrix ();
-
- cogl_push_matrix ();
- cogl_translate (tex_width * 3 / 2 + 60, 0, 0);
- cogl_rotate (priv->frame, 0, 1, 0);
- cogl_translate (-tex_width / 2 - 10, 0, 0);
-
- /* Draw the texture split into two triangles */
- test_coglbox_triangle_texture (tex_width, tex_height,
- 0, 0,
- 0, 0,
- 0, 1,
- 1, 1);
- test_coglbox_triangle_texture (tex_width, tex_height,
- 20, 0,
- 0, 0,
- 1, 0,
- 1, 1);
-
- cogl_pop_matrix ();
-
- cogl_handle_unref (material);
-}
-
-static void
-test_coglbox_finalize (GObject *object)
-{
- G_OBJECT_CLASS (test_coglbox_parent_class)->finalize (object);
-}
-
-static void
-test_coglbox_dispose (GObject *object)
-{
- TestCoglboxPrivate *priv;
-
- priv = TEST_COGLBOX_GET_PRIVATE (object);
- cogl_handle_unref (priv->not_sliced_tex);
- cogl_handle_unref (priv->sliced_tex);
-
- G_OBJECT_CLASS (test_coglbox_parent_class)->dispose (object);
-}
-
-static void
-test_coglbox_init (TestCoglbox *self)
-{
- TestCoglboxPrivate *priv;
- GError *error = NULL;
- gchar *file;
-
- self->priv = priv = TEST_COGLBOX_GET_PRIVATE (self);
-
- priv->use_linear_filtering = FALSE;
- priv->use_sliced = FALSE;
-
- file = g_build_filename (TESTS_DATADIR, "redhand.png", NULL);
- priv->sliced_tex =
- cogl_texture_new_from_file (file,
- COGL_TEXTURE_NONE,
- COGL_PIXEL_FORMAT_ANY,
- &error);
- if (priv->sliced_tex == COGL_INVALID_HANDLE)
- {
- if (error)
- {
- g_warning ("Texture loading failed: %s", error->message);
- g_error_free (error);
- error = NULL;
- }
- else
- g_warning ("Texture loading failed: <unknown>");
- }
-
- priv->not_sliced_tex =
- cogl_texture_new_from_file (file,
- COGL_TEXTURE_NO_SLICING,
- COGL_PIXEL_FORMAT_ANY,
- &error);
- if (priv->not_sliced_tex == COGL_INVALID_HANDLE)
- {
- if (error)
- {
- g_warning ("Texture loading failed: %s", error->message);
- g_error_free (error);
- }
- else
- g_warning ("Texture loading failed: <unknown>");
- }
-
- g_free (file);
-}
-
-static void
-test_coglbox_class_init (TestCoglboxClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
-
- gobject_class->finalize = test_coglbox_finalize;
- gobject_class->dispose = test_coglbox_dispose;
- actor_class->paint = test_coglbox_paint;
-}
-
-static ClutterActor*
-test_coglbox_new (void)
-{
- return g_object_new (TEST_TYPE_COGLBOX, NULL);
-}
-
-static void
-frame_cb (ClutterTimeline *timeline,
- gint elapsed_msecs,
- gpointer data)
-{
- TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (data);
- gdouble progress = clutter_timeline_get_progress (timeline);
-
- priv->frame = 360.0 * progress;
- clutter_actor_queue_redraw (CLUTTER_ACTOR (data));
-}
-
-static void
-update_toggle_text (ClutterText *button, gboolean val)
-{
- clutter_text_set_text (button, val ? "Enabled" : "Disabled");
-}
-
-static gboolean
-on_toggle_click (ClutterActor *button, ClutterEvent *event,
- gboolean *toggle_val)
-{
- update_toggle_text (CLUTTER_TEXT (button), *toggle_val = !*toggle_val);
-
- return TRUE;
-}
-
-static ClutterActor *
-make_toggle (const char *label_text, gboolean *toggle_val)
-{
- ClutterActor *group = clutter_group_new ();
- ClutterActor *label = clutter_text_new_with_text ("Sans 14", label_text);
- ClutterActor *button = clutter_text_new_with_text ("Sans 14", "");
-
- clutter_actor_set_reactive (button, TRUE);
-
- update_toggle_text (CLUTTER_TEXT (button), *toggle_val);
-
- clutter_actor_set_position (button, clutter_actor_get_width (label) + 10, 0);
- clutter_container_add (CLUTTER_CONTAINER (group), label, button, NULL);
-
- g_signal_connect (button, "button-press-event", G_CALLBACK (on_toggle_click),
- toggle_val);
-
- return group;
-}
-
-G_MODULE_EXPORT int
-test_cogl_tex_polygon_main (int argc, char *argv[])
-{
- ClutterActor *stage;
- ClutterActor *coglbox;
- ClutterActor *filtering_toggle;
- ClutterActor *slicing_toggle;
- ClutterActor *note;
- ClutterTimeline *timeline;
- ClutterColor blue = { 0x30, 0x30, 0xff, 0xff };
-
- if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
- return 1;
-
- /* Stage */
- stage = clutter_stage_new ();
- clutter_stage_set_color (CLUTTER_STAGE (stage), &blue);
- clutter_actor_set_size (stage, 640, 480);
- clutter_stage_set_title (CLUTTER_STAGE (stage), "Cogl Texture Polygon");
- g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
-
- /* Cogl Box */
- coglbox = test_coglbox_new ();
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), coglbox);
-
- /* Timeline for animation */
- timeline = clutter_timeline_new (6000);
- clutter_timeline_set_loop (timeline, TRUE);
- g_signal_connect (timeline, "new-frame", G_CALLBACK (frame_cb), coglbox);
- clutter_timeline_start (timeline);
-
- /* Labels for toggling settings */
- slicing_toggle = make_toggle ("Texture slicing: ",
- &(TEST_COGLBOX_GET_PRIVATE (coglbox)
- ->use_sliced));
- clutter_actor_set_position (slicing_toggle, 0,
- clutter_actor_get_height (stage)
- - clutter_actor_get_height (slicing_toggle));
- filtering_toggle = make_toggle ("Linear filtering: ",
- &(TEST_COGLBOX_GET_PRIVATE (coglbox)
- ->use_linear_filtering));
- clutter_actor_set_position (filtering_toggle, 0,
- clutter_actor_get_y (slicing_toggle)
- - clutter_actor_get_height (filtering_toggle));
- note = clutter_text_new_with_text ("Sans 10", "<- Click to change");
- clutter_actor_set_position (note,
- clutter_actor_get_width (filtering_toggle) + 10,
- (clutter_actor_get_height (stage)
- + clutter_actor_get_y (filtering_toggle)) / 2
- - clutter_actor_get_height (note) / 2);
-
- clutter_container_add (CLUTTER_CONTAINER (stage),
- slicing_toggle,
- filtering_toggle,
- note,
- NULL);
-
- clutter_actor_show (stage);
-
- clutter_main ();
-
- return 0;
-}
-
-G_MODULE_EXPORT const char *
-test_cogl_tex_polygon_describe (void)
-{
- return "Texture polygon primitive.";
-}