private HashMap<Widget, ChildComponentContainer> nonRenderedWidgets;
+ private boolean sizeChangedDuringRendering = false;
+
public IGridLayout() {
super();
getElement().appendChild(margin);
nonRenderedWidgets = null;
rendering = false;
+ sizeChangedDuringRendering = false;
+
boolean needsRelativeSizeCheck = false;
if (mightToggleHScrollBar && wBeforeRender != canvas.getOffsetWidth()) {
super.setHeight(height);
if (!height.equals(this.height)) {
this.height = height;
- if (!rendering) {
+ if (rendering) {
+ sizeChangedDuringRendering = true;
+ } else {
expandRows();
layoutCells();
for (Paintable c : paintableToCell.keySet()) {
super.setWidth(width);
if (!width.equals(this.width)) {
this.width = width;
- if (!rendering) {
+ if (rendering) {
+ sizeChangedDuringRendering = true;
+ } else {
int[] oldWidths = cloneArray(columnWidths);
expandColumns();
boolean heightChanged = false;
}
}
cc.renderChild(childUidl, client, -1);
+ if (sizeChangedDuringRendering && Util.isCached(childUidl)) {
+ client.handleComponentRelativeSize(cc.getWidget());
+ }
cc.updateWidgetSize();
nonRenderedWidgets.remove(paintable);
}
\r
private String width = "";\r
\r
+ private boolean sizeHasChangedDuringRendering = false;\r
+\r
public IOrderedLayout() {\r
this(CLASSNAME, ORIENTATION_VERTICAL);\r
allowOrientationUpdate = true;\r
.getChildCount());\r
ArrayList<ChildComponentContainer> relativeSizeComponents = new ArrayList<ChildComponentContainer>();\r
ArrayList<UIDL> relativeSizeComponentUIDL = new ArrayList<UIDL>();\r
- ArrayList<Widget> relativeSizeWidgets = new ArrayList<Widget>();\r
\r
int pos = 0;\r
for (final Iterator<UIDL> it = uidl.getChildIterator(); it.hasNext();) {\r
if (childComponentContainer.isComponentRelativeSized(orientation)) {\r
relativeSizeComponents.add(childComponentContainer);\r
relativeSizeComponentUIDL.add(childUIDL);\r
- relativeSizeWidgets.add(widget);\r
} else {\r
if (isDynamicWidth()) {\r
childComponentContainer.renderChild(childUIDL, client, 0);\r
childComponentContainer.renderChild(childUIDL, client,\r
activeLayoutSize.getWidth());\r
}\r
+ if (sizeHasChangedDuringRendering && Util.isCached(childUIDL)) {\r
+ // notify cached relative sized component about size\r
+ // chance\r
+ client.handleComponentRelativeSize(childComponentContainer\r
+ .getWidget());\r
+ }\r
}\r
\r
uidlWidgets.add(widget);\r
\r
if (isDynamicWidth()) {\r
childComponentContainer.renderChild(childUIDL, client, 0);\r
- } else if (Util.isCached(childUIDL)) {\r
+ } else {\r
+ childComponentContainer.renderChild(childUIDL, client,\r
+ activeLayoutSize.getWidth());\r
+ }\r
+\r
+ if (Util.isCached(childUIDL)) {\r
/*\r
* We must update the size of the relative sized component if\r
* the expand ratio or something else in the layout changes\r
*/\r
client.handleComponentRelativeSize(childComponentContainer\r
.getWidget());\r
- } else {\r
- childComponentContainer.renderChild(childUIDL, client,\r
- activeLayoutSize.getWidth());\r
}\r
+\r
// childComponentContainer.updateWidgetSize();\r
}\r
\r
\r
// w.mark("runDescendentsLayout done");\r
isRendering = false;\r
+ sizeHasChangedDuringRendering = false;\r
}\r
\r
private void updateWidgetSizes() {\r
- activeMargins.getVertical());\r
}\r
\r
- if (!isRendering) {\r
+ if (isRendering) {\r
+ sizeHasChangedDuringRendering = true;\r
+ } else {\r
recalculateLayoutAndComponentSizes();\r
boolean sameSize = (sizeBefore.equals(activeLayoutSize));\r
if (!sameSize) {\r
- activeMargins.getHorizontal());\r
}\r
\r
- if (!isRendering) {\r
+ if (isRendering) {\r
+ sizeHasChangedDuringRendering = true;\r
+ } else {\r
recalculateLayoutAndComponentSizes();\r
boolean sameSize = (sizeBefore.equals(activeLayoutSize));\r
if (!sameSize) {\r