rotate at a reasonable rate
This commit is contained in:
@@ -17,6 +17,9 @@
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/keysym.h>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user