Remove preferred size and default button size

Replace alignment data in horizontal and vertical layout with double value
Add convenient size(GuiElement, ReadableDimension) method to custom layout
This commit is contained in:
johni0702
2015-07-11 15:23:17 +02:00
parent 219277f623
commit 35bc9f7fae
15 changed files with 94 additions and 99 deletions

View File

@@ -43,7 +43,7 @@ public abstract class CustomLayout<T extends GuiContainer<T>> implements Layout
result.clear();
Collection<GuiElement> elements = container.getChildren();
for (GuiElement element : elements) {
result.put(element, Pair.of(new Point(0, 0), new Dimension(element.getPreferredSize())));
result.put(element, Pair.of(new Point(0, 0), new Dimension(element.getMinSize())));
}
layout((T) container, size.getWidth(), size.getHeight());
@@ -65,6 +65,10 @@ public abstract class CustomLayout<T extends GuiContainer<T>> implements Layout
entry(element).getLeft().setLocation(x, y);
}
protected void size(GuiElement element, ReadableDimension size) {
size.getSize(entry(element).getRight());
}
protected void size(GuiElement element, int width, int height) {
entry(element).getRight().setSize(width, height);
}
@@ -105,6 +109,6 @@ public abstract class CustomLayout<T extends GuiContainer<T>> implements Layout
@Override
public ReadableDimension calcMinSize(GuiContainer<?> container) {
return container.getPreferredSize();
return new Dimension(0, 0);
}
}

View File

@@ -66,20 +66,12 @@ public class HorizontalLayout implements Layout {
GuiElement element = entry.getKey();
Data data = entry.getValue() instanceof Data ? (Data) entry.getValue() : DEFAULT_DATA;
Dimension minSize = new Dimension(element.getMinSize());
if (minSize.getHeight() < data.minHeight) {
minSize.setHeight(data.minHeight);
}
int y;
if (data.alignment == VerticalLayout.Alignment.BOTTOM) {
y = size.getHeight() - minSize.getHeight() - data.yOffset;
} else if (data.alignment == VerticalLayout.Alignment.CENTER) {
y = (size.getHeight() - minSize.getHeight()) / 2 + data.yOffset;
} else {
y = data.yOffset;
}
map.put(element, Pair.<ReadablePoint, ReadableDimension>of(new Point(x, y), minSize));
x += minSize.getWidth();
Dimension elementSize = new Dimension(element.getMinSize());
elementSize.setHeight(Math.min(size.getHeight(), element.getMaxSize().getHeight()));
int remainingHeight = size.getHeight() - elementSize.getHeight();
int y = (int) (data.alignment * remainingHeight);
map.put(element, Pair.<ReadablePoint, ReadableDimension>of(new Point(x, y), elementSize));
x += elementSize.getWidth();
}
if (alignment != Alignment.LEFT) {
int remaining = size.getWidth() - x;
@@ -103,9 +95,8 @@ public class HorizontalLayout implements Layout {
spacing = this.spacing;
GuiElement element = entry.getKey();
Data data = entry.getValue() instanceof Data ? (Data) entry.getValue() : DEFAULT_DATA;
ReadableDimension minSize = element.getMinSize();
int height = Math.max(minSize.getHeight(), data.getMinHeight()) + data.yOffset;
int height = minSize.getHeight();
if (height > maxHeight) {
maxHeight = height;
}
@@ -117,15 +108,10 @@ public class HorizontalLayout implements Layout {
@lombok.Data
@AllArgsConstructor
public static class Data implements LayoutData {
private int yOffset;
private VerticalLayout.Alignment alignment;
private int minHeight;
private double alignment;
public Data(int yOffset) {
this(yOffset, VerticalLayout.Alignment.TOP, 0);
}
public Data(int yOffset, VerticalLayout.Alignment alignment) {
this(yOffset, alignment, 0);
public Data() {
this(0);
}
}

View File

@@ -66,20 +66,12 @@ public class VerticalLayout implements Layout {
GuiElement element = entry.getKey();
Data data = entry.getValue() instanceof Data ? (Data) entry.getValue() : DEFAULT_DATA;
Dimension minSize = new Dimension(element.getMinSize());
if (minSize.getWidth() < data.minWidth) {
minSize.setWidth(data.minWidth);
}
int x;
if (data.alignment == HorizontalLayout.Alignment.RIGHT) {
x = size.getWidth() - minSize.getWidth() - data.xOffset;
} else if (data.alignment == HorizontalLayout.Alignment.CENTER) {
x = (size.getWidth() - minSize.getWidth()) / 2 + data.xOffset;
} else {
x = data.xOffset;
}
map.put(element, Pair.<ReadablePoint, ReadableDimension>of(new Point(x, y), minSize));
y += minSize.getHeight();
Dimension elementSize = new Dimension(element.getMinSize());
elementSize.setWidth(Math.min(size.getWidth(), element.getMaxSize().getWidth()));
int remainingWidth = size.getWidth() - elementSize.getWidth();
int x = (int) (data.alignment * remainingWidth);
map.put(element, Pair.<ReadablePoint, ReadableDimension>of(new Point(x, y), elementSize));
y += elementSize.getHeight();
}
if (alignment != Alignment.TOP) {
int remaining = size.getHeight() - y;
@@ -103,9 +95,8 @@ public class VerticalLayout implements Layout {
spacing = this.spacing;
GuiElement element = entry.getKey();
Data data = entry.getValue() instanceof Data ? (Data) entry.getValue() : DEFAULT_DATA;
ReadableDimension minSize = element.getMinSize();
int width = Math.max(minSize.getWidth(), data.minWidth) + data.xOffset;
int width = minSize.getWidth();
if (width > maxWidth) {
maxWidth = width;
}
@@ -117,15 +108,10 @@ public class VerticalLayout implements Layout {
@lombok.Data
@AllArgsConstructor
public static class Data implements LayoutData {
private int xOffset;
private HorizontalLayout.Alignment alignment;
private int minWidth;
private double alignment;
public Data(int xOffset) {
this(xOffset, HorizontalLayout.Alignment.LEFT, 0);
}
public Data(int xOffset, HorizontalLayout.Alignment alignment) {
this(xOffset, alignment, 0);
public Data() {
this(0);
}
}