From 75e8d26e33f0a990a79a48f0a382b26fe0da63f8 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 28 Aug 2007 22:29:28 -0400 Subject: [PATCH] Fix angular speed of the arrow to follow the points --- xoboot.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/xoboot.c b/xoboot.c index 91a6d1c..1feb5dc 100644 --- a/xoboot.c +++ b/xoboot.c @@ -144,6 +144,8 @@ draw_head (cairo_t *cr, double extra) static void draw_body (cairo_t *cr, double extra, double spin_transition) { + double angle, x, y; + cairo_save (cr); cairo_move_to (cr, @@ -153,7 +155,13 @@ draw_body (cairo_t *cr, double extra, double spin_transition) cairo_rel_line_to (cr, XO_BODY_DELTA, XO_BODY_DELTA); cairo_translate (cr, XO_HEAD_CENTER_X, XO_HEAD_CENTER_Y); - cairo_rotate (cr, 2 * M_PI * spin_transition); + + angle = 2 * M_PI * spin_transition; + y = cos (angle) * XO_DOTS_POSITION_RADIUS; + x = sin (angle) * XO_DOTS_POSITION_RADIUS; + angle = atan2 (x, y + XO_BODY_CENTER_Y - XO_HEAD_CENTER_Y); + + cairo_rotate (cr, angle); cairo_translate (cr, -XO_HEAD_CENTER_X, -XO_HEAD_CENTER_Y); cairo_move_to (cr, @@ -181,7 +189,7 @@ draw_dots (cairo_t *cr, double num_dots) cairo_translate (cr, XO_DOTS_CENTER_X, XO_DOTS_CENTER_Y); cairo_rotate (cr, - 1.5 * M_PI); - for (i = 0; i < num_dots; i++) { + for (i = 0; i <= num_dots; i++) { if (i != 0) { cairo_arc (cr, XO_DOTS_POSITION_RADIUS, 0, @@ -267,7 +275,7 @@ xoboot_expose_event (GtkWidget *widget, goto DONE; if (anim_stage < ANIM_FADE) { - draw_dots (cr, (XO_DOTS_NUM_DOTS + 1) * spin_transition); + draw_dots (cr, (XO_DOTS_NUM_DOTS) * spin_transition); } else { draw_ring (cr); } -- 2.43.0