diff options
author | Emmanuele Bassi <ebassi@linux.intel.com> | 2012-03-29 16:34:36 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@linux.intel.com> | 2012-04-27 12:30:49 +0100 |
commit | 6ddc694e68f827c9990d75a52af14cc911ff65ad (patch) | |
tree | 34a7bb4965c0d4cbbd1c5d27eeb97f9ed1e1c47a | |
parent | 473aaf7766cdc4f3322645249440087c1f501e0a (diff) | |
download | clutter-6ddc694e68f827c9990d75a52af14cc911ff65ad.tar.gz |
bin-layout: Use the actor align/expand flags
If an actor is set to expand, we use the actor's horizontal and vertical
alignment values instead of the BinLayout's.
-rw-r--r-- | clutter/clutter-bin-layout.c | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/clutter/clutter-bin-layout.c b/clutter/clutter-bin-layout.c index 38bab6ff7..12a850200 100644 --- a/clutter/clutter-bin-layout.c +++ b/clutter/clutter-bin-layout.c @@ -96,7 +96,7 @@ #define CLUTTER_DISABLE_DEPRECATION_WARNINGS #include "deprecated/clutter-container.h" -#include "clutter-actor.h" +#include "clutter-actor-private.h" #include "clutter-animatable.h" #include "clutter-bin-layout.h" #include "clutter-child-meta.h" @@ -423,6 +423,27 @@ get_bin_alignment_factor (ClutterBinAlignment alignment) return 0.0; } +static gdouble +get_actor_align_factor (ClutterActorAlign alignment) +{ + switch (alignment) + { + case CLUTTER_ACTOR_ALIGN_CENTER: + return 0.5; + + case CLUTTER_ACTOR_ALIGN_START: + return 0.0; + + case CLUTTER_ACTOR_ALIGN_END: + return 1.0; + + case CLUTTER_ACTOR_ALIGN_FILL: + return 0.0; + } + + return 0.0; +} + static void clutter_bin_layout_allocate (ClutterLayoutManager *manager, ClutterContainer *container, @@ -466,10 +487,33 @@ clutter_bin_layout_allocate (ClutterLayoutManager *manager, child_alloc.x2 = available_w; child_alloc.y2 = available_h; - x_fill = (layer->x_align == CLUTTER_BIN_ALIGNMENT_FILL); - y_fill = (layer->y_align == CLUTTER_BIN_ALIGNMENT_FILL); - x_align = get_bin_alignment_factor (layer->x_align); - y_align = get_bin_alignment_factor (layer->y_align); + if (clutter_actor_needs_x_expand (child)) + { + ClutterActorAlign align; + + align = _clutter_actor_get_effective_x_align (child); + x_fill = align == CLUTTER_ACTOR_ALIGN_FILL; + x_align = get_actor_align_factor (align); + } + else + { + x_fill = (layer->x_align == CLUTTER_BIN_ALIGNMENT_FILL); + x_align = get_bin_alignment_factor (layer->x_align); + } + + if (clutter_actor_needs_y_expand (child)) + { + ClutterActorAlign align; + + align = clutter_actor_get_y_align (child); + y_fill = align == CLUTTER_ACTOR_ALIGN_FILL; + y_align = get_actor_align_factor (align); + } + else + { + y_fill = (layer->y_align == CLUTTER_BIN_ALIGNMENT_FILL); + y_align = get_bin_alignment_factor (layer->y_align); + } clutter_actor_allocate_align_fill (child, &child_alloc, x_align, y_align, |