changeset 2075:ccd29555c02b

expose/draw method moved to renderer-tiles
author Vladimir Nadvornik <nadvornik@suse.cz>
date Sun, 12 Aug 2012 00:47:24 +0200
parents b56062760fc2
children d02a0c9bfee3
files src/pixbuf-renderer.c src/pixbuf-renderer.h src/renderer-clutter.c src/renderer-tiles.c
diffstat 4 files changed, 74 insertions(+), 97 deletions(-) [+]
line wrap: on
line diff
--- a/src/pixbuf-renderer.c	Sat Aug 11 23:46:42 2012 +0200
+++ b/src/pixbuf-renderer.c	Sun Aug 12 00:47:24 2012 +0200
@@ -122,12 +122,6 @@
 					 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_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 @@
 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 @@
 
 	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 @@
 		}
 }
 
-#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 @@
 	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
--- a/src/pixbuf-renderer.h	Sat Aug 11 23:46:42 2012 +0200
+++ b/src/pixbuf-renderer.h	Sun Aug 12 00:47:24 2012 +0200
@@ -72,8 +72,8 @@
 
 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 */
--- a/src/renderer-clutter.c	Sat Aug 11 23:46:42 2012 +0200
+++ b/src/renderer-clutter.c	Sun Aug 12 00:47:24 2012 +0200
@@ -263,13 +263,6 @@
 
 }
 
-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 @@
 	
 	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;
--- a/src/renderer-tiles.c	Sat Aug 11 23:46:42 2012 +0200
+++ b/src/renderer-tiles.c	Sun Aug 12 00:47:24 2012 +0200
@@ -157,8 +157,6 @@
 
 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 @@
 	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 @@
 		{
 		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 @@
         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 @@
 	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;
 }