[gtk+/rendering-cleanup] API: remove gdk_draw_drawable()



commit db079919777dc5f96b7957b31a2272433b7765df
Author: Benjamin Otte <otte redhat com>
Date:   Wed Jul 21 21:02:35 2010 +0200

    API: remove gdk_draw_drawable()

 docs/reference/gdk/gdk3-sections.txt       |    1 -
 docs/reference/gdk/tmpl/drawing.sgml       |   16 ---
 docs/reference/gdk/tmpl/event_structs.sgml |    3 +-
 docs/reference/gdk/tmpl/pixmaps.sgml       |    2 +-
 gdk/directfb/gdkdrawable-directfb.c        |   57 ---------
 gdk/gdk.symbols                            |    1 -
 gdk/gdkdraw.c                              |  129 -------------------
 gdk/gdkdrawable.h                          |   32 -----
 gdk/gdkgc.c                                |    2 +-
 gdk/gdkoffscreenwindow.c                   |   25 ----
 gdk/gdkpixmap.c                            |   35 ------
 gdk/gdkwindow.c                            |  100 ---------------
 gdk/quartz/gdkdrawable-quartz.c            |   82 -------------
 gdk/win32/gdkdrawable-win32.c              |  183 ----------------------------
 gdk/x11/gdkdrawable-x11.c                  |  101 ---------------
 15 files changed, 3 insertions(+), 766 deletions(-)
---
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt
index b9f8a50..ebcad18 100644
--- a/docs/reference/gdk/gdk3-sections.txt
+++ b/docs/reference/gdk/gdk3-sections.txt
@@ -333,7 +333,6 @@ gdk_drawable_get_clip_region
 gdk_drawable_get_visible_region
 
 <SUBSECTION>
-gdk_draw_drawable
 gdk_drawable_copy_to_image
 
 <SUBSECTION Standard>
diff --git a/docs/reference/gdk/tmpl/drawing.sgml b/docs/reference/gdk/tmpl/drawing.sgml
index 30afc36..0ff833d 100644
--- a/docs/reference/gdk/tmpl/drawing.sgml
+++ b/docs/reference/gdk/tmpl/drawing.sgml
@@ -127,19 +127,3 @@ or a #GdkWindow.
 @Returns: 
 
 
-<!-- ##### FUNCTION gdk_draw_drawable ##### -->
-<para>
-
-</para>
-
- drawable: 
- gc: 
- src: 
- xsrc: 
- ysrc: 
- xdest: 
- ydest: 
- width: 
- height: 
-
-
diff --git a/docs/reference/gdk/tmpl/event_structs.sgml b/docs/reference/gdk/tmpl/event_structs.sgml
index 2ba3139..7ebfacb 100644
--- a/docs/reference/gdk/tmpl/event_structs.sgml
+++ b/docs/reference/gdk/tmpl/event_structs.sgml
@@ -382,8 +382,7 @@ union, 16-bit data uses the s array, and 32-bit data uses the l array.
 
 <!-- ##### STRUCT GdkEventNoExpose ##### -->
 <para>
-Generated when the area of a #GdkDrawable being copied, with gdk_draw_drawable()
-, was completely available.
+Generated when the area of a #GdkDrawable being copied was completely available.
 </para>
 <para>
 FIXME: add more here.
