Blame gdk/gdkoffscreenwindow.c

Packit Service fb6fa5
/* GDK - The GIMP Drawing Kit
Packit Service fb6fa5
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Lesser General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Lesser General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Lesser General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
/*
Packit Service fb6fa5
 * Modified by the GTK+ Team and others 1997-2005.  See the AUTHORS
Packit Service fb6fa5
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit Service fb6fa5
 * files for a list of changes.  These files are distributed with
Packit Service fb6fa5
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include <config.h>
Packit Service fb6fa5
#include <math.h>
Packit Service fb6fa5
#include "gdk.h"
Packit Service fb6fa5
#include "gdkwindow.h"
Packit Service fb6fa5
#include "gdkinternals.h"
Packit Service fb6fa5
#include "gdkwindowimpl.h"
Packit Service fb6fa5
#include "gdkpixmap.h"
Packit Service fb6fa5
#include "gdkdrawable.h"
Packit Service fb6fa5
#include "gdktypes.h"
Packit Service fb6fa5
#include "gdkscreen.h"
Packit Service fb6fa5
#include "gdkgc.h"
Packit Service fb6fa5
#include "gdkcolor.h"
Packit Service fb6fa5
#include "gdkcursor.h"
Packit Service fb6fa5
#include "gdkalias.h"
Packit Service fb6fa5
Packit Service fb6fa5
/* LIMITATIONS:
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Offscreen windows can't be the child of a foreign window,
Packit Service fb6fa5
 *   nor contain foreign windows
Packit Service fb6fa5
 * GDK_POINTER_MOTION_HINT_MASK isn't effective
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct _GdkOffscreenWindowClass GdkOffscreenWindowClass;
Packit Service fb6fa5
Packit Service fb6fa5
struct _GdkOffscreenWindow
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawable parent_instance;
Packit Service fb6fa5
Packit Service fb6fa5
  GdkWindow *wrapper;
Packit Service fb6fa5
  GdkCursor *cursor;
Packit Service fb6fa5
  GdkColormap *colormap;
Packit Service fb6fa5
  GdkScreen *screen;
Packit Service fb6fa5
Packit Service fb6fa5
  GdkPixmap *pixmap;
Packit Service fb6fa5
  GdkWindow *embedder;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
struct _GdkOffscreenWindowClass
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawableClass parent_class;
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
#define GDK_OFFSCREEN_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindowClass))
Packit Service fb6fa5
#define GDK_IS_OFFSCREEN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_OFFSCREEN_WINDOW))
Packit Service fb6fa5
#define GDK_OFFSCREEN_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindowClass))
Packit Service fb6fa5
Packit Service fb6fa5
static void       gdk_offscreen_window_impl_iface_init    (GdkWindowImplIface         *iface);
Packit Service fb6fa5
static void       gdk_offscreen_window_hide               (GdkWindow                  *window);
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE_WITH_CODE (GdkOffscreenWindow,
Packit Service fb6fa5
			 gdk_offscreen_window,
Packit Service fb6fa5
			 GDK_TYPE_DRAWABLE,
Packit Service fb6fa5
			 G_IMPLEMENT_INTERFACE (GDK_TYPE_WINDOW_IMPL,
Packit Service fb6fa5
						gdk_offscreen_window_impl_iface_init));
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_finalize (GObject *object)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (object);
Packit Service fb6fa5
Packit Service fb6fa5
  if (offscreen->cursor)
Packit Service fb6fa5
    gdk_cursor_unref (offscreen->cursor);
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen->cursor = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (offscreen->pixmap);
Packit Service fb6fa5
Packit Service fb6fa5
  G_OBJECT_CLASS (gdk_offscreen_window_parent_class)->finalize (object);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_init (GdkOffscreenWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_destroy (GdkWindow *window,
Packit Service fb6fa5
			      gboolean   recursing,
Packit Service fb6fa5
			      gboolean   foreign_destroy)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_offscreen_window_set_embedder (window, NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  if (!recursing)
Packit Service fb6fa5
    gdk_offscreen_window_hide (window);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (offscreen->colormap);
Packit Service fb6fa5
  offscreen->colormap = NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
is_parent_of (GdkWindow *parent,
Packit Service fb6fa5
	      GdkWindow *child)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindow *w;
Packit Service fb6fa5
Packit Service fb6fa5
  w = child;
Packit Service fb6fa5
  while (w != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (w == parent)
Packit Service fb6fa5
	return TRUE;
Packit Service fb6fa5
Packit Service fb6fa5
      w = gdk_window_get_parent (w);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkGC *
Packit Service fb6fa5
gdk_offscreen_window_create_gc (GdkDrawable     *drawable,
Packit Service fb6fa5
				GdkGCValues     *values,
Packit Service fb6fa5
				GdkGCValuesMask  values_mask)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_gc_new_with_values (offscreen->pixmap, values, values_mask);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkImage*
Packit Service fb6fa5
gdk_offscreen_window_copy_to_image (GdkDrawable    *drawable,
Packit Service fb6fa5
				    GdkImage       *image,
Packit Service fb6fa5
				    gint            src_x,
Packit Service fb6fa5
				    gint            src_y,
Packit Service fb6fa5
				    gint            dest_x,
Packit Service fb6fa5
				    gint            dest_y,
Packit Service fb6fa5
				    gint            width,
Packit Service fb6fa5
				    gint            height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_drawable_copy_to_image (offscreen->pixmap,
Packit Service fb6fa5
				     image,
Packit Service fb6fa5
				     src_x,
Packit Service fb6fa5
				     src_y,
Packit Service fb6fa5
				     dest_x, dest_y,
Packit Service fb6fa5
				     width, height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static cairo_surface_t *
Packit Service fb6fa5
gdk_offscreen_window_ref_cairo_surface (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return _gdk_drawable_ref_cairo_surface (offscreen->pixmap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkColormap*
Packit Service fb6fa5
gdk_offscreen_window_get_colormap (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return offscreen->colormap;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_set_colormap (GdkDrawable *drawable,
Packit Service fb6fa5
				   GdkColormap*colormap)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  if (colormap && GDK_WINDOW_DESTROYED (offscreen->wrapper))
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  if (offscreen->colormap == colormap)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  if (offscreen->colormap)
Packit Service fb6fa5
    g_object_unref (offscreen->colormap);
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen->colormap = colormap;
Packit Service fb6fa5
  if (offscreen->colormap)
Packit Service fb6fa5
    g_object_ref (offscreen->colormap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
gdk_offscreen_window_get_depth (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_drawable_get_depth (offscreen->wrapper);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkDrawable *
Packit Service fb6fa5
gdk_offscreen_window_get_source_drawable (GdkDrawable  *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return _gdk_drawable_get_source_drawable (offscreen->pixmap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkDrawable *
Packit Service fb6fa5
gdk_offscreen_window_get_composite_drawable (GdkDrawable *drawable,
Packit Service fb6fa5
					     gint         x,
Packit Service fb6fa5
					     gint         y,
Packit Service fb6fa5
					     gint         width,
Packit Service fb6fa5
					     gint         height,
Packit Service fb6fa5
					     gint        *composite_x_offset,
Packit Service fb6fa5
					     gint        *composite_y_offset)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return g_object_ref (offscreen->pixmap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkScreen*
Packit Service fb6fa5
gdk_offscreen_window_get_screen (GdkDrawable *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return offscreen->screen;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkVisual*
Packit Service fb6fa5
gdk_offscreen_window_get_visual (GdkDrawable    *drawable)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
Packit Service fb6fa5
  return gdk_drawable_get_visual (offscreen->wrapper);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
add_damage (GdkOffscreenWindow *offscreen,
Packit Service fb6fa5
	    int x, int y,
Packit Service fb6fa5
	    int w, int h,
Packit Service fb6fa5
	    gboolean is_line)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkRectangle rect;
Packit Service fb6fa5
  GdkRegion *damage;
Packit Service fb6fa5
Packit Service fb6fa5
  rect.x = x;
Packit Service fb6fa5
  rect.y = y;
Packit Service fb6fa5
  rect.width = w;
Packit Service fb6fa5
  rect.height = h;
Packit Service fb6fa5
Packit Service fb6fa5
  if (is_line)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      /* This should really take into account line width, line
Packit Service fb6fa5
       * joins (and miter) and line caps. But these are hard
Packit Service fb6fa5
       * to compute, rarely used and generally a pain. And in
Packit Service fb6fa5
       * the end a snug damage rectangle is not that important
Packit Service fb6fa5
       * as multiple damages are generally created anyway.
Packit Service fb6fa5
       *
Packit Service fb6fa5
       * So, we just add some padding around the rect.
Packit Service fb6fa5
       * We use a padding of 3 pixels, plus an extra row
Packit Service fb6fa5
       * below and on the right for the normal line size. I.E.
Packit Service fb6fa5
       * line from (0,0) to (2,0) gets h=0 but is really
Packit Service fb6fa5
       * at least one pixel tall.
Packit Service fb6fa5
       */
