]> source.dussan.org Git - vaadin-framework.git/commitdiff
Changed IE8 to use a hash map for measured sizes instead of using the DOM (which...
authorJouni Koivuviita <jouni@jounikoivuviita.com>
Fri, 11 May 2012 13:09:41 +0000 (16:09 +0300)
committerJouni Koivuviita <jouni@jounikoivuviita.com>
Fri, 11 May 2012 13:09:41 +0000 (16:09 +0300)
src/com/vaadin/terminal/gwt/client/LayoutManager.java
src/com/vaadin/terminal/gwt/client/LayoutManagerIE8.java

index a3cad5657b02a1b7de88fbfdc254b42a6121a3f6..0a2e90f2f2165aced192577f398d383c1c87fe92 100644 (file)
@@ -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;
index 2b677985b5aba0f133cacb27c0a3e7b8cb4f7c14..fc550079694311521ba043595a2e5f26884fc178 100644 (file)
@@ -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;
+    }
 
 }