From 434fb5bf5cf62490686367e9193b7898077bbd44 Mon Sep 17 00:00:00 2001 From: Henrik Paul Date: Thu, 18 Dec 2014 16:10:43 +0200 Subject: Heights are now double precision floats (#13334) Change-Id: Id9e1dd4b4a480dd512f3dd78fde2f9a0256087e9 --- .../client/widget/escalator/RowContainer.java | 6 +- .../client/widget/escalator/ScrollbarBundle.java | 2 +- .../src/com/vaadin/client/widgets/Escalator.java | 68 ++++++++++++---------- client/src/com/vaadin/client/widgets/Grid.java | 16 +++-- .../widgetset/client/grid/EscalatorProxy.java | 4 +- 5 files changed, 52 insertions(+), 44 deletions(-) diff --git a/client/src/com/vaadin/client/widget/escalator/RowContainer.java b/client/src/com/vaadin/client/widget/escalator/RowContainer.java index 10b4636bfe..be80e97d05 100644 --- a/client/src/com/vaadin/client/widget/escalator/RowContainer.java +++ b/client/src/com/vaadin/client/widget/escalator/RowContainer.java @@ -35,7 +35,7 @@ public interface RowContainer { * An arbitrary pixel height of a row, before any autodetection for the row * height has been made. * */ - public static final int INITIAL_DEFAULT_ROW_HEIGHT = 20; + public static final double INITIAL_DEFAULT_ROW_HEIGHT = 20; /** * Returns the current {@link EscalatorUpdater} used to render cells. @@ -143,7 +143,7 @@ public interface RowContainer { * if px < 1 * @see #getDefaultRowHeight() */ - public void setDefaultRowHeight(int px) throws IllegalArgumentException; + public void setDefaultRowHeight(double px) throws IllegalArgumentException; /** * Returns the default height of the rows in this RowContainer. @@ -155,7 +155,7 @@ public interface RowContainer { * @return the default height of the rows in this RowContainer, in pixels * @see #setDefaultRowHeight(int) */ - public int getDefaultRowHeight(); + public double getDefaultRowHeight(); /** * Returns the cell object which contains information about the cell the diff --git a/client/src/com/vaadin/client/widget/escalator/ScrollbarBundle.java b/client/src/com/vaadin/client/widget/escalator/ScrollbarBundle.java index f02ea4eb2d..5699d994c0 100644 --- a/client/src/com/vaadin/client/widget/escalator/ScrollbarBundle.java +++ b/client/src/com/vaadin/client/widget/escalator/ScrollbarBundle.java @@ -683,7 +683,7 @@ public abstract class ScrollbarBundle implements DeferredWorker { * Gets the scrollbar's thickness. *

* This value will differ from the value in the DOM, if the thickness was - * set to 0 with {@link #setScrollbarThickness(int)}, as the scrollbar is + * set to 0 with {@link #setScrollbarThickness(double)}, as the scrollbar is * then treated as "invisible." * * @return the scrollbar's thickness in pixels diff --git a/client/src/com/vaadin/client/widgets/Escalator.java b/client/src/com/vaadin/client/widgets/Escalator.java index adbffe178b..f1f0b9f845 100644 --- a/client/src/com/vaadin/client/widgets/Escalator.java +++ b/client/src/com/vaadin/client/widgets/Escalator.java @@ -623,7 +623,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker private static double getScrollPos(final ScrollDestination destination, final double targetStartPx, final double targetEndPx, final double viewportStartPx, final double viewportEndPx, - final int padding) { + final double padding) { final double viewportLength = viewportEndPx - viewportStartPx; @@ -753,7 +753,8 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * that the sizes of the scroll handles appear correct in the browser */ public void recalculateScrollbarsForVirtualViewport() { - int scrollContentHeight = body.calculateEstimatedTotalRowHeight(); + double scrollContentHeight = body + .calculateEstimatedTotalRowHeight(); double scrollContentWidth = columnConfiguration.calculateRowWidth(); double tableWrapperHeight = heightOfEscalator; @@ -1076,13 +1077,14 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker } public void scrollToRow(final int rowIndex, - final ScrollDestination destination, final int padding) { + final ScrollDestination destination, final double padding) { /* * FIXME [[rowheight]]: coded to work only with default row heights * - will not work with variable row heights */ - final int targetStartPx = body.getDefaultRowHeight() * rowIndex; - final int targetEndPx = targetStartPx + body.getDefaultRowHeight(); + final double targetStartPx = body.getDefaultRowHeight() * rowIndex; + final double targetEndPx = targetStartPx + + body.getDefaultRowHeight(); final double viewportStartPx = getScrollTop(); final double viewportEndPx = viewportStartPx @@ -1172,11 +1174,11 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * {@link #removeRowPosition(Element)} instead. */ @Deprecated - private final Map rowTopPositionMap = new HashMap(); + private final Map rowTopPositionMap = new HashMap(); private boolean defaultRowHeightShouldBeAutodetected = true; - private int defaultRowHeight = INITIAL_DEFAULT_ROW_HEIGHT; + private double defaultRowHeight = INITIAL_DEFAULT_ROW_HEIGHT; public AbstractRowContainer( final TableSectionElement rowContainerElement) { @@ -1497,7 +1499,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * The estimate is promised to be correct as long as there are no rows * with calculated heights. */ - protected int calculateEstimatedTotalRowHeight() { + protected double calculateEstimatedTotalRowHeight() { return getDefaultRowHeight() * getRowCount(); } @@ -1545,7 +1547,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker /** * Create and setup an empty cell element. * - * @param colWidth + * @param width * the width of the cell, in pixels * * @return a set-up empty cell element @@ -1554,7 +1556,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker final TableCellElement cellElem = TableCellElement.as(DOM .createElement(getCellElementTagName())); - final int height = getDefaultRowHeight(); + final double height = getDefaultRowHeight(); assert height >= 0 : "defaultRowHeight was negative. There's a setter leak somewhere."; cellElem.getStyle().setHeight(height, Unit.PX); @@ -1840,7 +1842,8 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker } @Override - public void setDefaultRowHeight(int px) throws IllegalArgumentException { + public void setDefaultRowHeight(double px) + throws IllegalArgumentException { if (px < 1) { throw new IllegalArgumentException("Height must be positive. " + px + " was given."); @@ -1852,7 +1855,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker } @Override - public int getDefaultRowHeight() { + public double getDefaultRowHeight() { return defaultRowHeight; } @@ -1869,7 +1872,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker protected abstract void reapplyDefaultRowHeights(); protected void reapplyRowHeight(final TableRowElement tr, - final int heightPx) { + final double heightPx) { assert heightPx >= 0 : "Height must not be negative"; Element cellElem = tr.getFirstChildElement(); @@ -1886,13 +1889,13 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker @SuppressWarnings("boxing") protected void setRowPosition(final TableRowElement tr, final int x, - final int y) { + final double y) { position.set(tr, x, y); rowTopPositionMap.put(tr, y); } @SuppressWarnings("boxing") - protected int getRowTop(final TableRowElement tr) { + protected double getRowTop(final TableRowElement tr) { return rowTopPositionMap.get(tr); } @@ -2099,7 +2102,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker protected void recalculateSectionHeight() { Profiler.enter("Escalator.AbstractStaticRowContainer.recalculateSectionHeight"); - int newHeight = calculateEstimatedTotalRowHeight(); + double newHeight = calculateEstimatedTotalRowHeight(); if (newHeight != heightOfSection) { heightOfSection = newHeight; sectionHeightCalculated(); @@ -2528,7 +2531,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row * heights - will not work with variable row heights */ - final int yDelta = numberOfRows * getDefaultRowHeight(); + final double yDelta = numberOfRows * getDefaultRowHeight(); adjustScrollPosIgnoreEvents(yDelta); updateTopRowLogicalIndex(numberOfRows); } @@ -2566,7 +2569,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * heights - will not work with variable row heights */ // move the surrounding rows to their correct places. - int rowTop = (unupdatedLogicalStart + (end - start)) + double rowTop = (unupdatedLogicalStart + (end - start)) * getDefaultRowHeight(); final ListIterator i = visualRowOrder .listIterator(visualTargetIndex + (end - start)); @@ -2689,7 +2692,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row * heights - will not work with variable row heights */ - int newRowTop = logicalTargetIndex * getDefaultRowHeight(); + double newRowTop = logicalTargetIndex * getDefaultRowHeight(); final ListIterator iter = visualRowOrder .listIterator(adjustedVisualTargetIndex); @@ -2729,8 +2732,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row heights * - will not work with variable row heights */ - final int rowTopPos = (int) yDelta - - ((int) yDelta % getDefaultRowHeight()); + final double rowTopPos = yDelta - (yDelta % getDefaultRowHeight()); for (final TableRowElement tr : visualRowOrder) { setRowPosition(tr, 0, getRowTop(tr) + rowTopPos); } @@ -2858,9 +2860,9 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row * heights - will not work with variable row heights */ - final int yDelta = removedAbove.length() + final double yDelta = removedAbove.length() * getDefaultRowHeight(); - final int firstLogicalRowHeight = getDefaultRowHeight(); + final double firstLogicalRowHeight = getDefaultRowHeight(); final boolean removalScrollsToShowFirstLogicalRow = verticalScrollbar .getScrollPos() - yDelta < firstLogicalRowHeight; @@ -2967,9 +2969,10 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row * heights - will not work with variable row heights */ - final int contentBottom = getRowCount() + final double contentBottom = getRowCount() * getDefaultRowHeight(); - final int viewportBottom = (int) (tBodyScrollTop + calculateHeight()); + final double viewportBottom = tBodyScrollTop + + calculateHeight(); if (viewportBottom <= contentBottom) { /* * We're in the middle of the row container, everything @@ -2989,7 +2992,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker */ double left = horizontalScrollbar.getScrollPos(); - int top = contentBottom - visualRowOrder.size() + double top = contentBottom - visualRowOrder.size() * getDefaultRowHeight(); setBodyScrollPosition(left, top); @@ -3142,7 +3145,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * row heights - will not work with variable row heights */ final int rowsScrolled = (int) (Math - .ceil((viewportBottom - (double) contentBottom) + .ceil((viewportBottom - contentBottom) / getDefaultRowHeight())); final int start = escalatorRowCount - (removedVisualInside.length() - rowsScrolled); @@ -3196,7 +3199,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row heights * - will not work with variable row heights */ - int rowTop = (removedLogicalInside.getStart() + logicalOffset) + double rowTop = (removedLogicalInside.getStart() + logicalOffset) * getDefaultRowHeight(); for (int i = removedVisualInside.getStart(); i < escalatorRowCount - removedVisualInside.length(); i++) { @@ -3232,7 +3235,7 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * FIXME [[rowheight]]: coded to work only with default row heights * - will not work with variable row heights */ - int rowTop = removedLogicalInside.getStart() + double rowTop = removedLogicalInside.getStart() * getDefaultRowHeight(); while (iterator.hasNext()) { final TableRowElement tr = iterator.next(); @@ -3507,7 +3510,8 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker */ if (!visualRowOrder.isEmpty()) { - final int firstRowTop = getRowTop(visualRowOrder.getFirst()); + final double firstRowTop = getRowTop(visualRowOrder + .getFirst()); /* * FIXME [[rowheight]]: coded to work only with default row * heights - will not work with variable row heights @@ -3587,8 +3591,8 @@ public class Escalator extends Widget implements RequiresResize, DeferredWorker * TODO [[rowheight]] This simply doesn't work with variable rows * heights. */ - setTopRowLogicalIndex(getRowTop(visualRowOrder.getFirst()) - / getDefaultRowHeight()); + int logicalLogical = (int) (getRowTop(visualRowOrder.getFirst()) / getDefaultRowHeight()); + setTopRowLogicalIndex(logicalLogical); Profiler.leave("Escalator.BodyRowContainer.reapplyDefaultRowHeights"); } diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index 895d709395..76d0901168 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -1181,12 +1181,14 @@ public class Grid extends ResizeComposite implements AbstractRowContainer body = (AbstractRowContainer) grid .getEscalator().getBody(); - int rowTop = body.getRowTop(tr); + double rowTop = body.getRowTop(tr); int bodyTop = body.getElement().getAbsoluteTop(); int wrapperTop = tableWrapper.getAbsoluteTop(); + double width = Util.getRequiredWidthBoundingClientRectDouble(tr); + double height = Util.getRequiredHeightBoundingClientRectDouble(tr); setBounds(editorOverlay, tr.getOffsetLeft(), rowTop + bodyTop - - wrapperTop, tr.getOffsetWidth(), tr.getOffsetHeight()); + - wrapperTop, width, height); updateHorizontalScrollPosition(); @@ -1273,8 +1275,10 @@ public class Grid extends ResizeComposite implements */ protected Element createCell(TableCellElement td) { DivElement cell = DivElement.as(DOM.createDiv()); - setBounds(cell, td.getOffsetLeft(), td.getOffsetTop(), - td.getOffsetWidth(), td.getOffsetHeight()); + double width = Util.getRequiredWidthBoundingClientRectDouble(td); + double height = Util.getRequiredHeightBoundingClientRectDouble(td); + setBounds(cell, td.getOffsetLeft(), td.getOffsetTop(), width, + height); return cell; } @@ -1283,8 +1287,8 @@ public class Grid extends ResizeComposite implements GridUtil.setParent(w, grid); } - private static void setBounds(Element e, int left, int top, int width, - int height) { + private static void setBounds(Element e, double left, double top, + double width, double height) { Style style = e.getStyle(); style.setLeft(left, Unit.PX); style.setTop(top, Unit.PX); diff --git a/uitest/src/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java b/uitest/src/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java index 0efb040517..53bf96c587 100644 --- a/uitest/src/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java +++ b/uitest/src/com/vaadin/tests/widgetset/client/grid/EscalatorProxy.java @@ -138,12 +138,12 @@ public class EscalatorProxy extends Escalator { } @Override - public void setDefaultRowHeight(int px) throws IllegalArgumentException { + public void setDefaultRowHeight(double px) throws IllegalArgumentException { rowContainer.setDefaultRowHeight(px); } @Override - public int getDefaultRowHeight() { + public double getDefaultRowHeight() { return rowContainer.getDefaultRowHeight(); } -- cgit v1.2.3