Packit Service fb6fa5
      rect.x -= 3;
Packit Service fb6fa5
      rect.y -= 3;
Packit Service fb6fa5
      rect.width += 7;
Packit Service fb6fa5
      rect.height += 7;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  damage = gdk_region_rectangle (&rect);
Packit Service fb6fa5
  _gdk_window_add_damage (offscreen->wrapper, damage);
Packit Service fb6fa5
  gdk_region_destroy (damage);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkDrawable *
Packit Service fb6fa5
get_real_drawable (GdkOffscreenWindow *offscreen)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkPixmapObject *pixmap;
Packit Service fb6fa5
  pixmap = (GdkPixmapObject *) offscreen->pixmap;
Packit Service fb6fa5
  return GDK_DRAWABLE (pixmap->impl);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_drawable (GdkDrawable *drawable,
Packit Service fb6fa5
				    GdkGC       *gc,
Packit Service fb6fa5
				    GdkPixmap   *src,
Packit Service fb6fa5
				    gint         xsrc,
Packit Service fb6fa5
				    gint         ysrc,
Packit Service fb6fa5
				    gint         xdest,
Packit Service fb6fa5
				    gint         ydest,
Packit Service fb6fa5
				    gint         width,
Packit Service fb6fa5
				    gint         height,
Packit Service fb6fa5
				    GdkDrawable *original_src)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_drawable (real_drawable, gc,
Packit Service fb6fa5
		     src, xsrc, ysrc,
Packit Service fb6fa5
		     xdest, ydest,
Packit Service fb6fa5
		     width, height);
