From: Thadeu Lima de Souza Cascardo Date: Sat, 16 Aug 2008 15:28:17 +0000 (-0300) Subject: Only reschedules when moving and only draws the needed portion of window X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fmovie.git;a=commitdiff_plain;h=2e871a550c7f98af3cb0331c8edc82ddca215b40 Only reschedules when moving and only draws the needed portion of window --- diff --git a/gdk.c b/gdk.c index 780e2ba..a6b6113 100644 --- a/gdk.c +++ b/gdk.c @@ -50,7 +50,9 @@ expose (GtkWidget *widget, GdkEventExpose *event, gpointer data) 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); @@ -58,18 +60,23 @@ expose (GtkWidget *widget, GdkEventExpose *event, gpointer data) 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;