[gtk+/wip/window-scales: 82/84] GtkImage: Add new_from_pattern() and set_from_pattern()



commit 66089f93f34446fe154e69ef36b69a24f953597c
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Jun 26 16:33:50 2013 +0200

    GtkImage: Add new_from_pattern() and set_from_pattern()

 gtk/gtkimage.c |   77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gtk/gtkimage.h |    5 +++
 2 files changed, 82 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 0b2a214..0c7c088 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -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,
@@ -232,6 +234,14 @@ gtk_image_class_init (GtkImageClass *class)
                                                         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",
                                                         P_("Filename"),
@@ -423,6 +433,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;
@@ -482,6 +496,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;
@@ -622,6 +639,29 @@ gtk_image_new_from_pixbuf (GdkPixbuf *pixbuf)
 }
 
 /**
+ * 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
  * @size: (type int): a stock icon size
@@ -1106,6 +1146,43 @@ gtk_image_set_from_gicon  (GtkImage       *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
  * 
diff --git a/gtk/gtkimage.h b/gtk/gtkimage.h
index 66d586e..8fc0972 100644
--- a/gtk/gtkimage.h
+++ b/gtk/gtkimage.h
@@ -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);


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