Packit Service fb6fa5
Packit Service fb6fa5
  add_damage (offscreen, xdest, ydest, width, height, FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_rectangle (GdkDrawable  *drawable,
Packit Service fb6fa5
				     GdkGC	  *gc,
Packit Service fb6fa5
				     gboolean	   filled,
Packit Service fb6fa5
				     gint	   x,
Packit Service fb6fa5
				     gint	   y,
Packit Service fb6fa5
				     gint	   width,
Packit Service fb6fa5
				     gint	   height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_rectangle (real_drawable,
Packit Service fb6fa5
		      gc, filled, x, y, width, height);
Packit Service fb6fa5
Packit Service fb6fa5
  add_damage (offscreen, x, y, width, height, !filled);
Packit Service fb6fa5
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_arc (GdkDrawable  *drawable,
Packit Service fb6fa5
			       GdkGC	       *gc,
Packit Service fb6fa5
			       gboolean	filled,
Packit Service fb6fa5
			       gint		x,
Packit Service fb6fa5
			       gint		y,
Packit Service fb6fa5
			       gint		width,
Packit Service fb6fa5
			       gint		height,
Packit Service fb6fa5
			       gint		angle1,
Packit Service fb6fa5
			       gint		angle2)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_arc (real_drawable,
Packit Service fb6fa5
		gc,
Packit Service fb6fa5
		filled,
Packit Service fb6fa5
		x,
Packit Service fb6fa5
		y,
Packit Service fb6fa5
		width,
Packit Service fb6fa5
		height,
Packit Service fb6fa5
		angle1,
Packit Service fb6fa5
		angle2);
Packit Service fb6fa5
  add_damage (offscreen, x, y, width, height, !filled);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_polygon (GdkDrawable  *drawable,
Packit Service fb6fa5
				   GdkGC	       *gc,
Packit Service fb6fa5
				   gboolean	filled,
Packit Service fb6fa5
				   GdkPoint     *points,
Packit Service fb6fa5
				   gint		npoints)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_polygon (real_drawable,
Packit Service fb6fa5
		    gc,
Packit Service fb6fa5
		    filled,
Packit Service fb6fa5
		    points,
Packit Service fb6fa5
		    npoints);
Packit Service fb6fa5
Packit Service fb6fa5
  if (npoints > 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      int min_x, min_y, max_x, max_y, i;
Packit Service fb6fa5
Packit Service fb6fa5
      min_x = max_x = points[0].x;
Packit Service fb6fa5
      min_y = max_y = points[0].y;
Packit Service fb6fa5
Packit Service fb6fa5
	for (i = 1; i < npoints; i++)
Packit Service fb6fa5
	  {
Packit Service fb6fa5
	    min_x = MIN (min_x, points[i].x);
Packit Service fb6fa5
	    max_x = MAX (max_x, points[i].x);
Packit Service fb6fa5
	    min_y = MIN (min_y, points[i].y);
Packit Service fb6fa5
	    max_y = MAX (max_y, points[i].y);
Packit Service fb6fa5
	  }
Packit Service fb6fa5
Packit Service fb6fa5
	add_damage (offscreen, min_x, min_y,
Packit Service fb6fa5
		    max_x - min_x,
Packit Service fb6fa5
		    max_y - min_y, !filled);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_text (GdkDrawable  *drawable,
Packit Service fb6fa5
				GdkFont      *font,
Packit Service fb6fa5
				GdkGC	       *gc,
Packit Service fb6fa5
				gint		x,
Packit Service fb6fa5
				gint		y,
Packit Service fb6fa5
				const gchar  *text,
Packit Service fb6fa5
				gint		text_length)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_text (real_drawable,
Packit Service fb6fa5
		 font,
Packit Service fb6fa5
		 gc,
Packit Service fb6fa5
		 x,
Packit Service fb6fa5
		 y,
Packit Service fb6fa5
		 text,
Packit Service fb6fa5
		 text_length);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Hard to compute the minimal size, not that often used anyway. */
Packit Service fb6fa5
  add_damage (offscreen, 0, 0, private->width, private->height, FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_text_wc (GdkDrawable	 *drawable,
Packit Service fb6fa5
				   GdkFont	 *font,
Packit Service fb6fa5
				   GdkGC		 *gc,
Packit Service fb6fa5
				   gint		  x,
Packit Service fb6fa5
				   gint		  y,
Packit Service fb6fa5
				   const GdkWChar *text,
Packit Service fb6fa5
				   gint		  text_length)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_text_wc (real_drawable,
Packit Service fb6fa5
		    font,
Packit Service fb6fa5
		    gc,
Packit Service fb6fa5
		    x,
Packit Service fb6fa5
		    y,
Packit Service fb6fa5
		    text,
Packit Service fb6fa5
		    text_length);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Hard to compute the minimal size, not that often used anyway. */
Packit Service fb6fa5
  add_damage (offscreen, 0, 0, private->width, private->height, FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_points (GdkDrawable  *drawable,
Packit Service fb6fa5
				  GdkGC	       *gc,
Packit Service fb6fa5
				  GdkPoint     *points,
Packit Service fb6fa5
				  gint		npoints)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_points (real_drawable,
Packit Service fb6fa5
		   gc,
Packit Service fb6fa5
		   points,
Packit Service fb6fa5
		   npoints);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  if (npoints > 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      int min_x, min_y, max_x, max_y, i;
Packit Service fb6fa5
Packit Service fb6fa5
      min_x = max_x = points[0].x;
Packit Service fb6fa5
      min_y = max_y = points[0].y;
Packit Service fb6fa5
Packit Service fb6fa5
	for (i = 1; i < npoints; i++)
Packit Service fb6fa5
	  {
Packit Service fb6fa5
	    min_x = MIN (min_x, points[i].x);
Packit Service fb6fa5
	    max_x = MAX (max_x, points[i].x);
Packit Service fb6fa5
	    min_y = MIN (min_y, points[i].y);
Packit Service fb6fa5
	    max_y = MAX (max_y, points[i].y);
Packit Service fb6fa5
	  }
Packit Service fb6fa5
Packit Service fb6fa5
	add_damage (offscreen, min_x, min_y,
Packit Service fb6fa5
		    max_x - min_x + 1,
Packit Service fb6fa5
		    max_y - min_y + 1,
Packit Service fb6fa5
		    FALSE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_segments (GdkDrawable  *drawable,
Packit Service fb6fa5
				    GdkGC	 *gc,
Packit Service fb6fa5
				    GdkSegment   *segs,
Packit Service fb6fa5
				    gint	  nsegs)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_segments (real_drawable,
Packit Service fb6fa5
		     gc,
Packit Service fb6fa5
		     segs,
Packit Service fb6fa5
		     nsegs);
Packit Service fb6fa5
Packit Service fb6fa5
  if (nsegs > 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      int min_x, min_y, max_x, max_y, i;
Packit Service fb6fa5
Packit Service fb6fa5
      min_x = max_x = segs[0].x1;
Packit Service fb6fa5
      min_y = max_y = segs[0].y1;
Packit Service fb6fa5
Packit Service fb6fa5
	for (i = 0; i < nsegs; i++)
Packit Service fb6fa5
	  {
Packit Service fb6fa5
	    min_x = MIN (min_x, segs[i].x1);
Packit Service fb6fa5
	    max_x = MAX (max_x, segs[i].x1);
Packit Service fb6fa5
	    min_x = MIN (min_x, segs[i].x2);
Packit Service fb6fa5
	    max_x = MAX (max_x, segs[i].x2);
Packit Service fb6fa5
	    min_y = MIN (min_y, segs[i].y1);
Packit Service fb6fa5
	    max_y = MAX (max_y, segs[i].y1);
Packit Service fb6fa5
	    min_y = MIN (min_y, segs[i].y2);
Packit Service fb6fa5
	    max_y = MAX (max_y, segs[i].y2);
Packit Service fb6fa5
	  }
Packit Service fb6fa5
Packit Service fb6fa5
	add_damage (offscreen, min_x, min_y,
Packit Service fb6fa5
		    max_x - min_x,
Packit Service fb6fa5
		    max_y - min_y, TRUE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_lines (GdkDrawable  *drawable,
Packit Service fb6fa5
				 GdkGC        *gc,
Packit Service fb6fa5
				 GdkPoint     *points,
Packit Service fb6fa5
				 gint          npoints)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_lines (real_drawable,
Packit Service fb6fa5
		  gc,
Packit Service fb6fa5
		  points,
Packit Service fb6fa5
		  npoints);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Hard to compute the minimal size, as we don't know the line
Packit Service fb6fa5
     width, and since joins are hard to calculate.
Packit Service fb6fa5
     Its not that often used anyway, damage it all */
Packit Service fb6fa5
  add_damage (offscreen, 0, 0, private->width, private->height, TRUE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_image (GdkDrawable *drawable,
Packit Service fb6fa5
				 GdkGC	      *gc,
Packit Service fb6fa5
				 GdkImage    *image,
Packit Service fb6fa5
				 gint	       xsrc,
Packit Service fb6fa5
				 gint	       ysrc,
Packit Service fb6fa5
				 gint	       xdest,
Packit Service fb6fa5
				 gint	       ydest,
Packit Service fb6fa5
				 gint	       width,
Packit Service fb6fa5
				 gint	       height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_image (real_drawable,
Packit Service fb6fa5
		  gc,
Packit Service fb6fa5
		  image,
Packit Service fb6fa5
		  xsrc,
Packit Service fb6fa5
		  ysrc,
Packit Service fb6fa5
		  xdest,
Packit Service fb6fa5
		  ydest,
Packit Service fb6fa5
		  width,
Packit Service fb6fa5
		  height);
Packit Service fb6fa5
Packit Service fb6fa5
  add_damage (offscreen, xdest, ydest, width, height, FALSE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_draw_pixbuf (GdkDrawable *drawable,
Packit Service fb6fa5
				  GdkGC       *gc,
Packit Service fb6fa5
				  GdkPixbuf   *pixbuf,
Packit Service fb6fa5
				  gint         src_x,
Packit Service fb6fa5
				  gint         src_y,
Packit Service fb6fa5
				  gint         dest_x,
Packit Service fb6fa5
				  gint         dest_y,
Packit Service fb6fa5
				  gint         width,
Packit Service fb6fa5
				  gint         height,
Packit Service fb6fa5
				  GdkRgbDither dither,
Packit Service fb6fa5
				  gint         x_dither,
Packit Service fb6fa5
				  gint         y_dither)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
Packit Service fb6fa5
  GdkDrawable *real_drawable = get_real_drawable (offscreen);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_draw_pixbuf (real_drawable,
Packit Service fb6fa5
		   gc,
Packit Service fb6fa5
		   pixbuf,
Packit Service fb6fa5
		   src_x,
Packit Service fb6fa5
		   src_y,
Packit Service fb6fa5
		   dest_x,
Packit Service fb6fa5
		   dest_y,
Packit Service fb6fa5
		   width,
Packit Service fb6fa5
		   height,
Packit Service fb6fa5
		   dither,
Packit Service fb6fa5
		   x_dither,
Packit Service fb6fa5
		   y_dither);
Packit Service fb6fa5
Packit Service fb6fa5
  add_damage (offscreen, dest_x, dest_y, width, height, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
_gdk_offscreen_window_new (GdkWindow     *window,
Packit Service fb6fa5
			   GdkScreen     *screen,
Packit Service fb6fa5
			   GdkVisual     *visual,
Packit Service fb6fa5
			   GdkWindowAttr *attributes,
Packit Service fb6fa5
			   gint           attributes_mask)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (attributes != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  if (attributes->wclass != GDK_INPUT_OUTPUT)
Packit Service fb6fa5
    return; /* Can't support input only offscreens */
Packit Service fb6fa5
Packit Service fb6fa5
  private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->parent != NULL && GDK_WINDOW_DESTROYED (private->parent))
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  private->impl = g_object_new (GDK_TYPE_OFFSCREEN_WINDOW, NULL);
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
  offscreen->wrapper = window;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen->screen = screen;
Packit Service fb6fa5
Packit Service fb6fa5
  if (attributes_mask & GDK_WA_COLORMAP)
Packit Service fb6fa5
    offscreen->colormap = g_object_ref (attributes->colormap);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (gdk_screen_get_system_visual (screen) == visual)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  offscreen->colormap = gdk_screen_get_system_colormap (screen);
Packit Service fb6fa5
	  g_object_ref (offscreen->colormap);
Packit Service fb6fa5
	}
Packit Service fb6fa5
      else
Packit Service fb6fa5
	offscreen->colormap = gdk_colormap_new (visual, FALSE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen->pixmap = gdk_pixmap_new ((GdkDrawable *)private->parent,
Packit Service fb6fa5
				      private->width,
Packit Service fb6fa5
				      private->height,
Packit Service fb6fa5
				      private->depth);
Packit Service fb6fa5
  gdk_drawable_set_colormap (offscreen->pixmap, offscreen->colormap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
gdk_offscreen_window_reparent (GdkWindow *window,
Packit Service fb6fa5
			       GdkWindow *new_parent,
Packit Service fb6fa5
			       gint       x,
Packit Service fb6fa5
			       gint       y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkWindowObject *new_parent_private = (GdkWindowObject *)new_parent;
Packit Service fb6fa5
  GdkWindowObject *old_parent;
Packit Service fb6fa5
  gboolean was_mapped;
Packit Service fb6fa5
Packit Service fb6fa5
  if (new_parent)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      /* No input-output children of input-only windows */
Packit Service fb6fa5
      if (new_parent_private->input_only && !private->input_only)
Packit Service fb6fa5
	return FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
      /* Don't create loops in hierarchy */
Packit Service fb6fa5
      if (is_parent_of (window, new_parent))
Packit Service fb6fa5
	return FALSE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  was_mapped = GDK_WINDOW_IS_MAPPED (window);
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_window_hide (window);
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->parent)
Packit Service fb6fa5
    private->parent->children = g_list_remove (private->parent->children, window);
Packit Service fb6fa5
Packit Service fb6fa5
  old_parent = private->parent;
Packit Service fb6fa5
  private->parent = new_parent_private;
Packit Service fb6fa5
  private->x = x;
Packit Service fb6fa5
  private->y = y;
Packit Service fb6fa5
Packit Service fb6fa5
  if (new_parent_private)
Packit Service fb6fa5
    private->parent->children = g_list_prepend (private->parent->children, window);
Packit Service fb6fa5
Packit Service fb6fa5
  _gdk_synthesize_crossing_events_for_geometry_change (window);
Packit Service fb6fa5
  if (old_parent)
Packit Service fb6fa5
    _gdk_synthesize_crossing_events_for_geometry_change (GDK_WINDOW (old_parent));
Packit Service fb6fa5
Packit Service fb6fa5
  return was_mapped;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
from_embedder (GdkWindow *window,
Packit Service fb6fa5
	       double embedder_x, double embedder_y,
Packit Service fb6fa5
	       double *offscreen_x, double *offscreen_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private;
Packit Service fb6fa5
Packit Service fb6fa5
  private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_emit_by_name (private->impl_window,
Packit Service fb6fa5
			 "from-embedder",
Packit Service fb6fa5
			 embedder_x, embedder_y,
Packit Service fb6fa5
			 offscreen_x, offscreen_y,
Packit Service fb6fa5
			 NULL);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
to_embedder (GdkWindow *window,
Packit Service fb6fa5
	     double offscreen_x, double offscreen_y,
Packit Service fb6fa5
	     double *embedder_x, double *embedder_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private;
Packit Service fb6fa5
Packit Service fb6fa5
  private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_emit_by_name (private->impl_window,
Packit Service fb6fa5
			 "to-embedder",
Packit Service fb6fa5
			 offscreen_x, offscreen_y,
Packit Service fb6fa5
			 embedder_x, embedder_y,
Packit Service fb6fa5
			 NULL);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
gdk_offscreen_window_get_root_coords (GdkWindow *window,
Packit Service fb6fa5
				      gint       x,
Packit Service fb6fa5
				      gint       y,
Packit Service fb6fa5
				      gint      *root_x,
Packit Service fb6fa5
				      gint      *root_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
  int tmpx, tmpy;
Packit Service fb6fa5
Packit Service fb6fa5
  tmpx = x;
Packit Service fb6fa5
  tmpy = y;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
  if (offscreen->embedder)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      double dx, dy;
Packit Service fb6fa5
      to_embedder (window,
Packit Service fb6fa5
		   x, y,
Packit Service fb6fa5
		   &dx, &dy;;
Packit Service fb6fa5
      tmpx = floor (dx + 0.5);
Packit Service fb6fa5
      tmpy = floor (dy + 0.5);
Packit Service fb6fa5
      gdk_window_get_root_coords (offscreen->embedder,
Packit Service fb6fa5
				  tmpx, tmpy,
Packit Service fb6fa5
				  &tmpx, &tmpy);
Packit Service fb6fa5
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (root_x)
Packit Service fb6fa5
    *root_x = tmpx;
Packit Service fb6fa5
  if (root_y)
Packit Service fb6fa5
    *root_y = tmpy;
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gint
Packit Service fb6fa5
gdk_offscreen_window_get_deskrelative_origin (GdkWindow *window,
Packit Service fb6fa5
					      gint      *x,
Packit Service fb6fa5
					      gint      *y)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
  int tmpx, tmpy;
Packit Service fb6fa5
Packit Service fb6fa5
  tmpx = 0;
Packit Service fb6fa5
  tmpy = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
  if (offscreen->embedder)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      double dx, dy;
Packit Service fb6fa5
      gdk_window_get_deskrelative_origin (offscreen->embedder,
Packit Service fb6fa5
					  &tmpx, &tmpy);
Packit Service fb6fa5
Packit Service fb6fa5
      to_embedder (window,
Packit Service fb6fa5
		   0, 0,
Packit Service fb6fa5
		   &dx, &dy;;
Packit Service fb6fa5
      tmpx = floor (tmpx + dx + 0.5);
Packit Service fb6fa5
      tmpy = floor (tmpy + dy + 0.5);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
  if (x)
Packit Service fb6fa5
    *x = tmpx;
Packit Service fb6fa5
  if (y)
Packit Service fb6fa5
    *y = tmpy;
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
gdk_offscreen_window_get_pointer (GdkWindow       *window,
Packit Service fb6fa5
				  gint            *x,
Packit Service fb6fa5
				  gint            *y,
Packit Service fb6fa5
				  GdkModifierType *mask)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
  int tmpx, tmpy;
Packit Service fb6fa5
  double dtmpx, dtmpy;
Packit Service fb6fa5
  GdkModifierType tmpmask;
Packit Service fb6fa5
Packit Service fb6fa5
  tmpx = 0;
Packit Service fb6fa5
  tmpy = 0;
Packit Service fb6fa5
  tmpmask = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
  if (offscreen->embedder != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gdk_window_get_pointer (offscreen->embedder, &tmpx, &tmpy, &tmpmask);
Packit Service fb6fa5
      from_embedder (window,
Packit Service fb6fa5
		     tmpx, tmpy,
Packit Service fb6fa5
		     &dtmpx, &dtmpy);
Packit Service fb6fa5
      tmpx = floor (dtmpx + 0.5);
Packit Service fb6fa5
      tmpy = floor (dtmpy + 0.5);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (x)
Packit Service fb6fa5
    *x = tmpx;
Packit Service fb6fa5
  if (y)
Packit Service fb6fa5
    *y = tmpy;
Packit Service fb6fa5
  if (mask)
Packit Service fb6fa5
    *mask = tmpmask;
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
GdkDrawable *
Packit Service fb6fa5
_gdk_offscreen_window_get_real_drawable (GdkOffscreenWindow *offscreen)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return get_real_drawable (offscreen);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_offscreen_window_get_pixmap:
Packit Service fb6fa5
 * @window: a #GdkWindow
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Gets the offscreen pixmap that an offscreen window renders into.
Packit Service fb6fa5
 * If you need to keep this around over window resizes, you need to
Packit Service fb6fa5
 * add a reference to it.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns: The offscreen pixmap, or %NULL if not offscreen
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.18
Packit Service fb6fa5
 */
Packit Service fb6fa5
GdkPixmap *
Packit Service fb6fa5
gdk_offscreen_window_get_pixmap (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
Packit Service fb6fa5
    return NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
  return offscreen->pixmap;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_raise (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  /* gdk_window_raise already changed the stacking order */
Packit Service fb6fa5
  _gdk_synthesize_crossing_events_for_geometry_change (window);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_lower (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  /* gdk_window_lower already changed the stacking order */
Packit Service fb6fa5
  _gdk_synthesize_crossing_events_for_geometry_change (window);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_move_resize_internal (GdkWindow *window,
Packit Service fb6fa5
					   gint       x,
Packit Service fb6fa5
					   gint       y,
Packit Service fb6fa5
					   gint       width,
Packit Service fb6fa5
					   gint       height,
Packit Service fb6fa5
					   gboolean   send_expose_events)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
  gint dx, dy, dw, dh;
Packit Service fb6fa5
  GdkGC *gc;
Packit Service fb6fa5
  GdkPixmap *old_pixmap;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  if (width < 1)
Packit Service fb6fa5
    width = 1;
Packit Service fb6fa5
  if (height < 1)
Packit Service fb6fa5
    height = 1;
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->destroyed)
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  dx = x - private->x;
Packit Service fb6fa5
  dy = y - private->y;
Packit Service fb6fa5
  dw = width - private->width;
Packit Service fb6fa5
  dh = height - private->height;
Packit Service fb6fa5
Packit Service fb6fa5
  private->x = x;
Packit Service fb6fa5
  private->y = y;
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->width != width ||
Packit Service fb6fa5
      private->height != height)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      private->width = width;
Packit Service fb6fa5
      private->height = height;
Packit Service fb6fa5
Packit Service fb6fa5
      old_pixmap = offscreen->pixmap;
Packit Service fb6fa5
      offscreen->pixmap = gdk_pixmap_new (GDK_DRAWABLE (old_pixmap),
Packit Service fb6fa5
					  width,
Packit Service fb6fa5
					  height,
Packit Service fb6fa5
					  private->depth);
Packit Service fb6fa5
Packit Service fb6fa5
      gc = _gdk_drawable_get_scratch_gc (offscreen->pixmap, FALSE);
Packit Service fb6fa5
      gdk_draw_drawable (offscreen->pixmap,
Packit Service fb6fa5
			 gc,
Packit Service fb6fa5
			 old_pixmap,
Packit Service fb6fa5
			 0,0, 0, 0,
Packit Service fb6fa5
			 -1, -1);
Packit Service fb6fa5
      g_object_unref (old_pixmap);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (GDK_WINDOW_IS_MAPPED (private))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      // TODO: Only invalidate new area, i.e. for larger windows
Packit Service fb6fa5
      gdk_window_invalidate_rect (window, NULL, TRUE);
Packit Service fb6fa5
      _gdk_synthesize_crossing_events_for_geometry_change (window);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_move_resize (GdkWindow *window,
Packit Service fb6fa5
				  gboolean   with_move,
Packit Service fb6fa5
				  gint       x,
Packit Service fb6fa5
				  gint       y,
Packit Service fb6fa5
				  gint       width,
Packit Service fb6fa5
				  gint       height)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  if (!with_move)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      x = private->x;
Packit Service fb6fa5
      y = private->y;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (width < 0)
Packit Service fb6fa5
    width = private->width;
Packit Service fb6fa5
Packit Service fb6fa5
  if (height < 0)
Packit Service fb6fa5
    height = private->height;
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_offscreen_window_move_resize_internal (window, x, y,
Packit Service fb6fa5
					     width, height,
Packit Service fb6fa5
					     TRUE);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_show (GdkWindow *window,
Packit Service fb6fa5
			   gboolean already_mapped)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_window_clear_area_e (window, 0, 0,
Packit Service fb6fa5
			   private->width, private->height);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_hide (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
  GdkDisplay *display;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (window != NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  private = (GdkWindowObject*) window;
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  /* May need to break grabs on children */
Packit Service fb6fa5
  display = gdk_drawable_get_display (window);
Packit Service fb6fa5
Packit Service fb6fa5
  /* TODO: This needs updating to the new grab world */
Packit Service fb6fa5
#if 0
Packit Service fb6fa5
  if (display->pointer_grab.window != NULL)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (is_parent_of (window, display->pointer_grab.window))
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  /* Call this ourselves, even though gdk_display_pointer_ungrab
Packit Service fb6fa5
	     does so too, since we want to pass implicit == TRUE so the
Packit Service fb6fa5
	     broken grab event is generated */
Packit Service fb6fa5
	  _gdk_display_unset_has_pointer_grab (display,
Packit Service fb6fa5
					       TRUE,
Packit Service fb6fa5
					       FALSE,
Packit Service fb6fa5
					       GDK_CURRENT_TIME);
Packit Service fb6fa5
	  gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
#endif
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_withdraw (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GdkEventMask
Packit Service fb6fa5
gdk_offscreen_window_get_events (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_set_events (GdkWindow       *window,
Packit Service fb6fa5
				 GdkEventMask     event_mask)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_set_background (GdkWindow      *window,
Packit Service fb6fa5
				     const GdkColor *color)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkColormap *colormap = gdk_drawable_get_colormap (window);
Packit Service fb6fa5
Packit Service fb6fa5
  private->bg_color = *color;
Packit Service fb6fa5
  gdk_colormap_query_color (colormap, private->bg_color.pixel, &private->bg_color);
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->bg_pixmap &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_NO_BG)
Packit Service fb6fa5
    g_object_unref (private->bg_pixmap);
Packit Service fb6fa5
Packit Service fb6fa5
  private->bg_pixmap = NULL;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_set_back_pixmap (GdkWindow *window,
Packit Service fb6fa5
				      GdkPixmap *pixmap)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  if (pixmap &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_NO_BG &&
Packit Service fb6fa5
      !gdk_drawable_get_colormap (pixmap))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (private->bg_pixmap &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_NO_BG)
Packit Service fb6fa5
    g_object_unref (private->bg_pixmap);
Packit Service fb6fa5
Packit Service fb6fa5
  private->bg_pixmap = pixmap;
Packit Service fb6fa5
Packit Service fb6fa5
  if (pixmap &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
Packit Service fb6fa5
      private->bg_pixmap != GDK_NO_BG)
Packit Service fb6fa5
    g_object_ref (pixmap);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_shape_combine_region (GdkWindow       *window,
Packit Service fb6fa5
					   const GdkRegion *shape_region,
Packit Service fb6fa5
					   gint             offset_x,
Packit Service fb6fa5
					   gint             offset_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_input_shape_combine_region (GdkWindow       *window,
Packit Service fb6fa5
						 const GdkRegion *shape_region,
Packit Service fb6fa5
						 gint             offset_x,
Packit Service fb6fa5
						 gint             offset_y)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
gdk_offscreen_window_set_static_gravities (GdkWindow *window,
Packit Service fb6fa5
					   gboolean   use_static)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_set_cursor (GdkWindow *window,
Packit Service fb6fa5
				 GdkCursor *cursor)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  if (offscreen->cursor)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gdk_cursor_unref (offscreen->cursor);
Packit Service fb6fa5
      offscreen->cursor = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (cursor)
Packit Service fb6fa5
    offscreen->cursor = gdk_cursor_ref (cursor);
Packit Service fb6fa5
Packit Service fb6fa5
  /* TODO: The cursor is never actually used... */
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_get_geometry (GdkWindow *window,
Packit Service fb6fa5
				   gint      *x,
Packit Service fb6fa5
				   gint      *y,
Packit Service fb6fa5
				   gint      *width,
Packit Service fb6fa5
				   gint      *height,
Packit Service fb6fa5
				   gint      *depth)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
Packit Service fb6fa5
Packit Service fb6fa5
  if (!GDK_WINDOW_DESTROYED (window))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (x)
Packit Service fb6fa5
	*x = private->x;
Packit Service fb6fa5
      if (y)
Packit Service fb6fa5
	*y = private->y;
Packit Service fb6fa5
      if (width)
Packit Service fb6fa5
	*width = private->width;
Packit Service fb6fa5
      if (height)
Packit Service fb6fa5
	*height = private->height;
Packit Service fb6fa5
      if (depth)
Packit Service fb6fa5
	*depth = private->depth;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean
Packit Service fb6fa5
gdk_offscreen_window_queue_antiexpose (GdkWindow *window,
Packit Service fb6fa5
				       GdkRegion *area)
Packit Service fb6fa5
{
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_queue_translation (GdkWindow *window,
Packit Service fb6fa5
					GdkGC     *gc,
Packit Service fb6fa5
					GdkRegion *area,
Packit Service fb6fa5
					gint       dx,
Packit Service fb6fa5
					gint       dy)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_offscreen_window_set_embedder:
Packit Service fb6fa5
 * @window: a #GdkWindow
Packit Service fb6fa5
 * @embedder: the #GdkWindow that @window gets embedded in
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Sets @window to be embedded in @embedder.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * To fully embed an offscreen window, in addition to calling this
Packit Service fb6fa5
 * function, it is also necessary to handle the #GdkWindow::pick-embedded-child
Packit Service fb6fa5
 * signal on the @embedder and the #GdkWindow::to-embedder and
Packit Service fb6fa5
 * #GdkWindow::from-embedder signals on @window.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.18
Packit Service fb6fa5
 */
Packit Service fb6fa5
void
Packit Service fb6fa5
gdk_offscreen_window_set_embedder (GdkWindow     *window,
Packit Service fb6fa5
				   GdkWindow     *embedder)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_if_fail (GDK_IS_WINDOW (window));
Packit Service fb6fa5
Packit Service fb6fa5
  if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
Packit Service fb6fa5
    return;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  if (embedder)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_ref (embedder);
Packit Service fb6fa5
      GDK_WINDOW_OBJECT (embedder)->num_offscreen_children++;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (offscreen->embedder)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_object_unref (offscreen->embedder);
Packit Service fb6fa5
      GDK_WINDOW_OBJECT (offscreen->embedder)->num_offscreen_children--;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen->embedder = embedder;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/**
Packit Service fb6fa5
 * gdk_offscreen_window_get_embedder:
Packit Service fb6fa5
 * @window: a #GdkWindow
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Gets the window that @window is embedded in.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Returns: the embedding #GdkWindow, or %NULL if @window is not an
Packit Service fb6fa5
 *     embedded offscreen window
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Since: 2.18
Packit Service fb6fa5
 */
Packit Service fb6fa5
GdkWindow *
Packit Service fb6fa5
gdk_offscreen_window_get_embedder (GdkWindow *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkWindowObject *private = (GdkWindowObject *)window;
Packit Service fb6fa5
  GdkOffscreenWindow *offscreen;
Packit Service fb6fa5
Packit Service fb6fa5
  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
Packit Service fb6fa5
    return NULL;
Packit Service fb6fa5
Packit Service fb6fa5
  offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
Packit Service fb6fa5
Packit Service fb6fa5
  return offscreen->embedder;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
Packit Service fb6fa5
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
Packit Service fb6fa5
Packit Service fb6fa5
  object_class->finalize = gdk_offscreen_window_finalize;
Packit Service fb6fa5
Packit Service fb6fa5
  drawable_class->create_gc = gdk_offscreen_window_create_gc;
Packit Service fb6fa5
  drawable_class->_copy_to_image = gdk_offscreen_window_copy_to_image;
Packit Service fb6fa5
  drawable_class->ref_cairo_surface = gdk_offscreen_window_ref_cairo_surface;
Packit Service fb6fa5
  drawable_class->set_colormap = gdk_offscreen_window_set_colormap;
Packit Service fb6fa5
  drawable_class->get_colormap = gdk_offscreen_window_get_colormap;
Packit Service fb6fa5
  drawable_class->get_depth = gdk_offscreen_window_get_depth;
Packit Service fb6fa5
  drawable_class->get_screen = gdk_offscreen_window_get_screen;
Packit Service fb6fa5
  drawable_class->get_visual = gdk_offscreen_window_get_visual;
Packit Service fb6fa5
  drawable_class->get_source_drawable = gdk_offscreen_window_get_source_drawable;
Packit Service fb6fa5
  drawable_class->get_composite_drawable = gdk_offscreen_window_get_composite_drawable;
Packit Service fb6fa5
Packit Service fb6fa5
  drawable_class->draw_rectangle = gdk_offscreen_window_draw_rectangle;
Packit Service fb6fa5
  drawable_class->draw_arc = gdk_offscreen_window_draw_arc;
Packit Service fb6fa5
  drawable_class->draw_polygon = gdk_offscreen_window_draw_polygon;
Packit Service fb6fa5
  drawable_class->draw_text = gdk_offscreen_window_draw_text;
Packit Service fb6fa5
  drawable_class->draw_text_wc = gdk_offscreen_window_draw_text_wc;
Packit Service fb6fa5
  drawable_class->draw_drawable_with_src = gdk_offscreen_window_draw_drawable;
Packit Service fb6fa5
  drawable_class->draw_points = gdk_offscreen_window_draw_points;
Packit Service fb6fa5
  drawable_class->draw_segments = gdk_offscreen_window_draw_segments;
Packit Service fb6fa5
  drawable_class->draw_lines = gdk_offscreen_window_draw_lines;
Packit Service fb6fa5
  drawable_class->draw_image = gdk_offscreen_window_draw_image;
Packit Service fb6fa5
  drawable_class->draw_pixbuf = gdk_offscreen_window_draw_pixbuf;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface)
Packit Service fb6fa5
{
Packit Service fb6fa5
  iface->show = gdk_offscreen_window_show;
Packit Service fb6fa5
  iface->hide = gdk_offscreen_window_hide;
Packit Service fb6fa5
  iface->withdraw = gdk_offscreen_window_withdraw;
Packit Service fb6fa5
  iface->raise = gdk_offscreen_window_raise;
Packit Service fb6fa5
  iface->lower = gdk_offscreen_window_lower;
Packit Service fb6fa5
  iface->move_resize = gdk_offscreen_window_move_resize;
Packit Service fb6fa5
  iface->set_background = gdk_offscreen_window_set_background;
Packit Service fb6fa5
  iface->set_back_pixmap = gdk_offscreen_window_set_back_pixmap;
Packit Service fb6fa5
  iface->get_events = gdk_offscreen_window_get_events;
Packit Service fb6fa5
  iface->set_events = gdk_offscreen_window_set_events;
Packit Service fb6fa5
  iface->reparent = gdk_offscreen_window_reparent;
Packit Service fb6fa5
  iface->set_cursor = gdk_offscreen_window_set_cursor;
Packit Service fb6fa5
  iface->get_geometry = gdk_offscreen_window_get_geometry;
Packit Service fb6fa5
  iface->shape_combine_region = gdk_offscreen_window_shape_combine_region;
Packit Service fb6fa5
  iface->input_shape_combine_region = gdk_offscreen_window_input_shape_combine_region;
Packit Service fb6fa5
  iface->set_static_gravities = gdk_offscreen_window_set_static_gravities;
Packit Service fb6fa5
  iface->queue_antiexpose = gdk_offscreen_window_queue_antiexpose;
Packit Service fb6fa5
  iface->queue_translation = gdk_offscreen_window_queue_translation;
Packit Service fb6fa5
  iface->get_root_coords = gdk_offscreen_window_get_root_coords;
Packit Service fb6fa5
  iface->get_deskrelative_origin = gdk_offscreen_window_get_deskrelative_origin;
Packit Service fb6fa5
  iface->get_pointer = gdk_offscreen_window_get_pointer;
Packit Service fb6fa5
  iface->destroy = gdk_offscreen_window_destroy;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
#define __GDK_OFFSCREEN_WINDOW_C__
Packit Service fb6fa5
#include "gdkaliasdef.c"