- offscreen->colormap = colormap;
- if (offscreen->colormap)
- g_object_ref (offscreen->colormap);
-}
-
-
-static gint
-gdk_offscreen_window_get_depth (GdkDrawable *drawable)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-
- return gdk_drawable_get_depth (offscreen->wrapper);
-}
-
-static GdkDrawable *
-gdk_offscreen_window_get_source_drawable (GdkDrawable *drawable)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-
- return _gdk_drawable_get_source_drawable (offscreen->pixmap);
-}
-
-static GdkDrawable *
-gdk_offscreen_window_get_composite_drawable (GdkDrawable *drawable,
- gint x,
- gint y,
- gint width,
- gint height,
- gint *composite_x_offset,
- gint *composite_y_offset)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-
- return g_object_ref (offscreen->pixmap);
-}
-
-static GdkScreen*
-gdk_offscreen_window_get_screen (GdkDrawable *drawable)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-
- return offscreen->screen;
-}
-
-static GdkVisual*
-gdk_offscreen_window_get_visual (GdkDrawable *drawable)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
-
- return gdk_drawable_get_visual (offscreen->wrapper);
-}
-
-static void
-add_damage (GdkOffscreenWindow *offscreen,
- int x, int y,
- int w, int h)
-{
- GdkRectangle rect;
- GdkRegion *damage;
-
- rect.x = x;
- rect.y = y;
- rect.width = w;
- rect.height = h;
-
- damage = gdk_region_rectangle (&rect);
- _gdk_window_add_damage (offscreen->wrapper, damage);
- gdk_region_destroy (damage);
-}
-
-static GdkDrawable *
-get_real_drawable (GdkOffscreenWindow *offscreen)
-{
- GdkPixmapObject *pixmap;
- pixmap = (GdkPixmapObject *) offscreen->pixmap;
- 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);
-}
-
-static void
-gdk_offscreen_window_draw_rectangle (GdkDrawable *drawable,
- GdkGC *gc,
- gboolean filled,
- gint x,
- gint y,
- gint width,
- gint height)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
-
- gdk_draw_rectangle (real_drawable,
- gc, filled, x, y, width, height);
-
- add_damage (offscreen, x, y, width, height);
-
-}
-
-static void
-gdk_offscreen_window_draw_arc (GdkDrawable *drawable,
- GdkGC *gc,
- gboolean filled,
- gint x,
- gint y,
- gint width,
- gint height,
- gint angle1,
- gint angle2)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
-
- gdk_draw_arc (real_drawable,
- gc,
- filled,
- x,
- y,
- width,
- height,
- angle1,
- angle2);
- add_damage (offscreen, x, y, width, height);
-}
-
-static void
-gdk_offscreen_window_draw_polygon (GdkDrawable *drawable,
- GdkGC *gc,
- gboolean filled,
- GdkPoint *points,
- gint npoints)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
-
- gdk_draw_polygon (real_drawable,
- gc,
- filled,
- points,
- npoints);
-
- if (npoints > 0)
- {
- int min_x, min_y, max_x, max_y, i;
-
- min_x = max_x = points[0].x;
- min_y = max_y = points[0].y;
-
- for (i = 1; i < npoints; i++)
- {
- min_x = MIN (min_x, points[i].x);
- max_x = MAX (max_x, points[i].x);
- min_y = MIN (min_y, points[i].y);
- max_y = MAX (max_y, points[i].y);
- }
-
- add_damage (offscreen, min_x, min_y,
- max_x - min_x,
- max_y - min_y);
- }
-}
-
-static void
-gdk_offscreen_window_draw_text (GdkDrawable *drawable,
- GdkFont *font,
- GdkGC *gc,
- gint x,
- gint y,
- const gchar *text,
- gint text_length)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
- GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
-
- gdk_draw_text (real_drawable,
- font,
- gc,
- x,
- y,
- text,
- text_length);
-
- /* Hard to compute the minimal size, not that often used anyway. */
- add_damage (offscreen, 0, 0, private->width, private->height);
-}
-
-static void
-gdk_offscreen_window_draw_text_wc (GdkDrawable *drawable,
- GdkFont *font,
- GdkGC *gc,
- gint x,
- gint y,
- const GdkWChar *text,
- gint text_length)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
- GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
-
- gdk_draw_text_wc (real_drawable,
- font,
- gc,
- x,
- y,
- text,
- text_length);
-
- /* Hard to compute the minimal size, not that often used anyway. */
- add_damage (offscreen, 0, 0, private->width, private->height);
-}
-
-static void
-gdk_offscreen_window_draw_points (GdkDrawable *drawable,
- GdkGC *gc,
- GdkPoint *points,
- gint npoints)
-{
- GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
- GdkDrawable *real_drawable = get_real_drawable (offscreen);
-
- gdk_draw_points (real_drawable,
- gc,
- points,
- npoints);
-
-
- if (npoints > 0)