Skip to content

Commit

Permalink
Fix caption position calculation in GridLayout (#17619)
Browse files Browse the repository at this point in the history
Change-Id: I5af773fbc03bc3d44e1aaa06ae974517583fdf4d
  • Loading branch information
tehapo authored and Vaadin Code Review committed May 6, 2015
1 parent f9dc7d3 commit bfb616f
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 14 deletions.
23 changes: 9 additions & 14 deletions client/src/com/vaadin/client/ui/layout/VLayoutSlot.java
Expand Up @@ -126,7 +126,6 @@ public void positionHorizontally(double currentLocation,
}

style.setLeft(Math.round(currentLocation), Unit.PX);
double padding = 0;
AlignmentInfo alignment = getAlignment();
if (!alignment.isLeft()) {
double usedWidth;
Expand All @@ -135,21 +134,17 @@ public void positionHorizontally(double currentLocation,
} 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);
Expand Down
@@ -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.";
}

}
@@ -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");
}

}

0 comments on commit bfb616f

Please sign in to comment.