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,
+ -point.x + w/2 - event->area.x,
+ -point.y + h/2 - event->area.y,
point.rx, point.ry, GDK_INTERP_HYPER);
- gdk_draw_pixbuf (widget->window, NULL, screen, 0, 0, 0, 0, -1, -1,
+ 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;