From 0dfc1dd284ea698ed6d3d814d12a5e5b7bff7095 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Fri, 12 Jun 2009 11:05:26 +0100 Subject: [PATCH] [test-cogl-tex-tile] Fix breakages from ClutterFixed removal and timelines The test has been broken since the change to use floats instead of fixed point because it was passing degrees to sin and cos but they expect radians. It was further broken since the timeline changes because it was directly using the parameter of the new-frame signal as a frame number but it now represents the elapsed time. --- tests/interactive/test-cogl-tex-tile.c | 31 ++++++++++++-------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/tests/interactive/test-cogl-tex-tile.c b/tests/interactive/test-cogl-tex-tile.c index 05eb52c75..9316443ca 100644 --- a/tests/interactive/test-cogl-tex-tile.c +++ b/tests/interactive/test-cogl-tex-tile.c @@ -71,7 +71,7 @@ G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR); struct _TestCoglboxPrivate { CoglHandle cogl_tex_id; - gint frame; + gdouble animation_progress; }; /* Coglbox implementation @@ -82,26 +82,23 @@ test_coglbox_paint (ClutterActor *self) { TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (self); gfloat texcoords[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; - gfloat sin_frame, cos_frame; - gfloat frac_frame; - gint pingpong_frame; + gfloat angle; + gfloat frac; gint t; - sin_frame = sinf ((float) priv->frame); - cos_frame = cosf ((float) priv->frame); + angle = priv->animation_progress * 2 * G_PI; - pingpong_frame = (priv->frame <= 180 ? priv->frame : 360 - priv->frame); - frac_frame = (float) pingpong_frame / 180.0; - frac_frame += 0.5; - frac_frame *= 2; + frac = ((priv->animation_progress <= 0.5f + ? priv->animation_progress + : 1.0f - priv->animation_progress) + 0.5f) * 2.0f; for (t=0; t<4; t+=2) { - texcoords[t] += cos_frame; - texcoords[t+1] += sin_frame; + texcoords[t] += cos (angle); + texcoords[t+1] += sin (angle); - texcoords[t] = (texcoords[t] * frac_frame); - texcoords[t+1] = (texcoords[t+1] * frac_frame); + texcoords[t] *= frac; + texcoords[t+1] *= frac; } priv = TEST_COGLBOX_GET_PRIVATE (self); @@ -170,12 +167,12 @@ test_coglbox_new (void) static void frame_cb (ClutterTimeline *timeline, - gint frame_num, + gint msecs, gpointer data) { TestCoglboxPrivate *priv = TEST_COGLBOX_GET_PRIVATE (data); - priv->frame = frame_num; + priv->animation_progress = clutter_timeline_get_progress (timeline); clutter_actor_queue_redraw (CLUTTER_ACTOR (data)); } @@ -198,7 +195,7 @@ test_cogl_tex_tile_main (int argc, char *argv[]) clutter_container_add_actor (CLUTTER_CONTAINER (stage), coglbox); /* Timeline for animation */ - timeline = clutter_timeline_new (6000); /* num frames, fps */ + timeline = clutter_timeline_new (6000); /* 6 second duration */ clutter_timeline_set_loop (timeline, TRUE); g_signal_connect (timeline, "new-frame", G_CALLBACK (frame_cb), coglbox); clutter_timeline_start (timeline);