diff --git a/docs/reference/gdk/tmpl/pixmaps.sgml b/docs/reference/gdk/tmpl/pixmaps.sgml
index 8e37034..2ae55ce 100644
--- a/docs/reference/gdk/tmpl/pixmaps.sgml
+++ b/docs/reference/gdk/tmpl/pixmaps.sgml
@@ -8,7 +8,7 @@ Offscreen drawables
 <para>
 Pixmaps are offscreen drawables. They can be drawn upon with the
 standard drawing primitives, then copied to another drawable (such as
-a #GdkWindow) with gdk_draw_drawable(). The depth of a pixmap
+a #GdkWindow). The depth of a pixmap
 is the number of bits per pixels. Bitmaps are simply pixmaps
 with a depth of 1. (That is, they are monochrome bitmaps - each
 pixel can be either on or off).
diff --git a/gdk/directfb/gdkdrawable-directfb.c b/gdk/directfb/gdkdrawable-directfb.c
index 0879c5b..0a0de9e 100644
--- a/gdk/directfb/gdkdrawable-directfb.c
+++ b/gdk/directfb/gdkdrawable-directfb.c
@@ -397,62 +397,6 @@ gdk_directfb_setup_for_drawing (GdkDrawableImplDirectFB *impl,
   return TRUE;
 }
 
-static void
-gdk_directfb_draw_drawable (GdkDrawable *drawable,
-                            GdkGC       *gc,
-                            GdkDrawable *src,
-                            gint         xsrc,
-                            gint         ysrc,
-                            gint         xdest,
-                            gint         ydest,
-                            gint         width,
-                            gint         height)
-{
-  GdkDrawableImplDirectFB *impl;
-  GdkDrawableImplDirectFB *src_impl;
-  cairo_region_t                clip;
-  GdkRectangle             dest_rect = { xdest,
-                                         ydest,
-                xdest + width ,
-                ydest + height};
-
-  DFBRectangle rect = { xsrc, ysrc, width, height };
-  gint i;
-
-  D_DEBUG_AT( GDKDFB_Drawable, "%s( %p, %p, %p, %4d,%4d -> %4d,%4d - %dx%d )\n", G_STRFUNC,
-              drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height );
-
-  impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
-
-  if (!impl->surface)
-    return;
-
-  if (GDK_IS_PIXMAP (src))
-    src_impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_PIXMAP_OBJECT (src)->impl);
-  else if (GDK_IS_WINDOW (src))
-    src_impl = GDK_DRAWABLE_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (src)->impl);
-  else if (GDK_IS_DRAWABLE_IMPL_DIRECTFB (src))
-    src_impl = GDK_DRAWABLE_IMPL_DIRECTFB (src);
-  else
-    return;
-
-  gdk_directfb_clip_region (drawable, gc, &dest_rect, &clip);
-
-  impl->surface->SetBlittingFlags (impl->surface, DSBLIT_NOFX);
-
-  for (i = 0; i < clip.numRects; i++)
-    {
-      DFBRegion reg = { clip.rects[i].x1,     clip.rects[i].y1,
-                        clip.rects[i].x2 , clip.rects[i].y2 };
-
-      impl->surface->SetClip (impl->surface, &reg);
-      impl->surface->Blit (impl->surface, src_impl->surface, &rect,
-                           xdest, ydest);
-    }
-
-  temp_region_deinit( &clip );
-}
-
 static inline void
 convert_rgba_pixbuf_to_image (guint32 *src,
                               guint    src_pitch,
@@ -549,7 +493,6 @@ gdk_drawable_impl_directfb_class_init (GdkDrawableImplDirectFBClass *klass)
   object_class->finalize = gdk_drawable_impl_directfb_finalize;
 
   drawable_class->create_gc      = _gdk_directfb_gc_new;
-  drawable_class->draw_drawable  = gdk_directfb_draw_drawable;
 
   drawable_class->ref_cairo_surface = gdk_directfb_ref_cairo_surface;
   drawable_class->set_colormap   = gdk_directfb_set_colormap;
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index 57f996d..c6807d6 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -547,7 +547,6 @@ gdk_drawable_get_type G_GNUC_CONST
 gdk_drawable_get_visible_region
 gdk_drawable_get_visual
 gdk_drawable_set_colormap
-gdk_draw_drawable
 #endif
 #endif
 
diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c
index bb95185..1b58722 100644
--- a/gdk/gdkdraw.c
+++ b/gdk/gdkdraw.c
@@ -44,15 +44,6 @@ static GdkDrawable* gdk_drawable_real_get_composite_drawable (GdkDrawable  *draw
 							      gint         *composite_x_offset,
 							      gint         *composite_y_offset);
 static cairo_region_t *  gdk_drawable_real_get_visible_region     (GdkDrawable  *drawable);
-static void         gdk_drawable_real_draw_drawable          (GdkDrawable  *drawable,
-							      GdkGC	   *gc,
-							      GdkDrawable  *src,
-							      gint          xsrc,
-							      gint	    ysrc,
-							      gint	    xdest,
-							      gint	    ydest,
-							      gint	    width,
-							      gint	    height);
      
 
 G_DEFINE_ABSTRACT_TYPE (GdkDrawable, gdk_drawable, G_TYPE_OBJECT)
@@ -64,7 +55,6 @@ gdk_drawable_class_init (GdkDrawableClass *klass)
   /* Default implementation for clip and visible region is the same */
   klass->get_clip_region = gdk_drawable_real_get_visible_region;
   klass->get_visible_region = gdk_drawable_real_get_visible_region;
-  klass->draw_drawable = gdk_drawable_real_draw_drawable;
 }
 
 static void
@@ -211,100 +201,6 @@ gdk_drawable_get_colormap (GdkDrawable *drawable)
   return GDK_DRAWABLE_GET_CLASS (drawable)->get_colormap (drawable);
 }
 
-/* Drawing
- */
-
-/**
- * gdk_draw_drawable:
- * @drawable: a #GdkDrawable
- * @gc: a #GdkGC sharing the drawable's visual and colormap
- * @src: the source #GdkDrawable, which may be the same as @drawable
- * @xsrc: X position in @src of rectangle to draw
- * @ysrc: Y position in @src of rectangle to draw
- * @xdest: X position in @drawable where the rectangle should be drawn
- * @ydest: Y position in @drawable where the rectangle should be drawn
- * @width: width of rectangle to draw, or -1 for entire @src width
- * @height: height of rectangle to draw, or -1 for entire @src height
- *
- * Copies the @width x @height region of @src at coordinates (@xsrc,
- * @ysrc) to coordinates (@xdest, @ydest) in @drawable.
- * @width and/or @height may be given as -1, in which case the entire
- * @src drawable will be copied.
- *
- * Most fields in @gc are not used for this operation, but notably the
- * clip mask or clip region will be honored.
- *
- * The source and destination drawables must have the same visual and
- * colormap, or errors will result. (On X11, failure to match
- * visual/colormap results in a BadMatch error from the X server.)
- * A common cause of this problem is an attempt to draw a bitmap to
- * a color drawable. The way to draw a bitmap is to set the bitmap as 
- * the stipple on the #GdkGC, set the fill mode to %GDK_STIPPLED, and 
- * then draw the rectangle.
- **/
-void
-gdk_draw_drawable (GdkDrawable *drawable,
-		   GdkGC       *gc,
-		   GdkDrawable *src,
-		   gint         xsrc,
-		   gint         ysrc,
-		   gint         xdest,
-		   gint         ydest,
-		   gint         width,
-		   gint         height)
-{
-  GdkDrawable *composite;
-  gint composite_x_offset = 0;
-  gint composite_y_offset = 0;
-
-  g_return_if_fail (GDK_IS_DRAWABLE (drawable));
-  g_return_if_fail (GDK_IS_DRAWABLE (src));
-  g_return_if_fail (GDK_IS_GC (gc));
-
-  if (width < 0 || height < 0)
-    {
-      gint real_width;
-      gint real_height;
-      
-      gdk_drawable_get_size (src, &real_width, &real_height);
-
-      if (width < 0)
-        width = real_width;
-      if (height < 0)
-        height = real_height;
-    }
-
-
-  composite =
-    GDK_DRAWABLE_GET_CLASS (src)->get_composite_drawable (src,
-                                                          xsrc, ysrc,
-                                                          width, height,
-                                                          &composite_x_offset,
-                                                          &composite_y_offset);
-
-  /* TODO: For non-native windows this may copy stuff from other overlapping
-     windows. We should clip that and (for windows with bg != None) clear that
-     area in the destination instead. */
-
-  if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src)
-    GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src (drawable, gc,
-							       composite,
-							       xsrc - composite_x_offset,
-							       ysrc - composite_y_offset,
-							       xdest, ydest,
-							       width, height,
-							       src);
-  else /* backwards compat for old out-of-tree implementations of GdkDrawable (are there any?) */
-    GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable (drawable, gc,
-						      composite,
-						      xsrc - composite_x_offset,
-						      ysrc - composite_y_offset,
-						      xdest, ydest,
-						      width, height);
-
-  g_object_unref (composite);
-}
-
 static GdkDrawable *
 gdk_drawable_real_get_composite_drawable (GdkDrawable *drawable,
                                           gint         x,
@@ -396,31 +292,6 @@ _gdk_drawable_ref_cairo_surface (GdkDrawable *drawable)
   return GDK_DRAWABLE_GET_CLASS (drawable)->ref_cairo_surface (drawable);
 }
 
