} 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;
// 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(
{
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)
rt_tile_prepare(rt, it);
has_alpha = (pr->pixbuf && gdk_pixbuf_get_has_alpha(pr->pixbuf));
- /* FIXME checker colors for alpha should be configurable,
+ /** @FIXME checker colors for alpha should be configurable,
* also should be drawn for blank = TRUE
*/
{
gint x1, y1;
gint x2, y2;
- GtkWidget *box;
- GdkWindow *window;
cairo_t *cr;
cairo_surface_t *surface;
cr = cairo_create(rt->surface);
surface = rt->surface;
#else
+ GtkWidget *box;
+ GdkWindow *window;
+
box = GTK_WIDGET(pr);
window = gtk_widget_get_window(box);
}
if (h > 0)
{
- /* FIXME, to optimize this, remove overlap */
+ /** @FIXME to optimize this, remove overlap */
rt_queue(rt,
rt->x_scroll, y_off > 0 ? rt->y_scroll + (pr->vis_height - h) : rt->y_scroll,
pr->vis_width, h, TRUE, TILE_RENDER_ALL, FALSE, FALSE);
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);
}
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)
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;