]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix Grid column dnd reorder scrollarea calculation in Chrome 43 (#18234)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Thu, 11 Jun 2015 08:34:41 +0000 (11:34 +0300)
committerJohannes Dahlström <johannesd@vaadin.com>
Thu, 11 Jun 2015 14:40:00 +0000 (17:40 +0300)
This patch also fixes issues with vertical scrollbar on page and
autoscrolling along with calculating drag element and marker positions
wrong.

Change-Id: I3d39c7bc6ddea630e04a9967ff8e1055c0736b79

client/src/com/vaadin/client/widget/grid/AutoScroller.java
client/src/com/vaadin/client/widgets/Grid.java

index f2e44196eccdedeac30732d1a0d6f82ea6c34767..90d206d98b2aa396fd08365680ad1c09d47bda3b 100644 (file)
@@ -538,9 +538,8 @@ public class AutoScroller {
         final int endBorder = getBodyClientEnd();
         startBorder += getFrozenColumnsWidth();
 
-        final int scrollCompensation = getScrollCompensation();
-        startingBound = scrollCompensation + startBorder + scrollAreaPX;
-        endingBound = scrollCompensation + endBorder - scrollAreaPX;
+        startingBound = startBorder + scrollAreaPX;
+        endingBound = endBorder - scrollAreaPX;
         gradientArea = scrollAreaPX;
 
         // modify bounds if they're too tightly packed
@@ -553,18 +552,6 @@ public class AutoScroller {
         }
     }
 
-    private int getScrollCompensation() {
-        Element cursor = grid.getElement();
-        int scroll = 0;
-        while (cursor != null) {
-            scroll -= scrollDirection == ScrollAxis.VERTICAL ? cursor
-                    .getScrollTop() : cursor.getScrollLeft();
-            cursor = cursor.getParentElement();
-        }
-
-        return scroll;
-    }
-
     private void injectNativeHandler() {
         removeNativeHandler();
         nativePreviewHandlerRegistration = Event
@@ -588,15 +575,6 @@ public class AutoScroller {
         }
     }
 
-    private TableSectionElement getTbodyElement() {
-        TableElement table = getTableElement();
-        if (table != null) {
-            return table.getTBodies().getItem(0);
-        } else {
-            return null;
-        }
-    }
-
     private TableSectionElement getTheadElement() {
         TableElement table = getTableElement();
         if (table != null) {
@@ -615,47 +593,20 @@ public class AutoScroller {
         }
     }
 
-    /** Get the "top" of an element in relation to "client" coordinates. */
-    @SuppressWarnings("static-method")
-    private int getClientTop(final Element e) {
-        Element cursor = e;
-        int top = 0;
-        while (cursor != null) {
-            top += cursor.getOffsetTop();
-            cursor = cursor.getOffsetParent();
-        }
-        return top;
-    }
-
-    /** Get the "left" of an element in relation to "client" coordinates. */
-    @SuppressWarnings("static-method")
-    private int getClientLeft(final Element e) {
-        Element cursor = e;
-        int left = 0;
-        while (cursor != null) {
-            left += cursor.getOffsetLeft();
-            cursor = cursor.getOffsetParent();
-        }
-        return left;
-    }
-
     private int getBodyClientEnd() {
         if (scrollDirection == ScrollAxis.VERTICAL) {
-            return getClientTop(getTfootElement()) - 1;
+            return getTfootElement().getAbsoluteTop() - 1;
         } else {
-            TableSectionElement tbodyElement = getTbodyElement();
-            return getClientLeft(tbodyElement) + tbodyElement.getOffsetWidth()
-                    - 1;
+            return getTableElement().getAbsoluteRight();
         }
 
     }
 
     private int getBodyClientStart() {
         if (scrollDirection == ScrollAxis.VERTICAL) {
-            return getClientTop(grid.getElement())
-                    + getTheadElement().getOffsetHeight();
+            return getTheadElement().getAbsoluteBottom() + 1;
         } else {
-            return getClientLeft(getTbodyElement());
+            return getTableElement().getAbsoluteLeft();
         }
     }
 
index bf0ab5a83bd3649bac520c39c8c63677842d2263..f6772ba1f6be0bdf940f80e3f8b4c4723b4979fd 100644 (file)
@@ -3641,17 +3641,14 @@ public class Grid<T> extends ResizeComposite implements
             // scrolled to the right
             if (latestColumnDropIndex == visibleColumns
                     && rightBoundaryForDrag < dropMarkerLeft
-                    && dropMarkerLeft <= escalator.getHeader().getElement()
-                            .getOffsetWidth()) {
+                    && dropMarkerLeft <= escalator.getInnerWidth()) {
                 dropMarkerLeft = rightBoundaryForDrag - dropMarkerWidthOffset;
             }
 
             // Check if the drop marker shouldn't be shown at all
             else if (dropMarkerLeft < frozenColumnsWidth
-                    || dropMarkerLeft > Math
-                            .min(rightBoundaryForDrag, escalator.getHeader()
-                                    .getElement().getOffsetWidth())
-                    || dropMarkerLeft < 0) {
+                    || dropMarkerLeft > Math.min(rightBoundaryForDrag,
+                            escalator.getInnerWidth()) || dropMarkerLeft < 0) {
                 dropMarkerLeft = -10000000;
             }
             dropMarker.getStyle().setLeft(dropMarkerLeft, Unit.PX);
@@ -3673,8 +3670,7 @@ public class Grid<T> extends ResizeComposite implements
 
             // Do not show the drag element beyond the grid
             final double sidebarBoundary = getSidebarBoundaryComparedTo(left);
-            final int gridBoundary = escalator.getHeader().getElement()
-                    .getOffsetWidth();
+            final double gridBoundary = escalator.getInnerWidth();
             final double rightBoundary = Math
                     .min(sidebarBoundary, gridBoundary);