diff --git a/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java b/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java index 2c9ed13..dd2e4b2 100644 --- a/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/BasicTextWidget.java @@ -1,6 +1,5 @@ package de.shiewk.widgets.widgets; -import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.WidgetSettingOption; import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.widgets.settings.EnumWidgetSetting; @@ -12,12 +11,11 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.joml.Matrix3x2fStack; import java.awt.*; import java.util.List; -public abstract class BasicTextWidget extends ModWidget { +public abstract class BasicTextWidget extends ResizableWidget { public enum TextAlignment { RIGHT("right"), @@ -49,7 +47,6 @@ public abstract class BasicTextWidget extends ModWidget { list.add(new RGBAColorWidgetSetting("textcolor", Text.translatable("widgets.widgets.basictext.textcolor"), 255, 255, 255, 255)); list.add(new IntSliderWidgetSetting("width", Text.translatable("widgets.widgets.basictext.width"), 10, DEFAULT_WIDTH, 80*3)); list.add(new IntSliderWidgetSetting("height", Text.translatable("widgets.widgets.basictext.height"), 9, DEFAULT_HEIGHT, 80)); - list.add(new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 100, 400)); list.add(new ToggleWidgetSetting("shadow", Text.translatable("widgets.widgets.basictext.textshadow"), true)); list.add(new EnumWidgetSetting<>("alignment", Text.translatable("widgets.widgets.basictext.alignment"), TextAlignment.class, TextAlignment.CENTER, TextAlignment::text)); list.add(new IntSliderWidgetSetting("padding", Text.translatable("widgets.widgets.basictext.padding"), 0, 5, 20)); @@ -66,8 +63,6 @@ public abstract class BasicTextWidget extends ModWidget { DEFAULT_BACKGROUND_COLOR = new Color(0, 0, 0, 80).getRGB(), DEFAULT_TEXT_COLOR = new Color(255, 255 ,255, 255).getRGB(); - protected float size = 2f; - protected int backgroundColor = DEFAULT_BACKGROUND_COLOR, textColor = DEFAULT_TEXT_COLOR, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT; protected TextAlignment textAlignment = TextAlignment.CENTER; @@ -82,23 +77,11 @@ public abstract class BasicTextWidget extends ModWidget { } @Override - public void render(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) { + public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) { if (!shouldRender) return; - Matrix3x2fStack matrices = context.getMatrices(); - if (size != 1f){ - matrices.pushMatrix(); - matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices); - matrices.scale(size, size, matrices); - } renderer = textRenderer; context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); context.drawText(textRenderer, renderText, posX + textX, posY + (textShadow ? textY : textY + 1 /* offset 1 without text shadow so that it looks more aligned */), this.textColor, textShadow); - if (size != 1f) matrices.popMatrix(); - } - - @Override - public float getScaleFactor() { - return size; } @Override @@ -119,13 +102,13 @@ public abstract class BasicTextWidget extends ModWidget { @Override public void onSettingsChanged(WidgetSettings settings) { + super.onSettingsChanged(settings); this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor(); this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); this.height = ((IntSliderWidgetSetting) settings.optionById("height")).getValue(); this.textAlignment = (TextAlignment) ((EnumWidgetSetting) settings.optionById("alignment")).getValue(); this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue(); - this.size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue(); this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); } } diff --git a/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java b/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java index bd0e96a..f59dc10 100644 --- a/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/CoordinatesWidget.java @@ -1,6 +1,5 @@ package de.shiewk.widgets.widgets; -import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting; @@ -11,12 +10,11 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.joml.Matrix3x2fStack; import java.awt.*; import java.util.List; -public class CoordinatesWidget extends ModWidget { +public class CoordinatesWidget extends ResizableWidget { public CoordinatesWidget(Identifier id) { super(id, List.of( new ToggleWidgetSetting("x", Text.translatable("widgets.widgets.coordinates.showX"), true), @@ -25,26 +23,18 @@ public class CoordinatesWidget extends ModWidget { new RGBAColorWidgetSetting("backgroundcolor", Text.translatable("widgets.widgets.basictext.background"), 0, 0, 0, 80), new RGBAColorWidgetSetting("textcolor", Text.translatable("widgets.widgets.basictext.textcolor"), 255, 255, 255, 255), new IntSliderWidgetSetting("width", Text.translatable("widgets.widgets.basictext.width"), 10, WIDTH, 80*3), - new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 100, 400), new IntSliderWidgetSetting("paddingX", Text.translatable("widgets.widgets.basictext.paddingX"), 0, 5, 20), new IntSliderWidgetSetting("paddingY", Text.translatable("widgets.widgets.basictext.paddingY"), 0, 5, 20), new ToggleWidgetSetting("shadow", Text.translatable("widgets.widgets.basictext.textshadow"), true) )); } - private float size = 1f; private String textX = "X", textY = "Y", textZ = "Z"; private int txc = 0, tyc = 0, tzc = 0; private boolean shadow = true; @Override - public void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { - Matrix3x2fStack matrices = context.getMatrices(); - if (size != 1f){ - matrices.pushMatrix(); - matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices); - matrices.scale(size, size, matrices); - } + public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); int y = this.paddingY; if (showX){ @@ -64,7 +54,6 @@ public class CoordinatesWidget extends ModWidget { context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor, shadow); context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor, shadow); } - if (size != 1f) matrices.popMatrix(); } @Override @@ -107,6 +96,7 @@ public class CoordinatesWidget extends ModWidget { @Override public void onSettingsChanged(WidgetSettings settings) { + super.onSettingsChanged(settings); this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor(); this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor(); this.showX = ((ToggleWidgetSetting) settings.optionById("x")).getValue(); @@ -115,15 +105,9 @@ public class CoordinatesWidget extends ModWidget { this.paddingX = ((IntSliderWidgetSetting) settings.optionById("paddingX")).getValue(); this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); - this.size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue(); this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); } - @Override - public float getScaleFactor() { - return this.size; - } - @Override public int width() { return width + paddingX * 2; diff --git a/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java b/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java index b17ab00..c0123a3 100644 --- a/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java +++ b/src/main/java/de/shiewk/widgets/widgets/KeyStrokesWidget.java @@ -1,8 +1,6 @@ package de.shiewk.widgets.widgets; -import de.shiewk.widgets.ModWidget; import de.shiewk.widgets.WidgetSettings; -import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import net.minecraft.client.MinecraftClient; @@ -13,17 +11,15 @@ import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.Util; import net.minecraft.util.math.MathHelper; -import org.joml.Matrix3x2fStack; import java.awt.*; import java.util.List; import java.util.Objects; -public class KeyStrokesWidget extends ModWidget { +public class KeyStrokesWidget extends ResizableWidget { public KeyStrokesWidget(Identifier id) { super(id, List.of( new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true), - new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 150, 400), new RGBAColorWidgetSetting("bgpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundPressed"), 255, 255, 255, 80), new RGBAColorWidgetSetting("bgunpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0, 0, 0, 80), new RGBAColorWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255), @@ -33,12 +29,12 @@ public class KeyStrokesWidget extends ModWidget { @Override public void onSettingsChanged(WidgetSettings settings) { + super.onSettingsChanged(settings); showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue(); colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor(); colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor(); colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor(); colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor(); - size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue(); } private boolean showJumpKey = true; @@ -48,8 +44,6 @@ public class KeyStrokesWidget extends ModWidget { colorKeyUnpressed = 0xffffffff, colorKeyPressed = 0xffffffff; - protected float size = 2; - protected static class Key { protected final KeyBinding binding; protected boolean isPressed; @@ -74,22 +68,13 @@ public class KeyStrokesWidget extends ModWidget { private Key KEY_JUMP; @Override - public void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { + public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { if (KEY_JUMP == null) return; - Matrix3x2fStack matrices = context.getMatrices(); - if (size != 1) { - matrices.pushMatrix(); - matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices); - matrices.scale(size, size, matrices); - } renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY, KEY_FWD); renderKeyStroke(context, textRenderer, measuringTimeNano, posX, posY + 22, KEY_LEFT); renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY + 22, KEY_BWD); renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 44, posY + 22, KEY_RIGHT); if (showJumpKey) renderSpaceBar(context, measuringTimeNano, posX, posY + 44, KEY_JUMP); - if (size != 1){ - matrices.popMatrix(); - } } protected void renderSpaceBar(final DrawContext context, @@ -170,11 +155,11 @@ public class KeyStrokesWidget extends ModWidget { @Override public int width() { - return (int) (64 * size); + return 64; } @Override public int height() { - return (int) ((showJumpKey ? 56 : 44) * size); + return showJumpKey ? 56 : 44; } } diff --git a/src/main/java/de/shiewk/widgets/widgets/ResizableWidget.java b/src/main/java/de/shiewk/widgets/widgets/ResizableWidget.java new file mode 100644 index 0000000..de79888 --- /dev/null +++ b/src/main/java/de/shiewk/widgets/widgets/ResizableWidget.java @@ -0,0 +1,53 @@ +package de.shiewk.widgets.widgets; + +import de.shiewk.widgets.ModWidget; +import de.shiewk.widgets.WidgetSettingOption; +import de.shiewk.widgets.WidgetSettings; +import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import org.joml.Matrix3x2fStack; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ResizableWidget extends ModWidget { + + protected ResizableWidget(Identifier id, List customSettings) { + super(id, addScaleSetting(customSettings)); + } + + private static List addScaleSetting(List target) { + ArrayList settings = new ArrayList<>(target); + settings.add(new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 100, 400)); + return settings; + } + + private float size = 1f; + + @Override + public final void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) { + if (size != 1f){ + Matrix3x2fStack matrices = context.getMatrices(); + matrices.pushMatrix(); + matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices); + matrices.scale(size, size, matrices); + } + this.renderScaled(context, measuringTimeNano, textRenderer, posX, posY); + if (size != 1f) context.getMatrices().popMatrix(); + } + + public abstract void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY); + + @Override + public void onSettingsChanged(WidgetSettings settings) { + this.size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue(); + } + + @Override + public final float getScaleFactor() { + return size; + } +}