From 266814d3a437d1900bc7399268d44811a9daa608 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Sun, 12 Aug 2012 00:47:24 +0200 Subject: [PATCH] expose/draw method moved to renderer-tiles --- src/pixbuf-renderer.c | 82 ------------------------------------------ src/pixbuf-renderer.h | 4 +-- src/renderer-clutter.c | 8 ----- src/renderer-tiles.c | 77 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 74 insertions(+), 97 deletions(-) diff --git a/src/pixbuf-renderer.c b/src/pixbuf-renderer.c index c07b2780..7089bb1c 100644 --- a/src/pixbuf-renderer.c +++ b/src/pixbuf-renderer.c @@ -122,12 +122,6 @@ static void pixbuf_renderer_set_property(GObject *object, guint prop_id, 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); @@ -138,7 +132,6 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom, 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); @@ -178,7 +171,6 @@ GType pixbuf_renderer_get_type(void) 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); @@ -187,12 +179,6 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *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", @@ -587,61 +573,6 @@ static void pixbuf_renderer_get_property(GObject *object, guint prop_id, } } -#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 /* *------------------------------------------------------------------- @@ -1946,19 +1877,6 @@ static void pr_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer da 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 diff --git a/src/pixbuf-renderer.h b/src/pixbuf-renderer.h index f0609026..6890251e 100644 --- a/src/pixbuf-renderer.h +++ b/src/pixbuf-renderer.h @@ -72,8 +72,8 @@ typedef enum { 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 */ diff --git a/src/renderer-clutter.c b/src/renderer-clutter.c index 52259fb4..ce889ca0 100644 --- a/src/renderer-clutter.c +++ b/src/renderer-clutter.c @@ -263,13 +263,6 @@ static void renderer_area_changed(void *renderer, gint src_x, gint src_y, gint s } -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; @@ -421,7 +414,6 @@ RendererFuncs *renderer_clutter_new(PixbufRenderer *pr) 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; diff --git a/src/renderer-tiles.c b/src/renderer-tiles.c index 16c313be..64c96e29 100644 --- a/src/renderer-tiles.c +++ b/src/renderer-tiles.c @@ -157,8 +157,6 @@ static void rt_queue(RendererTiles *rt, gint x, gint y, gint w, gint h, 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)) || \ @@ -2031,10 +2029,9 @@ 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_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; @@ -2067,6 +2064,7 @@ static void renderer_update_zoom(void *renderer, gboolean lazy) { 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) @@ -2137,13 +2135,75 @@ static void renderer_free(void *renderer) 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; @@ -2177,6 +2237,13 @@ RendererFuncs *renderer_tiles_new(PixbufRenderer *pr) 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; } -- 2.20.1