summaryrefslogtreecommitdiffstats
path: root/client/src/com/vaadin
diff options
context:
space:
mode:
authorDenis Anisimov <denis@vaadin.com>2014-10-31 20:33:39 +0200
committerVaadin Code Review <review@vaadin.com>2014-12-10 14:28:26 +0000
commit60f0bdaa6ef00f14664ead0d0b4aefb18343c8a7 (patch)
treeb1956a59e96b8c4df8b08ce50b6c0097f3391dfe /client/src/com/vaadin
parentda91036c92d8088d02471bb939b21eb228638d8f (diff)
downloadvaadin-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.java194
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);
}
}