diff options
author | Jouni Koivuviita <jouni@jounikoivuviita.com> | 2012-05-11 16:09:41 +0300 |
---|---|---|
committer | Jouni Koivuviita <jouni@jounikoivuviita.com> | 2012-05-11 16:09:41 +0300 |
commit | 25c3f362b93f6c4a90f5c7b9f84481e3e9cd8ac1 (patch) | |
tree | 8eeb952de51c0d178e816da93f5ac794f792b5b7 /src | |
parent | 779c65043913693e9caa3400fb0b25daa6a75729 (diff) | |
download | vaadin-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.java | 16 | ||||
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java | 29 |
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; + } } |