From 1b058a06c2e17e44930ed99a32f46f8e5c484fba Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sun, 9 Jan 2005 16:48:52 +0000 Subject: rotate at a reasonable rate --- progs/xdemos/shape.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) (limited to 'progs') diff --git a/progs/xdemos/shape.c b/progs/xdemos/shape.c index 9cae9eb289..dbbc0b4ff7 100644 --- a/progs/xdemos/shape.c +++ b/progs/xdemos/shape.c @@ -17,6 +17,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -37,6 +40,21 @@ static int MinSides = 3; static int MaxSides = 20; +/* return current time (in seconds) */ +static double +current_time(void) +{ + struct timeval tv; +#ifdef __VMS + (void) gettimeofday(&tv, NULL ); +#else + struct timezone tz; + (void) gettimeofday(&tv, &tz); +#endif + return (double) tv.tv_sec + tv.tv_usec / 1000000.0; +} + + /* * Draw the OpenGL stuff and do a SwapBuffers. */ @@ -139,17 +157,6 @@ static void display(Display *dpy, Window win) } -/* - * Called when no events are pending. - */ -static void idle(void) -{ - Xangle += 2.0; - Yangle += 3.3; - Redraw = 1; -} - - /* * This is called when we have to recompute the window shape bitmask. * We just generate an n-sided regular polygon here but any other shape @@ -262,11 +269,15 @@ static void event_loop(Display *dpy, Window win) } } else { - idle(); - if (Redraw) { - display(dpy, win); - Redraw = 0; - } + static double t0 = -1.0; + double dt, t = current_time(); + if (t0 < 0.0) + t0 = t; + dt = t - t0; + Xangle += 90.0 * dt; /* 90 degrees per second */ + Yangle += 70.0 * dt; + t0 = t; + display(dpy, win); } } } -- cgit v1.2.3