From: Artur Signell Date: Fri, 28 Nov 2008 09:47:08 +0000 (+0000) Subject: Fix for #2240 OrderedLayout size updates X-Git-Tag: 6.7.0.beta1~3697 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2d91d1216d9e4c5abec563639bee2134610f4e38;p=vaadin-framework.git Fix for #2240 OrderedLayout size updates svn changeset:6035/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java index 91dc7253f5..ed3b1711ee 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java @@ -123,14 +123,7 @@ public class IOrderedLayout extends CellBasedLayout { // w.mark("Alignments and expand ratios updated"); /* Fetch widget sizes from rendered components */ - for (ChildComponentContainer childComponentContainer : widgetToComponentContainer - .values()) { - - /* - * Update widget size from DOM - */ - childComponentContainer.updateWidgetSize(); - } + updateWidgetSizes(); // w.mark("Widget sizes updated"); recalculateLayout(); @@ -209,6 +202,17 @@ public class IOrderedLayout extends CellBasedLayout { isRendering = false; } + private void updateWidgetSizes() { + for (ChildComponentContainer childComponentContainer : widgetToComponentContainer + .values()) { + + /* + * Update widget size from DOM + */ + childComponentContainer.updateWidgetSize(); + } + } + private void recalculateLayout() { /* Calculate space for relative size components */ @@ -646,6 +650,33 @@ public class IOrderedLayout extends CellBasedLayout { private void recalculateLayoutAndComponentSizes() { recalculateLayout(); + if (isDynamicHeight()) { + /* + * Height is not necessarily correct anymore as the height of + * components might have changed if the width has changed. + */ + + /* First update relative sized components */ + for (ChildComponentContainer componentContainer : widgetToComponentContainer + .values()) { + if (componentContainer + .isComponentRelativeSized(ORIENTATION_HORIZONTAL)) { + client.handleComponentRelativeSize(componentContainer + .getWidget()); + } + } + + /* + * Get the new widget sizes from DOM and calculate new container + * sizes + */ + updateWidgetSizes(); + calculateContainerSize(); + + /* Finally calculate new layout height */ + calculateLayoutDimensions(); + } + recalculateComponentSizesAndAlignments(); setRootSize();