1 /* GDK - The GIMP Drawing Kit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 * Modified by the GTK+ Team and others 1997-2005. See the AUTHORS
22 * file for a list of people on the GTK+ Team. See the ChangeLog
23 * files for a list of changes. These files are distributed with
24 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
30 #include "gdkwindow.h"
31 #include "gdkinternals.h"
32 #include "gdkwindowimpl.h"
33 #include "gdkpixmap.h"
34 #include "gdkdrawable.h"
36 #include "gdkscreen.h"
39 #include "gdkcursor.h"
44 * Offscreen windows can't be the child of a foreign window,
45 * nor contain foreign windows
46 * GDK_POINTER_MOTION_HINT_MASK isn't effective
49 typedef struct _GdkOffscreenWindow GdkOffscreenWindow;
50 typedef struct _GdkOffscreenWindowClass GdkOffscreenWindowClass;
52 struct _GdkOffscreenWindow
54 GdkDrawable parent_instance;
58 GdkColormap *colormap;
64 struct _GdkOffscreenWindowClass
66 GdkDrawableClass parent_class;
69 #define GDK_TYPE_OFFSCREEN_WINDOW (gdk_offscreen_window_get_type())
70 #define GDK_OFFSCREEN_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindow))
71 #define GDK_IS_OFFSCREEN_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_OFFSCREEN_WINDOW))
72 #define GDK_OFFSCREEN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindowClass))
73 #define GDK_IS_OFFSCREEN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_OFFSCREEN_WINDOW))
74 #define GDK_OFFSCREEN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindowClass))
76 static void gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface);
77 static void gdk_offscreen_window_hide (GdkWindow *window);
79 G_DEFINE_TYPE_WITH_CODE (GdkOffscreenWindow,
82 G_IMPLEMENT_INTERFACE (GDK_TYPE_WINDOW_IMPL,
83 gdk_offscreen_window_impl_iface_init));
87 gdk_offscreen_window_finalize (GObject *object)
89 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (object);
91 if (offscreen->cursor)
92 gdk_cursor_unref (offscreen->cursor);
94 offscreen->cursor = NULL;
96 gdk_pixmap_unref (offscreen->pixmap);
98 G_OBJECT_CLASS (gdk_offscreen_window_parent_class)->finalize (object);
102 gdk_offscreen_window_init (GdkOffscreenWindow *window)
107 gdk_offscreen_window_destroy (GdkWindow *window,
109 gboolean foreign_destroy)
111 GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
112 GdkOffscreenWindow *offscreen;
114 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
117 gdk_offscreen_window_hide (window);
119 g_object_unref (offscreen->colormap);
120 offscreen->colormap = NULL;
124 is_parent_of (GdkWindow *parent,
135 w = gdk_window_get_parent (w);
142 gdk_offscreen_window_create_gc (GdkDrawable *drawable,
144 GdkGCValuesMask values_mask)
146 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
148 return gdk_gc_new_with_values (offscreen->pixmap, values, values_mask);
152 gdk_offscreen_window_copy_to_image (GdkDrawable *drawable,
161 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
163 return gdk_drawable_copy_to_image (offscreen->pixmap,
171 static cairo_surface_t *
172 gdk_offscreen_window_ref_cairo_surface (GdkDrawable *drawable)
174 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
176 return _gdk_drawable_ref_cairo_surface (offscreen->pixmap);
180 gdk_offscreen_window_get_colormap (GdkDrawable *drawable)
182 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
184 return offscreen->colormap;
188 gdk_offscreen_window_set_colormap (GdkDrawable *drawable,
189 GdkColormap*colormap)
191 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
193 if (colormap && GDK_WINDOW_DESTROYED (offscreen->wrapper))
196 if (offscreen->colormap == colormap)
199 if (offscreen->colormap)
200 g_object_unref (offscreen->colormap);
202 offscreen->colormap = colormap;
203 if (offscreen->colormap)
204 g_object_ref (offscreen->colormap);
209 gdk_offscreen_window_get_depth (GdkDrawable *drawable)
211 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
213 return gdk_drawable_get_depth (offscreen->wrapper);
217 gdk_offscreen_window_get_source_drawable (GdkDrawable *drawable)
219 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
221 return _gdk_drawable_get_source_drawable (offscreen->pixmap);
225 gdk_offscreen_window_get_composite_drawable (GdkDrawable *drawable,
230 gint *composite_x_offset,
231 gint *composite_y_offset)
233 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
235 return g_object_ref (offscreen->pixmap);
239 gdk_offscreen_window_get_screen (GdkDrawable *drawable)
241 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
243 return offscreen->screen;
247 gdk_offscreen_window_get_visual (GdkDrawable *drawable)
249 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
251 return gdk_drawable_get_visual (offscreen->wrapper);
255 add_damage (GdkOffscreenWindow *offscreen,
267 damage = gdk_region_rectangle (&rect);
268 _gdk_window_add_damage (offscreen->wrapper, damage);
269 gdk_region_destroy (damage);
273 get_real_drawable (GdkOffscreenWindow *offscreen)
275 GdkPixmapObject *pixmap;
276 pixmap = (GdkPixmapObject *) offscreen->pixmap;
277 return GDK_DRAWABLE (pixmap->impl);
281 gdk_offscreen_window_draw_drawable (GdkDrawable *drawable,
284 GdkDrawable *original_src,
292 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
293 GdkDrawable *real_drawable = get_real_drawable (offscreen);
295 gdk_draw_drawable (real_drawable, gc,
300 add_damage (offscreen, xdest, ydest, width, height);
304 gdk_offscreen_window_draw_rectangle (GdkDrawable *drawable,
312 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
313 GdkDrawable *real_drawable = get_real_drawable (offscreen);
315 gdk_draw_rectangle (real_drawable,
316 gc, filled, x, y, width, height);
318 add_damage (offscreen, x, y, width, height);
323 gdk_offscreen_window_draw_arc (GdkDrawable *drawable,
333 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
334 GdkDrawable *real_drawable = get_real_drawable (offscreen);
336 gdk_draw_arc (real_drawable,
345 add_damage (offscreen, x, y, width, height);
349 gdk_offscreen_window_draw_polygon (GdkDrawable *drawable,
355 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
356 GdkDrawable *real_drawable = get_real_drawable (offscreen);
358 gdk_draw_polygon (real_drawable,
366 int min_x, min_y, max_x, max_y, i;
368 min_x = max_x = points[0].x;
369 min_y = max_y = points[0].y;
371 for (i = 1; i < npoints; i++)
373 min_x = MIN (min_x, points[i].x);
374 max_x = MAX (max_x, points[i].x);
375 min_y = MIN (min_y, points[i].y);
376 max_y = MAX (max_y, points[i].y);
379 add_damage (offscreen, min_x, min_y,
386 gdk_offscreen_window_draw_text (GdkDrawable *drawable,
394 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
395 GdkDrawable *real_drawable = get_real_drawable (offscreen);
396 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
398 gdk_draw_text (real_drawable,
406 /* Hard to compute the minimal size, not that often used anyway. */
407 add_damage (offscreen, 0, 0, private->width, private->height);
411 gdk_offscreen_window_draw_text_wc (GdkDrawable *drawable,
416 const GdkWChar *text,
419 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
420 GdkDrawable *real_drawable = get_real_drawable (offscreen);
421 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
423 gdk_draw_text_wc (real_drawable,
431 /* Hard to compute the minimal size, not that often used anyway. */
432 add_damage (offscreen, 0, 0, private->width, private->height);
436 gdk_offscreen_window_draw_points (GdkDrawable *drawable,
441 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
442 GdkDrawable *real_drawable = get_real_drawable (offscreen);
444 gdk_draw_points (real_drawable,
452 int min_x, min_y, max_x, max_y, i;
454 min_x = max_x = points[0].x;
455 min_y = max_y = points[0].y;
457 for (i = 1; i < npoints; i++)
459 min_x = MIN (min_x, points[i].x);
460 max_x = MAX (max_x, points[i].x);
461 min_y = MIN (min_y, points[i].y);
462 max_y = MAX (max_y, points[i].y);
465 add_damage (offscreen, min_x, min_y,
472 gdk_offscreen_window_draw_segments (GdkDrawable *drawable,
477 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
478 GdkDrawable *real_drawable = get_real_drawable (offscreen);
480 gdk_draw_segments (real_drawable,
487 int min_x, min_y, max_x, max_y, i;
489 min_x = max_x = segs[0].x1;
490 min_y = max_y = segs[0].y1;
492 for (i = 1; i < nsegs; i++)
494 min_x = MIN (min_x, segs[i].x1);
495 max_x = MAX (max_x, segs[i].x1);
496 min_x = MIN (min_x, segs[i].x2);
497 max_x = MAX (max_x, segs[i].x2);
498 min_y = MIN (min_y, segs[i].y1);
499 max_y = MAX (max_y, segs[i].y1);
500 min_y = MIN (min_y, segs[i].y2);
501 max_y = MAX (max_y, segs[i].y2);
504 add_damage (offscreen, min_x, min_y,
512 gdk_offscreen_window_draw_lines (GdkDrawable *drawable,
517 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
518 GdkDrawable *real_drawable = get_real_drawable (offscreen);
519 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
521 gdk_draw_lines (real_drawable,
526 /* Hard to compute the minimal size, as we don't know the line
527 width, and since joins are hard to calculate.
528 Its not that often used anyway, damage it all */
529 add_damage (offscreen, 0, 0, private->width, private->height);
533 gdk_offscreen_window_draw_image (GdkDrawable *drawable,
543 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
544 GdkDrawable *real_drawable = get_real_drawable (offscreen);
546 gdk_draw_image (real_drawable,
556 add_damage (offscreen, xdest, ydest, width, height);
561 gdk_offscreen_window_draw_pixbuf (GdkDrawable *drawable,
574 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
575 GdkDrawable *real_drawable = get_real_drawable (offscreen);
577 gdk_draw_pixbuf (real_drawable,
590 add_damage (offscreen, dest_x, dest_y, width, height);
595 _gdk_offscreen_window_new (GdkWindow *window,
598 GdkWindowAttr *attributes,
599 gint attributes_mask)
601 GdkWindowObject *parent_private;
602 GdkWindowObject *private;
603 GdkOffscreenWindow *offscreen;
605 g_return_if_fail (attributes != NULL);
607 if (attributes->wclass != GDK_INPUT_OUTPUT)
608 return; /* Can't support input only offscreens */
610 private = (GdkWindowObject *)window;
612 if (private->parent != NULL && GDK_WINDOW_DESTROYED (private->parent))
615 parent_private = (GdkWindowObject*) private->parent;
616 private->impl = g_object_new (GDK_TYPE_OFFSCREEN_WINDOW, NULL);
617 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
618 offscreen->wrapper = window;
620 offscreen->screen = screen;
622 if (attributes_mask & GDK_WA_COLORMAP)
623 offscreen->colormap = g_object_ref (attributes->colormap);
626 if (gdk_screen_get_system_visual (screen) == visual)
628 offscreen->colormap = gdk_screen_get_system_colormap (screen);
629 g_object_ref (offscreen->colormap);
632 offscreen->colormap = gdk_colormap_new (visual, FALSE);
635 offscreen->pixmap = gdk_pixmap_new ((GdkDrawable *)private->parent,
642 gdk_offscreen_window_reparent (GdkWindow *window,
643 GdkWindow *new_parent,
647 GdkWindowObject *private = (GdkWindowObject *)window;
648 GdkWindowObject *new_parent_private = (GdkWindowObject *)new_parent;
649 GdkWindowObject *old_parent;
650 GdkOffscreenWindow *offscreen;
655 /* No input-output children of input-only windows */
656 if (new_parent_private->input_only && !private->input_only)
659 /* Don't create loops in hierarchy */
660 if (is_parent_of (window, new_parent))
664 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
666 was_mapped = GDK_WINDOW_IS_MAPPED (window);
668 gdk_window_hide (window);
671 private->parent->children = g_list_remove (private->parent->children, window);
673 old_parent = private->parent;
674 private->parent = new_parent_private;
678 if (new_parent_private)
679 private->parent->children = g_list_prepend (private->parent->children, window);
681 _gdk_syntesize_crossing_events_for_geometry_change (window);
683 _gdk_syntesize_crossing_events_for_geometry_change (GDK_WINDOW (old_parent));
690 get_offscreen_parent (GdkWindow *window)
692 GdkWindowObject *private;
695 private = (GdkWindowObject *)window;
698 g_signal_emit_by_name (private->impl_window,
699 "get-offscreen-parent",
706 from_parent (GdkWindow *window,
707 double parent_x, double parent_y,
708 double *offscreen_x, double *offscreen_y)
710 GdkWindowObject *private;
712 private = (GdkWindowObject *)window;
714 g_signal_emit_by_name (private->impl_window,
717 offscreen_x, offscreen_y,
722 to_parent (GdkWindow *window,
723 double offscreen_x, double offscreen_y,
724 double *parent_x, double *parent_y)
726 GdkWindowObject *private;
728 private = (GdkWindowObject *)window;
730 g_signal_emit_by_name (private->impl_window,
732 offscreen_x, offscreen_y,
738 gdk_offscreen_window_get_origin (GdkWindow *window,
748 parent = get_offscreen_parent (window);
752 gdk_window_get_origin (parent,
758 tmpx = floor (tmpx + dx + 0.5);
759 tmpy = floor (tmpy + dy + 0.5);
772 gdk_offscreen_window_get_deskrelative_origin (GdkWindow *window,
782 parent = get_offscreen_parent (window);
786 gdk_window_get_deskrelative_origin (parent,
792 tmpx = floor (tmpx + dx + 0.5);
793 tmpy = floor (tmpy + dy + 0.5);
806 gdk_offscreen_window_get_pointer (GdkWindow *window,
809 GdkModifierType *mask)
813 GdkModifierType tmpmask;
820 parent = get_offscreen_parent (window);
823 gdk_window_get_pointer (parent, &tmpx, &tmpy, &tmpmask);
827 tmpx = floor (dtmpx + 0.5);
828 tmpy = floor (dtmpy + 0.5);
841 * gdk_window_get_offscreen_pixmap:
842 * @window: a #GdkWindow
844 * Gets the offscreen pixmap that an offscreen window renders into. If
845 * you need to keep this around over window resizes, you need to add a
848 * Returns: The offscreen pixmap, or NULL if not offscreen
851 gdk_window_get_offscreen_pixmap (GdkWindow *window)
853 GdkWindowObject *private = (GdkWindowObject *)window;
854 GdkOffscreenWindow *offscreen;
856 g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
858 if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
861 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
862 return offscreen->pixmap;
866 gdk_offscreen_window_raise (GdkWindow *window)
868 /* gdk_window_raise already changed the stacking order */
869 _gdk_syntesize_crossing_events_for_geometry_change (window);
873 gdk_offscreen_window_lower (GdkWindow *window)
875 /* gdk_window_lower already changed the stacking order */
876 _gdk_syntesize_crossing_events_for_geometry_change (window);
880 gdk_offscreen_window_move_resize_internal (GdkWindow *window,
885 gboolean send_expose_events)
887 GdkWindowObject *private = (GdkWindowObject *)window;
888 GdkOffscreenWindow *offscreen;
891 GdkPixmap *old_pixmap;
893 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
900 if (private->destroyed)
905 dw = width - private->width;
906 dh = height - private->height;
911 if (private->width != width ||
912 private->height != height)
914 private->width = width;
915 private->height = height;
917 old_pixmap = offscreen->pixmap;
918 offscreen->pixmap = gdk_pixmap_new (GDK_DRAWABLE (old_pixmap),
923 gc = _gdk_drawable_get_scratch_gc (offscreen->pixmap, FALSE);
924 gdk_draw_drawable (offscreen->pixmap,
929 g_object_unref (old_pixmap);
932 if (GDK_WINDOW_IS_MAPPED (private))
934 // TODO: Only invalidate new area, i.e. for larger windows
935 gdk_window_invalidate_rect (window, NULL, TRUE);
936 _gdk_syntesize_crossing_events_for_geometry_change (window);
941 gdk_offscreen_window_move_resize (GdkWindow *window,
948 GdkWindowObject *private = (GdkWindowObject *)window;
949 GdkOffscreenWindow *offscreen;
951 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
960 width = private->width;
963 height = private->height;
965 gdk_offscreen_window_move_resize_internal (window, x, y,
971 gdk_offscreen_window_show (GdkWindow *window)
973 GdkWindowObject *private = (GdkWindowObject *)window;
975 gdk_window_clear_area_e (window, 0, 0,
976 private->width, private->height);
981 gdk_offscreen_window_hide (GdkWindow *window)
983 GdkWindowObject *private;
984 GdkOffscreenWindow *offscreen;
987 g_return_if_fail (window != NULL);
989 private = (GdkWindowObject*) window;
990 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
992 /* May need to break grabs on children */
993 display = gdk_drawable_get_display (window);
995 /* TODO: This needs updating to the new grab world */
997 if (display->pointer_grab.window != NULL)
999 if (is_parent_of (window, display->pointer_grab.window))
1001 /* Call this ourselves, even though gdk_display_pointer_ungrab
1002 does so too, since we want to pass implicit == TRUE so the
1003 broken grab event is generated */
1004 _gdk_display_unset_has_pointer_grab (display,
1008 gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
1015 gdk_offscreen_window_withdraw (GdkWindow *window)
1020 gdk_offscreen_window_get_events (GdkWindow *window)
1026 gdk_offscreen_window_set_events (GdkWindow *window,
1027 GdkEventMask event_mask)
1032 gdk_offscreen_window_set_background (GdkWindow *window,
1033 const GdkColor *color)
1035 GdkWindowObject *private = (GdkWindowObject *)window;
1036 GdkColormap *colormap = gdk_drawable_get_colormap (window);
1038 private->bg_color = *color;
1039 gdk_colormap_query_color (colormap, private->bg_color.pixel, &private->bg_color);
1041 if (private->bg_pixmap &&
1042 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
1043 private->bg_pixmap != GDK_NO_BG)
1044 g_object_unref (private->bg_pixmap);
1046 private->bg_pixmap = NULL;
1050 gdk_offscreen_window_set_back_pixmap (GdkWindow *window,
1053 GdkWindowObject *private = (GdkWindowObject *)window;
1056 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
1057 private->bg_pixmap != GDK_NO_BG &&
1058 !gdk_drawable_get_colormap (pixmap))
1060 g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
1064 if (private->bg_pixmap &&
1065 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
1066 private->bg_pixmap != GDK_NO_BG)
1067 g_object_unref (private->bg_pixmap);
1069 private->bg_pixmap = pixmap;
1072 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
1073 private->bg_pixmap != GDK_NO_BG)
1074 g_object_ref (pixmap);
1078 gdk_offscreen_window_shape_combine_region (GdkWindow *window,
1079 const GdkRegion *shape_region,
1086 gdk_offscreen_window_input_shape_combine_region (GdkWindow *window,
1087 const GdkRegion *shape_region,
1094 gdk_offscreen_window_set_static_gravities (GdkWindow *window,
1095 gboolean use_static)
1101 gdk_offscreen_window_set_cursor (GdkWindow *window,
1104 GdkWindowObject *private = (GdkWindowObject *)window;
1105 GdkOffscreenWindow *offscreen;
1107 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
1109 if (offscreen->cursor)
1111 gdk_cursor_unref (offscreen->cursor);
1112 offscreen->cursor = NULL;
1116 offscreen->cursor = gdk_cursor_ref (cursor);
1118 /* TODO: The cursor is never actually used... */
1122 gdk_offscreen_window_get_geometry (GdkWindow *window,
1129 GdkWindowObject *private = (GdkWindowObject *)window;
1130 GdkOffscreenWindow *offscreen;
1132 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
1134 g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
1136 if (!GDK_WINDOW_DESTROYED (window))
1143 *width = private->width;
1145 *height = private->height;
1147 *depth = private->depth;
1152 gdk_offscreen_window_queue_antiexpose (GdkWindow *window,
1159 gdk_offscreen_window_queue_translation (GdkWindow *window,
1168 gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
1170 GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
1171 GObjectClass *object_class = G_OBJECT_CLASS (klass);
1173 object_class->finalize = gdk_offscreen_window_finalize;
1175 drawable_class->create_gc = gdk_offscreen_window_create_gc;
1176 drawable_class->_copy_to_image = gdk_offscreen_window_copy_to_image;
1177 drawable_class->ref_cairo_surface = gdk_offscreen_window_ref_cairo_surface;
1178 drawable_class->set_colormap = gdk_offscreen_window_set_colormap;
1179 drawable_class->get_colormap = gdk_offscreen_window_get_colormap;
1180 drawable_class->get_depth = gdk_offscreen_window_get_depth;
1181 drawable_class->get_screen = gdk_offscreen_window_get_screen;
1182 drawable_class->get_visual = gdk_offscreen_window_get_visual;
1183 drawable_class->get_source_drawable = gdk_offscreen_window_get_source_drawable;
1184 drawable_class->get_composite_drawable = gdk_offscreen_window_get_composite_drawable;
1186 drawable_class->draw_rectangle = gdk_offscreen_window_draw_rectangle;
1187 drawable_class->draw_arc = gdk_offscreen_window_draw_arc;
1188 drawable_class->draw_polygon = gdk_offscreen_window_draw_polygon;
1189 drawable_class->draw_text = gdk_offscreen_window_draw_text;
1190 drawable_class->draw_text_wc = gdk_offscreen_window_draw_text_wc;
1191 drawable_class->draw_drawable = gdk_offscreen_window_draw_drawable;
1192 drawable_class->draw_points = gdk_offscreen_window_draw_points;
1193 drawable_class->draw_segments = gdk_offscreen_window_draw_segments;
1194 drawable_class->draw_lines = gdk_offscreen_window_draw_lines;
1195 drawable_class->draw_image = gdk_offscreen_window_draw_image;
1196 drawable_class->draw_pixbuf = gdk_offscreen_window_draw_pixbuf;
1200 gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface)
1202 iface->show = gdk_offscreen_window_show;
1203 iface->hide = gdk_offscreen_window_hide;
1204 iface->withdraw = gdk_offscreen_window_withdraw;
1205 iface->raise = gdk_offscreen_window_raise;
1206 iface->lower = gdk_offscreen_window_lower;
1207 iface->move_resize = gdk_offscreen_window_move_resize;
1208 iface->set_background = gdk_offscreen_window_set_background;
1209 iface->set_back_pixmap = gdk_offscreen_window_set_back_pixmap;
1210 iface->get_events = gdk_offscreen_window_get_events;
1211 iface->set_events = gdk_offscreen_window_set_events;
1212 iface->reparent = gdk_offscreen_window_reparent;
1213 iface->set_cursor = gdk_offscreen_window_set_cursor;
1214 iface->get_geometry = gdk_offscreen_window_get_geometry;
1215 iface->shape_combine_region = gdk_offscreen_window_shape_combine_region;
1216 iface->input_shape_combine_region = gdk_offscreen_window_input_shape_combine_region;
1217 iface->set_static_gravities = gdk_offscreen_window_set_static_gravities;
1218 iface->queue_antiexpose = gdk_offscreen_window_queue_antiexpose;
1219 iface->queue_translation = gdk_offscreen_window_queue_translation;
1220 iface->get_origin = gdk_offscreen_window_get_origin;
1221 iface->get_deskrelative_origin = gdk_offscreen_window_get_deskrelative_origin;
1222 iface->get_pointer = gdk_offscreen_window_get_pointer;
1223 iface->destroy = gdk_offscreen_window_destroy;
1226 #define __GDK_OFFSCREEN_WINDOW_C__
1227 #include "gdkaliasdef.c"