Fix #926: Use system background color in window mode
[geeqie.git] / src / renderer-tiles.c
index a8f0a7d..5ebf0d5 100644 (file)
@@ -58,10 +58,6 @@ typedef enum {
 } ExifOrientationType;
 #endif
 
-
-/* size to use when breaking up image pane for rendering */
-#define PR_TILE_SIZE 128
-
 typedef struct _ImageTile ImageTile;
 typedef struct _QueueData QueueData;
 
@@ -501,7 +497,7 @@ static gint pixmap_calc_size(cairo_surface_t *surface)
 
 //     d = gdk_drawable_get_depth(pixmap);
 //     gdk_drawable_get_size(pixmap, &w, &h);
-       return PR_TILE_SIZE * PR_TILE_SIZE * 4 / 8;
+       return options->image.tile_size * options->image.tile_size * 4 / 8;
 }
 
 static void rt_hidpi_aware_draw(
@@ -866,6 +862,8 @@ void renderer_tiles_overlay_set(void *renderer, gint id, GdkPixbuf *pixbuf, gint
                {
                rt_overlay_free(rc, od);
                }
+
+       gtk_widget_queue_draw(GTK_WIDGET(rc->pr));
 }
 #else
 void renderer_tiles_overlay_set(void *renderer, gint id, GdkPixbuf *pixbuf, gint x, gint y)
@@ -2024,8 +2022,6 @@ static void rt_scroll(void *renderer, gint x_off, gint y_off)
                {
                gint x1, y1;
                gint x2, y2;
-               GtkWidget *box;
-               GdkWindow *window;
                cairo_t *cr;
                cairo_surface_t *surface;
 
@@ -2055,6 +2051,9 @@ static void rt_scroll(void *renderer, gint x_off, gint y_off)
                cr = cairo_create(rt->surface);
                surface = rt->surface;
 #else
+               GtkWidget *box;
+               GdkWindow *window;
+
                box = GTK_WIDGET(pr);
                window = gtk_widget_get_window(box);
 
@@ -2236,7 +2235,7 @@ static gboolean rt_realize_cb(GtkWidget *widget, gpointer data)
                rt->surface = gdk_window_create_similar_surface(gtk_widget_get_window(widget), CAIRO_CONTENT_COLOR, gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget));
 
                cr = cairo_create(rt->surface);
-               cairo_set_source_rgb(cr, (gdouble)options->image.border_color.red  /65535, (gdouble)options->image.border_color.green / 65535, (gdouble)options->image.border_color.blue / 65535);
+               cairo_set_source_rgb(cr, (gdouble)rt->pr->color.red / 65535, (gdouble)rt->pr->color.green / 65535, (gdouble)rt->pr->color.blue / 65535);
                cairo_paint(cr);
                cairo_destroy(cr);
                }
@@ -2276,8 +2275,35 @@ static gboolean rt_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
        GList *work;
        OverlayData *od;
 
-       cairo_set_source_surface (cr, rt->surface, 0, 0);
-       cairo_paint(cr);
+       if (rt->stereo_mode & (PR_STEREO_HORIZ | PR_STEREO_VERT))
+               {
+               cairo_push_group(cr);
+               cairo_set_source_rgb(cr, (double)rt->pr->color.red / 65535, (double)rt->pr->color.green / 65535, (double)rt->pr->color.blue / 65535);
+
+               if (rt->stereo_mode & PR_STEREO_HORIZ)
+                       {
+                       cairo_rectangle(cr, rt->stereo_off_x, 0, rt->pr->viewport_width, rt->pr->viewport_height);
+                       }
+               else
+                       {
+                       cairo_rectangle(cr, 0, rt->stereo_off_y, rt->pr->viewport_width, rt->pr->viewport_height);
+                       }
+               cairo_clip(cr);
+               cairo_paint(cr);
+
+               cairo_rectangle(cr, rt->pr->x_offset + rt->stereo_off_x, rt->pr->y_offset + rt->stereo_off_y, rt->pr->vis_width, rt->pr->vis_height);
+               cairo_clip(cr);
+               cairo_set_source_surface(cr, rt->surface, 0, 0);
+               cairo_paint(cr);
+
+               cairo_pop_group_to_source(cr);
+               cairo_paint(cr);
+               }
+       else
+               {
+               cairo_set_source_surface(cr, rt->surface, 0, 0);
+               cairo_paint(cr);
+               }
 
        work = rt->overlay_list;
        while (work)
@@ -2358,8 +2384,8 @@ RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
 
        rt->f.stereo_set = renderer_stereo_set;
 
-       rt->tile_width = PR_TILE_SIZE;
-       rt->tile_height = PR_TILE_SIZE;
+       rt->tile_width = options->image.tile_size;
+       rt->tile_height = options->image.tile_size;
 
        rt->tiles = NULL;
        rt->tile_cache_size = 0;