diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2014-12-14 14:44:04 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2014-12-16 00:37:07 +0000 |
commit | 66d48bcca07b371e3962cfa4b651e7717228db96 (patch) | |
tree | bc85301748a469c20e1fd82d8b721721ebc8688c /clutter/clutter-actor.c | |
parent | 391f1d8dd4323e825747fdab71a0d32303c7e343 (diff) | |
download | clutter-66d48bcca07b371e3962cfa4b651e7717228db96.tar.gz |
actor: Update preferred size using constraints
If an actor has any constraint that may affect its preferred size, then
it should query them when computing its preferred size.
Diffstat (limited to 'clutter/clutter-actor.c')
-rw-r--r-- | clutter/clutter-actor.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index 38e454b88..43458b824 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -9306,6 +9306,46 @@ _clutter_actor_get_cached_size_request (gfloat for_size, return FALSE; } +static void +clutter_actor_update_preferred_size_for_constraints (ClutterActor *self, + ClutterOrientation direction, + float for_size, + float *minimum_size, + float *natural_size) +{ + ClutterActorPrivate *priv = self->priv; + const GList *constraints, *l; + + if (priv->constraints == NULL) + return; + + constraints = _clutter_meta_group_peek_metas (priv->constraints); + for (l = constraints; l != NULL; l = l->next) + { + ClutterConstraint *constraint = l->data; + ClutterActorMeta *meta = l->data; + + if (!clutter_actor_meta_get_enabled (meta)) + continue; + + clutter_constraint_update_preferred_size (constraint, self, + direction, + for_size, + minimum_size, + natural_size); + + CLUTTER_NOTE (LAYOUT, + "Preferred %s of '%s' after constraint '%s': " + "{ min:%.2f, nat:%.2f }", + direction == CLUTTER_ORIENTATION_HORIZONTAL + ? "width" + : "height", + _clutter_actor_get_debug_name (self), + _clutter_actor_meta_get_debug_name (meta), + *minimum_size, *natural_size); + } +} + /** * clutter_actor_get_preferred_width: * @self: A #ClutterActor @@ -9404,6 +9444,13 @@ clutter_actor_get_preferred_width (ClutterActor *self, &minimum_width, &natural_width); + /* adjust for constraints */ + clutter_actor_update_preferred_size_for_constraints (self, + CLUTTER_ORIENTATION_HORIZONTAL, + for_height, + &minimum_width, + &natural_width); + /* adjust for the margin */ minimum_width += (info->margin.left + info->margin.right); natural_width += (info->margin.left + info->margin.right); @@ -9540,6 +9587,13 @@ clutter_actor_get_preferred_height (ClutterActor *self, &minimum_height, &natural_height); + /* adjust for constraints */ + clutter_actor_update_preferred_size_for_constraints (self, + CLUTTER_ORIENTATION_VERTICAL, + for_width, + &minimum_height, + &natural_height); + /* adjust for margin */ minimum_height += (info->margin.top + info->margin.bottom); natural_height += (info->margin.top + info->margin.bottom); |