-/* Implementation of the old vfunc in terms of the new one
-   in case someone calls it directly (which they shouldn't!) */
-static void
-gdk_drawable_real_draw_drawable (GdkDrawable  *drawable,
-				 GdkGC	       *gc,
-				 GdkDrawable  *src,
-				 gint		xsrc,
-				 gint		ysrc,
-				 gint		xdest,
-				 gint		ydest,
-				 gint		width,
-				 gint		height)
-{
-  GDK_DRAWABLE_GET_CLASS (drawable)->draw_drawable_with_src (drawable,
-							     gc,
-							     src,
-							     xsrc,
-							     ysrc,
-							     xdest,
-							     ydest,
-							     width,
-							     height,
-							     src);
-}
-
 /************************************************************************/
 
 /**
diff --git a/gdk/gdkdrawable.h b/gdk/gdkdrawable.h
index be5fc84..8259385 100644
--- a/gdk/gdkdrawable.h
+++ b/gdk/gdkdrawable.h
@@ -60,15 +60,6 @@ struct _GdkDrawableClass
   GdkGC *(*create_gc)    (GdkDrawable    *drawable,
 		          GdkGCValues    *values,
 		          GdkGCValuesMask mask);
-  void (*draw_drawable)  (GdkDrawable  *drawable,
-			  GdkGC	       *gc,
-			  GdkDrawable  *src,
-			  gint		xsrc,
-			  gint		ysrc,
-			  gint		xdest,
-			  gint		ydest,
-			  gint		width,
-			  gint		height);
 
   gint (*get_depth)      (GdkDrawable  *drawable);
   void (*get_size)       (GdkDrawable  *drawable,
@@ -104,17 +95,6 @@ struct _GdkDrawableClass
 					     int width,
 					     int height);
 
-  void (*draw_drawable_with_src)  (GdkDrawable  *drawable,
-				   GdkGC	       *gc,
-				   GdkDrawable  *src,
-				   gint		xsrc,
-				   gint		ysrc,
-				   gint		xdest,
-				   gint		ydest,
-				   gint		width,
-				   gint		height,
-				   GdkDrawable  *original_src);
-
   /* Padding for future expansion */
   void         (*_gdk_reserved7)  (void);
   void         (*_gdk_reserved9)  (void);
@@ -141,18 +121,6 @@ gint            gdk_drawable_get_depth    (GdkDrawable	  *drawable);
 GdkScreen*	gdk_drawable_get_screen   (GdkDrawable    *drawable);
 GdkDisplay*	gdk_drawable_get_display  (GdkDrawable    *drawable);
 
-/* Drawing
- */
-void gdk_draw_drawable  (GdkDrawable      *drawable,
-			 GdkGC            *gc,
-			 GdkDrawable      *src,
-			 gint              xsrc,
-			 gint              ysrc,
-			 gint              xdest,
-			 gint              ydest,
-			 gint              width,
-			 gint              height);
-
 cairo_region_t *gdk_drawable_get_clip_region    (GdkDrawable *drawable);
 cairo_region_t *gdk_drawable_get_visible_region (GdkDrawable *drawable);
 
diff --git a/gdk/gdkgc.c b/gdk/gdkgc.c
index d546a49..1cc1521 100644
--- a/gdk/gdkgc.c
+++ b/gdk/gdkgc.c
@@ -921,7 +921,7 @@ _gdk_gc_get_subwindow (GdkGC *gc)
  * Sets whether copying non-visible portions of a drawable
  * using this graphics context generate exposure events
  * for the corresponding regions of the destination
