expose/draw method moved to renderer-tiles
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 11 Aug 2012 22:47:24 +0000 (00:47 +0200)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 18 Aug 2012 17:17:13 +0000 (19:17 +0200)
src/pixbuf-renderer.c
src/pixbuf-renderer.h
src/renderer-clutter.c
src/renderer-tiles.c

index c07b278..7089bb1 100644 (file)
@@ -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
index f060902..6890251 100644 (file)
@@ -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 */
index 52259fb..ce889ca 100644 (file)
@@ -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;
index 16c313b..64c96e2 100644 (file)
@@ -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;
 }