forked from AuroraMiddleware/gtk
image: Add gtk_image_set_can_shrink()
Images with that value set will request a 0x0 minimum size and scale down their contents.
This commit is contained in:
parent
c6541853ab
commit
2935ef8128
@ -1507,6 +1507,8 @@ gtk_image_set_icon_size
|
|||||||
gtk_image_get_icon_size
|
gtk_image_get_icon_size
|
||||||
gtk_image_set_keep_aspect_ratio
|
gtk_image_set_keep_aspect_ratio
|
||||||
gtk_image_get_keep_aspect_ratio
|
gtk_image_get_keep_aspect_ratio
|
||||||
|
gtk_image_set_can_shrink
|
||||||
|
gtk_image_get_can_shrink
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GTK_IMAGE
|
GTK_IMAGE
|
||||||
GTK_IS_IMAGE
|
GTK_IS_IMAGE
|
||||||
|
@ -88,6 +88,7 @@ struct _GtkImagePrivate
|
|||||||
gchar *resource_path; /* Only used with GTK_IMAGE_SURFACE */
|
gchar *resource_path; /* Only used with GTK_IMAGE_SURFACE */
|
||||||
|
|
||||||
guint keep_aspect_ratio : 1;
|
guint keep_aspect_ratio : 1;
|
||||||
|
guint can_shrink : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -132,6 +133,7 @@ enum
|
|||||||
PROP_RESOURCE,
|
PROP_RESOURCE,
|
||||||
PROP_USE_FALLBACK,
|
PROP_USE_FALLBACK,
|
||||||
PROP_KEEP_ASPECT_RATIO,
|
PROP_KEEP_ASPECT_RATIO,
|
||||||
|
PROP_CAN_SHRINK,
|
||||||
NUM_PROPERTIES
|
NUM_PROPERTIES
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -277,6 +279,18 @@ gtk_image_class_init (GtkImageClass *class)
|
|||||||
TRUE,
|
TRUE,
|
||||||
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
|
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);
|
g_object_class_install_properties (gobject_class, NUM_PROPERTIES, image_props);
|
||||||
|
|
||||||
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_IMAGE_ACCESSIBLE);
|
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));
|
gtk_image_set_keep_aspect_ratio (image, g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_CAN_SHRINK:
|
||||||
|
gtk_image_set_can_shrink (image, g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -404,6 +422,9 @@ gtk_image_get_property (GObject *object,
|
|||||||
case PROP_KEEP_ASPECT_RATIO:
|
case PROP_KEEP_ASPECT_RATIO:
|
||||||
g_value_set_boolean (value, priv->keep_aspect_ratio);
|
g_value_set_boolean (value, priv->keep_aspect_ratio);
|
||||||
break;
|
break;
|
||||||
|
case PROP_CAN_SHRINK:
|
||||||
|
g_value_set_boolean (value, priv->can_shrink);
|
||||||
|
break;
|
||||||
case PROP_STORAGE_TYPE:
|
case PROP_STORAGE_TYPE:
|
||||||
g_value_set_enum (value, _gtk_icon_helper_get_storage_type (priv->icon_helper));
|
g_value_set_enum (value, _gtk_icon_helper_get_storage_type (priv->icon_helper));
|
||||||
break;
|
break;
|
||||||
@ -1391,6 +1412,9 @@ gtk_image_measure (GtkWidget *widget,
|
|||||||
for_size,
|
for_size,
|
||||||
minimum, natural);
|
minimum, natural);
|
||||||
|
|
||||||
|
if (priv->can_shrink)
|
||||||
|
*minimum = 0;
|
||||||
|
|
||||||
if (orientation == GTK_ORIENTATION_VERTICAL)
|
if (orientation == GTK_ORIENTATION_VERTICAL)
|
||||||
{
|
{
|
||||||
baseline_align = gtk_image_get_baseline_align (GTK_IMAGE (widget));
|
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;
|
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
|
void
|
||||||
gtk_image_get_image_size (GtkImage *image,
|
gtk_image_get_image_size (GtkImage *image,
|
||||||
int *width,
|
int *width,
|
||||||
|
@ -151,6 +151,9 @@ void gtk_image_set_icon_size (GtkImage *image,
|
|||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gtk_image_set_keep_aspect_ratio (GtkImage *image,
|
void gtk_image_set_keep_aspect_ratio (GtkImage *image,
|
||||||
gboolean keep_aspect_ratio);
|
gboolean keep_aspect_ratio);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
void gtk_image_set_can_shrink (GtkImage *image,
|
||||||
|
gboolean can_shrink);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
GtkImageType gtk_image_get_storage_type (GtkImage *image);
|
GtkImageType gtk_image_get_storage_type (GtkImage *image);
|
||||||
@ -170,6 +173,8 @@ GDK_AVAILABLE_IN_ALL
|
|||||||
GtkIconSize gtk_image_get_icon_size (GtkImage *image);
|
GtkIconSize gtk_image_get_icon_size (GtkImage *image);
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
gboolean gtk_image_get_keep_aspect_ratio (GtkImage *image);
|
gboolean gtk_image_get_keep_aspect_ratio (GtkImage *image);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
gboolean gtk_image_get_can_shrink (GtkImage *image);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user