aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJouni Koivuviita <jouni@jounikoivuviita.com>2012-05-11 16:09:41 +0300
committerJouni Koivuviita <jouni@jounikoivuviita.com>2012-05-11 16:09:41 +0300
commit25c3f362b93f6c4a90f5c7b9f84481e3e9cd8ac1 (patch)
tree8eeb952de51c0d178e816da93f5ac794f792b5b7 /src
parent779c65043913693e9caa3400fb0b25daa6a75729 (diff)
downloadvaadin-framework-25c3f362b93f6c4a90f5c7b9f84481e3e9cd8ac1.tar.gz
vaadin-framework-25c3f362b93f6c4a90f5c7b9f84481e3e9cd8ac1.zip
Changed IE8 to use a hash map for measured sizes instead of using the DOM (which causes reflows)
Diffstat (limited to 'src')
-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;
+ }
}