diff options
author | Benjamin Otte <otte@redhat.com> | 2018-03-15 18:48:44 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2018-03-16 06:04:45 +0100 |
commit | 2935ef81286e8b70e1e03cf1eeca4666834c8490 (patch) | |
tree | 6516cefd7dfadefdb02f30a47162464b010c9343 /gtk | |
parent | c6541853ab6cd593733ab310119fbd95056b32fe (diff) | |
download | gtk+-2935ef81286e8b70e1e03cf1eeca4666834c8490.tar.gz |
image: Add gtk_image_set_can_shrink()
Images with that value set will request a 0x0 minimum size and scale
down their contents.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkimage.c | 72 | ||||
-rw-r--r-- | gtk/gtkimage.h | 5 |
2 files changed, 77 insertions, 0 deletions
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 3d31eb3242..8a8a8235f5 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -88,6 +88,7 @@ struct _GtkImagePrivate gchar *resource_path; /* Only used with GTK_IMAGE_SURFACE */ guint keep_aspect_ratio : 1; + guint can_shrink : 1; }; @@ -132,6 +133,7 @@ enum PROP_RESOURCE, PROP_USE_FALLBACK, PROP_KEEP_ASPECT_RATIO, + PROP_CAN_SHRINK, NUM_PROPERTIES }; @@ -277,6 +279,18 @@ gtk_image_class_init (GtkImageClass *class) TRUE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + /** + * GtkImage:can-shrink + * + * If the #GtkImage can be made smaller than the image it contains. + */ + image_props[PROP_CAN_SHRINK] = + g_param_spec_boolean ("can-shrink", + P_("Can shrink"), + P_("Allow image to be smaller than contents"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + g_object_class_install_properties (gobject_class, NUM_PROPERTIES, image_props); gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_IMAGE_ACCESSIBLE); @@ -357,6 +371,10 @@ gtk_image_set_property (GObject *object, gtk_image_set_keep_aspect_ratio (image, g_value_get_boolean (value)); break; + case PROP_CAN_SHRINK: + gtk_image_set_can_shrink (image, g_value_get_boolean (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -404,6 +422,9 @@ gtk_image_get_property (GObject *object, case PROP_KEEP_ASPECT_RATIO: g_value_set_boolean (value, priv->keep_aspect_ratio); break; + case PROP_CAN_SHRINK: + g_value_set_boolean (value, priv->can_shrink); + break; case PROP_STORAGE_TYPE: g_value_set_enum (value, _gtk_icon_helper_get_storage_type (priv->icon_helper)); break; @@ -1391,6 +1412,9 @@ gtk_image_measure (GtkWidget *widget, for_size, minimum, natural); + if (priv->can_shrink) + *minimum = 0; + if (orientation == GTK_ORIENTATION_VERTICAL) { baseline_align = gtk_image_get_baseline_align (GTK_IMAGE (widget)); @@ -1545,6 +1569,54 @@ gtk_image_get_keep_aspect_ratio (GtkImage *image) return priv->keep_aspect_ratio; } +/** + * gtk_image_set_can_shrink: + * @image: a #GtkImage + * @can_shrink: if the @image can be made smaller than its contents + * + * If set to %TRUE, the @image can be made smaller than its contents. + * The contents will be scaled down when rendering. + * + * If you want to still force a minimum size manually, consider using + * gtk_widget_set_size_request(). + * + * Also of note is that a similar function for growing does not exist + * because the grow behavior can be controlled via + * gtk_widget_set_halign() and gtk_widget_set_valign(). + */ +void +gtk_image_set_can_shrink (GtkImage *image, + gboolean can_shrink) +{ + GtkImagePrivate *priv = gtk_image_get_instance_private (image); + + g_return_if_fail (GTK_IS_IMAGE (image)); + + if (priv->can_shrink == can_shrink) + return; + + priv->can_shrink = can_shrink; + g_object_notify_by_pspec (G_OBJECT (image), image_props[PROP_CAN_SHRINK]); +} + +/** + * gtk_image_get_can_shrink: + * @image: a #GtkImage + * + * Gets the value set via gtk_image_set_can_shrink(). + * + * Returns: %TRUE if the image can be made smaller than its contents + **/ +gboolean +gtk_image_get_can_shrink (GtkImage *image) +{ + GtkImagePrivate *priv = gtk_image_get_instance_private (image); + + g_return_val_if_fail (GTK_IS_IMAGE (image), FALSE); + + return priv->can_shrink; +} + void gtk_image_get_image_size (GtkImage *image, int *width, diff --git a/gtk/gtkimage.h b/gtk/gtkimage.h index d9fa533136..6d5a8309b0 100644 --- a/gtk/gtkimage.h +++ b/gtk/gtkimage.h @@ -151,6 +151,9 @@ void gtk_image_set_icon_size (GtkImage *image, GDK_AVAILABLE_IN_ALL void gtk_image_set_keep_aspect_ratio (GtkImage *image, gboolean keep_aspect_ratio); +GDK_AVAILABLE_IN_ALL +void gtk_image_set_can_shrink (GtkImage *image, + gboolean can_shrink); GDK_AVAILABLE_IN_ALL GtkImageType gtk_image_get_storage_type (GtkImage *image); @@ -170,6 +173,8 @@ GDK_AVAILABLE_IN_ALL GtkIconSize gtk_image_get_icon_size (GtkImage *image); GDK_AVAILABLE_IN_ALL gboolean gtk_image_get_keep_aspect_ratio (GtkImage *image); +GDK_AVAILABLE_IN_ALL +gboolean gtk_image_get_can_shrink (GtkImage *image); G_END_DECLS |