diff --git a/clutter/clutter/clutter-image.c b/clutter/clutter/clutter-image.c index d4356598b..924626be0 100644 --- a/clutter/clutter/clutter-image.c +++ b/clutter/clutter/clutter-image.c @@ -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; }