clutter/image: Also invalidate size
ClutterImage is a ClutterContent implementation that has an internally managed CoglTexture. This texture is recreated when new image data is set. ClutterContent implementations may have control over the allocation of the widgets they're attached to, through CLUTTER_REQUEST_CONTENT_SIZE. On those cases, if the new image data differs in size from the previous data, it is important to notify those actors about the size change. However, currently ClutterImage does not notify them. With the introduction of clutter_content_invalidate_size(), it is possible to report the size changes to attached actors. Adapt ClutterImage to invalidate_size() when image data has different sizes. https://gitlab.gnome.org/GNOME/mutter/merge_requests/405
This commit is contained in:
parent
0f0b411f6e
commit
25f36b3892
@ -53,6 +53,8 @@
|
||||
struct _ClutterImagePrivate
|
||||
{
|
||||
CoglTexture *texture;
|
||||
gint width;
|
||||
gint height;
|
||||
};
|
||||
|
||||
static void clutter_content_iface_init (ClutterContentIface *iface);
|
||||
@ -68,6 +70,27 @@ clutter_image_error_quark (void)
|
||||
return g_quark_from_static_string ("clutter-image-error-quark");
|
||||
}
|
||||
|
||||
static void
|
||||
update_image_size (ClutterImage *self)
|
||||
{
|
||||
gint width, height;
|
||||
|
||||
if (self->priv->texture == NULL)
|
||||
return;
|
||||
|
||||
width = cogl_texture_get_width (self->priv->texture);
|
||||
height = cogl_texture_get_height (self->priv->texture);
|
||||
|
||||
if (self->priv->width == width &&
|
||||
self->priv->height == height)
|
||||
return;
|
||||
|
||||
self->priv->width = width;
|
||||
self->priv->height = height;
|
||||
|
||||
clutter_content_invalidate_size (CLUTTER_CONTENT (self));
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_image_finalize (GObject *gobject)
|
||||
{
|
||||
@ -238,6 +261,7 @@ clutter_image_set_data (ClutterImage *image,
|
||||
}
|
||||
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (image));
|
||||
update_image_size (image);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -306,6 +330,7 @@ clutter_image_set_bytes (ClutterImage *image,
|
||||
}
|
||||
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (image));
|
||||
update_image_size (image);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -399,6 +424,7 @@ clutter_image_set_area (ClutterImage *image,
|
||||
}
|
||||
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (image));
|
||||
update_image_size (image);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user