]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #2253 - Use getBoundingClientRect() for measuring elements when available.
authorArtur Signell <artur.signell@itmill.com>
Fri, 5 Dec 2008 10:34:30 +0000 (10:34 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 5 Dec 2008 10:34:30 +0000 (10:34 +0000)
svn changeset:6090/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/layout/ChildComponentContainer.java

index 1527cf38d5e2dd72e542a101fd200042fb6b7e37..a6700531d73aa82334bfae2eba45ebf39f181298 100644 (file)
@@ -189,8 +189,9 @@ public class ChildComponentContainer extends Panel {
          * Widget wrapper includes margin which the widget offsetWidth/Height
          * does not include
          */
-        int w = widgetDIV.getOffsetWidth();
-        int h = widgetDIV.getOffsetHeight();
+        int w = getRequiredWidth(widgetDIV);
+        int h = getRequiredHeight(widgetDIV);
+
         widgetSize.setWidth(w);
         widgetSize.setHeight(h);
 
@@ -199,6 +200,32 @@ public class ChildComponentContainer extends Panel {
 
     }
 
+    public static native int getRequiredWidth(
+            com.google.gwt.dom.client.Element element)
+    /*-{
+        var width;
+        if (element.getBoundingClientRect != null) {
+          var rect = element.getBoundingClientRect();
+          width = Math.ceil(rect.right - rect.left);
+        } else {
+          width = elem.offsetWidth;
+        }
+        return width;
+    }-*/;
+
+    public static native int getRequiredHeight(
+            com.google.gwt.dom.client.Element element)
+    /*-{
+        var height;
+        if (element.getBoundingClientRect != null) {
+          var rect = element.getBoundingClientRect();
+          height = Math.ceil(rect.bottom - rect.top);
+        } else {
+          height = elem.offsetHeight;
+        }
+        return height;
+    }-*/;
+
     public void setMarginLeft(int marginLeft) {
         containerMarginLeft = marginLeft;
         getElement().getStyle().setPropertyPx("paddingLeft", marginLeft);