1
mirror of https://github.com/Shiewk/Widgets.git synced 2026-04-28 11:34:17 +02:00

Make all resizable widgets extend ResizableWidget

This will be very useful for adding new widgets
This commit is contained in:
Shy
2025-08-04 10:54:01 +02:00
parent e1e13545c9
commit 669dfb2de4
4 changed files with 64 additions and 59 deletions
@@ -1,6 +1,5 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetSettingOption; import de.shiewk.widgets.WidgetSettingOption;
import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting; 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.client.gui.DrawContext;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.joml.Matrix3x2fStack;
import java.awt.*; import java.awt.*;
import java.util.List; import java.util.List;
public abstract class BasicTextWidget extends ModWidget { public abstract class BasicTextWidget extends ResizableWidget {
public enum TextAlignment { public enum TextAlignment {
RIGHT("right"), 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 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("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("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 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 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)); 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_BACKGROUND_COLOR = new Color(0, 0, 0, 80).getRGB(),
DEFAULT_TEXT_COLOR = new Color(255, 255 ,255, 255).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 int backgroundColor = DEFAULT_BACKGROUND_COLOR, textColor = DEFAULT_TEXT_COLOR, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;
protected TextAlignment textAlignment = TextAlignment.CENTER; protected TextAlignment textAlignment = TextAlignment.CENTER;
@@ -82,23 +77,11 @@ public abstract class BasicTextWidget extends ModWidget {
} }
@Override @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; 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; renderer = textRenderer;
context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); 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); 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 @Override
@@ -119,13 +102,13 @@ public abstract class BasicTextWidget extends ModWidget {
@Override @Override
public void onSettingsChanged(WidgetSettings settings) { public void onSettingsChanged(WidgetSettings settings) {
super.onSettingsChanged(settings);
this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor(); this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor();
this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor(); this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor();
this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue();
this.height = ((IntSliderWidgetSetting) settings.optionById("height")).getValue(); this.height = ((IntSliderWidgetSetting) settings.optionById("height")).getValue();
this.textAlignment = (TextAlignment) ((EnumWidgetSetting<?>) settings.optionById("alignment")).getValue(); this.textAlignment = (TextAlignment) ((EnumWidgetSetting<?>) settings.optionById("alignment")).getValue();
this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue(); this.padding = ((IntSliderWidgetSetting) settings.optionById("padding")).getValue();
this.size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue();
this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); this.textShadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue();
} }
} }
@@ -1,6 +1,5 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetSettings; import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting; import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting; 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.client.network.ClientPlayerEntity;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.joml.Matrix3x2fStack;
import java.awt.*; import java.awt.*;
import java.util.List; import java.util.List;
public class CoordinatesWidget extends ModWidget { public class CoordinatesWidget extends ResizableWidget {
public CoordinatesWidget(Identifier id) { public CoordinatesWidget(Identifier id) {
super(id, List.of( super(id, List.of(
new ToggleWidgetSetting("x", Text.translatable("widgets.widgets.coordinates.showX"), true), 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("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 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("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("paddingX", Text.translatable("widgets.widgets.basictext.paddingX"), 0, 5, 20),
new IntSliderWidgetSetting("paddingY", Text.translatable("widgets.widgets.basictext.paddingY"), 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) new ToggleWidgetSetting("shadow", Text.translatable("widgets.widgets.basictext.textshadow"), true)
)); ));
} }
private float size = 1f;
private String textX = "X", textY = "Y", textZ = "Z"; private String textX = "X", textY = "Y", textZ = "Z";
private int txc = 0, tyc = 0, tzc = 0; private int txc = 0, tyc = 0, tzc = 0;
private boolean shadow = true; private boolean shadow = true;
@Override @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) {
Matrix3x2fStack matrices = context.getMatrices();
if (size != 1f){
matrices.pushMatrix();
matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices);
matrices.scale(size, size, matrices);
}
context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor); context.fill(posX, posY, posX + width(), posY + height(), this.backgroundColor);
int y = this.paddingY; int y = this.paddingY;
if (showX){ if (showX){
@@ -64,7 +54,6 @@ public class CoordinatesWidget extends ModWidget {
context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor, shadow); context.drawText(textRenderer, "Z: ", posX + paddingX, posY + y, textColor, shadow);
context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor, shadow); context.drawText(textRenderer, textZ, posX + tzc, posY + y, textColor, shadow);
} }
if (size != 1f) matrices.popMatrix();
} }
@Override @Override
@@ -107,6 +96,7 @@ public class CoordinatesWidget extends ModWidget {
@Override @Override
public void onSettingsChanged(WidgetSettings settings) { public void onSettingsChanged(WidgetSettings settings) {
super.onSettingsChanged(settings);
this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor(); this.backgroundColor = ((RGBAColorWidgetSetting) settings.optionById("backgroundcolor")).getColor();
this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor(); this.textColor = ((RGBAColorWidgetSetting) settings.optionById("textcolor")).getColor();
this.showX = ((ToggleWidgetSetting) settings.optionById("x")).getValue(); this.showX = ((ToggleWidgetSetting) settings.optionById("x")).getValue();
@@ -115,15 +105,9 @@ public class CoordinatesWidget extends ModWidget {
this.paddingX = ((IntSliderWidgetSetting) settings.optionById("paddingX")).getValue(); this.paddingX = ((IntSliderWidgetSetting) settings.optionById("paddingX")).getValue();
this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue(); this.paddingY = ((IntSliderWidgetSetting) settings.optionById("paddingY")).getValue();
this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue(); this.width = ((IntSliderWidgetSetting) settings.optionById("width")).getValue();
this.size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue();
this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue(); this.shadow = ((ToggleWidgetSetting) settings.optionById("shadow")).getValue();
} }
@Override
public float getScaleFactor() {
return this.size;
}
@Override @Override
public int width() { public int width() {
return width + paddingX * 2; return width + paddingX * 2;
@@ -1,8 +1,6 @@
package de.shiewk.widgets.widgets; package de.shiewk.widgets.widgets;
import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetSettings; 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.RGBAColorWidgetSetting;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting; import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -13,17 +11,15 @@ import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import org.joml.Matrix3x2fStack;
import java.awt.*; import java.awt.*;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
public class KeyStrokesWidget extends ModWidget { public class KeyStrokesWidget extends ResizableWidget {
public KeyStrokesWidget(Identifier id) { public KeyStrokesWidget(Identifier id) {
super(id, List.of( super(id, List.of(
new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true), 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("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("bgunpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0, 0, 0, 80),
new RGBAColorWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255), new RGBAColorWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255),
@@ -33,12 +29,12 @@ public class KeyStrokesWidget extends ModWidget {
@Override @Override
public void onSettingsChanged(WidgetSettings settings) { public void onSettingsChanged(WidgetSettings settings) {
super.onSettingsChanged(settings);
showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue(); showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue();
colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor(); colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor();
colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor(); colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor();
colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor(); colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor();
colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor(); colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor();
size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue();
} }
private boolean showJumpKey = true; private boolean showJumpKey = true;
@@ -48,8 +44,6 @@ public class KeyStrokesWidget extends ModWidget {
colorKeyUnpressed = 0xffffffff, colorKeyUnpressed = 0xffffffff,
colorKeyPressed = 0xffffffff; colorKeyPressed = 0xffffffff;
protected float size = 2;
protected static class Key { protected static class Key {
protected final KeyBinding binding; protected final KeyBinding binding;
protected boolean isPressed; protected boolean isPressed;
@@ -74,22 +68,13 @@ public class KeyStrokesWidget extends ModWidget {
private Key KEY_JUMP; private Key KEY_JUMP;
@Override @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; 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 + 22, posY, KEY_FWD);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX, posY + 22, KEY_LEFT); renderKeyStroke(context, textRenderer, measuringTimeNano, posX, posY + 22, KEY_LEFT);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY + 22, KEY_BWD); renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY + 22, KEY_BWD);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 44, posY + 22, KEY_RIGHT); renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 44, posY + 22, KEY_RIGHT);
if (showJumpKey) renderSpaceBar(context, measuringTimeNano, posX, posY + 44, KEY_JUMP); if (showJumpKey) renderSpaceBar(context, measuringTimeNano, posX, posY + 44, KEY_JUMP);
if (size != 1){
matrices.popMatrix();
}
} }
protected void renderSpaceBar(final DrawContext context, protected void renderSpaceBar(final DrawContext context,
@@ -170,11 +155,11 @@ public class KeyStrokesWidget extends ModWidget {
@Override @Override
public int width() { public int width() {
return (int) (64 * size); return 64;
} }
@Override @Override
public int height() { public int height() {
return (int) ((showJumpKey ? 56 : 44) * size); return showJumpKey ? 56 : 44;
} }
} }
@@ -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<WidgetSettingOption> customSettings) {
super(id, addScaleSetting(customSettings));
}
private static List<WidgetSettingOption> addScaleSetting(List<WidgetSettingOption> target) {
ArrayList<WidgetSettingOption> 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;
}
}