From 1a4ee8b4151d27906d16fa506f139cf1edf51c1e Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Wed, 20 May 2020 21:03:33 +0300 Subject: Add horizontal axis support for boxes, document scroll widgets --- .../io/github/cottonmc/cotton/gui/widget/WBox.java | 123 +++++++++++++++++++++ .../cottonmc/cotton/gui/widget/WScrollBar.java | 8 ++ .../cottonmc/cotton/gui/widget/WScrollPanel.java | 10 ++ .../cottonmc/cotton/gui/widget/WVerticalBox.java | 57 ---------- 4 files changed, 141 insertions(+), 57 deletions(-) create mode 100644 src/main/java/io/github/cottonmc/cotton/gui/widget/WBox.java delete mode 100644 src/main/java/io/github/cottonmc/cotton/gui/widget/WVerticalBox.java (limited to 'src') diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/WBox.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/WBox.java new file mode 100644 index 0000000..b7fe4c2 --- /dev/null +++ b/src/main/java/io/github/cottonmc/cotton/gui/widget/WBox.java @@ -0,0 +1,123 @@ +package io.github.cottonmc.cotton.gui.widget; + +import io.github.cottonmc.cotton.gui.widget.data.Axis; + +import java.util.Objects; + +/** + * Similar to the BoxLayout in Swing, this widget represents a list of widgets along an axis. + * + * @since 2.0.0 + */ +public class WBox extends WPanel { + /** + * The spacing between widgets. + */ + protected int spacing = 4; + + /** + * The axis that the widgets are laid out on. + */ + protected Axis axis; + + /** + * Constructs a box. + * + * @param axis the box axis + * @throws NullPointerException if the axis is null + */ + public WBox(Axis axis) { + this.axis = Objects.requireNonNull(axis, "axis"); + } + + /** + * Adds a widget to this box. + * If the widget is resizeable, resizes it to the provided dimensions. + * + * @param widget the widget + * @param width the new width of the widget + * @param height the new height of the widget + */ + public void add(WWidget widget, int width, int height) { + widget.setParent(this); + children.add(widget); + if (canResize()) { + widget.setSize(width, height); + } + } + + /** + * Adds a widget to this box. + * If the widget is resizeable, resizes it to 18x18. + * + * @param widget the widget + */ + public void add(WWidget widget) { + add(widget, 18, 18); + } + + @Override + public void layout() { + int dimension = 0; + + for (int i = 0; i < children.size(); i++) { + WWidget child = children.get(i); + if (axis == Axis.HORIZONTAL) { + child.setLocation(dimension, 0); + } else { + child.setLocation(0, dimension); + } + + if (child instanceof WPanel) ((WPanel) child).layout(); + expandToFit(child); + + if (i != children.size() - 1) { + dimension += spacing; + } + + dimension += axis == Axis.HORIZONTAL ? child.getWidth() : child.getHeight(); + } + } + + /** + * Gets the spacing between widgets. + * + * @return the spacing + */ + public int getSpacing() { + return spacing; + } + + /** + * Sets the spacing between widgets in this box. + * + * @param spacing the new spacing + * @return this box + */ + public WBox setSpacing(int spacing) { + this.spacing = spacing; + + return this; + } + + /** + * Gets the axis of this box. + * + * @return the axis + */ + public Axis getAxis() { + return axis; + } + + /** + * Sets the axis of this box. + * + * @param axis the new axis + * @return this box + * @throws NullPointerException if the axis is null + */ + public WBox setAxis(Axis axis) { + this.axis = Objects.requireNonNull(axis, "axis"); + return this; + } +} diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollBar.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollBar.java index e940327..0ddf01a 100644 --- a/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollBar.java +++ b/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollBar.java @@ -6,7 +6,15 @@ import io.github.cottonmc.cotton.gui.client.LibGuiClient; import io.github.cottonmc.cotton.gui.client.ScreenDrawing; import io.github.cottonmc.cotton.gui.widget.data.Axis; +/** + * A scroll bar. + * + *

Since LibGui 2.0.0, this widget is also a {@link WAbstractSlider}. + */ public class WScrollBar extends WAbstractSlider { + /** + * The range of values that is shown at a time. + */ protected int window = 16; /** diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollPanel.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollPanel.java index bff7987..71ab883 100644 --- a/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollPanel.java +++ b/src/main/java/io/github/cottonmc/cotton/gui/widget/WScrollPanel.java @@ -44,6 +44,11 @@ public class WScrollPanel extends WClippedPanel { children.add(verticalScrollBar); // Only vertical scroll bar } + /** + * Returns whether this scroll panels has a horizontal scroll bar. + * + * @return true if there is a horizontal scroll bar, false otherwise + */ public boolean isScrollingHorizontally() { return scrollingHorizontally; } @@ -57,6 +62,11 @@ public class WScrollPanel extends WClippedPanel { return this; } + /** + * Returns whether this scroll panels has a vertical scroll bar. + * + * @return true if there is a vertical scroll bar, false otherwise + */ public boolean isScrollingVertically() { return scrollingVertically; } diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/WVerticalBox.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/WVerticalBox.java deleted file mode 100644 index 7987424..0000000 --- a/src/main/java/io/github/cottonmc/cotton/gui/widget/WVerticalBox.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.github.cottonmc.cotton.gui.widget; - -/** - * Similar to the BoxLayout in Swing, this widget represents a vertical list of widgets. - * - * @since 2.0.0 - */ -public class WVerticalBox extends WPanel { - /** - * The spacing between widgets. - */ - protected int spacing = 4; - - public WVerticalBox() { - } - - public void add(WWidget widget, int width, int height) { - widget.setParent(this); - children.add(widget); - if (canResize()) { - widget.setSize(width, height); - } - } - - public void add(WWidget widget) { - add(widget, 18, 18); - } - - @Override - public void layout() { - int height = 0; - - for (int i = 0; i < children.size(); i++) { - WWidget child = children.get(i); - child.setLocation(0, height); - - if (child instanceof WPanel) ((WPanel) child).layout(); - expandToFit(child); - - if (i != children.size() - 1) { - height += spacing; - } - - height += child.getHeight(); - } - } - - public int getSpacing() { - return spacing; - } - - public WVerticalBox setSpacing(int spacing) { - this.spacing = spacing; - - return this; - } -} -- cgit