From 6ddc694e68f827c9990d75a52af14cc911ff65ad Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 29 Mar 2012 16:34:36 +0100 Subject: [PATCH] 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. --- clutter/clutter-bin-layout.c | 54 ++++++++++++++++++++++++++++++++---- 1 file 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,