diff options
author | Automerge <automerge@vaadin.com> | 2012-04-27 11:39:27 +0000 |
---|---|---|
committer | Automerge <automerge@vaadin.com> | 2012-04-27 11:39:27 +0000 |
commit | f4f4783d7f3e65c5395a519778f231c3e528cb6c (patch) | |
tree | fc8c2b52a3907ac0e833f33b31484b603567b991 | |
parent | 48893c2135d66a0de2c24acec3e7fb659ec85f7f (diff) | |
download | vaadin-framework-f4f4783d7f3e65c5395a519778f231c3e528cb6c.tar.gz vaadin-framework-f4f4783d7f3e65c5395a519778f231c3e528cb6c.zip |
[merge from 6.7] Fix and test case for #8619: Add sanity checks to GridLayout to handle cases where the size of a relative-size child unexpectedly changes
svn changeset:23656/svn branch:6.8
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java | 17 | ||||
-rw-r--r-- | tests/testbench/com/vaadin/tests/components/combobox/GridLayoutComboBoxZoomOut.java | 61 |
2 files changed, 74 insertions, 4 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java index 82b3eabf40..ba37148c36 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VGridLayout.java @@ -29,6 +29,7 @@ import com.vaadin.terminal.gwt.client.RenderSpace; import com.vaadin.terminal.gwt.client.StyleConstants; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.VConsole; import com.vaadin.terminal.gwt.client.ui.layout.CellBasedLayout; import com.vaadin.terminal.gwt.client.ui.layout.ChildComponentContainer; @@ -768,7 +769,11 @@ public class VGridLayout extends SimplePanel implements Paintable, Container { allocated += spacingPixelsHorizontal + columnWidths[cell.col + i]; } - if (allocated < width) { + if (cell.hasRelativeWidth() && allocated != width) { + // This may happen e.g. when browser zoomout causes pixel + // rounding issues, see #8619 + VConsole.error("A relative-width child should never cause cell width to change!"); + } else if (allocated < width) { needsLayout = true; if (cell.colspan == 1) { // do simple column width expansion @@ -777,7 +782,7 @@ public class VGridLayout extends SimplePanel implements Paintable, Container { // mark that col span expansion is needed reDistributeColSpanWidths = true; } - } else if (allocated != width) { + } else if (allocated > width) { // size is smaller thant allocated, column might // shrink dirtyColumns.add(cell.col); @@ -790,7 +795,11 @@ public class VGridLayout extends SimplePanel implements Paintable, Container { allocated += spacingPixelsVertical + rowHeights[cell.row + i]; } - if (allocated < height) { + if (cell.hasRelativeHeight() && allocated != height) { + // This may happen e.g. when browser zoomout causes pixel + // rounding issues, see #8619 + VConsole.error("A relative-height child should never cause cell height to change!"); + } else if (allocated < height) { needsLayout = true; if (cell.rowspan == 1) { // do simple row expansion @@ -799,7 +808,7 @@ public class VGridLayout extends SimplePanel implements Paintable, Container { // mark that row span expansion is needed reDistributeRowSpanHeights = true; } - } else if (allocated != height) { + } else if (allocated > height) { // size is smaller than allocated, row might shrink dirtyRows.add(cell.row); } diff --git a/tests/testbench/com/vaadin/tests/components/combobox/GridLayoutComboBoxZoomOut.java b/tests/testbench/com/vaadin/tests/components/combobox/GridLayoutComboBoxZoomOut.java new file mode 100644 index 0000000000..a192f1a3a6 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/components/combobox/GridLayoutComboBoxZoomOut.java @@ -0,0 +1,61 @@ +package com.vaadin.tests.components.combobox; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.GridLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Layout; +import com.vaadin.ui.Select; +import com.vaadin.ui.Window; + +@SuppressWarnings("serial") +public class GridLayoutComboBoxZoomOut extends TestBase { + + @Override + public void setup() { + Window mainWindow = new Window("Gridlayoutbug Application"); + setMainWindow(mainWindow); + + Label description = new Label( + "Open this application in Chrome, zoom out (cmd + \"-\") and " + + "open the ComboBox for weird behaviour."); + mainWindow.addComponent(description); + + Layout formLayout = new GridLayout(2, 1); + // formLayout.setWidth("100%"); + formLayout.setWidth("1000px"); + + Select countryField = new ComboBox(); + countryField.addItem("Finland"); + countryField.addItem("Sweden"); + countryField.addItem("Canada"); + countryField.addItem("USA"); + countryField.setCaption("Country"); + countryField.setWidth("100%"); + formLayout.addComponent(countryField); + + Select statusField = new ComboBox(); + statusField.addItem("Available"); + statusField.addItem("On vacation"); + statusField.addItem("Busy"); + statusField.addItem("Left the building"); + statusField.setCaption("Status"); + statusField.setWidth("100%"); + formLayout.addComponent(statusField); + + mainWindow.addComponent(formLayout); + } + + @Override + protected String getDescription() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected Integer getTicketNumber() { + // TODO Auto-generated method stub + return null; + } + +} |