Commit b5a5bd07 authored by Alexander Larsson's avatar Alexander Larsson
Browse files

GtkImage: Add new_from_pattern() and set_from_pattern()

parent 3d204152
......@@ -26,6 +26,7 @@
#include <math.h>
#include <string.h>
#include <cairo-gobject.h>
#include "gtkcontainer.h"
#include "gtkiconhelperprivate.h"
......@@ -185,6 +186,7 @@ enum
{
PROP_0,
PROP_PIXBUF,
PROP_PATTERN,
PROP_FILE,
PROP_STOCK,
PROP_ICON_SET,
......@@ -231,6 +233,14 @@ gtk_image_class_init (GtkImageClass *class)
GDK_TYPE_PIXBUF,
GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_PATTERN,
g_param_spec_boxed ("pattern",
P_("Pattern"),
P_("A cairo_pattern_t to display"),
CAIRO_GOBJECT_TYPE_PATTERN,
GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_FILE,
g_param_spec_string ("file",
......@@ -430,6 +440,10 @@ gtk_image_set_property (GObject *object,
gtk_image_set_from_pixbuf (image,
g_value_get_object (value));
break;
case PROP_PATTERN:
gtk_image_set_from_pattern (image,
g_value_get_boxed (value));
break;
case PROP_FILE:
gtk_image_set_from_file (image, g_value_get_string (value));
break;
......@@ -491,6 +505,9 @@ gtk_image_get_property (GObject *object,
case PROP_PIXBUF:
g_value_set_object (value, _gtk_icon_helper_peek_pixbuf (priv->icon_helper));
break;
case PROP_PATTERN:
g_value_set_boxed (value, _gtk_icon_helper_peek_pattern (priv->icon_helper));
break;
case PROP_FILE:
g_value_set_string (value, priv->filename);
break;
......@@ -632,6 +649,29 @@ gtk_image_new_from_pixbuf (GdkPixbuf *pixbuf)
return GTK_WIDGET (image);
}
/**
* gtk_image_new_from_pattern:
* @pattern: (allow-none): a #cairo_pattern_t, or %NULL
*
* Creates a new #GtkImage displaying @pattern.
* The #GtkImage does not assume a reference to the
* pattern; you still need to unref it if you own references.
* #GtkImage will add its own reference rather than adopting yours.
*
* Return value: a new #GtkImage
**/
GtkWidget*
gtk_image_new_from_pattern (cairo_pattern_t *pattern)
{
GtkImage *image;
image = g_object_new (GTK_TYPE_IMAGE, NULL);
gtk_image_set_from_pattern (image, pattern);
return GTK_WIDGET (image);
}
/**
* gtk_image_new_from_stock:
* @stock_id: a stock icon name
......@@ -1128,6 +1168,43 @@ gtk_image_set_from_gicon (GtkImage *image,
g_object_thaw_notify (G_OBJECT (image));
}
/**
* gtk_image_set_from_pattern:
* @image: a #GtkImage
* @pattern: a cairo_pattern_t
*
* See gtk_image_new_from_pattern() for details.
*
* Since: 3.10
**/
void
gtk_image_set_from_pattern (GtkImage *image,
cairo_pattern_t *pattern)
{
GtkImagePrivate *priv;
g_return_if_fail (GTK_IS_IMAGE (image));
priv = image->priv;
g_object_freeze_notify (G_OBJECT (image));
if (pattern)
cairo_pattern_reference (pattern);
gtk_image_clear (image);
if (pattern)
{
_gtk_icon_helper_set_pattern (priv->icon_helper, pattern);
cairo_pattern_destroy (pattern);
}
g_object_notify (G_OBJECT (image), "pattern");
g_object_thaw_notify (G_OBJECT (image));
}
/**
* gtk_image_get_storage_type:
* @image: a #GtkImage
......
......@@ -133,6 +133,8 @@ GtkWidget* gtk_image_new_from_icon_name (const gchar *icon_name,
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_image_new_from_gicon (GIcon *icon,
GtkIconSize size);
GDK_AVAILABLE_IN_3_10
GtkWidget* gtk_image_new_from_pattern (cairo_pattern_t *pattern);
GDK_AVAILABLE_IN_ALL
void gtk_image_clear (GtkImage *image);
......@@ -164,6 +166,9 @@ GDK_AVAILABLE_IN_ALL
void gtk_image_set_from_gicon (GtkImage *image,
GIcon *icon,
GtkIconSize size);
GDK_AVAILABLE_IN_3_10
void gtk_image_set_from_pattern (GtkImage *image,
cairo_pattern_t *pattern);
GDK_AVAILABLE_IN_ALL
void gtk_image_set_pixel_size (GtkImage *image,
gint pixel_size);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment