From b370cb0d4cf4108849f8aee8e33b6951981a47c4 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 25 Aug 2010 16:50:14 +0200 Subject: [PATCH] API: image: Remove ability to set image from a pixmap --- gtk/gtk.symbols | 3 - gtk/gtkimage.c | 330 ++++----------------------------- gtk/gtkimage.h | 17 -- modules/other/gail/gailimage.c | 7 - 4 files changed, 36 insertions(+), 321 deletions(-) diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 66dcab3fb2..fb895eafe0 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -1646,7 +1646,6 @@ gtk_image_get_icon_name gtk_image_get_icon_set gtk_image_get_pixbuf gtk_image_get_pixel_size -gtk_image_get_pixmap gtk_image_get_stock gtk_image_get_gicon gtk_image_get_storage_type @@ -1657,7 +1656,6 @@ gtk_image_new_from_file gtk_image_new_from_icon_name gtk_image_new_from_icon_set gtk_image_new_from_pixbuf -gtk_image_new_from_pixmap gtk_image_new_from_stock gtk_image_new_from_gicon gtk_image_set_from_animation @@ -1665,7 +1663,6 @@ gtk_image_set_from_file gtk_image_set_from_icon_name gtk_image_set_from_icon_set gtk_image_set_from_pixbuf -gtk_image_set_from_pixmap gtk_image_set_from_stock gtk_image_set_from_gicon gtk_image_set_pixel_size diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index c947f021cd..13e512f28b 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -132,11 +132,9 @@ struct _GtkImagePrivate { GtkIconSize icon_size; /* Only used with GTK_IMAGE_STOCK, GTK_IMAGE_ICON_SET, GTK_IMAGE_ICON_NAME */ GtkImageType storage_type; - GdkBitmap *mask; /* Only used with GTK_IMAGE_PIXMAP, GTK_IMAGE_IMAGE */ union { - GtkImagePixmapData pixmap; GtkImagePixbufData pixbuf; GtkImageStockData stock; GtkImageIconSetData icon_set; @@ -190,8 +188,6 @@ enum { PROP_0, PROP_PIXBUF, - PROP_PIXMAP, - PROP_MASK, PROP_FILE, PROP_STOCK, PROP_ICON_SET, @@ -238,22 +234,6 @@ gtk_image_class_init (GtkImageClass *class) GDK_TYPE_PIXBUF, GTK_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, - PROP_PIXMAP, - g_param_spec_object ("pixmap", - P_("Pixmap"), - P_("A GdkPixmap to display"), - GDK_TYPE_PIXMAP, - GTK_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_MASK, - g_param_spec_object ("mask", - P_("Mask"), - P_("Mask bitmap to use with GdkPixmap"), - GDK_TYPE_PIXMAP, - GTK_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, PROP_FILE, g_param_spec_string ("file", @@ -372,7 +352,6 @@ gtk_image_init (GtkImage *image) priv->storage_type = GTK_IMAGE_EMPTY; priv->icon_size = DEFAULT_ICON_SIZE; - priv->mask = NULL; priv->pixel_size = -1; @@ -404,30 +383,6 @@ gtk_image_set_property (GObject *object, gtk_image_set_from_pixbuf (image, g_value_get_object (value)); break; - case PROP_PIXMAP: - gtk_image_set_from_pixmap (image, - g_value_get_object (value), - priv->mask); - break; - case PROP_MASK: - if (priv->storage_type == GTK_IMAGE_PIXMAP) - gtk_image_set_from_pixmap (image, - priv->data.pixmap.pixmap, - g_value_get_object (value)); - else - { - GdkBitmap *mask; - - mask = g_value_get_object (value); - - if (mask) - g_object_ref (mask); - - gtk_image_clear (image); - - priv->mask = mask; - } - break; case PROP_FILE: gtk_image_set_from_file (image, g_value_get_string (value)); break; @@ -506,16 +461,6 @@ gtk_image_get_property (GObject *object, g_value_set_object (value, gtk_image_get_pixbuf (image)); break; - case PROP_PIXMAP: - if (priv->storage_type != GTK_IMAGE_PIXMAP) - g_value_set_object (value, NULL); - else - g_value_set_object (value, - priv->data.pixmap.pixmap); - break; - case PROP_MASK: - g_value_set_object (value, priv->mask); - break; case PROP_FILE: g_value_set_string (value, priv->filename); break; @@ -571,32 +516,6 @@ gtk_image_get_property (GObject *object, } -/** - * gtk_image_new_from_pixmap: - * @pixmap: (allow-none): a #GdkPixmap, or %NULL - * @mask: (allow-none): a #GdkBitmap, or %NULL - * - * Creates a #GtkImage widget displaying @pixmap with a @mask. - * A #GdkPixmap is a server-side image buffer in the pixel format of the - * current display. The #GtkImage does not assume a reference to the - * pixmap or mask; you still need to unref them if you own references. - * #GtkImage will add its own reference rather than adopting yours. - * - * Return value: a new #GtkImage - **/ -GtkWidget* -gtk_image_new_from_pixmap (GdkPixmap *pixmap, - GdkBitmap *mask) -{ - GtkImage *image; - - image = g_object_new (GTK_TYPE_IMAGE, NULL); - - gtk_image_set_from_pixmap (image, pixmap, mask); - - return GTK_WIDGET (image); -} - /** * gtk_image_new_from_file: * @filename: a filename @@ -802,61 +721,6 @@ gtk_image_new_from_gicon (GIcon *icon, return GTK_WIDGET (image); } -/** - * gtk_image_set_from_pixmap: - * @image: a #GtkImage - * @pixmap: (allow-none): a #GdkPixmap or %NULL - * @mask: (allow-none): a #GdkBitmap or %NULL - * - * See gtk_image_new_from_pixmap() for details. - **/ -void -gtk_image_set_from_pixmap (GtkImage *image, - GdkPixmap *pixmap, - GdkBitmap *mask) -{ - GtkImagePrivate *priv; - - g_return_if_fail (GTK_IS_IMAGE (image)); - g_return_if_fail (pixmap == NULL || - GDK_IS_PIXMAP (pixmap)); - g_return_if_fail (mask == NULL || - GDK_IS_PIXMAP (mask)); - - priv = image->priv; - - g_object_freeze_notify (G_OBJECT (image)); - - if (pixmap) - g_object_ref (pixmap); - - if (mask) - g_object_ref (mask); - - gtk_image_clear (image); - - priv->mask = mask; - - if (pixmap) - { - int width; - int height; - - priv->storage_type = GTK_IMAGE_PIXMAP; - - priv->data.pixmap.pixmap = pixmap; - - gdk_drawable_get_size (GDK_DRAWABLE (pixmap), &width, &height); - - gtk_image_update_size (image, width, height); - } - - g_object_notify (G_OBJECT (image), "pixmap"); - g_object_notify (G_OBJECT (image), "mask"); - - g_object_thaw_notify (G_OBJECT (image)); -} - /** * gtk_image_set_from_file: * @image: a #GtkImage @@ -1206,41 +1070,6 @@ gtk_image_get_storage_type (GtkImage *image) return image->priv->storage_type; } -/** - * gtk_image_get_pixmap: - * @image: a #GtkImage - * @pixmap: (out) (transfer none) (allow-none): location to store the - * pixmap, or %NULL - * @mask: (out) (transfer none) (allow-none): location to store the - * mask, or %NULL - * - * Gets the pixmap and mask being displayed by the #GtkImage. - * The storage type of the image must be %GTK_IMAGE_EMPTY or - * %GTK_IMAGE_PIXMAP (see gtk_image_get_storage_type()). - * The caller of this function does not own a reference to the - * returned pixmap and mask. - **/ -void -gtk_image_get_pixmap (GtkImage *image, - GdkPixmap **pixmap, - GdkBitmap **mask) -{ - GtkImagePrivate *priv; - - g_return_if_fail (GTK_IS_IMAGE (image)); - - priv = image->priv; - - g_return_if_fail (priv->storage_type == GTK_IMAGE_PIXMAP || - priv->storage_type == GTK_IMAGE_EMPTY); - - if (pixmap) - *pixmap = priv->data.pixmap.pixmap; - - if (mask) - *mask = priv->mask; -} - /** * gtk_image_get_pixbuf: * @image: a #GtkImage @@ -1797,10 +1626,9 @@ gtk_image_expose (GtkWidget *widget, GtkAllocation allocation; GtkMisc *misc; GdkRectangle area, image_bound; - gint x, y, mask_x, mask_y; + gint x, y; gint xpad, ypad; gfloat xalign, yalign; - GdkBitmap *mask; GdkPixbuf *pixbuf; GtkStateType state; gboolean needs_state_transform; @@ -1829,41 +1657,16 @@ gtk_image_expose (GtkWidget *widget, x = floor (allocation.x + xpad + ((allocation.width - priv->required_width) * xalign)); y = floor (allocation.y + ypad + ((allocation.height - priv->required_height) * yalign)); - mask_x = x; - mask_y = y; image_bound.x = x; image_bound.y = y; image_bound.width = 0; image_bound.height = 0; - mask = NULL; - pixbuf = NULL; needs_state_transform = gtk_widget_get_state (widget) != GTK_STATE_NORMAL; switch (priv->storage_type) { - case GTK_IMAGE_PIXMAP: - mask = priv->mask; - gdk_drawable_get_size (priv->data.pixmap.pixmap, - &image_bound.width, - &image_bound.height); - if (rectangle_intersect_even (&area, &image_bound) && - needs_state_transform) - { - pixbuf = gdk_pixbuf_get_from_drawable (NULL, - priv->data.pixmap.pixmap, - gtk_widget_get_colormap (widget), - image_bound.x - x, image_bound.y - y, - 0, 0, - image_bound.width, - image_bound.height); - - x = image_bound.x; - y = image_bound.y; - } - - break; case GTK_IMAGE_PIXBUF: image_bound.width = gdk_pixbuf_get_width (priv->data.pixbuf.pixbuf); @@ -1992,98 +1795,53 @@ gtk_image_expose (GtkWidget *widget, case GTK_IMAGE_EMPTY: g_assert_not_reached (); + pixbuf = NULL; break; } - if (rectangle_intersect_even (&area, &image_bound)) + if (pixbuf && + rectangle_intersect_even (&area, &image_bound)) { - if (pixbuf) + cairo_t *cr; + + if (needs_state_transform) { - if (needs_state_transform) - { - GtkIconSource *source; - GdkPixbuf *rendered; + GtkIconSource *source; + GdkPixbuf *rendered; - source = gtk_icon_source_new (); - gtk_icon_source_set_pixbuf (source, pixbuf); - /* The size here is arbitrary; since size isn't - * wildcarded in the souce, it isn't supposed to be - * scaled by the engine function - */ - gtk_icon_source_set_size (source, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_icon_source_set_size_wildcarded (source, FALSE); + source = gtk_icon_source_new (); + gtk_icon_source_set_pixbuf (source, pixbuf); + /* The size here is arbitrary; since size isn't + * wildcarded in the souce, it isn't supposed to be + * scaled by the engine function + */ + gtk_icon_source_set_size (source, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_icon_source_set_size_wildcarded (source, FALSE); + + rendered = gtk_style_render_icon (gtk_widget_get_style (widget), + source, + gtk_widget_get_direction (widget), + gtk_widget_get_state (widget), + /* arbitrary */ + (GtkIconSize)-1, + widget, + "gtk-image"); - rendered = gtk_style_render_icon (gtk_widget_get_style (widget), - source, - gtk_widget_get_direction (widget), - gtk_widget_get_state (widget), - /* arbitrary */ - (GtkIconSize)-1, - widget, - "gtk-image"); + gtk_icon_source_free (source); - gtk_icon_source_free (source); - - g_object_unref (pixbuf); - pixbuf = rendered; - } - - if (pixbuf) - { - cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget)); - gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y); - gdk_cairo_rectangle (cr, &image_bound); - cairo_fill (cr); - cairo_destroy (cr); - } + g_object_unref (pixbuf); + pixbuf = rendered; } - else - { - cairo_t *cr; - cairo_pattern_t *mask_pattern; - switch (priv->storage_type) - { - case GTK_IMAGE_PIXMAP: - cr = gdk_cairo_create (gtk_widget_get_window (widget)); - - if (mask) - { - /* hack to get the mask pattern */ - gdk_cairo_set_source_pixmap (cr, mask, mask_x, mask_y); - mask_pattern = cairo_get_source (cr); - cairo_pattern_reference (mask_pattern); - - gdk_cairo_set_source_pixmap (cr, priv->data.pixmap.pixmap, x, y); - gdk_cairo_rectangle (cr, &image_bound); - cairo_clip (cr); - cairo_mask (cr, mask_pattern); - } - else - { - gdk_cairo_set_source_pixmap (cr, priv->data.pixmap.pixmap, x, y); - gdk_cairo_rectangle (cr, &image_bound); - cairo_fill (cr); - } - - cairo_destroy (cr); - break; - case GTK_IMAGE_PIXBUF: - case GTK_IMAGE_STOCK: - case GTK_IMAGE_ICON_SET: - case GTK_IMAGE_ANIMATION: - case GTK_IMAGE_ICON_NAME: - case GTK_IMAGE_EMPTY: - case GTK_IMAGE_GICON: - g_assert_not_reached (); - break; - } - } + cr = gdk_cairo_create (gtk_widget_get_window (widget)); + gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y); + gdk_cairo_rectangle (cr, &image_bound); + cairo_fill (cr); + cairo_destroy (cr); } /* if rectangle intersects */ - if (pixbuf) - g_object_unref (pixbuf); + g_object_unref (pixbuf); } /* if widget is drawable */ @@ -2100,13 +1858,6 @@ gtk_image_reset (GtkImage *image) if (priv->storage_type != GTK_IMAGE_EMPTY) g_object_notify (G_OBJECT (image), "storage-type"); - if (priv->mask) - { - g_object_unref (priv->mask); - priv->mask = NULL; - g_object_notify (G_OBJECT (image), "mask"); - } - if (priv->icon_size != DEFAULT_ICON_SIZE) { priv->icon_size = DEFAULT_ICON_SIZE; @@ -2115,15 +1866,6 @@ gtk_image_reset (GtkImage *image) switch (priv->storage_type) { - case GTK_IMAGE_PIXMAP: - - if (priv->data.pixmap.pixmap) - g_object_unref (priv->data.pixmap.pixmap); - priv->data.pixmap.pixmap = NULL; - - g_object_notify (G_OBJECT (image), "pixmap"); - - break; case GTK_IMAGE_PIXBUF: diff --git a/gtk/gtkimage.h b/gtk/gtkimage.h index 1869c3eb21..f3f785c154 100644 --- a/gtk/gtkimage.h +++ b/gtk/gtkimage.h @@ -50,8 +50,6 @@ typedef struct _GtkImage GtkImage; typedef struct _GtkImagePrivate GtkImagePrivate; typedef struct _GtkImageClass GtkImageClass; -typedef struct _GtkImagePixmapData GtkImagePixmapData; -typedef struct _GtkImageImageData GtkImageImageData; typedef struct _GtkImagePixbufData GtkImagePixbufData; typedef struct _GtkImageStockData GtkImageStockData; typedef struct _GtkImageIconSetData GtkImageIconSetData; @@ -59,11 +57,6 @@ typedef struct _GtkImageAnimationData GtkImageAnimationData; typedef struct _GtkImageIconNameData GtkImageIconNameData; typedef struct _GtkImageGIconData GtkImageGIconData; -struct _GtkImagePixmapData -{ - GdkPixmap *pixmap; -}; - struct _GtkImagePixbufData { GdkPixbuf *pixbuf; @@ -103,7 +96,6 @@ struct _GtkImageGIconData /** * GtkImageType: * @GTK_IMAGE_EMPTY: there is no image displayed by the widget - * @GTK_IMAGE_PIXMAP: the widget contains a #GdkPixmap * @GTK_IMAGE_PIXBUF: the widget contains a #GdkPixbuf * @GTK_IMAGE_STOCK: the widget contains a stock icon name (see * ) @@ -125,7 +117,6 @@ struct _GtkImageGIconData typedef enum { GTK_IMAGE_EMPTY, - GTK_IMAGE_PIXMAP, GTK_IMAGE_PIXBUF, GTK_IMAGE_STOCK, GTK_IMAGE_ICON_SET, @@ -162,8 +153,6 @@ struct _GtkImageClass GType gtk_image_get_type (void) G_GNUC_CONST; GtkWidget* gtk_image_new (void); -GtkWidget* gtk_image_new_from_pixmap (GdkPixmap *pixmap, - GdkBitmap *mask); GtkWidget* gtk_image_new_from_file (const gchar *filename); GtkWidget* gtk_image_new_from_pixbuf (GdkPixbuf *pixbuf); GtkWidget* gtk_image_new_from_stock (const gchar *stock_id, @@ -177,9 +166,6 @@ GtkWidget* gtk_image_new_from_gicon (GIcon *icon, GtkIconSize size); void gtk_image_clear (GtkImage *image); -void gtk_image_set_from_pixmap (GtkImage *image, - GdkPixmap *pixmap, - GdkBitmap *mask); void gtk_image_set_from_file (GtkImage *image, const gchar *filename); void gtk_image_set_from_pixbuf (GtkImage *image, @@ -203,9 +189,6 @@ void gtk_image_set_pixel_size (GtkImage *image, GtkImageType gtk_image_get_storage_type (GtkImage *image); -void gtk_image_get_pixmap (GtkImage *image, - GdkPixmap **pixmap, - GdkBitmap **mask); GdkPixbuf* gtk_image_get_pixbuf (GtkImage *image); void gtk_image_get_stock (GtkImage *image, gchar **stock_id, diff --git a/modules/other/gail/gailimage.c b/modules/other/gail/gailimage.c index 8fcfa47859..38d0c587c7 100644 --- a/modules/other/gail/gailimage.c +++ b/modules/other/gail/gailimage.c @@ -207,13 +207,6 @@ gail_image_get_image_size (AtkImage *image, image_type = gtk_image_get_storage_type(gtk_image); switch(image_type) { - case GTK_IMAGE_PIXMAP: - { - GdkPixmap *pixmap; - gtk_image_get_pixmap(gtk_image, &pixmap, NULL); - gdk_drawable_get_size (pixmap, width, height); - break; - } case GTK_IMAGE_PIXBUF: { GdkPixbuf *pixbuf;