aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/vaadin/terminal/gwt/client/LayoutManager.java16
-rw-r--r--src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java29
2 files changed, 41 insertions, 4 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/LayoutManager.java b/src/com/vaadin/terminal/gwt/client/LayoutManager.java
index a3cad5657b..0a2e90f2f2 100644
--- a/src/com/vaadin/terminal/gwt/client/LayoutManager.java
+++ b/src/com/vaadin/terminal/gwt/client/LayoutManager.java
@@ -138,7 +138,21 @@ public class LayoutManager {
}
}-*/;
- 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;
diff --git a/src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java b/src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java
index 2b677985b5..fc55007969 100644
--- a/src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java
+++ b/src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java
@@ -3,13 +3,26 @@
*/
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)
/*-{
@@ -18,6 +31,16 @@ public class LayoutManagerIE8 extends LayoutManager {
} else {
element.vMeasuredSize = undefined;
}
- }-*/;
+ // }-*/;
+
+ @Override
+ protected MeasuredSize getMeasuredSize(Element element,
+ MeasuredSize defaultSize) {
+ MeasuredSize size = sizes.get(element);
+ if (size != null) {
+ return size;
+ }
+ return defaultSize;
+ }
}