#include "gtkprivate.h"
#include "gtkalias.h"
+/**
+ * SECTION:gtkimage
+ * @Short_description: A widget displaying an image
+ * @Title: GtkImage
+ * @See_also:#GdkPixbuf
+ *
+ * The #GtkImage widget displays an image. Various kinds of object
+ * can be displayed as an image; most typically, you would load a
+ * #GdkPixbuf ("pixel buffer") from a file, and then display that.
+ * There's a convenience function to do this, gtk_image_new_from_file(),
+ * used as follows:
+ * <informalexample><programlisting>
+ * GtkWidget *image;
+ * image = gtk_image_new_from_file ("myfile.png");
+ * </programlisting></informalexample>
+ * If the file isn't loaded successfully, the image will contain a
+ * "broken image" icon similar to that used in many web browsers.
+ * If you want to handle errors in loading the file yourself,
+ * for example by displaying an error message, then load the image with
+ * gdk_pixbuf_new_from_file(), then create the #GtkImage with
+ * gtk_image_new_from_pixbuf().
+ *
+ * The image file may contain an animation, if so the #GtkImage will
+ * display an animation (#GdkPixbufAnimation) instead of a static image.
+ *
+ * #GtkImage is a subclass of #GtkMisc, which implies that you can
+ * align it (center, left, right) and add padding to it, using
+ * #GtkMisc methods.
+ *
+ * #GtkImage is a "no window" widget (has no #GdkWindow of its own),
+ * so by default does not receive events. If you want to receive events
+ * on the image, such as button clicks, place the image inside a
+ * #GtkEventBox, then connect to the event signals on the event box.
+ * <example>
+ * <title>Handling button press events on a
+ * <structname>GtkImage</structname>.</title>
+ * <programlisting>
+ * static gboolean
+ * button_press_callback (GtkWidget *event_box,
+ * GdkEventButton *event,
+ * gpointer data)
+ * {
+ * g_print ("Event box clicked at coordinates %f,%f\n",
+ * event->x, event->y);
+ *
+ * /<!---->* Returning TRUE means we handled the event, so the signal
+ * * emission should be stopped (don't call any further
+ * * callbacks that may be connected). Return FALSE
+ * * to continue invoking callbacks.
+ * *<!---->/
+ * return TRUE;
+ * }
+ *
+ * static GtkWidget*
+ * create_image (void)
+ * {
+ * GtkWidget *image;
+ * GtkWidget *event_box;
+ *
+ * image = gtk_image_new_from_file ("myfile.png");
+ *
+ * event_box = gtk_event_box_new (<!-- -->);
+ *
+ * gtk_container_add (GTK_CONTAINER (event_box), image);
+ *
+ * g_signal_connect (G_OBJECT (event_box),
+ * "button_press_event",
+ * G_CALLBACK (button_press_callback),
+ * image);
+ *
+ * return image;
+ * }
+ * </programlisting>
+ * </example>
+ *
+ * When handling events on the event box, keep in mind that coordinates
+ * in the image may be different from event box coordinates due to
+ * the alignment and padding settings on the image (see #GtkMisc).
+ * The simplest way to solve this is to set the alignment to 0.0
+ * (left/top), and set the padding to zero. Then the origin of
+ * the image will be the same as the origin of the event box.
+ *
+ * Sometimes an application will want to avoid depending on external data
+ * files, such as image files. GTK+ comes with a program to avoid this,
+ * called <application>gdk-pixbuf-csource</application>. This program
+ * allows you to convert an image into a C variable declaration, which
+ * can then be loaded into a #GdkPixbuf using
+ * gdk_pixbuf_new_from_inline().
+ */
+
typedef struct _GtkImagePrivate GtkImagePrivate;
struct _GtkImagePrivate
/**
* gtk_image_new_from_pixmap:
- * @pixmap: a #GdkPixmap, or %NULL
- * @mask: a #GdkBitmap, or %NULL
- *
+ * @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
/**
* gtk_image_new_from_image:
- * @image: a #GdkImage, or %NULL
- * @mask: a #GdkBitmap, or %NULL
- *
+ * @image: (allow-none): a #GdkImage, or %NULL
+ * @mask: (allow-none): a #GdkBitmap, or %NULL
+ *
* Creates a #GtkImage widget displaying a @image with a @mask.
* A #GdkImage is a client-side image buffer in the pixel format of the
* current display. The #GtkImage does not assume a reference to the
/**
* gtk_image_new_from_pixbuf:
- * @pixbuf: a #GdkPixbuf, or %NULL
- *
+ * @pixbuf: (allow-none): a #GdkPixbuf, or %NULL
+ *
* Creates a new #GtkImage displaying @pixbuf.
* The #GtkImage does not assume a reference to the
* pixbuf; you still need to unref it if you own references.
/**
* gtk_image_new_from_stock:
* @stock_id: a stock icon name
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* Creates a #GtkImage displaying a stock icon. Sample stock icon
* names are #GTK_STOCK_OPEN, #GTK_STOCK_QUIT. Sample stock sizes
/**
* gtk_image_new_from_icon_set:
* @icon_set: a #GtkIconSet
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* Creates a #GtkImage displaying an icon set. Sample stock sizes are
* #GTK_ICON_SIZE_MENU, #GTK_ICON_SIZE_SMALL_TOOLBAR. Instead of using
/**
* gtk_image_new_from_icon_name:
* @icon_name: an icon name
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* Creates a #GtkImage displaying an icon from the current icon theme.
* If the icon name isn't known, a "broken image" icon will be
/**
* gtk_image_new_from_gicon:
* @icon: an icon
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* Creates a #GtkImage displaying an icon from the current icon theme.
* If the icon name isn't known, a "broken image" icon will be
/**
* gtk_image_set_from_pixmap:
* @image: a #GtkImage
- * @pixmap: a #GdkPixmap or %NULL
- * @mask: a #GdkBitmap or %NULL
+ * @pixmap: (allow-none): a #GdkPixmap or %NULL
+ * @mask: (allow-none): a #GdkBitmap or %NULL
*
* See gtk_image_new_from_pixmap() for details.
**/
/**
* gtk_image_set_from_image:
* @image: a #GtkImage
- * @gdk_image: a #GdkImage or %NULL
- * @mask: a #GdkBitmap or %NULL
+ * @gdk_image: (allow-none): a #GdkImage or %NULL
+ * @mask: (allow-none): a #GdkBitmap or %NULL
*
* See gtk_image_new_from_image() for details.
**/
/**
* gtk_image_set_from_file:
* @image: a #GtkImage
- * @filename: a filename or %NULL
+ * @filename: (allow-none): a filename or %NULL
*
* See gtk_image_new_from_file() for details.
**/
/**
* gtk_image_set_from_pixbuf:
* @image: a #GtkImage
- * @pixbuf: a #GdkPixbuf or %NULL
+ * @pixbuf: (allow-none): a #GdkPixbuf or %NULL
*
- * See gtk_image_new_from_pixbuf() for details.
+ * See gtk_image_new_from_pixbuf() for details.
**/
void
gtk_image_set_from_pixbuf (GtkImage *image,
* gtk_image_set_from_stock:
* @image: a #GtkImage
* @stock_id: a stock icon name
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* See gtk_image_new_from_stock() for details.
**/
* gtk_image_set_from_icon_set:
* @image: a #GtkImage
* @icon_set: a #GtkIconSet
- * @size: a stock icon size
+ * @size: (type int): a stock icon size
*
* See gtk_image_new_from_icon_set() for details.
**/
* gtk_image_set_from_icon_name:
* @image: a #GtkImage
* @icon_name: an icon name
- * @size: an icon size
+ * @size: (type int): an icon size
*
* See gtk_image_new_from_icon_name() for details.
*
* gtk_image_set_from_gicon:
* @image: a #GtkImage
* @icon: an icon
- * @size: an icon size
+ * @size: (type int): an icon size
*
* See gtk_image_new_from_gicon() for details.
*
/**
* gtk_image_get_pixmap:
* @image: a #GtkImage
- * @pixmap: location to store the pixmap, or %NULL
- * @mask: location to store the mask, or %NULL
+ * @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_get_image:
* @image: a #GtkImage
- * @gdk_image: return location for a #GtkImage, or %NULL
- * @mask: return location for a #GdkBitmap, or %NULL
+ * @gdk_image: (out) (transfer none) (allow-none): return location for
+ * a #GtkImage, or %NULL
+ * @mask: (out) (transfer none) (allow-none): return location for a
+ * #GdkBitmap, or %NULL
*
* Gets the #GdkImage and mask being displayed by the #GtkImage.
* The storage type of the image must be %GTK_IMAGE_EMPTY or
* The caller of this function does not own a reference to the
* returned pixbuf.
*
- * Return value: the displayed pixbuf, or %NULL if the image is empty
+ * Return value: (transfer none): the displayed pixbuf, or %NULL if
+ * the image is empty
**/
GdkPixbuf*
gtk_image_get_pixbuf (GtkImage *image)
/**
* gtk_image_get_stock:
* @image: a #GtkImage
- * @stock_id: place to store a stock icon name, or %NULL
- * @size: place to store a stock icon size, or %NULL
+ * @stock_id: (out) (transfer none) (allow-none): place to store a
+ * stock icon name, or %NULL
+ * @size: (out) (allow-none) (type int): place to store a stock icon
+ * size, or %NULL
*
* Gets the stock icon name and size being displayed by the #GtkImage.
* The storage type of the image must be %GTK_IMAGE_EMPTY or
/**
* gtk_image_get_icon_set:
* @image: a #GtkImage
- * @icon_set: location to store a #GtkIconSet, or %NULL
- * @size: location to store a stock icon size, or %NULL
+ * @icon_set: (out) (transfer none) (allow-none): location to store a
+ * #GtkIconSet, or %NULL
+ * @size: (out) (allow-none) (type int): location to store a stock
+ * icon size, or %NULL
*
* Gets the icon set and size being displayed by the #GtkImage.
* The storage type of the image must be %GTK_IMAGE_EMPTY or
* The caller of this function does not own a reference to the
* returned animation.
*
- * Return value: the displayed animation, or %NULL if the image is empty
+ * Return value: (transfer none): the displayed animation, or %NULL if
+ * the image is empty
**/
GdkPixbufAnimation*
gtk_image_get_animation (GtkImage *image)
/**
* gtk_image_get_icon_name:
* @image: a #GtkImage
- * @icon_name: place to store an icon name, or %NULL
- * @size: place to store an icon size, or %NULL
+ * @icon_name: (out) (transfer none) (allow-none): place to store an
+ * icon name, or %NULL
+ * @size: (out) (allow-none) (type int): place to store an icon size,
+ * or %NULL
*
* Gets the icon name and size being displayed by the #GtkImage.
* The storage type of the image must be %GTK_IMAGE_EMPTY or
/**
* gtk_image_get_gicon:
* @image: a #GtkImage
- * @gicon: place to store a #GIcon, or %NULL
- * @size: place to store an icon size, or %NULL
+ * @gicon: (out) (transfer none) (allow-none): place to store a
+ * #GIcon, or %NULL
+ * @size: (out) (allow-none) (type int): place to store an icon size,
+ * or %NULL
*
* Gets the #GIcon and size being displayed by the #GtkImage.
* The storage type of the image must be %GTK_IMAGE_EMPTY or
return g_object_new (GTK_TYPE_IMAGE, NULL);
}
+/**
+ * gtk_image_set:
+ * @image: a #GtkImage
+ * @val: a #GdkImage
+ * @mask: a #GdkBitmap that indicates which parts of the image should be transparent.
+ *
+ * Sets the #GtkImage.
+ *
+ * Deprecated: 2.0: Use gtk_image_set_from_image() instead.
+ */
void
gtk_image_set (GtkImage *image,
GdkImage *val,
gtk_image_set_from_image (image, val, mask);
}
+/**
+ * gtk_image_get:
+ * @image: a #GtkImage
+ * @val: return location for a #GdkImage
+ * @mask: a #GdkBitmap that indicates which parts of the image should be transparent.
+ *
+ * Gets the #GtkImage.
+ *
+ * Deprecated: 2.0: Use gtk_image_get_image() instead.
+ */
void
gtk_image_get (GtkImage *image,
GdkImage **val,
gtk_widget_queue_draw (GTK_WIDGET (image));
- if (GTK_WIDGET_DRAWABLE (image))
+ if (gtk_widget_is_drawable (GTK_WIDGET (image)))
gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE);
}
gint image_width,
gint image_height)
{
- GTK_WIDGET (image)->requisition.width = image_width + GTK_MISC (image)->xpad * 2;
- GTK_WIDGET (image)->requisition.height = image_height + GTK_MISC (image)->ypad * 2;
+ GtkWidget *widget = GTK_WIDGET (image);
+
+ widget->requisition.width = image_width + GTK_MISC (image)->xpad * 2;
+ widget->requisition.height = image_height + GTK_MISC (image)->ypad * 2;
- if (GTK_WIDGET_VISIBLE (image))
- gtk_widget_queue_resize (GTK_WIDGET (image));
+ if (gtk_widget_get_visible (widget))
+ gtk_widget_queue_resize (widget);
}