const GValue *value, GParamSpec *pspec);
static void pixbuf_renderer_get_property(GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec);
-#if GTK_CHECK_VERSION(3,0,0)
-static gboolean pixbuf_renderer_draw(GtkWidget *widget, cairo_t *cr);
-#else
-static gboolean pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event);
-#endif
-
static void pr_scroller_timer_set(PixbufRenderer *pr, gboolean start);
static void pr_signals_connect(PixbufRenderer *pr);
static void pr_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data);
-static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area);
static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable);
static void pixbuf_renderer_class_init(PixbufRendererClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(class);
parent_class = g_type_class_peek_parent(class);
gobject_class->finalize = pixbuf_renderer_finalize;
-#if GTK_CHECK_VERSION(3,0,0)
- widget_class->draw = pixbuf_renderer_draw;
-#else
- widget_class->expose_event = pixbuf_renderer_expose;
-#endif
-
g_object_class_install_property(gobject_class,
PROP_ZOOM_MIN,
g_param_spec_double("zoom_min",
}
}
-#if GTK_CHECK_VERSION(3,0,0)
-
-static gboolean pixbuf_renderer_draw(GtkWidget *widget, cairo_t *cr)
-{
- if (gtk_widget_is_drawable(widget))
- {
- if (gtk_widget_get_has_window(widget))
- {
- GdkRectangle area;
- if (gdk_cairo_get_clip_rectangle(cr, &area))
- {
- pixbuf_renderer_paint(PIXBUF_RENDERER(widget), &area);
- }
- }
- }
-
- return FALSE;
-}
-
-#else
-static gboolean pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event)
-{
-#if GTK_CHECK_VERSION(2,20,0)
- if (gtk_widget_is_drawable(widget))
-#else
- if (GTK_WIDGET_DRAWABLE(widget))
-#endif
- {
-#if GTK_CHECK_VERSION(2,20,0)
- if (gtk_widget_get_has_window(widget))
-#else
- if (!GTK_WIDGET_NO_WINDOW(widget))
-#endif
- {
- if (event->window != gtk_widget_get_window(widget))
- {
- GdkRectangle area;
-
- gdk_window_get_position(event->window, &area.x, &area.y);
- area.x += event->area.x;
- area.y += event->area.y;
- area.width = event->area.width;
- area.height = event->area.height;
- pixbuf_renderer_paint(PIXBUF_RENDERER(widget), &area);
- }
- else
- {
- pixbuf_renderer_paint(PIXBUF_RENDERER(widget), &event->area);
- }
- }
- }
-
- return FALSE;
-}
-#endif
/*
*-------------------------------------------------------------------
pr_size_sync(pr, allocation->width, allocation->height);
}
-static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area)
-{
- gint x, 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->redraw(pr->renderer2, area->x, area->y, area->width, area->height,
- FALSE, TILE_RENDER_ALL, FALSE, FALSE);
- }
-}
-
/*
*-------------------------------------------------------------------
* scrolling
struct _RendererFuncs
{
- void (*redraw)(void *renderer, gint x, gint y, gint w, gint h,
- gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
+// 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); /* pixbuf area changed */
void (*invalidate_region)(void *renderer, gint x, gint y, gint w, gint h);
void (*scroll)(void *renderer, gint x_off, gint y_off); /* scroll */
}
-static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
- gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing)
-{
- RendererClutter *rc = (RendererClutter *)renderer;
- PixbufRenderer *pr = rc->pr;
-}
-
static void renderer_update_pixbuf(void *renderer, gboolean lazy)
{
RendererClutter *rc = (RendererClutter *)renderer;
rc->pr = pr;
- rc->f.redraw = renderer_redraw;
rc->f.area_changed = renderer_area_changed;
rc->f.update_pixbuf = renderer_update_pixbuf;
rc->f.free = renderer_free;
static void rt_hierarchy_changed_cb(GtkWidget *widget, GtkWidget *previous_toplevel, gpointer data);
static gint rt_queue_draw_idle_cb(gpointer data);
-static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
- gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
#define GET_RIGHT_PIXBUF_OFFSET(rt) \
(( (rt->stereo_mode & PR_STEREO_RIGHT) && !(rt->stereo_mode & PR_STEREO_SWAP)) || \
rt_queue(rt, x1, y1, x2 - x1, y2 - y1, FALSE, TILE_RENDER_AREA, TRUE, TRUE);
}
-static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
+static void renderer_redraw(RendererTiles *rt, 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;
x -= rt->stereo_off_x;
{
renderer_redraw(renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, TRUE, FALSE);
}
+ rt_border_clear(rt);
}
static void renderer_invalidate_region(void *renderer, gint x, gint y, gint w, gint h)
g_free(rt);
}
+#if GTK_CHECK_VERSION(3,0,0)
+
+static gboolean rt_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
+{
+ RendererTiles *rt = (RendererTiles *)data;
+ if (gtk_widget_is_drawable(widget))
+ {
+ if (gtk_widget_get_has_window(widget))
+ {
+ GdkRectangle area;
+ if (gdk_cairo_get_clip_rectangle(cr, &area))
+ {
+ renderer_redraw(rt, area.x, area.y, area.width, area.height,
+ FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+#else
+static gboolean rt_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+ RendererTiles *rt = (RendererTiles *)data;
+#if GTK_CHECK_VERSION(2,20,0)
+ if (gtk_widget_is_drawable(widget))
+#else
+ if (GTK_WIDGET_DRAWABLE(widget))
+#endif
+ {
+#if GTK_CHECK_VERSION(2,20,0)
+ if (gtk_widget_get_has_window(widget))
+#else
+ if (!GTK_WIDGET_NO_WINDOW(widget))
+#endif
+ {
+ if (event->window != gtk_widget_get_window(widget))
+ {
+ GdkRectangle area;
+
+ gdk_window_get_position(event->window, &area.x, &area.y);
+ area.x += event->area.x;
+ area.y += event->area.y;
+ area.width = event->area.width;
+ area.height = event->area.height;
+ renderer_redraw(rt, area.x, area.y, area.width, area.height,
+ FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+
+ }
+ else
+ {
+ renderer_redraw(rt, event->area.x, event->area.y, event->area.width, event->area.height,
+ FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+ }
+ }
+ }
+
+ return FALSE;
+}
+#endif
+
+
RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
{
RendererTiles *rt = g_new0(RendererTiles, 1);
rt->pr = pr;
- rt->f.redraw = renderer_redraw;
rt->f.area_changed = renderer_area_changed;
rt->f.update_pixbuf = renderer_update_pixbuf;
rt->f.free = renderer_free;
g_signal_connect(G_OBJECT(pr), "hierarchy-changed",
G_CALLBACK(rt_hierarchy_changed_cb), rt);
+#if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(pr), "draw",
+ G_CALLBACK(rt_draw_cb), rt);
+#else
+ g_signal_connect(G_OBJECT(pr), "expose_event",
+ G_CALLBACK(rt_expose_cb), NULL);
+#endif
return (RendererFuncs *) rt;
}