- * drawable. (See gdk_draw_drawable()).
+ * drawable.
  **/
 void
 gdk_gc_set_exposures (GdkGC     *gc,
diff --git a/gdk/gdkoffscreenwindow.c b/gdk/gdkoffscreenwindow.c
index a948a5e..58829fd 100644
--- a/gdk/gdkoffscreenwindow.c
+++ b/gdk/gdkoffscreenwindow.c
@@ -281,29 +281,6 @@ get_real_drawable (GdkOffscreenWindow *offscreen)
   return GDK_DRAWABLE (pixmap->impl);
 }
 
-static void
-gdk_offscreen_window_draw_drawable (GdkDrawable *drawable,
-				    GdkGC       *gc,
-				    GdkPixmap   *src,
-				    gint         xsrc,
-				    gint         ysrc,
-				    gint         xdest,
-				    gint         ydest,
-				    gint         width,
-				    gint         height,
-				    GdkDrawable *original_src)
-{
-  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-  GdkDrawable *real_drawable = get_real_drawable (offscreen);
-
-  gdk_draw_drawable (real_drawable, gc,
-		     src, xsrc, ysrc,
-		     xdest, ydest,
-		     width, height);
-
-  add_damage (offscreen, xdest, ydest, width, height, FALSE);
-}
-
 void
 _gdk_offscreen_window_new (GdkWindow     *window,
 			   GdkScreen     *screen,
@@ -948,8 +925,6 @@ gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
   drawable_class->get_visual = gdk_offscreen_window_get_visual;
   drawable_class->get_source_drawable = gdk_offscreen_window_get_source_drawable;
   drawable_class->get_composite_drawable = gdk_offscreen_window_get_composite_drawable;
-
-  drawable_class->draw_drawable_with_src = gdk_offscreen_window_draw_drawable;
 }
 
 static void
diff --git a/gdk/gdkpixmap.c b/gdk/gdkpixmap.c
index fdb3d29..c5e71c4 100644
--- a/gdk/gdkpixmap.c
+++ b/gdk/gdkpixmap.c
@@ -34,16 +34,6 @@
 static GdkGC *gdk_pixmap_create_gc      (GdkDrawable     *drawable,
                                          GdkGCValues     *values,
                                          GdkGCValuesMask  mask);
