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));
689 gdk_offscreen_window_get_origin (GdkWindow *window,
702 * gdk_window_get_offscreen_pixmap:
703 * @window: a #GdkWindow
705 * Gets the offscreen pixmap that an offscreen window renders into. If
706 * you need to keep this around over window resizes, you need to add a
709 * Returns: The offscreen pixmap, or NULL if not offscreen
712 gdk_window_get_offscreen_pixmap (GdkWindow *window)
714 GdkWindowObject *private = (GdkWindowObject *)window;
715 GdkOffscreenWindow *offscreen;
717 g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
719 if (!GDK_IS_OFFSCREEN_WINDOW (private->impl))
722 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
723 return offscreen->pixmap;
727 gdk_offscreen_window_raise (GdkWindow *window)
729 /* gdk_window_raise already changed the stacking order */
730 _gdk_syntesize_crossing_events_for_geometry_change (window);
734 gdk_offscreen_window_lower (GdkWindow *window)
736 /* gdk_window_lower already changed the stacking order */
737 _gdk_syntesize_crossing_events_for_geometry_change (window);
741 gdk_offscreen_window_move_resize_internal (GdkWindow *window,
746 gboolean send_expose_events)
748 GdkWindowObject *private = (GdkWindowObject *)window;
749 GdkOffscreenWindow *offscreen;
752 GdkPixmap *old_pixmap;
754 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
761 if (private->destroyed)
766 dw = width - private->width;
767 dh = height - private->height;
772 if (private->width != width ||
773 private->height != height)
775 private->width = width;
776 private->height = height;
778 old_pixmap = offscreen->pixmap;
779 offscreen->pixmap = gdk_pixmap_new (GDK_DRAWABLE (old_pixmap),
784 gc = _gdk_drawable_get_scratch_gc (offscreen->pixmap, FALSE);
785 gdk_draw_drawable (offscreen->pixmap,
790 g_object_unref (old_pixmap);
793 if (GDK_WINDOW_IS_MAPPED (private))
795 // TODO: Only invalidate new area, i.e. for larger windows
796 gdk_window_invalidate_rect (window, NULL, TRUE);
797 _gdk_syntesize_crossing_events_for_geometry_change (window);
802 gdk_offscreen_window_move_resize (GdkWindow *window,
809 GdkWindowObject *private = (GdkWindowObject *)window;
810 GdkOffscreenWindow *offscreen;
812 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
821 width = private->width;
824 height = private->height;
826 gdk_offscreen_window_move_resize_internal (window, x, y,
832 gdk_offscreen_window_show (GdkWindow *window)
834 GdkWindowObject *private = (GdkWindowObject *)window;
836 gdk_window_clear_area_e (window, 0, 0,
837 private->width, private->height);
842 gdk_offscreen_window_hide (GdkWindow *window)
844 GdkWindowObject *private;
845 GdkOffscreenWindow *offscreen;
848 g_return_if_fail (window != NULL);
850 private = (GdkWindowObject*) window;
851 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
853 /* May need to break grabs on children */
854 display = gdk_drawable_get_display (window);
856 /* TODO: This needs updating to the new grab world */
858 if (display->pointer_grab.window != NULL)
860 if (is_parent_of (window, display->pointer_grab.window))
862 /* Call this ourselves, even though gdk_display_pointer_ungrab
863 does so too, since we want to pass implicit == TRUE so the
864 broken grab event is generated */
865 _gdk_display_unset_has_pointer_grab (display,
869 gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
876 gdk_offscreen_window_withdraw (GdkWindow *window)
881 gdk_offscreen_window_get_events (GdkWindow *window)
887 gdk_offscreen_window_set_events (GdkWindow *window,
888 GdkEventMask event_mask)
893 gdk_offscreen_window_set_background (GdkWindow *window,
894 const GdkColor *color)
896 GdkWindowObject *private = (GdkWindowObject *)window;
897 GdkColormap *colormap = gdk_drawable_get_colormap (window);
899 private->bg_color = *color;
900 gdk_colormap_query_color (colormap, private->bg_color.pixel, &private->bg_color);
902 if (private->bg_pixmap &&
903 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
904 private->bg_pixmap != GDK_NO_BG)
905 g_object_unref (private->bg_pixmap);
907 private->bg_pixmap = NULL;
911 gdk_offscreen_window_set_back_pixmap (GdkWindow *window,
914 GdkWindowObject *private = (GdkWindowObject *)window;
917 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
918 private->bg_pixmap != GDK_NO_BG &&
919 !gdk_drawable_get_colormap (pixmap))
921 g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
925 if (private->bg_pixmap &&
926 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
927 private->bg_pixmap != GDK_NO_BG)
928 g_object_unref (private->bg_pixmap);
930 private->bg_pixmap = pixmap;
933 private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
934 private->bg_pixmap != GDK_NO_BG)
935 g_object_ref (pixmap);
939 gdk_offscreen_window_shape_combine_region (GdkWindow *window,
940 const GdkRegion *shape_region,
947 gdk_offscreen_window_input_shape_combine_region (GdkWindow *window,
948 const GdkRegion *shape_region,
955 gdk_offscreen_window_set_static_gravities (GdkWindow *window,
962 gdk_offscreen_window_set_cursor (GdkWindow *window,
965 GdkWindowObject *private = (GdkWindowObject *)window;
966 GdkOffscreenWindow *offscreen;
968 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
970 if (offscreen->cursor)
972 gdk_cursor_unref (offscreen->cursor);
973 offscreen->cursor = NULL;
977 offscreen->cursor = gdk_cursor_ref (cursor);
979 /* TODO: The cursor is never actually used... */
983 gdk_offscreen_window_get_geometry (GdkWindow *window,
990 GdkWindowObject *private = (GdkWindowObject *)window;
991 GdkOffscreenWindow *offscreen;
993 offscreen = GDK_OFFSCREEN_WINDOW (private->impl);
995 g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
997 if (!GDK_WINDOW_DESTROYED (window))
1004 *width = private->width;
1006 *height = private->height;
1008 *depth = private->depth;
1013 gdk_offscreen_window_queue_antiexpose (GdkWindow *window,
1020 gdk_offscreen_window_queue_translation (GdkWindow *window,
1029 gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
1031 GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
1032 GObjectClass *object_class = G_OBJECT_CLASS (klass);
1034 object_class->finalize = gdk_offscreen_window_finalize;
1036 drawable_class->create_gc = gdk_offscreen_window_create_gc;
1037 drawable_class->_copy_to_image = gdk_offscreen_window_copy_to_image;
1038 drawable_class->ref_cairo_surface = gdk_offscreen_window_ref_cairo_surface;
1039 drawable_class->set_colormap = gdk_offscreen_window_set_colormap;
1040 drawable_class->get_colormap = gdk_offscreen_window_get_colormap;
1041 drawable_class->get_depth = gdk_offscreen_window_get_depth;
1042 drawable_class->get_screen = gdk_offscreen_window_get_screen;
1043 drawable_class->get_visual = gdk_offscreen_window_get_visual;
1044 drawable_class->get_source_drawable = gdk_offscreen_window_get_source_drawable;
1045 drawable_class->get_composite_drawable = gdk_offscreen_window_get_composite_drawable;
1047 drawable_class->draw_rectangle = gdk_offscreen_window_draw_rectangle;
1048 drawable_class->draw_arc = gdk_offscreen_window_draw_arc;
1049 drawable_class->draw_polygon = gdk_offscreen_window_draw_polygon;
1050 drawable_class->draw_text = gdk_offscreen_window_draw_text;
1051 drawable_class->draw_text_wc = gdk_offscreen_window_draw_text_wc;
1052 drawable_class->draw_drawable = gdk_offscreen_window_draw_drawable;
1053 drawable_class->draw_points = gdk_offscreen_window_draw_points;
1054 drawable_class->draw_segments = gdk_offscreen_window_draw_segments;
1055 drawable_class->draw_lines = gdk_offscreen_window_draw_lines;
1056 drawable_class->draw_image = gdk_offscreen_window_draw_image;
1057 drawable_class->draw_pixbuf = gdk_offscreen_window_draw_pixbuf;
1061 gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface)
1063 iface->show = gdk_offscreen_window_show;
1064 iface->hide = gdk_offscreen_window_hide;
1065 iface->withdraw = gdk_offscreen_window_withdraw;
1066 iface->raise = gdk_offscreen_window_raise;
1067 iface->lower = gdk_offscreen_window_lower;
1068 iface->move_resize = gdk_offscreen_window_move_resize;
1069 iface->set_background = gdk_offscreen_window_set_background;
1070 iface->set_back_pixmap = gdk_offscreen_window_set_back_pixmap;
1071 iface->get_events = gdk_offscreen_window_get_events;
1072 iface->set_events = gdk_offscreen_window_set_events;
1073 iface->reparent = gdk_offscreen_window_reparent;
1074 iface->set_cursor = gdk_offscreen_window_set_cursor;
1075 iface->get_geometry = gdk_offscreen_window_get_geometry;
1076 iface->shape_combine_region = gdk_offscreen_window_shape_combine_region;
1077 iface->input_shape_combine_region = gdk_offscreen_window_input_shape_combine_region;
1078 iface->set_static_gravities = gdk_offscreen_window_set_static_gravities;
1079 iface->queue_antiexpose = gdk_offscreen_window_queue_antiexpose;
1080 iface->queue_translation = gdk_offscreen_window_queue_translation;
1081 iface->get_origin = gdk_offscreen_window_get_origin;
1082 iface->destroy = gdk_offscreen_window_destroy;
1085 #define __GDK_OFFSCREEN_WINDOW_C__
1086 #include "gdkaliasdef.c"