From: Matti Tahvonen Date: Fri, 13 Mar 2009 11:55:50 +0000 (+0000) Subject: better fix or FF2 performance issues with deep tree X-Git-Tag: 6.7.0.beta1~3065 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1e34c818ca32198732264f224814b72933f0bdf5;p=vaadin-framework.git better fix or FF2 performance issues with deep tree svn changeset:7077/svn branch:6.0 --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java index 4edaafbce2..fc7eefc9be 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java @@ -6,6 +6,7 @@ import java.util.NoSuchElementException; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Style; +import com.google.gwt.dom.client.TableElement; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; @@ -70,18 +71,31 @@ public class ChildComponentContainer extends Panel { super(); containerDIV = Document.get().createDivElement(); - setElement(containerDIV); - - containerDIV.getStyle().setProperty("height", "0"); - containerDIV.getStyle().setProperty("width", "0px"); - containerDIV.getStyle().setProperty("overflow", "hidden"); widgetDIV = Document.get().createDivElement(); if (BrowserInfo.get().isFF2()) { Style style = widgetDIV.getStyle(); - style.setProperty("display", "table-cell"); + // FF2 chokes on some floats very easily. Measuring size escpecially + // becomes terribly slow + TableElement tableEl = Document.get().createTableElement(); + tableEl + .setInnerHTML("
"); + DivElement div = (DivElement) tableEl.getFirstChildElement() + .getFirstChildElement().getFirstChildElement() + .getFirstChildElement(); + tableEl.setCellPadding(0); + tableEl.setCellSpacing(0); + tableEl.setBorder(0); + div.getStyle().setProperty("padding", "0"); + + setElement(tableEl); + containerDIV = div; } else { setFloat(widgetDIV, "left"); + setElement(containerDIV); + containerDIV.getStyle().setProperty("height", "0"); + containerDIV.getStyle().setProperty("width", "0px"); + containerDIV.getStyle().setProperty("overflow", "hidden"); } if (BrowserInfo.get().isIE()) { @@ -157,8 +171,8 @@ public class ChildComponentContainer extends Panel { contSize.setWidth(0); containerMarginLeft = 0; containerMarginTop = 0; - getElement().getStyle().setProperty("paddingLeft", "0"); - getElement().getStyle().setProperty("paddingTop", "0"); + containerDIV.getStyle().setProperty("paddingLeft", "0"); + containerDIV.getStyle().setProperty("paddingTop", "0"); containerExpansion.setHeight(0); containerExpansion.setWidth(0); @@ -215,12 +229,12 @@ public class ChildComponentContainer extends Panel { public void setMarginLeft(int marginLeft) { containerMarginLeft = marginLeft; - getElement().getStyle().setPropertyPx("paddingLeft", marginLeft); + containerDIV.getStyle().setPropertyPx("paddingLeft", marginLeft); } public void setMarginTop(int marginTop) { containerMarginTop = marginTop; - getElement().getStyle().setPropertyPx("paddingTop", + containerDIV.getStyle().setPropertyPx("paddingTop", marginTop + alignmentTopOffset); updateContainerDOMSize();