diff options
-rw-r--r-- | demos/testpixbuf-color.c | 4 | ||||
-rw-r--r-- | demos/testpixbuf-save.c | 8 | ||||
-rw-r--r-- | docs/tools/shooter.c | 4 | ||||
-rw-r--r-- | gdk/gdkpixbuf-drawable.c | 101 | ||||
-rw-r--r-- | gdk/gdkpixbuf.h | 10 | ||||
-rw-r--r-- | gtk/gtkcolorsel.c | 6 | ||||
-rw-r--r-- | gtk/gtkoffscreenwindow.c | 4 |
7 files changed, 36 insertions, 101 deletions
diff --git a/demos/testpixbuf-color.c b/demos/testpixbuf-color.c index 5ce086cf90..3f762e6707 100644 --- a/demos/testpixbuf-color.c +++ b/demos/testpixbuf-color.c @@ -112,8 +112,8 @@ main (int argc, char **argv) gtk_init (&argc, &argv); root = gdk_get_default_root_window (); - pixbuf = gdk_pixbuf_get_from_window (NULL, root, - 0, 0, 0, 0, 150, 160); + pixbuf = gdk_pixbuf_get_from_window (root, + 0, 0, 150, 160); /* PASS */ g_debug ("try to save PNG with a profile"); diff --git a/demos/testpixbuf-save.c b/demos/testpixbuf-save.c index e7cdd6034c..5277c89a6f 100644 --- a/demos/testpixbuf-save.c +++ b/demos/testpixbuf-save.c @@ -335,8 +335,8 @@ configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data) GdkPixbuf *new_pixbuf; root = gdk_get_default_root_window (); - new_pixbuf = gdk_pixbuf_get_from_window (NULL, root, - 0, 0, 0, 0, evt->width, evt->height); + new_pixbuf = gdk_pixbuf_get_from_window (root, + 0, 0, evt->width, evt->height); g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", new_pixbuf, (GDestroyNotify) g_object_unref); } @@ -356,8 +356,8 @@ main (int argc, char **argv) gtk_init (&argc, &argv); root = gdk_get_default_root_window (); - pixbuf = gdk_pixbuf_get_from_window (NULL, root, - 0, 0, 0, 0, 150, 160); + pixbuf = gdk_pixbuf_get_from_window (root, + 0, 0, 150, 160); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "delete_event", diff --git a/docs/tools/shooter.c b/docs/tools/shooter.c index ec3d551cfa..873609d972 100644 --- a/docs/tools/shooter.c +++ b/docs/tools/shooter.c @@ -164,8 +164,8 @@ take_window_shot (Window child, if (y_orig + height > gdk_screen_height ()) height = gdk_screen_height () - y_orig; - tmp = gdk_pixbuf_get_from_window (NULL, window, - x, y, 0, 0, width, height); + tmp = gdk_pixbuf_get_from_window (window, + x, y, width, height); if (include_decoration) tmp2 = remove_shaped_area (tmp, xid); diff --git a/gdk/gdkpixbuf-drawable.c b/gdk/gdkpixbuf-drawable.c index d7021d7783..f638ce1d07 100644 --- a/gdk/gdkpixbuf-drawable.c +++ b/gdk/gdkpixbuf-drawable.c @@ -35,13 +35,9 @@ /** * gdk_pixbuf_get_from_window: - * @dest: (allow-none): Destination pixbuf, or %NULL if a new pixbuf - * should be created * @window: Source window * @src_x: Source X coordinate within @window * @src_y: Source Y coordinate within @window - * @dest_x: Destination X coordinate in @dest, or 0 if @dest is NULL - * @dest_y: Destination Y coordinate in @dest, or 0 if @dest is NULL * @width: Width in pixels of region to get * @height: Height in pixels of region to get * @@ -49,19 +45,14 @@ * representation inside a #GdkPixbuf. In other words, copies * image data from a server-side drawable to a client-side RGB(A) buffer. * This allows you to efficiently read individual pixels on the client side. - * - * If the specified destination pixbuf @dest is %NULL, then this - * function will create an RGB pixbuf with 8 bits per channel and no - * alpha, with the same size specified by the @width and @height - * arguments. In this case, the @dest_x and @dest_y arguments must be - * specified as 0. If the specified destination pixbuf is not %NULL - * and it contains alpha information, then the filled pixels will be - * set to full opacity (alpha = 255). + * + * This function will create an RGB pixbuf with 8 bits per channel with + * the same size specified by the @width and @height arguments. The pixbuf + * will contain an alpha channel if the @window contains one. * * If the window is off the screen, then there is no image data in the - * obscured/offscreen regions to be placed in the pixbuf. The contents - * of portions of the pixbuf corresponding to the offscreen region are - * undefined. + * obscured/offscreen regions to be placed in the pixbuf. The contents of + * portions of the pixbuf corresponding to the offscreen region are undefined. * * If the window you're obtaining data from is partially obscured by * other windows, then the contents of the pixbuf areas corresponding @@ -76,37 +67,23 @@ * (In short, there are several ways this function can fail, and if it fails * it returns %NULL; so check the return value.) * - * Return value: The same pixbuf as @dest if it was non-%NULL, or a - * newly-created pixbuf with a reference count of 1 if no destinatio - * pixbuf was specified, or %NULL on error + * Return value: (transfer full): A newly-created pixbuf with a reference + * count of 1, or %NULL on error **/ GdkPixbuf * -gdk_pixbuf_get_from_window (GdkPixbuf *dest, - GdkWindow *src, +gdk_pixbuf_get_from_window (GdkWindow *src, int src_x, int src_y, - int dest_x, int dest_y, int width, int height) { cairo_surface_t *surface; + GdkPixbuf *dest; g_return_val_if_fail (GDK_IS_WINDOW (src), NULL); g_return_val_if_fail (gdk_window_is_viewable (src), NULL); - if (!dest) - g_return_val_if_fail (dest_x == 0 && dest_y == 0, NULL); - else - { - g_return_val_if_fail (gdk_pixbuf_get_colorspace (dest) == GDK_COLORSPACE_RGB, NULL); - g_return_val_if_fail (gdk_pixbuf_get_n_channels (dest) == 3 || - gdk_pixbuf_get_n_channels (dest) == 4, NULL); - g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (dest) == 8, NULL); - } - surface = _gdk_drawable_ref_cairo_surface (src); - dest = gdk_pixbuf_get_from_surface (dest, - surface, + dest = gdk_pixbuf_get_from_surface (surface, src_x, src_y, - dest_x, dest_y, width, height); cairo_surface_destroy (surface); @@ -163,14 +140,11 @@ convert_alpha (guchar *dest_data, int src_stride, int src_x, int src_y, - int dest_x, - int dest_y, int width, int height) { int x, y; - dest_data += dest_stride * dest_y + dest_x * 4; src_data += src_stride * src_y + src_x * 4; for (y = 0; y < height; y++) { @@ -206,14 +180,11 @@ convert_no_alpha (guchar *dest_data, int src_stride, int src_x, int src_y, - int dest_x, - int dest_y, int width, int height) { int x, y; - dest_data += dest_stride * dest_y + dest_x * 3; src_data += src_stride * src_y + src_x * 4; for (y = 0; y < height; y++) { @@ -232,13 +203,9 @@ convert_no_alpha (guchar *dest_data, /** * gdk_pixbuf_get_from_surface: - * @dest: (allow-none): Destination pixbuf, or %NULL if a new pixbuf - * should be created * @surface: surface to copy from * @src_x: Source X coordinate within @surface * @src_y: Source Y coordinate within @surface - * @dest_x: Destination X coordinate in @dest, or 0 if @dest is NULL - * @dest_y: Destination Y coordinate in @dest, or 0 if @dest is NULL * @width: Width in pixels of region to get * @height: Height in pixels of region to get * @@ -247,54 +214,32 @@ convert_no_alpha (guchar *dest_data, * individual pixels from cairo surfaces. For #GdkWindows, use * gdk_pixbuf_get_from_surface() instead. * - * If the specified destination pixbuf @dest is %NULL, then this function - * will create an RGB pixbuf with 8 bits per channel. The pixbuf will contain - * an alpha channel if the @surface contains one. In this case, the @dest_x - * and @dest_y arguments must be specified as 0. + * This function will create an RGB pixbuf with 8 bits per channel. The pixbuf + * will contain an alpha channel if the @surface contains one. * - * Return value: The same pixbuf as @dest if it was non-%NULL, or a - * newly-created pixbuf with a reference count of 1 if no destination - * pixbuf was specified, or %NULL on error + * Return value: (transfer full): A newly-created pixbuf with a reference count + * of 1, or %NULL on error **/ GdkPixbuf * -gdk_pixbuf_get_from_surface (GdkPixbuf *dest, - cairo_surface_t *surface, +gdk_pixbuf_get_from_surface (cairo_surface_t *surface, int src_x, int src_y, - int dest_x, - int dest_y, int width, int height) { cairo_content_t content; + GdkPixbuf *dest; /* General sanity checks */ g_return_val_if_fail (surface != NULL, NULL); g_return_val_if_fail (src_x >= 0 && src_y >= 0, NULL); g_return_val_if_fail (width > 0 && height > 0, NULL); - if (!dest) - { - g_return_val_if_fail (dest_x == 0 && dest_y == 0, NULL); - - content = cairo_surface_get_content (surface) | CAIRO_CONTENT_COLOR; - dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, - !!(content & CAIRO_CONTENT_ALPHA), - 8, - width, height); - } - else - { - g_return_val_if_fail (gdk_pixbuf_get_colorspace (dest) == GDK_COLORSPACE_RGB, NULL); - g_return_val_if_fail (gdk_pixbuf_get_n_channels (dest) == 3 || - gdk_pixbuf_get_n_channels (dest) == 4, NULL); - g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (dest) == 8, NULL); - g_return_val_if_fail (dest_x >= 0 && dest_y >= 0, NULL); - g_return_val_if_fail (dest_x + width <= gdk_pixbuf_get_width (dest), NULL); - g_return_val_if_fail (dest_y + height <= gdk_pixbuf_get_height (dest), NULL); - - content = gdk_pixbuf_get_has_alpha (dest) ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR; - } + content = cairo_surface_get_content (surface) | CAIRO_CONTENT_COLOR; + dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + !!(content & CAIRO_CONTENT_ALPHA), + 8, + width, height); surface = gdk_cairo_surface_coerce_to_image (surface, content, src_x + width, src_y + height); cairo_surface_flush (surface); @@ -310,7 +255,6 @@ gdk_pixbuf_get_from_surface (GdkPixbuf *dest, cairo_image_surface_get_data (surface), cairo_image_surface_get_stride (surface), src_x, src_y, - dest_x, dest_y, width, height); else convert_no_alpha (gdk_pixbuf_get_pixels (dest), @@ -318,7 +262,6 @@ gdk_pixbuf_get_from_surface (GdkPixbuf *dest, cairo_image_surface_get_data (surface), cairo_image_surface_get_stride (surface), src_x, src_y, - dest_x, dest_y, width, height); cairo_surface_destroy (surface); diff --git a/gdk/gdkpixbuf.h b/gdk/gdkpixbuf.h index 6b21078edb..61a1392d09 100644 --- a/gdk/gdkpixbuf.h +++ b/gdk/gdkpixbuf.h @@ -38,21 +38,15 @@ G_BEGIN_DECLS /* Fetching a region from a drawable */ -GdkPixbuf *gdk_pixbuf_get_from_window (GdkPixbuf *dest, - GdkWindow *window, +GdkPixbuf *gdk_pixbuf_get_from_window (GdkWindow *window, int src_x, int src_y, - int dest_x, - int dest_y, int width, int height); -GdkPixbuf *gdk_pixbuf_get_from_surface (GdkPixbuf *dest, - cairo_surface_t *surface, +GdkPixbuf *gdk_pixbuf_get_from_surface (cairo_surface_t *surface, int src_x, int src_y, - int dest_x, - int dest_y, int width, int height); diff --git a/gtk/gtkcolorsel.c b/gtk/gtkcolorsel.c index 7436d6adeb..1814394697 100644 --- a/gtk/gtkcolorsel.c +++ b/gtk/gtkcolorsel.c @@ -1653,9 +1653,8 @@ grab_color_at_pointer (GdkScreen *screen, priv = colorsel->private_data; - pixbuf = gdk_pixbuf_get_from_window (NULL, root_window, + pixbuf = gdk_pixbuf_get_from_window (root_window, x_root, y_root, - 0, 0, 1, 1); if (!pixbuf) { @@ -1664,9 +1663,8 @@ grab_color_at_pointer (GdkScreen *screen, GdkWindow *window = gdk_display_get_window_at_device_position (display, device, &x, &y); if (!window) return; - pixbuf = gdk_pixbuf_get_from_window (NULL, window, + pixbuf = gdk_pixbuf_get_from_window (window, x, y, - 0, 0, 1, 1); if (!pixbuf) return; diff --git a/gtk/gtkoffscreenwindow.c b/gtk/gtkoffscreenwindow.c index 69356fd151..ee37a9ae1d 100644 --- a/gtk/gtkoffscreenwindow.c +++ b/gtk/gtkoffscreenwindow.c @@ -314,8 +314,8 @@ gtk_offscreen_window_get_pixbuf (GtkOffscreenWindow *offscreen) if (surface != NULL) { - pixbuf = gdk_pixbuf_get_from_surface (NULL, surface, - 0, 0, 0, 0, + pixbuf = gdk_pixbuf_get_from_surface (surface, + 0, 0, gdk_window_get_width (window), gdk_window_get_height (window)); } |