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,
291 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
292 GdkDrawable *real_drawable = get_real_drawable (offscreen);
294 gdk_draw_drawable (real_drawable, gc,
299 add_damage (offscreen, xdest, ydest, width, height);
303 gdk_offscreen_window_draw_rectangle (GdkDrawable *drawable,
311 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
312 GdkDrawable *real_drawable = get_real_drawable (offscreen);
314 gdk_draw_rectangle (real_drawable,
315 gc, filled, x, y, width, height);
317 add_damage (offscreen, x, y, width, height);
322 gdk_offscreen_window_draw_arc (GdkDrawable *drawable,
332 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
333 GdkDrawable *real_drawable = get_real_drawable (offscreen);
335 gdk_draw_arc (real_drawable,
344 add_damage (offscreen, x, y, width, height);
348 gdk_offscreen_window_draw_polygon (GdkDrawable *drawable,
354 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
355 GdkDrawable *real_drawable = get_real_drawable (offscreen);
357 gdk_draw_polygon (real_drawable,
365 int min_x, min_y, max_x, max_y, i;
367 min_x = max_x = points[0].x;
368 min_y = max_y = points[0].y;
370 for (i = 1; i < npoints; i++)
372 min_x = MIN (min_x, points[i].x);
373 max_x = MAX (max_x, points[i].x);
374 min_y = MIN (min_y, points[i].y);
375 max_y = MAX (max_y, points[i].y);
378 add_damage (offscreen, min_x, min_y,
385 gdk_offscreen_window_draw_text (GdkDrawable *drawable,
393 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
394 GdkDrawable *real_drawable = get_real_drawable (offscreen);
395 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
397 gdk_draw_text (real_drawable,
405 /* Hard to compute the minimal size, not that often used anyway. */
406 add_damage (offscreen, 0, 0, private->width, private->height);
410 gdk_offscreen_window_draw_text_wc (GdkDrawable *drawable,
415 const GdkWChar *text,
418 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
419 GdkDrawable *real_drawable = get_real_drawable (offscreen);
420 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
422 gdk_draw_text_wc (real_drawable,
430 /* Hard to compute the minimal size, not that often used anyway. */
431 add_damage (offscreen, 0, 0, private->width, private->height);
435 gdk_offscreen_window_draw_points (GdkDrawable *drawable,
440 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
441 GdkDrawable *real_drawable = get_real_drawable (offscreen);
443 gdk_draw_points (real_drawable,
451 int min_x, min_y, max_x, max_y, i;
453 min_x = max_x = points[0].x;
454 min_y = max_y = points[0].y;
456 for (i = 1; i < npoints; i++)
458 min_x = MIN (min_x, points[i].x);
459 max_x = MAX (max_x, points[i].x);
460 min_y = MIN (min_y, points[i].y);
461 max_y = MAX (max_y, points[i].y);
464 add_damage (offscreen, min_x, min_y,
471 gdk_offscreen_window_draw_segments (GdkDrawable *drawable,
476 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
477 GdkDrawable *real_drawable = get_real_drawable (offscreen);
479 gdk_draw_segments (real_drawable,
486 int min_x, min_y, max_x, max_y, i;
488 min_x = max_x = segs[0].x1;
489 min_y = max_y = segs[0].y1;
491 for (i = 1; i < nsegs; i++)
493 min_x = MIN (min_x, segs[i].x1);
494 max_x = MAX (max_x, segs[i].x1);
495 min_x = MIN (min_x, segs[i].x2);
496 max_x = MAX (max_x, segs[i].x2);
497 min_y = MIN (min_y, segs[i].y1);
498 max_y = MAX (max_y, segs[i].y1);
499 min_y = MIN (min_y, segs[i].y2);
500 max_y = MAX (max_y, segs[i].y2);
503 add_damage (offscreen, min_x, min_y,
511 gdk_offscreen_window_draw_lines (GdkDrawable *drawable,
516 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
517 GdkDrawable *real_drawable = get_real_drawable (offscreen);
518 GdkWindowObject *private = GDK_WINDOW_OBJECT (offscreen->wrapper);
520 gdk_draw_lines (real_drawable,
525 /* Hard to compute the minimal size, as we don't know the line
526 width, and since joins are hard to calculate.
527 Its not that often used anyway, damage it all */
528 add_damage (offscreen, 0, 0, private->width, private->height);
532 gdk_offscreen_window_draw_image (GdkDrawable *drawable,
542 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
543 GdkDrawable *real_drawable = get_real_drawable (offscreen);
545 gdk_draw_image (real_drawable,
555 add_damage (offscreen, xdest, ydest, width, height);
560 gdk_offscreen_window_draw_pixbuf (GdkDrawable *drawable,
573 GdkOffscreenWindow *offscreen = GDK_OFFSCREEN_WINDOW (drawable);
574 GdkDrawable *real_drawable = get_real_drawable (offscreen);
576 gdk_draw_pixbuf (real_drawable,
589 add_damage (offscreen, dest_x, dest_y, width, height);
594 _gdk_offscreen_window_new (GdkWindow *window,
597 GdkWindowAttr *attributes,
598 gint attributes_mask)
600 GdkWindowObject *parent_private;
601 GdkWindowObject *private;
602 GdkOffscreenWindow *offscreen;
604 g_return_if_fail (attributes != NULL);
606 if (attributes->wclass != GDK_INPUT_OUTPUT)
607 return; /* Can't support input only offscreens */
609 private = (GdkWindowObject *)window;
611 if (private->parent != NULL && GDK_WINDOW_DESTROYED (private->parent))
614 parent_private = (GdkWindowObject*) private->parent;
615 private->impl = g_object_new (GDK_TYPE_OFFSCREEN_WINDOW, NULL);
616 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
617 offscreen->wrapper = window;
619 offscreen->screen = screen;
621 if (attributes_mask & GDK_WA_COLORMAP)
622 offscreen->colormap = g_object_ref (attributes->colormap);
625 if (gdk_screen_get_system_visual (screen) == visual)
627 offscreen->colormap = gdk_screen_get_system_colormap (screen);
628 g_object_ref (offscreen->colormap);
631 offscreen->colormap = gdk_colormap_new (visual, FALSE);
634 offscreen->pixmap = gdk_pixmap_new ((GdkDrawable *)private->parent,
641 gdk_offscreen_window_reparent (GdkWindow *window,
642 GdkWindow *new_parent,
646 GdkWindowObject *private = (GdkWindowObject *)window;
647 GdkWindowObject *new_parent_private = (GdkWindowObject *)new_parent;
648 GdkWindowObject *old_parent;
649 GdkOffscreenWindow *offscreen;
654 /* No input-output children of input-only windows */
655 if (new_parent_private->input_only && !private->input_only)
658 /* Don't create loops in hierarchy */
659 if (is_parent_of (window, new_parent))
663 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
665 was_mapped = GDK_WINDOW_IS_MAPPED (window);
667 gdk_window_hide (window);
670 private->parent->children = g_list_remove (private->parent->children, window);
672 old_parent = private->parent;
673 private->parent = new_parent_private;
677 if (new_parent_private)
678 private->parent->children = g_list_prepend (private->parent->children, window);
680 _gdk_syntesize_crossing_events_for_geometry_change (window);
682 _gdk_syntesize_crossing_events_for_geometry_change (GDK_WINDOW (old_parent));
688 gdk_offscreen_window_get_origin (GdkWindow *window,
701 * gdk_window_get_offscreen_pixmap:
702 * @window: a #GdkWindow
704 * Gets the offscreen pixmap that an offscreen window renders into. If
705 * you need to keep this around over window resizes, you need to add a
708 * Returns: The offscreen pixmap, or NULL if not offscreen
711 gdk_window_get_offscreen_pixmap (GdkWindow *window)
713 GdkWindowObject *private = (GdkWindowObject *)window;
714 GdkOffscreenWindow *offscreen;
716 g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
718 if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
721 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
722 return offscreen->pixmap;
726 gdk_offscreen_window_raise (GdkWindow *window)
728 /* gdk_window_raise already changed the stacking order */
729 _gdk_syntesize_crossing_events_for_geometry_change (window);
733 gdk_offscreen_window_lower (GdkWindow *window)
735 /* gdk_window_lower already changed the stacking order */
736 _gdk_syntesize_crossing_events_for_geometry_change (window);
740 gdk_offscreen_window_move_resize_internal (GdkWindow *window,
745 gboolean send_expose_events)
747 GdkWindowObject *private = (GdkWindowObject *)window;
748 GdkOffscreenWindow *offscreen;
751 GdkPixmap *old_pixmap;
753 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
760 if (private->destroyed)
765 dw = width - private->width;
766 dh = height - private->height;
771 if (private->width != width ||
772 private->height != height)
774 private->width = width;
775 private->height = height;
777 old_pixmap = offscreen->pixmap;
778 offscreen->pixmap = gdk_pixmap_new (GDK_DRAWABLE (old_pixmap),
783 gc = _gdk_drawable_get_scratch_gc (offscreen->pixmap, FALSE);
784 gdk_draw_drawable (offscreen->pixmap,
789 g_object_unref (old_pixmap);
792 if (GDK_WINDOW_IS_MAPPED (private))
794 // TODO: Only invalidate new area, i.e. for larger windows
795 gdk_window_invalidate_rect (window, NULL, TRUE);
796 _gdk_syntesize_crossing_events_for_geometry_change (window);
801 gdk_offscreen_window_move_resize (GdkWindow *window,
808 GdkWindowObject *private = (GdkWindowObject *)window;
809 GdkOffscreenWindow *offscreen;
811 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
820 width = private->width;
823 height = private->height;
825 gdk_offscreen_window_move_resize_internal (window, x, y,
831 gdk_offscreen_window_show (GdkWindow *window)
833 GdkWindowObject *private = (GdkWindowObject *)window;
835 gdk_window_clear_area_e (window, 0, 0,
836 private->width, private->height);
841 gdk_offscreen_window_hide (GdkWindow *window)
843 GdkWindowObject *private;
844 GdkOffscreenWindow *offscreen;
847 g_return_if_fail (window != NULL);
849 private = (GdkWindowObject*) window;
850 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
852 /* May need to break grabs on children */
853 display = gdk_drawable_get_display (window);
855 /* TODO: This needs updating to the new grab world */
857 if (display->pointer_grab.window != NULL)
859 if (is_parent_of (window, display->pointer_grab.window))
861 /* Call this ourselves, even though gdk_display_pointer_ungrab
862 does so too, since we want to pass implicit == TRUE so the
863 broken grab event is generated */
864 _gdk_display_unset_has_pointer_grab (display,
868 gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
875 gdk_offscreen_window_withdraw (GdkWindow *window)
880 gdk_offscreen_window_get_events (GdkWindow *window)
886 gdk_offscreen_window_set_events (GdkWindow *window,
887 GdkEventMask event_mask)
892 gdk_offscreen_window_set_background (GdkWindow *window,
893 const GdkColor *color)
895 GdkWindowObject *private = (GdkWindowObject *)window;
896 GdkColormap *colormap = gdk_drawable_get_colormap (window);
898 private->bg_color = *color;
899 gdk_colormap_query_color (colormap, private->bg_color.pixel, &private->bg_color);
901 if (private->bg_pixmap &&
902 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
903 private->bg_pixmap != GDK_NO_BG)
904 g_object_unref (private->bg_pixmap);
906 private->bg_pixmap = NULL;
910 gdk_offscreen_window_set_back_pixmap (GdkWindow *window,
913 GdkWindowObject *private = (GdkWindowObject *)window;
916 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
917 private->bg_pixmap != GDK_NO_BG &&
918 !gdk_drawable_get_colormap (pixmap))
920 g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
924 if (private->bg_pixmap &&
925 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
926 private->bg_pixmap != GDK_NO_BG)
927 g_object_unref (private->bg_pixmap);
929 private->bg_pixmap = pixmap;
932 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
933 private->bg_pixmap != GDK_NO_BG)
934 g_object_ref (pixmap);
938 gdk_offscreen_window_shape_combine_region (GdkWindow *window,
939 const GdkRegion *shape_region,
946 gdk_offscreen_window_input_shape_combine_region (GdkWindow *window,
947 const GdkRegion *shape_region,
954 gdk_offscreen_window_set_static_gravities (GdkWindow *window,
961 gdk_offscreen_window_set_cursor (GdkWindow *window,
964 GdkWindowObject *private = (GdkWindowObject *)window;
965 GdkOffscreenWindow *offscreen;
967 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
969 if (offscreen->cursor)
971 gdk_cursor_unref (offscreen->cursor);
972 offscreen->cursor = NULL;
976 offscreen->cursor = gdk_cursor_ref (cursor);
978 /* TODO: The cursor is never actually used... */
982 gdk_offscreen_window_get_geometry (GdkWindow *window,
989 GdkWindowObject *private = (GdkWindowObject *)window;
990 GdkOffscreenWindow *offscreen;
992 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
994 g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
996 if (!GDK_WINDOW_DESTROYED (window))
1003 *width = private->width;
1005 *height = private->height;
1007 *depth = private->depth;
1012 gdk_offscreen_window_queue_antiexpose (GdkWindow *window,
1019 gdk_offscreen_window_queue_translation (GdkWindow *window,
1028 gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
1030 GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
1031 GObjectClass *object_class = G_OBJECT_CLASS (klass);
1033 object_class->finalize = gdk_offscreen_window_finalize;
1035 drawable_class->create_gc = gdk_offscreen_window_create_gc;
1036 drawable_class->_copy_to_image = gdk_offscreen_window_copy_to_image;
1037 drawable_class->ref_cairo_surface = gdk_offscreen_window_ref_cairo_surface;
1038 drawable_class->set_colormap = gdk_offscreen_window_set_colormap;
1039 drawable_class->get_colormap = gdk_offscreen_window_get_colormap;
1040 drawable_class->get_depth = gdk_offscreen_window_get_depth;
1041 drawable_class->get_screen = gdk_offscreen_window_get_screen;
1042 drawable_class->get_visual = gdk_offscreen_window_get_visual;
1043 drawable_class->get_source_drawable = gdk_offscreen_window_get_source_drawable;
1044 drawable_class->get_composite_drawable = gdk_offscreen_window_get_composite_drawable;
1046 drawable_class->draw_rectangle = gdk_offscreen_window_draw_rectangle;
1047 drawable_class->draw_arc = gdk_offscreen_window_draw_arc;
1048 drawable_class->draw_polygon = gdk_offscreen_window_draw_polygon;
1049 drawable_class->draw_text = gdk_offscreen_window_draw_text;
1050 drawable_class->draw_text_wc = gdk_offscreen_window_draw_text_wc;
1051 drawable_class->draw_drawable = gdk_offscreen_window_draw_drawable;
1052 drawable_class->draw_points = gdk_offscreen_window_draw_points;
1053 drawable_class->draw_segments = gdk_offscreen_window_draw_segments;
1054 drawable_class->draw_lines = gdk_offscreen_window_draw_lines;
1055 drawable_class->draw_image = gdk_offscreen_window_draw_image;
1056 drawable_class->draw_pixbuf = gdk_offscreen_window_draw_pixbuf;
1060 gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface)
1062 iface->show = gdk_offscreen_window_show;
1063 iface->hide = gdk_offscreen_window_hide;
1064 iface->withdraw = gdk_offscreen_window_withdraw;
1065 iface->raise = gdk_offscreen_window_raise;
1066 iface->lower = gdk_offscreen_window_lower;
1067 iface->move_resize = gdk_offscreen_window_move_resize;
1068 iface->set_background = gdk_offscreen_window_set_background;
1069 iface->set_back_pixmap = gdk_offscreen_window_set_back_pixmap;
1070 iface->get_events = gdk_offscreen_window_get_events;
1071 iface->set_events = gdk_offscreen_window_set_events;
1072 iface->reparent = gdk_offscreen_window_reparent;
1073 iface->set_cursor = gdk_offscreen_window_set_cursor;
1074 iface->get_geometry = gdk_offscreen_window_get_geometry;
1075 iface->shape_combine_region = gdk_offscreen_window_shape_combine_region;
1076 iface->input_shape_combine_region = gdk_offscreen_window_input_shape_combine_region;
1077 iface->set_static_gravities = gdk_offscreen_window_set_static_gravities;
1078 iface->queue_antiexpose = gdk_offscreen_window_queue_antiexpose;
1079 iface->queue_translation = gdk_offscreen_window_queue_translation;
1080 iface->get_origin = gdk_offscreen_window_get_origin;
1081 iface->destroy = gdk_offscreen_window_destroy;
1084 #define __GDK_OFFSCREEN_WINDOW_C__
1085 #include "gdkaliasdef.c"