[patch] make some gdk functions accept GdkDrawable instead of GdkWindow



Hi,

Some functions in gdk, gdk_pixmap_new for example, should accept a
GdkDrawable, but only accept a GdkWindow at the moment. Attached patch
fixes this in "general gdk" and the x11 backend (and is meant to be
committed on the HEAD branch).

I'm not sure if this fix is okay for the other backends. I was reading
through the source of the win32 backend, and saw things like

GDK_WINDOW_HWND (window)

and I don't know if its possible to get a Hwnd from every possible
drawable.

If this patch is okay, I intend to do a likewise patch for the assert
fixes (so not the prototype changes) for the gtk-2-0 branch.


thanks,


	Kris

Index: gdkwindow.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/gdkwindow.c,v
retrieving revision 1.135
diff -u -p -r1.135 gdkwindow.c
--- gdkwindow.c	21 Mar 2002 15:04:41 -0000	1.135
+++ gdkwindow.c	21 Apr 2002 13:59:00 -0000
@@ -1393,7 +1393,7 @@ gdk_window_draw_text_wc (GdkDrawable    
 }
 
 static GdkDrawable*
-gdk_window_get_composite_drawable (GdkDrawable *window,
+gdk_window_get_composite_drawable (GdkDrawable *drawable,
                                    gint         x,
                                    gint         y,
                                    gint         width,
@@ -1401,7 +1401,7 @@ gdk_window_get_composite_drawable (GdkDr
                                    gint        *composite_x_offset,
                                    gint        *composite_y_offset)
 {
-  GdkWindowObject *private = (GdkWindowObject *)window;
+  GdkWindowObject *private = (GdkWindowObject *)drawable;
   GdkWindowPaint *paint;
   GdkRegion *buffered_region;
   GSList *tmp_list;
@@ -1413,14 +1413,15 @@ gdk_window_get_composite_drawable (GdkDr
   gint windowing_x_offset, windowing_y_offset;
   gint buffer_x_offset, buffer_y_offset;
 
-  if (GDK_WINDOW_DESTROYED (window) || private->paint_stack == NULL)
+  if ((GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable))
+      || private->paint_stack == NULL)
     {
       /* No backing store */
-      _gdk_windowing_window_get_offsets (window,
+      _gdk_windowing_window_get_offsets (drawable,
                                          composite_x_offset,
                                          composite_y_offset);
       
-      return GDK_DRAWABLE (g_object_ref (G_OBJECT (window)));
+      return GDK_DRAWABLE (g_object_ref (G_OBJECT (drawable)));
     }
   
   buffered_region = NULL;
@@ -1466,20 +1467,20 @@ gdk_window_get_composite_drawable (GdkDr
     {
       gdk_region_destroy (buffered_region);
 
-      _gdk_windowing_window_get_offsets (window,
+      _gdk_windowing_window_get_offsets (drawable,
                                          composite_x_offset,
                                          composite_y_offset);
 
-      return GDK_DRAWABLE (g_object_ref (G_OBJECT (window)));
+      return GDK_DRAWABLE (g_object_ref (G_OBJECT (drawable)));
     }
   
-  tmp_pixmap = gdk_pixmap_new (window,
+  tmp_pixmap = gdk_pixmap_new (drawable,
                                width, height,
                                -1);
 
   tmp_gc = gdk_gc_new (tmp_pixmap);
 
-  _gdk_windowing_window_get_offsets (window,
+  _gdk_windowing_window_get_offsets (drawable,
                                      &windowing_x_offset,
                                      &windowing_y_offset);
   
@@ -1974,8 +1975,6 @@ gdk_window_real_get_visual (GdkDrawable 
 static gint
 gdk_window_real_get_depth (GdkDrawable *drawable)
 {
-  gint depth;
-  
   g_return_val_if_fail (GDK_IS_WINDOW (drawable), 0);
 
   return ((GdkWindowObject *)GDK_WINDOW (drawable))->depth;
Index: gdkpixmap.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/gdkpixmap.c,v
retrieving revision 1.39
diff -u -p -r1.39 gdkpixmap.c
--- gdkpixmap.c	4 Jan 2002 05:57:58 -0000	1.39
+++ gdkpixmap.c	21 Apr 2002 13:59:01 -0000
@@ -543,7 +543,7 @@ gdk_pixmap_colormap_new_from_pixbuf (Gdk
 }
 
 GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm (GdkWindow   *window,
+gdk_pixmap_colormap_create_from_xpm (GdkDrawable *drawable,
 				     GdkColormap *colormap,
 				     GdkBitmap  **mask,
 				     GdkColor    *transparent_color,
@@ -552,12 +552,12 @@ gdk_pixmap_colormap_create_from_xpm (Gdk
   GdkPixbuf *pixbuf;
   GdkPixmap *pixmap;
 
-  g_return_val_if_fail (window != NULL || colormap != NULL, NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
+  g_return_val_if_fail (drawable != NULL || colormap != NULL, NULL);
+  g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
   g_return_val_if_fail (colormap == NULL || GDK_IS_COLORMAP (colormap), NULL);
 
   if (colormap == NULL)
-    colormap = gdk_drawable_get_colormap (window);
+    colormap = gdk_drawable_get_colormap (drawable);
   
   pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
   if (!pixbuf)
@@ -571,17 +571,17 @@ gdk_pixmap_colormap_create_from_xpm (Gdk
 }
 
 GdkPixmap*
-gdk_pixmap_create_from_xpm (GdkWindow  *window,
-			    GdkBitmap **mask,
-			    GdkColor   *transparent_color,
+gdk_pixmap_create_from_xpm (GdkDrawable *drawable,
+			    GdkBitmap  **mask,
+			    GdkColor    *transparent_color,
 			    const gchar *filename)
 {
-  return gdk_pixmap_colormap_create_from_xpm (window, NULL, mask,
+  return gdk_pixmap_colormap_create_from_xpm (drawable, NULL, mask,
 					      transparent_color, filename);
 }
 
 GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm_d (GdkWindow  *window,
+gdk_pixmap_colormap_create_from_xpm_d (GdkDrawable *drawable,
 				       GdkColormap *colormap,
 				       GdkBitmap **mask,
 				       GdkColor   *transparent_color,
@@ -590,12 +590,12 @@ gdk_pixmap_colormap_create_from_xpm_d (G
   GdkPixbuf *pixbuf;
   GdkPixmap *pixmap;
 
-  g_return_val_if_fail (window != NULL || colormap != NULL, NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
+  g_return_val_if_fail (drawable != NULL || colormap != NULL, NULL);
+  g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
   g_return_val_if_fail (colormap == NULL || GDK_IS_COLORMAP (colormap), NULL);
 
   if (colormap == NULL)
-    colormap = gdk_drawable_get_colormap (window);
+    colormap = gdk_drawable_get_colormap (drawable);
   
   pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **)data);
   if (!pixbuf)
@@ -609,12 +609,12 @@ gdk_pixmap_colormap_create_from_xpm_d (G
 }
 
 GdkPixmap*
-gdk_pixmap_create_from_xpm_d (GdkWindow  *window,
-			      GdkBitmap **mask,
-			      GdkColor   *transparent_color,
-			      gchar     **data)
+gdk_pixmap_create_from_xpm_d (GdkDrawable *drawable,
+			      GdkBitmap  **mask,
+			      GdkColor    *transparent_color,
+			      gchar      **data)
 {
-  return gdk_pixmap_colormap_create_from_xpm_d (window, NULL, mask,
+  return gdk_pixmap_colormap_create_from_xpm_d (drawable, NULL, mask,
 						transparent_color, data);
 }
 
Index: gdkpixmap.h
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/gdkpixmap.h,v
retrieving revision 1.10
diff -u -p -r1.10 gdkpixmap.h
--- gdkpixmap.h	18 Oct 2001 20:23:16 -0000	1.10
+++ gdkpixmap.h	21 Apr 2002 13:59:01 -0000
@@ -38,15 +38,15 @@ GType      gdk_pixmap_get_type          
 
 /* Pixmaps
  */
-GdkPixmap* gdk_pixmap_new		(GdkWindow  *window,
-					 gint	     width,
-					 gint	     height,
-					 gint	     depth);
-GdkBitmap* gdk_bitmap_create_from_data	(GdkWindow   *window,
+GdkPixmap* gdk_pixmap_new		(GdkDrawable *drawable,
+					 gint	      width,
+					 gint	      height,
+					 gint	      depth);
+GdkBitmap* gdk_bitmap_create_from_data	(GdkDrawable *drawable,
 					 const gchar *data,
 					 gint	      width,
 					 gint	      height);
-GdkPixmap* gdk_pixmap_create_from_data	(GdkWindow   *window,
+GdkPixmap* gdk_pixmap_create_from_data	(GdkDrawable *drawable,
 					 const gchar *data,
 					 gint	      width,
 					 gint	      height,
@@ -54,20 +54,20 @@ GdkPixmap* gdk_pixmap_create_from_data	(
 					 GdkColor    *fg,
 					 GdkColor    *bg);
 
-GdkPixmap* gdk_pixmap_create_from_xpm            (GdkWindow    *window,
+GdkPixmap* gdk_pixmap_create_from_xpm            (GdkDrawable  *drawable,
 						  GdkBitmap   **mask,
 						  GdkColor     *transparent_color,
 						  const gchar  *filename);
-GdkPixmap* gdk_pixmap_colormap_create_from_xpm   (GdkWindow    *window,
+GdkPixmap* gdk_pixmap_colormap_create_from_xpm   (GdkDrawable  *drawable,
 						  GdkColormap  *colormap,
 						  GdkBitmap   **mask,
 						  GdkColor     *transparent_color,
 						  const gchar  *filename);
-GdkPixmap* gdk_pixmap_create_from_xpm_d          (GdkWindow    *window,
+GdkPixmap* gdk_pixmap_create_from_xpm_d          (GdkDrawable  *drawable,
 						  GdkBitmap   **mask,
 						  GdkColor     *transparent_color,
 						  gchar       **data);
-GdkPixmap* gdk_pixmap_colormap_create_from_xpm_d (GdkWindow    *window,
+GdkPixmap* gdk_pixmap_colormap_create_from_xpm_d (GdkDrawable  *drawable,
 						  GdkColormap  *colormap,
 						  GdkBitmap   **mask,
 						  GdkColor     *transparent_color,
Index: x11/gdkpixmap-x11.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/x11/gdkpixmap-x11.c,v
retrieving revision 1.47
diff -u -p -r1.47 gdkpixmap-x11.c
--- x11/gdkpixmap-x11.c	20 Apr 2002 14:45:28 -0000	1.47
+++ x11/gdkpixmap-x11.c	21 Apr 2002 13:59:01 -0000
@@ -52,8 +52,8 @@ typedef struct
 } _GdkPixmapInfo;
 
 static void gdk_pixmap_impl_x11_get_size   (GdkDrawable        *drawable,
-                                        gint               *width,
-                                        gint               *height);
+                                            gint               *width,
+                                            gint               *height);
 
 static void gdk_pixmap_impl_x11_init       (GdkPixmapImplX11      *pixmap);
 static void gdk_pixmap_impl_x11_class_init (GdkPixmapImplX11Class *klass);
@@ -151,10 +151,10 @@ gdk_pixmap_impl_x11_get_size   (GdkDrawa
 }
 
 GdkPixmap*
-gdk_pixmap_new (GdkWindow *window,
-		gint       width,
-		gint       height,
-		gint       depth)
+gdk_pixmap_new (GdkDrawable *drawable,
+		gint         width,
+		gint         height,
+		gint         depth)
 {
   GdkPixmap *pixmap;
   GdkDrawableImplX11 *draw_impl;
@@ -162,17 +162,17 @@ gdk_pixmap_new (GdkWindow *window,
   GdkColormap *cmap;
   gint window_depth;
   
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
-  g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
+  g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
+  g_return_val_if_fail ((drawable != NULL) || (depth != -1), NULL);
   g_return_val_if_fail ((width != 0) && (height != 0), NULL);
   
-  if (!window)
-    window = _gdk_parent_root;
+  if (!drawable)
+    drawable = _gdk_parent_root;
 
-  if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
+  if (GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable))
     return NULL;
 
-  window_depth = gdk_drawable_get_depth (GDK_DRAWABLE (window));
+  window_depth = gdk_drawable_get_depth (GDK_DRAWABLE (drawable));
   if (depth == -1)
     depth = window_depth;
 
@@ -181,9 +181,9 @@ gdk_pixmap_new (GdkWindow *window,
   pix_impl = GDK_PIXMAP_IMPL_X11 (GDK_PIXMAP_OBJECT (pixmap)->impl);
   draw_impl->wrapper = GDK_DRAWABLE (pixmap);
   
-  draw_impl->xdisplay = GDK_WINDOW_XDISPLAY (window);
+  draw_impl->xdisplay = GDK_WINDOW_XDISPLAY (drawable);
   draw_impl->xid = XCreatePixmap (GDK_PIXMAP_XDISPLAY (pixmap),
-                                  GDK_WINDOW_XID (window),
+                                  GDK_WINDOW_XID (drawable),
                                   width, height, depth);
   
   pix_impl->is_foreign = FALSE;
@@ -193,7 +193,7 @@ gdk_pixmap_new (GdkWindow *window,
 
   if (depth == window_depth)
     {
-      cmap = gdk_drawable_get_colormap (window);
+      cmap = gdk_drawable_get_colormap (drawable);
       if (cmap)
         gdk_drawable_set_colormap (pixmap, cmap);
     }
@@ -204,7 +204,7 @@ gdk_pixmap_new (GdkWindow *window,
 }
 
 GdkPixmap *
-gdk_bitmap_create_from_data (GdkWindow   *window,
+gdk_bitmap_create_from_data (GdkDrawable *drawable,
 			     const gchar *data,
 			     gint         width,
 			     gint         height)
@@ -215,12 +215,12 @@ gdk_bitmap_create_from_data (GdkWindow  
   
   g_return_val_if_fail (data != NULL, NULL);
   g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
+  g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
 
-  if (!window)
-    window = _gdk_parent_root;
+  if (!drawable)
+    drawable = _gdk_parent_root;
 
-  if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
+  if (GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable))
     return NULL;
 
   pixmap = g_object_new (gdk_pixmap_get_type (), NULL);
@@ -233,9 +233,9 @@ gdk_bitmap_create_from_data (GdkWindow  
   pix_impl->height = height;
   GDK_PIXMAP_OBJECT (pixmap)->depth = 1;
 
-  draw_impl->xdisplay = GDK_WINDOW_XDISPLAY (window);
-  draw_impl->xid = XCreateBitmapFromData (GDK_WINDOW_XDISPLAY (window),
-                                          GDK_WINDOW_XID (window),
+  draw_impl->xdisplay = GDK_WINDOW_XDISPLAY (drawable);
+  draw_impl->xid = XCreateBitmapFromData (GDK_WINDOW_XDISPLAY (drawable),
+                                          GDK_WINDOW_XID (drawable),
                                           (char *)data, width, height);
 
   gdk_xid_table_insert (&draw_impl->xid, pixmap);
@@ -244,7 +244,7 @@ gdk_bitmap_create_from_data (GdkWindow  
 }
 
 GdkPixmap*
-gdk_pixmap_create_from_data (GdkWindow   *window,
+gdk_pixmap_create_from_data (GdkDrawable *drawable,
 			     const gchar *data,
 			     gint         width,
 			     gint         height,
@@ -256,21 +256,21 @@ gdk_pixmap_create_from_data (GdkWindow  
   GdkDrawableImplX11 *draw_impl;
   GdkPixmapImplX11 *pix_impl;
 
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
+  g_return_val_if_fail (drawable == NULL || GDK_IS_DRAWABLE (drawable), NULL);
   g_return_val_if_fail (data != NULL, NULL);
   g_return_val_if_fail (fg != NULL, NULL);
   g_return_val_if_fail (bg != NULL, NULL);
-  g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
+  g_return_val_if_fail ((drawable != NULL) || (depth != -1), NULL);
   g_return_val_if_fail ((width != 0) && (height != 0), NULL);
 
-  if (!window)
-    window = _gdk_parent_root;
+  if (!drawable)
+    drawable = _gdk_parent_root;
 
-  if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
+  if (GDK_IS_WINDOW (drawable) && GDK_WINDOW_DESTROYED (drawable))
     return NULL;
 
   if (depth == -1)
-    depth = gdk_drawable_get_visual (window)->depth;
+    depth = gdk_drawable_get_visual (drawable)->depth;
 
   pixmap = g_object_new (gdk_pixmap_get_type (), NULL);
   draw_impl = GDK_DRAWABLE_IMPL_X11 (GDK_PIXMAP_OBJECT (pixmap)->impl);
@@ -282,9 +282,9 @@ gdk_pixmap_create_from_data (GdkWindow  
   pix_impl->height = height;
   GDK_PIXMAP_OBJECT (pixmap)->depth = depth;
 
-  draw_impl->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
-  draw_impl->xid = XCreatePixmapFromBitmapData (GDK_WINDOW_XDISPLAY (window),
-                                                GDK_WINDOW_XID (window),
+  draw_impl->xdisplay = GDK_DRAWABLE_XDISPLAY (drawable);
+  draw_impl->xid = XCreatePixmapFromBitmapData (GDK_WINDOW_XDISPLAY (drawable),
+                                                GDK_WINDOW_XID (drawable),
                                                 (char *)data, width, height,
                                                 fg->pixel, bg->pixel, depth);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]