}
}-*/;
- private static native final MeasuredSize getMeasuredSize(Element element,
+ /**
+ * Get the measured size of the given element. If no size is set, use the
+ * default size instead.
+ *
+ * Method defined as protected to allow separate implementation for IE8
+ * (performance reason: storing any data in the DOM causes a reflow).
+ *
+ * @param element
+ * the dom element whose measured size to get
+ * @param defaultSize
+ * a fallback size if the element doesn't have a measured size
+ * stored
+ * @return
+ */
+ protected native MeasuredSize getMeasuredSize(Element element,
MeasuredSize defaultSize)
/*-{
return element.vMeasuredSize || defaultSize;
*/
package com.vaadin.terminal.gwt.client;
+import java.util.HashMap;
+
import com.google.gwt.dom.client.Element;
public class LayoutManagerIE8 extends LayoutManager {
+ protected HashMap<Element, MeasuredSize> sizes = new HashMap<Element, MeasuredSize>();
+
@Override
- protected native void setMeasuredSize(Element element,
- MeasuredSize measuredSize)
+ protected void setMeasuredSize(Element element, MeasuredSize measuredSize) {
+ if (measuredSize != null) {
+ sizes.put(element, measuredSize);
+ } else {
+ sizes.remove(element);
+ }
+ }
+
+ // @Override
+ // protected native void setMeasuredSize(Element element,
+ // MeasuredSize measuredSize)
// IE8 cannot do delete element.vMeasuredSize, at least in the case when
// element is not attached to the document (e.g. when a caption is removed)
/*-{
} else {
element.vMeasuredSize = undefined;
}
- }-*/;
+ // }-*/;
+
+ @Override
+ protected MeasuredSize getMeasuredSize(Element element,
+ MeasuredSize defaultSize) {
+ MeasuredSize size = sizes.get(element);
+ if (size != null) {
+ return size;
+ }
+ return defaultSize;
+ }
}