From bfb616f28efe70f50dcac40730d6eb5cb30d9958 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Teemu=20P=C3=B6ntelin?= Date: Wed, 29 Apr 2015 22:57:02 +0300 Subject: [PATCH] Fix caption position calculation in GridLayout (#17619) Change-Id: I5af773fbc03bc3d44e1aaa06ae974517583fdf4d --- .../vaadin/client/ui/layout/VLayoutSlot.java | 23 +++---- .../GridLayoutCaptionAlignment.java | 60 +++++++++++++++++++ .../GridLayoutCaptionAlignmentTest.java | 32 ++++++++++ 3 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignment.java create mode 100644 uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignmentTest.java diff --git a/client/src/com/vaadin/client/ui/layout/VLayoutSlot.java b/client/src/com/vaadin/client/ui/layout/VLayoutSlot.java index 5d463712df..f308d07673 100644 --- a/client/src/com/vaadin/client/ui/layout/VLayoutSlot.java +++ b/client/src/com/vaadin/client/ui/layout/VLayoutSlot.java @@ -126,7 +126,6 @@ public abstract class VLayoutSlot { } style.setLeft(Math.round(currentLocation), Unit.PX); - double padding = 0; AlignmentInfo alignment = getAlignment(); if (!alignment.isLeft()) { double usedWidth; @@ -135,21 +134,17 @@ public abstract class VLayoutSlot { } else { usedWidth = getWidgetWidth(); } + + double padding = (allocatedSpace - usedWidth); if (alignment.isHorizontalCenter()) { - padding = (allocatedSpace - usedWidth) / 2d; - if (captionAboveCompnent) { - captionStyle.setLeft( - Math.round(usedWidth - captionWidth) / 2, Unit.PX); - } - } else { - padding = (allocatedSpace - usedWidth); - if (captionAboveCompnent) { - captionStyle.setLeft(Math.round(usedWidth - captionWidth), - Unit.PX); - } + padding = padding / 2; + } + + long roundedPadding = Math.round(padding); + if (captionAboveCompnent) { + captionStyle.setLeft(roundedPadding, Unit.PX); } - widget.getElement().getStyle() - .setLeft(Math.round(padding), Unit.PX); + widget.getElement().getStyle().setLeft(roundedPadding, Unit.PX); } else { if (captionAboveCompnent) { captionStyle.setLeft(0, Unit.PX); diff --git a/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignment.java b/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignment.java new file mode 100644 index 0000000000..063a36ca04 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignment.java @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.gridlayout; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.GridLayout; +import com.vaadin.ui.TextField; + +public class GridLayoutCaptionAlignment extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + addComponent(createLayout(Alignment.BOTTOM_CENTER)); + addComponent(createLayout(Alignment.BOTTOM_LEFT)); + addComponent(createLayout(Alignment.BOTTOM_RIGHT)); + addComponent(createLayout(Alignment.MIDDLE_CENTER)); + addComponent(createLayout(Alignment.MIDDLE_LEFT)); + addComponent(createLayout(Alignment.MIDDLE_RIGHT)); + addComponent(createLayout(Alignment.TOP_CENTER)); + addComponent(createLayout(Alignment.TOP_LEFT)); + addComponent(createLayout(Alignment.TOP_RIGHT)); + } + + private GridLayout createLayout(Alignment align) { + TextField field = new TextField("Some caption"); + + GridLayout layout = new GridLayout(3, 3); + layout.setSizeFull(); + layout.addComponent(field); + layout.setComponentAlignment(field, align); + return layout; + } + + @Override + protected Integer getTicketNumber() { + return 17619; + } + + @Override + protected String getTestDescription() { + return "Test alignment of component captions inside GridLayout – " + + "all captions should be aligned directly above the TextField components."; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignmentTest.java b/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignmentTest.java new file mode 100644 index 0000000000..240ea4ce6f --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/gridlayout/GridLayoutCaptionAlignmentTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.gridlayout; + +import java.io.IOException; + +import org.junit.Test; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class GridLayoutCaptionAlignmentTest extends MultiBrowserTest { + + @Test + public void testCaptionAlignments() throws IOException { + openTestURL(); + compareScreen("gridlayout-caption-alignment"); + } + +} -- 2.39.5