diff options
author | Denis Anisimov <denis@vaadin.com> | 2014-10-31 20:33:39 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-12-10 14:28:26 +0000 |
commit | 60f0bdaa6ef00f14664ead0d0b4aefb18343c8a7 (patch) | |
tree | b1956a59e96b8c4df8b08ce50b6c0097f3391dfe /client/src/com/vaadin | |
parent | da91036c92d8088d02471bb939b21eb228638d8f (diff) | |
download | vaadin-framework-60f0bdaa6ef00f14664ead0d0b4aefb18343c8a7.tar.gz vaadin-framework-60f0bdaa6ef00f14664ead0d0b4aefb18343c8a7.zip |
Horizontal split panel height shouldn't ignore second component (#15149)
Change-Id: Ie925757167b6d8521707b6d5515157eca85f9dba
Diffstat (limited to 'client/src/com/vaadin')
-rw-r--r-- | client/src/com/vaadin/client/ui/VAbstractSplitPanel.java | 194 |
1 files changed, 103 insertions, 91 deletions
diff --git a/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java b/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java index 6ee88d51dd..9d32355b70 100644 --- a/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java +++ b/client/src/com/vaadin/client/ui/VAbstractSplitPanel.java @@ -199,6 +199,7 @@ public class VAbstractSplitPanel extends ComplexPanel { private void setOrientation(Orientation orientation) { this.orientation = orientation; + if (orientation == Orientation.HORIZONTAL) { splitter.getStyle().setHeight(100, Unit.PCT); splitter.getStyle().setTop(0, Unit.PX); @@ -393,107 +394,118 @@ public class VAbstractSplitPanel extends ComplexPanel { return; } - int wholeSize; - int pixelPosition; - switch (orientation) { case HORIZONTAL: - wholeSize = DOM.getElementPropertyInt(wrapper, "clientWidth"); - pixelPosition = DOM.getElementPropertyInt(splitter, "offsetLeft"); - - // reposition splitter in case it is out of box - if ((pixelPosition > 0 && pixelPosition + getSplitterSize() > wholeSize) - || (positionReversed && pixelPosition < 0)) { - pixelPosition = wholeSize - getSplitterSize(); - if (pixelPosition < 0) { - pixelPosition = 0; - } - // Move splitter within bounds, but don't remember the new value - setSplitPosition(pixelPosition + "px", false); - return; - } + horizontalOrientationUpdateSizes(); + break; + case VERTICAL: + verticalOrientationUpdateSizes(); + break; + } + } - firstContainer.getStyle().setWidth(pixelPosition, Unit.PX); - int secondContainerWidth = (wholeSize - pixelPosition - getSplitterSize()); - if (secondContainerWidth < 0) { - secondContainerWidth = 0; - } - secondContainer.getStyle().setWidth(secondContainerWidth, Unit.PX); - secondContainer.getStyle().setLeft( - pixelPosition + getSplitterSize(), Unit.PX); - - LayoutManager layoutManager = LayoutManager.get(client); - ConnectorMap connectorMap = ConnectorMap.get(client); - if (firstChild != null) { - ComponentConnector connector = connectorMap - .getConnector(firstChild); - if (connector.isRelativeWidth()) { - layoutManager.reportWidthAssignedToRelative(connector, - pixelPosition); - } else { - layoutManager.setNeedsMeasure(connector); - } + private void verticalOrientationUpdateSizes() { + int wholeSize = DOM.getElementPropertyInt(wrapper, "clientHeight"); + int pixelPosition = DOM.getElementPropertyInt(splitter, "offsetTop"); + + // reposition splitter in case it is out of box + if ((pixelPosition > 0 && pixelPosition + getSplitterSize() > wholeSize) + || (positionReversed && pixelPosition < 0)) { + pixelPosition = wholeSize - getSplitterSize(); + if (pixelPosition < 0) { + pixelPosition = 0; } - if (secondChild != null) { - ComponentConnector connector = connectorMap - .getConnector(secondChild); - if (connector.isRelativeWidth()) { - layoutManager.reportWidthAssignedToRelative(connector, - secondContainerWidth); - } else { - layoutManager.setNeedsMeasure(connector); - } + // Move splitter within bounds, but don't remember the new value + setSplitPosition(pixelPosition + "px", false); + return; + } + + firstContainer.getStyle().setHeight(pixelPosition, Unit.PX); + int secondContainerHeight = (wholeSize - pixelPosition - getSplitterSize()); + if (secondContainerHeight < 0) { + secondContainerHeight = 0; + } + secondContainer.getStyle().setHeight(secondContainerHeight, Unit.PX); + secondContainer.getStyle().setTop(pixelPosition + getSplitterSize(), + Unit.PX); + + LayoutManager layoutManager = LayoutManager.get(client); + ConnectorMap connectorMap = ConnectorMap.get(client); + if (firstChild != null) { + ComponentConnector connector = connectorMap + .getConnector(firstChild); + if (connector.isRelativeHeight()) { + layoutManager.reportHeightAssignedToRelative(connector, + pixelPosition); + } else { + layoutManager.setNeedsMeasure(connector); } - break; - case VERTICAL: - wholeSize = DOM.getElementPropertyInt(wrapper, "clientHeight"); - pixelPosition = DOM.getElementPropertyInt(splitter, "offsetTop"); - - // reposition splitter in case it is out of box - if ((pixelPosition > 0 && pixelPosition + getSplitterSize() > wholeSize) - || (positionReversed && pixelPosition < 0)) { - pixelPosition = wholeSize - getSplitterSize(); - if (pixelPosition < 0) { - pixelPosition = 0; - } - // Move splitter within bounds, but don't remember the new value - setSplitPosition(pixelPosition + "px", false); - return; + } + if (secondChild != null) { + ComponentConnector connector = connectorMap + .getConnector(secondChild); + if (connector.isRelativeHeight()) { + layoutManager.reportHeightAssignedToRelative(connector, + secondContainerHeight); + } else { + layoutManager.setNeedsMeasure(connector); } + } + } + + private void horizontalOrientationUpdateSizes() { + int wholeSize = DOM.getElementPropertyInt(wrapper, "clientWidth"); + int pixelPosition = DOM.getElementPropertyInt(splitter, "offsetLeft"); - firstContainer.getStyle().setHeight(pixelPosition, Unit.PX); - int secondContainerHeight = (wholeSize - pixelPosition - getSplitterSize()); - if (secondContainerHeight < 0) { - secondContainerHeight = 0; + // reposition splitter in case it is out of box + if ((pixelPosition > 0 && pixelPosition + getSplitterSize() > wholeSize) + || (positionReversed && pixelPosition < 0)) { + pixelPosition = wholeSize - getSplitterSize(); + if (pixelPosition < 0) { + pixelPosition = 0; } - secondContainer.getStyle() - .setHeight(secondContainerHeight, Unit.PX); - secondContainer.getStyle().setTop( - pixelPosition + getSplitterSize(), Unit.PX); - - layoutManager = LayoutManager.get(client); - connectorMap = ConnectorMap.get(client); - if (firstChild != null) { - ComponentConnector connector = connectorMap - .getConnector(firstChild); - if (connector.isRelativeHeight()) { - layoutManager.reportHeightAssignedToRelative(connector, - pixelPosition); - } else { - layoutManager.setNeedsMeasure(connector); - } + // Move splitter within bounds, but don't remember the new value + setSplitPosition(pixelPosition + "px", false); + return; + } + + firstContainer.getStyle().setWidth(pixelPosition, Unit.PX); + int secondContainerWidth = (wholeSize - pixelPosition - getSplitterSize()); + if (secondContainerWidth < 0) { + secondContainerWidth = 0; + } + secondContainer.getStyle().setWidth(secondContainerWidth, Unit.PX); + secondContainer.getStyle().setLeft(pixelPosition + getSplitterSize(), + Unit.PX); + + LayoutManager layoutManager = LayoutManager.get(client); + ConnectorMap connectorMap = ConnectorMap.get(client); + if (firstChild != null) { + ComponentConnector connector = connectorMap + .getConnector(firstChild); + if (connector.isRelativeWidth()) { + layoutManager.reportWidthAssignedToRelative(connector, + pixelPosition); + } else { + layoutManager.setNeedsMeasure(connector); } - if (secondChild != null) { - ComponentConnector connector = connectorMap - .getConnector(secondChild); - if (connector.isRelativeHeight()) { - layoutManager.reportHeightAssignedToRelative(connector, - secondContainerHeight); - } else { - layoutManager.setNeedsMeasure(connector); - } + } + if (secondChild != null) { + ComponentConnector connector = connectorMap + .getConnector(secondChild); + if (connector.isRelativeWidth()) { + layoutManager.reportWidthAssignedToRelative(connector, + secondContainerWidth); + } else { + layoutManager.setNeedsMeasure(connector); } - break; + } + + // previous layout pass may have changed the position already, needs to + // be reset before calculating which positioning should be used + secondContainer.getStyle().setPosition(Position.ABSOLUTE); + if (getOffsetHeight() == 0) { + secondContainer.getStyle().setPosition(Position.RELATIVE); } } |