[gtk+/rendering-cleanup] API: remove gdk_draw_drawable()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/rendering-cleanup] API: remove gdk_draw_drawable()
- Date: Wed, 21 Jul 2010 19:18:18 +0000 (UTC)
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, ®);
- 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]