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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user