-static void   gdk_pixmap_draw_drawable  (GdkDrawable     *drawable,
-					 GdkGC           *gc,
-					 GdkPixmap       *src,
-					 gint             xsrc,
-					 gint             ysrc,
-					 gint             xdest,
-					 gint             ydest,
-					 gint             width,
-					 gint             height,
-					 GdkPixmap       *original_src);
 
 static void   gdk_pixmap_real_get_size  (GdkDrawable     *drawable,
                                          gint            *width,
@@ -102,7 +92,6 @@ gdk_pixmap_class_init (GdkPixmapObjectClass *klass)
   object_class->finalize = gdk_pixmap_finalize;
 
   drawable_class->create_gc = gdk_pixmap_create_gc;
-  drawable_class->draw_drawable_with_src = gdk_pixmap_draw_drawable;
   drawable_class->get_depth = gdk_pixmap_real_get_depth;
   drawable_class->get_screen = gdk_pixmap_real_get_screen;
   drawable_class->get_size = gdk_pixmap_real_get_size;
@@ -182,30 +171,6 @@ gdk_pixmap_create_gc (GdkDrawable     *drawable,
 }
 
 static void
-gdk_pixmap_draw_drawable (GdkDrawable *drawable,
-			  GdkGC       *gc,
-			  GdkPixmap   *src,
-			  gint         xsrc,
-			  gint         ysrc,
-			  gint         xdest,
-			  gint         ydest,
-			  gint         width,
-			  gint         height,
-			  GdkPixmap   *original_src)
-{
-  GdkPixmapObject *private = (GdkPixmapObject *)drawable;
-
-  _gdk_gc_remove_drawable_clip (gc);
-  /* Call the method directly to avoid getting the composite drawable again */
-  GDK_DRAWABLE_GET_CLASS (private->impl)->draw_drawable_with_src (private->impl, gc,
-								  src,
-								  xsrc, ysrc,
-								  xdest, ydest,
-								  width, height,
-								  original_src);
-}
-
-static void
 gdk_pixmap_real_get_size (GdkDrawable *drawable,
                           gint *width,
                           gint *height)
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 9cd022f..17f7560 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -229,16 +229,6 @@ typedef struct {
 static GdkGC *gdk_window_create_gc      (GdkDrawable     *drawable,
 					 GdkGCValues     *values,
 					 GdkGCValuesMask  mask);
-static void   gdk_window_draw_drawable  (GdkDrawable     *drawable,
-					 GdkGC           *gc,
-					 GdkPixmap       *src,
-					 gint             xsrc,
-					 gint             ysrc,
-					 gint             xdest,
-					 gint             ydest,
-					 gint             width,
-					 gint             height,
-					 GdkDrawable     *original_src);
 
 static cairo_surface_t *gdk_window_ref_cairo_surface (GdkDrawable *drawable);
 static cairo_surface_t *gdk_window_create_cairo_surface (GdkDrawable *drawable,
@@ -417,7 +407,6 @@ gdk_window_class_init (GdkWindowObjectClass *klass)
   object_class->get_property = gdk_window_get_property;
 
   drawable_class->create_gc = gdk_window_create_gc;
-  drawable_class->draw_drawable_with_src = gdk_window_draw_drawable;
   drawable_class->get_depth = gdk_window_real_get_depth;
   drawable_class->get_screen = gdk_window_real_get_screen;
   drawable_class->get_size = gdk_window_real_get_size;
@@ -4033,95 +4022,6 @@ gdk_window_get_visible_region (GdkDrawable *drawable)
   return cairo_region_copy (private->clip_region);
 }
 
-static void
-gdk_window_draw_drawable (GdkDrawable *drawable,
-			  GdkGC       *gc,
-			  GdkPixmap   *src,
-			  gint         xsrc,
-			  gint         ysrc,
-			  gint         xdest,
-			  gint         ydest,
-			  gint         width,
-			  gint         height,
-			  GdkDrawable *original_src)
-{
-  GdkWindowObject *private = (GdkWindowObject *)drawable;
-
-  if (GDK_WINDOW_DESTROYED (drawable))
-    return;
-
-  BEGIN_DRAW;
-
-  /* Call the method directly to avoid getting the composite drawable again */
-  GDK_DRAWABLE_GET_CLASS (impl)->draw_drawable_with_src (impl, gc,
-							 src,
-							 xsrc, ysrc,
-							 xdest - x_offset,
-							 ydest - y_offset,
-							 width, height,
-							 original_src);
-
-  if (!private->paint_stack)
-    {
-      /* We might have drawn from an obscured part of a client
-	 side window, if so we need to send graphics exposures */
-      if (_gdk_gc_get_exposures (gc) &&
-	  GDK_IS_WINDOW (original_src))
-	{
-	  cairo_region_t *exposure_region;
-	  cairo_region_t *clip;
-	  GdkRectangle r;
-
-	  r.x = xdest;
-	  r.y = ydest;
-	  r.width = width;
-	  r.height = height;
-	  exposure_region = cairo_region_create_rectangle (&r);
-
-	  if (_gdk_gc_get_subwindow (gc) == GDK_CLIP_BY_CHILDREN)
-	    clip = private->clip_region_with_children;
-	  else
-	    clip = private->clip_region;
-	  cairo_region_intersect (exposure_region, clip);
-
-	  _gdk_gc_remove_drawable_clip (gc);
-	  clip = _gdk_gc_get_clip_region (gc);
-	  if (clip)
-	    {
-	      cairo_region_translate (exposure_region,
-				 old_clip_x,
-				 old_clip_y);
-	      cairo_region_intersect (exposure_region, clip);
-	      cairo_region_translate (exposure_region,
-				 -old_clip_x,
-				 -old_clip_y);
-	    }
-
-	  /* Note: We don't clip by the clip mask if set, so this
-	     may invalidate to much */
-
-	  /* Remove the area that is correctly copied from the src.
-	   * Note that xsrc/ysrc has been corrected for abs_x/y offsets already,
-	   * which need to be undone */
-	  clip = gdk_drawable_get_visible_region (original_src);
-	  cairo_region_translate (clip,
-			     xdest - (xsrc - GDK_WINDOW_OBJECT (original_src)->abs_x),
-			     ydest - (ysrc - GDK_WINDOW_OBJECT (original_src)->abs_y));
-	  cairo_region_subtract (exposure_region, clip);
-	  cairo_region_destroy (clip);
-
-	  gdk_window_invalidate_region_full (GDK_WINDOW (private),
-					      exposure_region,
-					      _gdk_gc_get_subwindow (gc) == GDK_INCLUDE_INFERIORS,
-					      CLEAR_BG_ALL);
-
-	  cairo_region_destroy (exposure_region);
-	}
-    }
-
-  END_DRAW;
-}
-
 static cairo_t *
 setup_backing_rect (GdkWindow *window, GdkWindowPaint *paint, int x_offset_cairo, int y_offset_cairo)
 {
diff --git a/gdk/quartz/gdkdrawable-quartz.c b/gdk/quartz/gdkdrawable-quartz.c
index 8cafe79..5b26434 100644
--- a/gdk/quartz/gdkdrawable-quartz.c
+++ b/gdk/quartz/gdkdrawable-quartz.c
@@ -147,87 +147,6 @@ gdk_quartz_get_depth (GdkDrawable *drawable)
   return gdk_drawable_get_depth (GDK_DRAWABLE_IMPL_QUARTZ (drawable)->wrapper);
 }
 
-static void
-gdk_quartz_draw_drawable (GdkDrawable *drawable,
-			  GdkGC       *gc,
-			  GdkPixmap   *src,
-			  gint         xsrc,
-			  gint         ysrc,
-			  gint         xdest,
-			  gint         ydest,
-			  gint         width,
-			  gint         height,
-			  GdkDrawable *original_src)
-{
-  int src_depth = gdk_drawable_get_depth (src);
-  int dest_depth = gdk_drawable_get_depth (drawable);
-  GdkDrawableImplQuartz *src_impl;
-
-  if (GDK_IS_WINDOW_IMPL_QUARTZ (src))
-    {
-      GdkWindowImplQuartz *window_impl;
-
-      window_impl = GDK_WINDOW_IMPL_QUARTZ (src);
-
-      /* We do support moving areas on the same drawable, if it can be done
-       * by using a scroll. FIXME: We need to check that the params support
-       * this hack, and make sure it's done properly with any offsets etc?
-       */
-      if (drawable == (GdkDrawable *)window_impl)
-        {
-          [window_impl->view scrollRect:NSMakeRect (xsrc, ysrc, width, height)
-                                     by:NSMakeSize (xdest - xsrc, ydest - ysrc)];
-
-
-        }
-      else
-        g_warning ("Drawing with window source != dest is not supported");
-
-      return;
-    }
-  else if (GDK_IS_DRAWABLE_IMPL_QUARTZ (src))
-    src_impl = GDK_DRAWABLE_IMPL_QUARTZ (src);
-  else if (GDK_IS_PIXMAP (src))
-    src_impl = GDK_DRAWABLE_IMPL_QUARTZ (GDK_PIXMAP_OBJECT (src)->impl);
-  else
-    {
-      g_warning ("Unsupported source %s", G_OBJECT_TYPE_NAME (src));
-      return;
-    }
-
-  /* Handle drawable and pixmap sources. */
-  if (src_depth == 1)
-    {
-      /* FIXME: src depth 1 is not supported yet */
-      g_warning ("Source with depth 1 unsupported");
-    }
-  else if (dest_depth != 0 && src_depth == dest_depth)
-    {
-      GdkPixmapImplQuartz *pixmap_impl = GDK_PIXMAP_IMPL_QUARTZ (src_impl);
-      CGContextRef context = gdk_quartz_drawable_get_context (drawable, FALSE);
-
-      if (!context)
-        return;
-
-      _gdk_quartz_gc_update_cg_context (gc, drawable, context,
-                                        GDK_QUARTZ_CONTEXT_STROKE);
-
-      CGContextClipToRect (context, CGRectMake (xdest, ydest, width, height));
-      CGContextTranslateCTM (context, xdest - xsrc, ydest - ysrc +
-                             pixmap_impl->height);
-      CGContextScaleCTM (context, 1.0, -1.0);
-
-      CGContextDrawImage (context,
-                          CGRectMake (0, 0, pixmap_impl->width, pixmap_impl->height),
-                          pixmap_impl->image);
-
-      gdk_quartz_drawable_release_context (drawable, context);
-    }
-  else
-    g_warning ("Attempt to draw a drawable with depth %d to a drawable with depth %d",
-               src_depth, dest_depth);
-}
-
 static inline void
 gdk_quartz_fix_cap_not_last_line (GdkGCQuartz *private,
 				  gint         x1,
@@ -277,7 +196,6 @@ gdk_drawable_impl_quartz_class_init (GdkDrawableImplQuartzClass *klass)
   object_class->finalize = gdk_drawable_impl_quartz_finalize;
 
   drawable_class->create_gc = _gdk_quartz_gc_new;
-  drawable_class->draw_drawable_with_src = gdk_quartz_draw_drawable;
 
   drawable_class->ref_cairo_surface = gdk_quartz_ref_cairo_surface;
 
diff --git a/gdk/win32/gdkdrawable-win32.c b/gdk/win32/gdkdrawable-win32.c
index b31ccad..eb126bb 100644
--- a/gdk/win32/gdkdrawable-win32.c
+++ b/gdk/win32/gdkdrawable-win32.c
@@ -48,17 +48,6 @@
   (gcwin32->line_style == GDK_LINE_DOUBLE_DASH ||		\
    (gcwin32->line_style == GDK_LINE_ON_OFF_DASH && gcwin32->pen_dash_offset))
 
-static void gdk_win32_draw_drawable  (GdkDrawable    *drawable,
-				      GdkGC          *gc,
-				      GdkPixmap      *src,
-				      gint            xsrc,
-				      gint            ysrc,
-				      gint            xdest,
-				      gint            ydest,
-				      gint            width,
-				      gint            height,
-				      GdkDrawable    *original_src);
-
 static cairo_surface_t *gdk_win32_ref_cairo_surface (GdkDrawable *drawable);
      
 static void gdk_win32_set_colormap   (GdkDrawable    *drawable,
@@ -88,7 +77,6 @@ _gdk_drawable_impl_win32_class_init (GdkDrawableImplWin32Class *klass)
   object_class->finalize = gdk_drawable_impl_win32_finalize;
 
   drawable_class->create_gc = _gdk_win32_gc_new;
-  drawable_class->draw_drawable_with_src = gdk_win32_draw_drawable;
   
   drawable_class->ref_cairo_surface = gdk_win32_ref_cairo_surface;
   
@@ -432,25 +420,6 @@ widen_bounds (GdkRectangle *bounds,
 }
 
 static void
-gdk_win32_draw_drawable (GdkDrawable *drawable,
-			 GdkGC       *gc,
-			 GdkPixmap   *src,
-			 gint         xsrc,
-			 gint         ysrc,
-			 gint         xdest,
-			 gint         ydest,
-			 gint         width,
-			 gint         height,
-			 GdkDrawable *original_src)
-{
-  g_assert (GDK_IS_DRAWABLE_IMPL_WIN32 (drawable));
-
-  _gdk_win32_blit (FALSE, (GdkDrawableImplWin32 *) drawable,
-		   gc, src, xsrc, ysrc,
-		   xdest, ydest, width, height);
-}
-
-static void
 blit_from_pixmap (gboolean              use_fg_bg,
 		  GdkDrawableImplWin32 *dest,
 		  HDC                   hdc,
@@ -650,158 +619,6 @@ blit_from_window (HDC                   hdc,
   GDI_CALL (ReleaseDC, (src->handle, srcdc));
 }
 
-void
-_gdk_win32_blit (gboolean              use_fg_bg,
-		 GdkDrawableImplWin32 *draw_impl,
-		 GdkGC       	      *gc,
-		 GdkDrawable 	      *src,
-		 gint        	       xsrc,
-		 gint        	       ysrc,
-		 gint        	       xdest,
-		 gint        	       ydest,
-		 gint        	       width,
-		 gint        	       height)
-{
-  HDC hdc;
-  HRGN src_rgn, draw_rgn, outside_rgn;
-  RECT r;
-  GdkDrawableImplWin32 *src_impl = NULL;
-  gint src_width, src_height;
-  
-  GDK_NOTE (DRAW, g_print ("_gdk_win32_blit: src:%s %dx%d %+d%+d\n"
-			   "                 dst:%s @%+d%+d use_fg_bg=%d\n",
-			   _gdk_win32_drawable_description (src),
-			   width, height, xsrc, ysrc,
-			   _gdk_win32_drawable_description (&draw_impl->parent_instance),
-			   xdest, ydest,
-			   use_fg_bg));
-
-  /* If blitting from the root window, take the multi-monitor offset
-   * into account.
-   */
-  if (src == ((GdkWindowObject *)_gdk_root)->impl)
-    {
-      GDK_NOTE (DRAW, g_print ("... offsetting src coords\n"));
-      xsrc -= _gdk_offset_x;
-      ysrc -= _gdk_offset_y;
-    }
-
-  if (GDK_IS_DRAWABLE_IMPL_WIN32 (src))
-    src_impl = (GdkDrawableImplWin32 *) src;
-  else if (GDK_IS_WINDOW (src))
-    src_impl = (GdkDrawableImplWin32 *) GDK_WINDOW_OBJECT (src)->impl;
-  else if (GDK_IS_PIXMAP (src))
-    src_impl = (GdkDrawableImplWin32 *) GDK_PIXMAP_OBJECT (src)->impl;
-  else
-    g_assert_not_reached ();
-
-  if (GDK_IS_WINDOW_IMPL_WIN32 (draw_impl) &&
-      GDK_IS_PIXMAP_IMPL_WIN32 (src_impl))
-    {
-      GdkPixmapImplWin32 *src_pixmap = GDK_PIXMAP_IMPL_WIN32 (src_impl);
-
-      if (xsrc < 0)
-	{
-	  width += xsrc;
-	  xdest -= xsrc;
-	  xsrc = 0;
-	}
-
-      if (ysrc < 0)
-	{
-	  height += ysrc;
-	  ydest -= ysrc;
-	  ysrc = 0;
-	}
-
-      if (xsrc + width > src_pixmap->width)
-	width = src_pixmap->width - xsrc;
-      if (ysrc + height > src_pixmap->height)
-	height = src_pixmap->height - ysrc;
-    }
-
-  hdc = gdk_win32_hdc_get (&draw_impl->parent_instance, gc, GDK_GC_FOREGROUND);
-
-  gdk_drawable_get_size (src_impl->wrapper, &src_width, &src_height);
-
-  if ((src_rgn = CreateRectRgn (0, 0, src_width + 1, src_height + 1)) == NULL)
-    {
-      WIN32_GDI_FAILED ("CreateRectRgn");
-    }
-  else if ((draw_rgn = CreateRectRgn (xsrc, ysrc,
-				      xsrc + width + 1,
-				      ysrc + height + 1)) == NULL)
-    {
-      WIN32_GDI_FAILED ("CreateRectRgn");
-    }
-  else
-    {
-      if (GDK_IS_WINDOW_IMPL_WIN32 (draw_impl))
-	{
-	  int comb;
-	  
-	  /* If we are drawing on a window, calculate the region that is
-	   * outside the source pixmap, and invalidate that, causing it to
-	   * be cleared. Not completely sure whether this is always needed. XXX
-	   */
-	  SetRectEmpty (&r);
-	  outside_rgn = CreateRectRgnIndirect (&r);
-	  
-	  if ((comb = CombineRgn (outside_rgn,
-				  draw_rgn, src_rgn,
-				  RGN_DIFF)) == ERROR)
-	    WIN32_GDI_FAILED ("CombineRgn");
-	  else if (comb != NULLREGION)
-	    {
-	      OffsetRgn (outside_rgn, xdest, ydest);
-	      GDK_NOTE (DRAW, (GetRgnBox (outside_rgn, &r),
-			       g_print ("... InvalidateRgn "
-					"bbox: %ldx%ld %+ld%+ld\n",
-					r.right - r.left - 1, r.bottom - r.top - 1,
-					r.left, r.top)));
-	      InvalidateRgn (draw_impl->handle, outside_rgn, TRUE);
-	    }
-	  GDI_CALL (DeleteObject, (outside_rgn));
-	}
-
-#if 1 /* Don't know if this is necessary XXX */
-      if (CombineRgn (draw_rgn, draw_rgn, src_rgn, RGN_AND) == COMPLEXREGION)
-	g_warning ("gdk_win32_blit: CombineRgn returned a COMPLEXREGION");
-      
-      GetRgnBox (draw_rgn, &r);
-      if (r.left != xsrc || r.top != ysrc ||
-	  r.right != xsrc + width + 1 || r.bottom != ysrc + height + 1)
-	{
-	  xdest += r.left - xsrc;
-	  xsrc = r.left;
-	  ydest += r.top - ysrc;
-	  ysrc = r.top;
-	  width = r.right - xsrc - 1;
-	  height = r.bottom - ysrc - 1;
-	  
-	  GDK_NOTE (DRAW, g_print ("... restricted to src: %dx%d %+d%+d, "
-				   "dest: @%+d%+d\n",
-				   width, height, xsrc, ysrc,
-				   xdest, ydest));
-	}
-#endif
-
-      GDI_CALL (DeleteObject, (src_rgn));
-      GDI_CALL (DeleteObject, (draw_rgn));
-    }
-
-  if (draw_impl->handle == src_impl->handle)
-    blit_inside_drawable (hdc, GDK_GC_WIN32 (gc), xsrc, ysrc, xdest, ydest, width, height);
-  else if (GDK_IS_PIXMAP_IMPL_WIN32 (src_impl))
-    blit_from_pixmap (use_fg_bg, draw_impl, hdc,
-		      (GdkPixmapImplWin32 *) src_impl, gc,
-		      xsrc, ysrc, xdest, ydest, width, height);
-  else
-    blit_from_window (hdc, GDK_GC_WIN32 (gc), src_impl, xsrc, ysrc, xdest, ydest, width, height);
-
-  gdk_win32_hdc_release (&draw_impl->parent_instance, gc, GDK_GC_FOREGROUND);
-}
-
 /**
  * _gdk_win32_drawable_acquire_dc
  * @drawable: a Win32 #GdkDrawable implementation
diff --git a/gdk/x11/gdkdrawable-x11.c b/gdk/x11/gdkdrawable-x11.c
index 2a4d9ac..e80152e 100644
--- a/gdk/x11/gdkdrawable-x11.c
+++ b/gdk/x11/gdkdrawable-x11.c
@@ -48,17 +48,6 @@
 #include "gdkdisplay-x11.h"
 
 
-static void gdk_x11_draw_drawable  (GdkDrawable    *drawable,
-				    GdkGC          *gc,
-				    GdkPixmap      *src,
-				    gint            xsrc,
-				    gint            ysrc,
-				    gint            xdest,
-				    gint            ydest,
-				    gint            width,
-				    gint            height,
-				    GdkDrawable    *original_src);
-
 static cairo_surface_t *gdk_x11_ref_cairo_surface (GdkDrawable *drawable);
      
 static void gdk_x11_set_colormap   (GdkDrawable    *drawable,
@@ -84,7 +73,6 @@ _gdk_drawable_impl_x11_class_init (GdkDrawableImplX11Class *klass)
   object_class->finalize = gdk_drawable_impl_x11_finalize;
   
   drawable_class->create_gc = _gdk_x11_gc_new;
-  drawable_class->draw_drawable_with_src = gdk_x11_draw_drawable;
   
   drawable_class->ref_cairo_surface = gdk_x11_ref_cairo_surface;
 
@@ -277,95 +265,6 @@ gdk_x11_set_colormap (GdkDrawable *drawable,
     g_object_ref (impl->colormap);
 }
 
-/* Drawing
- */
-
-static void
-gdk_x11_draw_drawable (GdkDrawable *drawable,
-		       GdkGC       *gc,
-		       GdkPixmap   *src,
-		       gint         xsrc,
-		       gint         ysrc,
-		       gint         xdest,
-		       gint         ydest,
-		       gint         width,
-		       gint         height,
-		       GdkDrawable *original_src)
-{
-  int src_depth = gdk_drawable_get_depth (src);
-  int dest_depth = gdk_drawable_get_depth (drawable);
-  GdkDrawableImplX11 *impl;
-  GdkDrawableImplX11 *src_impl;
-  
-  impl = GDK_DRAWABLE_IMPL_X11 (drawable);
-
-  if (GDK_IS_DRAWABLE_IMPL_X11 (src))
-    src_impl = GDK_DRAWABLE_IMPL_X11 (src);
-  else if (GDK_IS_WINDOW (src))
-    src_impl = GDK_DRAWABLE_IMPL_X11(((GdkWindowObject *)src)->impl);
-  else
-    src_impl = GDK_DRAWABLE_IMPL_X11(((GdkPixmapObject *)src)->impl);
-
-  if (GDK_IS_WINDOW_IMPL_X11 (impl) &&
-      GDK_IS_PIXMAP_IMPL_X11 (src_impl))
-    {
-      GdkPixmapImplX11 *src_pixmap = GDK_PIXMAP_IMPL_X11 (src_impl);
-      /* Work around an Xserver bug where non-visible areas from
-       * a pixmap to a window will clear the window background
-       * in destination areas that are supposed to be clipped out.
-       * This is a problem with client side windows as this means
-       * things may draw outside the virtual windows. This could
-       * also happen for window to window copies, but I don't
-       * think we generate any calls like that.
-       *
-       * See: 
-       * http://lists.freedesktop.org/archives/xorg/2009-February/043318.html
-       */
-      if (xsrc < 0)
-	{
-	  width += xsrc;
-	  xdest -= xsrc;
-	  xsrc = 0;
-	}
-      
-      if (ysrc < 0)
-	{
-	  height += ysrc;
-	  ydest -= ysrc;
-	  ysrc = 0;
-	}
-
-      if (xsrc + width > src_pixmap->width)
-	width = src_pixmap->width - xsrc;
-      if (ysrc + height > src_pixmap->height)
-	height = src_pixmap->height - ysrc;
-    }
-  
-  if (src_depth == 1)
-    {
-      XCopyArea (GDK_SCREEN_XDISPLAY (impl->screen),
-                 src_impl->xid,
-		 impl->xid,
-		 GDK_GC_GET_XGC (gc),
-		 xsrc, ysrc,
-		 width, height,
-		 xdest, ydest);
-    }
-  else if (dest_depth != 0 && src_depth == dest_depth)
-    {
-      XCopyArea (GDK_SCREEN_XDISPLAY (impl->screen),
-                 src_impl->xid,
-		 impl->xid,
-		 GDK_GC_GET_XGC (gc),
-		 xsrc, ysrc,
-		 width, height,
-		 xdest, ydest);
-    }
-  else
-    g_warning ("Attempt to draw a drawable with depth %d to a drawable with depth %d",
-               src_depth, dest_depth);
-}
-
 static gint
 gdk_x11_get_depth (GdkDrawable *drawable)
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]