changeset 1840:e4bd0c06294d

fixed redrawing on expose event
author Vladimir Nadvornik <nadvornik@suse.cz>
date Fri, 25 Mar 2011 23:14:01 +0100
parents 27281fba586d
children c8128aed97f2
files src/pixbuf-renderer.c src/pixbuf-renderer.h src/renderer-tiles.c
diffstat 3 files changed, 20 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/pixbuf-renderer.c	Fri Mar 25 22:09:59 2011 +0100
+++ b/src/pixbuf-renderer.c	Fri Mar 25 23:14:01 2011 +0100
@@ -969,10 +969,10 @@
 static void pr_redraw(PixbufRenderer *pr, gboolean new_data)
 {
 	pr->renderer->queue_clear(pr->renderer);
-	pr->renderer->queue(pr->renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
+	pr->renderer->redraw(pr->renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
 	if (pr->renderer2) {
 		pr->renderer2->queue_clear(pr->renderer2);
-		pr->renderer2->queue(pr->renderer2, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
+		pr->renderer2->redraw(pr->renderer2, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
 	}
 }
 
@@ -1958,23 +1958,11 @@
 {
 	gint x, y;
 
-
-	x = MAX(0, (gint)area->x - pr->x_offset + pr->x_scroll);
-	y = MAX(0, (gint)area->y - pr->y_offset + pr->y_scroll);
-
-	pr->renderer->border_draw(pr->renderer, area->x, area->y, area->width, area->height);
-	pr->renderer->queue(pr->renderer,
-			      x, y,
-			      MIN((gint)area->width, pr->width - x),
-			      MIN((gint)area->height, pr->height - y),
+	pr->renderer->redraw(pr->renderer, area->x, area->y, area->width, area->height,
 			      FALSE, TILE_RENDER_ALL, FALSE, FALSE);
 	if (pr->renderer2) 
 		{
-		pr->renderer2->border_draw(pr->renderer2, area->x, area->y, area->width, area->height);
-		pr->renderer2->queue(pr->renderer2,
-			      x, y,
-			      MIN((gint)area->width, pr->width - x),
-			      MIN((gint)area->height, pr->height - y),
+		pr->renderer2->redraw(pr->renderer2, area->x, area->y, area->width, area->height,
 			      FALSE, TILE_RENDER_ALL, FALSE, FALSE);
 		}
 }
--- a/src/pixbuf-renderer.h	Fri Mar 25 22:09:59 2011 +0100
+++ b/src/pixbuf-renderer.h	Fri Mar 25 23:14:01 2011 +0100
@@ -76,7 +76,7 @@
 
 struct _RendererFuncs
 {
-	void (*queue)(void *renderer, gint x, gint y, gint w, gint h,
+	void (*redraw)(void *renderer, gint x, gint y, gint w, gint h,
                      gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
         void (*area_changed)(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h);
 	void (*queue_clear)(void *renderer);
--- a/src/renderer-tiles.c	Fri Mar 25 22:09:59 2011 +0100
+++ b/src/renderer-tiles.c	Fri Mar 25 23:14:01 2011 +0100
@@ -2018,16 +2018,25 @@
 	rt_queue(rt, x1, y1, x2 - x1, y2 - y1, FALSE, TILE_RENDER_AREA, TRUE, TRUE);
 }
 
-static void renderer_queue(void *renderer, gint x, gint y, gint w, gint h,
+static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
                      gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing)
 {
 	RendererTiles *rt = (RendererTiles *)renderer;
 	PixbufRenderer *pr = rt->pr;
 
-	if (rt->stereo_mode & PR_STEREO_MIRROR) x = pr->width - w - x;
-	if (rt->stereo_mode & PR_STEREO_FLIP) y = pr->height - h - y; 
+	x -= rt->stereo_off_x;
+	y -= rt->stereo_off_y;
+	
+	rt_border_draw(rt, x, y, w, h);
 
-	rt_queue((RendererTiles *)renderer, x, y, w, h, clamp, render, new_data, only_existing);
+	x = MAX(0, x - pr->x_offset + pr->x_scroll);
+	y = MAX(0, y - pr->y_offset + pr->y_scroll);
+
+	rt_queue(rt,
+		 x, y,
+		 MIN(w, pr->width - x),
+		 MIN(h, pr->height - y),
+		 clamp, render, new_data, only_existing);
 }
 
 static void renderer_queue_clear(void *renderer)
@@ -2037,6 +2046,7 @@
 
 static void renderer_border_draw(void *renderer, gint x, gint y, gint w, gint h)
 {
+	RendererTiles *rt = (RendererTiles *)renderer;
 	rt_border_draw((RendererTiles *)renderer, x, y, w, h);
 }
 
@@ -2119,7 +2129,7 @@
 	
 	rt->pr = pr;
 	
-	rt->f.queue = renderer_queue;
+	rt->f.redraw = renderer_redraw;
 	rt->f.area_changed = renderer_area_changed;
 	rt->f.queue_clear = renderer_queue_clear;
 	rt->f.border_draw = renderer_border_draw;