fixed redrawing on expose event
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 25 Mar 2011 22:14:01 +0000 (23:14 +0100)
committerVladimir Nadvornik <nadvornik@suse.cz>
Tue, 27 Sep 2011 12:30:08 +0000 (14:30 +0200)
src/pixbuf-renderer.c
src/pixbuf-renderer.h
src/renderer-tiles.c

index 57203c5..6456866 100644 (file)
@@ -969,10 +969,10 @@ void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkColor *color)
 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 @@ static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area)
 {
        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);
                }
 }
index 47d42ad..bec6a4b 100644 (file)
@@ -76,7 +76,7 @@ typedef enum {
 
 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);
index aaab43c..9f5cb09 100644 (file)
@@ -2018,16 +2018,25 @@ static void renderer_area_changed(void *renderer, gint src_x, gint src_y, gint s
        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_queue_clear(void *renderer)
 
 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 @@ RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
        
        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;