#define VBORDER 8
#define STOP_INTERVAL (5*1000)
-#define FPS (4)
+#define FPS (30)
+#define FRAME_INTERVAL (1000/(FPS))
#include <stdio.h>
#include <stdlib.h>
SDL_Surface *text;
SDL_Rect box;
SDL_Color Yellow = { 255, 255, 0, 0};
- center = GetNextPoint (), GetNextPoint (), GetNextPoint ();
+ center = GetNextPoint ();
slice = SDL_CreateRGBSurface (SDL_SWSURFACE, WIDTH/2, HEIGHT/2,
32,
0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
return scale;
}
-Uint32
-ShowNext (Uint32 interval, void *data)
-{
- SDL_UserEvent event;
- event.type = SDL_USEREVENT;
- event.code = 0;
- SDL_PushEvent ((SDL_Event *) &event);
- if (stop)
- {
- stop = 0;
- return STOP_INTERVAL;
- }
- return 1000/FPS;
-}
-
int
main (int argc, char **argv)
{
SDL_Surface *image;
SDL_Surface *slice;
SDL_Event event;
+ Uint32 now, last;
int i;
ReadPoints ("pro-gnu");
SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER);
font = TTF_OpenFont ("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", 48);
screen = SDL_SetVideoMode (WIDTH, HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
image = IMG_Load ("/home/cascardo/fotos/debconf.jpg");
- SDL_AddTimer (0, ShowNext, NULL);
- while (SDL_WaitEvent (&event))
+ last = SDL_GetTicks ();
+ while (1)
{
- if (event.type == SDL_KEYDOWN)
- break;
- else if (event.type == SDL_USEREVENT)
+ if (SDL_PollEvent (&event))
+ {
+ if (event.type == SDL_KEYDOWN)
+ break;
+ }
+ now = SDL_GetTicks ();
+ /* skip */
+ while (!stop && now > last + FRAME_INTERVAL)
+ {
+ last += FRAME_INTERVAL;
+ GetNextPoint ();
+ }
+ slice = GetNextImage (image);
+ ShowPoint (screen, slice);
+ SDL_FreeSurface (slice);
+ if (stop)
+ {
+ stop = 0;
+ SDL_Delay (STOP_INTERVAL);
+ last = SDL_GetTicks ();
+ }
+ else
{
- slice = GetNextImage (image);
- ShowPoint (screen, slice);
- SDL_FreeSurface (slice);
+ SDL_Delay (FRAME_INTERVAL - (now - last));
}
}
SDL_FreeSurface (image);