GdkPixbuf *screen;
struct ctx *ctx;
Point point;
+ int w, h;
ctx = (struct ctx *) data;
+ gdk_drawable_get_size (GDK_DRAWABLE (event->window), &w, &h);
if (ctx->move)
ctx->i = (ctx->i >= ctx->points->len) ? 0 : ctx->i + 1;
point = g_array_index (ctx->points, Point, ctx->i);
event->area.width, event->area.height);
gdk_pixbuf_scale (ctx->picture, screen, 0, 0,
event->area.width, event->area.height,
- -point.x + event->area.width/2, -point.y + event->area.height/2,
- 1.0, 1.0, GDK_INTERP_HYPER);
- gdk_draw_pixbuf (widget->window, NULL, screen, 0, 0, 0, 0, -1, -1,
+ -point.x + w/2 - event->area.x,
+ -point.y + h/2 - event->area.y,
+ point.rx, point.ry, GDK_INTERP_BILINEAR);
+ gdk_draw_pixbuf (widget->window, NULL, screen, 0, 0,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height,
GDK_RGB_DITHER_NONE, 0, 0);
gdk_pixbuf_unref (screen);
if (point.name)
{
- g_timeout_add (3000, queue, ctx);
+ if (ctx->move)
+ g_timeout_add (3000, queue, ctx);
}
else
{
- g_timeout_add (10, queue, ctx);
+ if (ctx->move)
+ g_timeout_add (10, queue, ctx);
}
ctx->move = FALSE;
return FALSE;
}
+#define FPF 40
+
int
main (int argc, char **argv)
{
else
filename = argv[1];
ctx.points = ReadPoints ("pro-gnu");
+ ctx.points = drop_dup_frames (ctx.points, FPF);
+ rescale_points (ctx.points, get_scales (FPF));
ctx.picture = gdk_pixbuf_new_from_file (filename, NULL);
ctx.i = ctx.points->len;
colorspace = gdk_pixbuf_get_colorspace (ctx.picture);