aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/gui/controllers
diff options
context:
space:
mode:
authorisXander <xandersmith2008@gmail.com>2022-11-13 19:04:45 +0000
committerisXander <xandersmith2008@gmail.com>2022-11-13 19:04:55 +0000
commit6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6 (patch)
tree3245fcd0782ff44c9f7c62f26844ab4c7510bbeb /src/main/java/dev/isxander/yacl/gui/controllers
parentb9052c99778b5ad6e54e720f6f10756e8ef8cdc0 (diff)
downloadYetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.tar.gz
YetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.tar.bz2
YetAnotherConfigLib-6f3dc40a6bc554b6decb685cb6d1eb6370b1eea6.zip
lots of QOL and minor improvements
smooth category scrolling individual reset buttons for all controllers separate Dimension into Dimension and MutableDimension to prevent mods from modifying controller dimensions without invoking the hooks made the dimension field private in AbstractWidget so people can't modify it without the method setDimension new Option API method to check if pending value is equal to default value add documentation to ConfigInstance fix bug where Option#requestSetDefault and Option#forgetPendingValue implementations weren't notifying listeners
Diffstat (limited to 'src/main/java/dev/isxander/yacl/gui/controllers')
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java5
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java1
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java3
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java17
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java24
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java9
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java2
7 files changed, 35 insertions, 26 deletions
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java b/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
index 6207f03..b8e2cd1 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
@@ -108,6 +108,11 @@ public class ActionController implements Controller<BiConsumer<YACLScreen, Butto
}
@Override
+ public boolean canReset() {
+ return false;
+ }
+
+ @Override
public boolean matchesSearch(String query) {
return super.matchesSearch(query) || buttonString.contains(query);
}
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java b/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
index cea6028..b7a77dd 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
@@ -8,7 +8,6 @@ import dev.isxander.yacl.gui.YACLScreen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
-import org.jetbrains.annotations.ApiStatus;
import org.lwjgl.glfw.GLFW;
import java.util.function.Function;
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java b/src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java
index 11e33d0..0a83fbe 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/ColorController.java
@@ -3,6 +3,7 @@ package dev.isxander.yacl.gui.controllers;
import com.google.common.collect.ImmutableList;
import dev.isxander.yacl.api.Option;
import dev.isxander.yacl.api.utils.Dimension;
+import dev.isxander.yacl.api.utils.MutableDimension;
import dev.isxander.yacl.gui.AbstractWidget;
import dev.isxander.yacl.gui.YACLScreen;
import dev.isxander.yacl.gui.controllers.string.IStringController;
@@ -102,7 +103,7 @@ public class ColorController implements IStringController<Color> {
public static class ColorControllerElement extends StringControllerElement {
private final ColorController colorController;
- protected Dimension<Integer> colorPreviewDim;
+ protected MutableDimension<Integer> colorPreviewDim;
private final List<Character> allowedChars;
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java b/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
index 520efa7..c7f9e97 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
@@ -40,7 +40,7 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
String nameString = name.getString();
boolean firstIter = true;
- while (textRenderer.getWidth(nameString) > dim.width() - getControlWidth() - getXPadding() - 7) {
+ while (textRenderer.getWidth(nameString) > getDimension().width() - getControlWidth() - getXPadding() - 7) {
nameString = nameString.substring(0, Math.max(nameString.length() - (firstIter ? 2 : 5), 0)).trim();
nameString += "...";
@@ -49,9 +49,9 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
Text shortenedName = Text.literal(nameString).fillStyle(name.getStyle());
- drawButtonRect(matrices, dim.x(), dim.y(), dim.xLimit(), dim.yLimit(), isHovered(), isAvailable());
+ drawButtonRect(matrices, getDimension().x(), getDimension().y(), getDimension().xLimit(), getDimension().yLimit(), isHovered(), isAvailable());
matrices.push();
- matrices.translate(dim.x() + getXPadding(), getTextY(), 0);
+ matrices.translate(getDimension().x() + getXPadding(), getTextY(), 0);
textRenderer.drawWithShadow(matrices, shortenedName, 0, 0, getValueColor());
matrices.pop();
@@ -64,7 +64,7 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
@Override
public void postRender(MatrixStack matrices, int mouseX, int mouseY, float delta) {
if (hovered) {
- YACLScreen.renderMultilineTooltip(matrices, textRenderer, wrappedTooltip, dim.centerX(), dim.y() - 5, dim.yLimit() + 5, screen.width, screen.height);
+ YACLScreen.renderMultilineTooltip(matrices, textRenderer, wrappedTooltip, getDimension().centerX(), getDimension().y() - 5, getDimension().yLimit() + 5, screen.width, screen.height);
}
}
@@ -75,7 +75,7 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
protected void drawValueText(MatrixStack matrices, int mouseX, int mouseY, float delta) {
Text valueText = getValueText();
matrices.push();
- matrices.translate(dim.xLimit() - textRenderer.getWidth(valueText) - getXPadding(), getTextY(), 0);
+ matrices.translate(getDimension().xLimit() - textRenderer.getWidth(valueText) - getXPadding(), getTextY(), 0);
textRenderer.drawWithShadow(matrices, valueText, 0, 0, getValueColor());
matrices.pop();
}
@@ -118,6 +118,11 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
return isAvailable() ? -1 : inactiveColor;
}
+ @Override
+ public boolean canReset() {
+ return true;
+ }
+
protected void drawOutline(MatrixStack matrices, int x1, int y1, int x2, int y2, int width, int color) {
DrawableHelper.fill(matrices, x1, y1, x2, y1 + width, color);
DrawableHelper.fill(matrices, x2, y1, x2 - width, y2, color);
@@ -126,7 +131,7 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
}
protected float getTextY() {
- return dim.y() + dim.height() / 2f - textRenderer.fontHeight / 2f;
+ return getDimension().y() + getDimension().height() / 2f - textRenderer.fontHeight / 2f;
}
@Override
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
index 98f69e1..8369680 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
@@ -62,9 +62,9 @@ public class LabelController implements Controller<Text> {
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
updateText();
- float y = dim.y();
+ float y = getDimension().y();
for (OrderedText text : wrappedText) {
- textRenderer.drawWithShadow(matrices, text, dim.x(), y + getYPadding(), option().available() ? -1 : 0xFFA0A0A0);
+ textRenderer.drawWithShadow(matrices, text, getDimension().x(), y + getYPadding(), option().available() ? -1 : 0xFFA0A0A0);
y += textRenderer.fontHeight;
}
}
@@ -72,7 +72,7 @@ public class LabelController implements Controller<Text> {
@Override
public void postRender(MatrixStack matrices, int mouseX, int mouseY, float delta) {
if (isMouseOver(mouseX, mouseY)) {
- YACLScreen.renderMultilineTooltip(matrices, textRenderer, wrappedTooltip, dim.centerX(), dim.y() - 5, dim.yLimit() + 5, screen.width, screen.height);
+ YACLScreen.renderMultilineTooltip(matrices, textRenderer, wrappedTooltip, getDimension().centerX(), getDimension().y() - 5, getDimension().yLimit() + 5, screen.width, screen.height);
Style style = getStyle(mouseX, mouseY);
if (style != null && style.getHoverEvent() != null) {
@@ -90,8 +90,8 @@ public class LabelController implements Controller<Text> {
} else {
Text text = hoverEvent.getValue(HoverEvent.Action.SHOW_TEXT);
if (text != null) {
- MultilineText multilineText = MultilineText.create(textRenderer, text, dim.width());
- YACLScreen.renderMultilineTooltip(matrices, textRenderer, multilineText, dim.centerX(), dim.y(), dim.yLimit(), screen.width, screen.height);
+ MultilineText multilineText = MultilineText.create(textRenderer, text, getDimension().width());
+ YACLScreen.renderMultilineTooltip(matrices, textRenderer, multilineText, getDimension().centerX(), getDimension().y(), getDimension().yLimit(), screen.width, screen.height);
}
}
}
@@ -109,15 +109,15 @@ public class LabelController implements Controller<Text> {
}
protected Style getStyle(int mouseX, int mouseY) {
- if (!dim.isPointInside(mouseX, mouseY))
+ if (!getDimension().isPointInside(mouseX, mouseY))
return null;
- int x = mouseX - dim.x();
- int y = mouseY - dim.y() - getYPadding();
+ int x = mouseX - getDimension().x();
+ int y = mouseY - getDimension().y() - getYPadding();
int line = y / textRenderer.fontHeight;
- if (x < 0 || x > dim.xLimit()) return null;
- if (y < 0 || y > dim.yLimit()) return null;
+ if (x < 0 || x > getDimension().xLimit()) return null;
+ if (y < 0 || y > getDimension().yLimit()) return null;
if (line < 0 || line >= wrappedText.size()) return null;
return textRenderer.getTextHandler().getStyleAt(wrappedText.get(line), x);
@@ -128,8 +128,8 @@ public class LabelController implements Controller<Text> {
}
private void updateText() {
- wrappedText = textRenderer.wrapLines(formatValue(), dim.width());
- dim.setHeight(wrappedText.size() * textRenderer.fontHeight + getYPadding() * 2);
+ wrappedText = textRenderer.wrapLines(formatValue(), getDimension().width());
+ setDimension(getDimension().withHeight(wrappedText.size() * textRenderer.fontHeight + getYPadding() * 2));
}
private void updateTooltip() {
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java b/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
index ece6bce..ff693a9 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
@@ -8,7 +8,6 @@ import dev.isxander.yacl.gui.YACLScreen;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
-import org.jetbrains.annotations.ApiStatus;
import org.lwjgl.glfw.GLFW;
/**
@@ -58,10 +57,10 @@ public class TickBoxController implements Controller<Boolean> {
@Override
protected void drawHoveredControl(MatrixStack matrices, int mouseX, int mouseY, float delta) {
int outlineSize = 10;
- int outlineX1 = dim.xLimit() - getXPadding() - outlineSize;
- int outlineY1 = dim.centerY() - outlineSize / 2;
- int outlineX2 = dim.xLimit() - getXPadding();
- int outlineY2 = dim.centerY() + outlineSize / 2;
+ int outlineX1 = getDimension().xLimit() - getXPadding() - outlineSize;
+ int outlineY1 = getDimension().centerY() - outlineSize / 2;
+ int outlineX2 = getDimension().xLimit() - getXPadding();
+ int outlineY2 = getDimension().centerY() + outlineSize / 2;
int color = getValueColor();
int shadowColor = multiplyColor(color, 0.25f);
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java
index 8598172..0c3b7c9 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java
@@ -205,7 +205,7 @@ public class StringControllerElement extends ControllerWidget<IStringController<
}
public int getMaxLength() {
- return dim.width() / 8 * 7;
+ return getDimension().width() / 8 * 7;
}
public int getSelectionStart() {