Skip to content

Commit 06429d6

Browse files
committed
picker improvements
1 parent 8cbd97b commit 06429d6

File tree

9 files changed

+129
-30
lines changed

9 files changed

+129
-30
lines changed

src/main/java/io/github/axolotlclient/config/screen/OptionsScreenBuilder.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,7 @@ protected void mouseDragged(int i, int j, int k, long l) {
8585

8686
@Override
8787
protected void mouseClicked(int mouseX, int mouseY, int button) {
88-
if(!isPickerOpen()) {
89-
super.mouseClicked(mouseX, mouseY, button);
90-
}
88+
super.mouseClicked(mouseX, mouseY, button);
9189

9290

9391

@@ -135,6 +133,9 @@ protected void mouseReleased(int mouseX, int mouseY, int button) {
135133
@Override
136134
protected void buttonClicked(ButtonWidget button) {
137135
if(button.id==0){
136+
if(isPickerOpen()){
137+
closeColorPicker();
138+
}
138139
ConfigManager.save();
139140
MinecraftClient.getInstance().openScreen(parent);
140141
} else if(button.id==99){
@@ -145,6 +146,9 @@ protected void buttonClicked(ButtonWidget button) {
145146
@Override
146147
public void tick() {
147148
this.list.tick();
149+
if(isPickerOpen()){
150+
picker.tick();
151+
}
148152
}
149153

150154
@Override
@@ -166,7 +170,11 @@ public void handleMouse() {
166170
@Override
167171
protected void keyPressed(char character, int code) {
168172
super.keyPressed(character, code);
169-
this.list.keyPressed(character, code);
173+
if(!isPickerOpen()) {
174+
this.list.keyPressed(character, code);
175+
} else {
176+
picker.keyPressed(character, code);
177+
}
170178
}
171179

172180
@Override

src/main/java/io/github/axolotlclient/config/screen/widgets/BooleanWidget.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import io.github.axolotlclient.config.options.BooleanOption;
5+
import io.github.axolotlclient.config.screen.OptionsScreenBuilder;
56
import net.minecraft.client.MinecraftClient;
67
import net.minecraft.client.font.TextRenderer;
78
import net.minecraft.client.gui.widget.ButtonWidget;
@@ -24,6 +25,9 @@ public void updateMessage(){
2425

2526
@Override
2627
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
28+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
29+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()) return false;
30+
2731
return mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
2832
}
2933

@@ -33,7 +37,7 @@ public void render(MinecraftClient client, int mouseX, int mouseY) {
3337
TextRenderer textRenderer = client.textRenderer;
3438
client.getTextureManager().bindTexture(WIDGETS_LOCATION);
3539
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
36-
this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
40+
this.hovered = isMouseOver(client, mouseX, mouseY);
3741

3842
renderBg();
3943
renderSwitch();

src/main/java/io/github/axolotlclient/config/screen/widgets/CategoryWidget.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public CategoryWidget(OptionCategory category, int x, int y, int width, int heig
3232

3333
@Override
3434
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
35+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
36+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()){
37+
this.hovered = false;
38+
return false;
39+
}
40+
3541
if(enabledButton!=null && enabledButton.isMouseOver(client, mouseX, mouseY)) {
3642
this.hovered = false;
3743
}

src/main/java/io/github/axolotlclient/config/screen/widgets/ColorOptionWidget.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public void mouseReleased(int mouseX, int mouseY) {
5858

5959
@Override
6060
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
61+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
62+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()) return false;
6163
return super.isMouseOver(client, mouseX, mouseY);
6264
}
6365

src/main/java/io/github/axolotlclient/config/screen/widgets/ColorSelectionWidget.java

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import io.github.axolotlclient.config.Color;
5-
import io.github.axolotlclient.config.ConfigManager;
65
import io.github.axolotlclient.config.options.ColorOption;
76
import io.github.axolotlclient.config.options.IntegerOption;
87
import io.github.axolotlclient.modules.hud.util.DrawUtil;
98
import io.github.axolotlclient.modules.hud.util.Rectangle;
109
import net.minecraft.client.MinecraftClient;
1110
import net.minecraft.client.gui.DrawableHelper;
1211
import net.minecraft.client.gui.widget.ButtonWidget;
12+
import net.minecraft.client.gui.widget.TextFieldWidget;
1313
import net.minecraft.client.resource.language.I18n;
1414
import net.minecraft.client.util.Window;
1515
import net.minecraft.util.Identifier;
@@ -18,16 +18,20 @@
1818

1919
import java.nio.ByteBuffer;
2020
import java.nio.ByteOrder;
21+
import java.util.Objects;
2122

2223
public class ColorSelectionWidget extends ButtonWidget {
2324
private final ColorOption option;
2425

26+
// Texture based on https://github.com/MartinThoma/LaTeX-examples/blob/master/documents/printer-testpage/printer-testpage.tex
27+
protected Identifier wheel = new Identifier("axolotlclient", "textures/gui/colorwheel.png");
2528
protected Rectangle pickerImage;
2629
protected Rectangle currentRect;
2730

2831
protected IntegerOption alpha = new IntegerOption("alpha", 0, 0, 255);
2932
protected OptionSliderWidget alphaSlider;
3033

34+
protected TextFieldWidget textInput;
3135

3236
public ColorSelectionWidget(ColorOption option) {
3337
super(0, 100, 50, "");
@@ -41,15 +45,25 @@ public void init(){
4145
height=window.getHeight()-100;
4246

4347
pickerImage = new Rectangle(120, 70, width/2, height/2);
44-
currentRect = new Rectangle(pickerImage.x + pickerImage.width + 20, pickerImage.y + 10, 60, 20);
48+
currentRect = new Rectangle(pickerImage.x + pickerImage.width + 20, pickerImage.y + 10, width - pickerImage.width - 60, 20);
4549

4650
alpha.set(option.get().getAlpha());
51+
4752
alphaSlider = new OptionSliderWidget(0, pickerImage.x, pickerImage.y + pickerImage.height + 20, pickerImage.width, 20, alpha){
53+
54+
@Override
55+
protected boolean canHover() {
56+
return true;
57+
}
58+
4859
@Override
4960
protected @NotNull String getMessage() {
50-
return alpha.getTranslatedName()+": " + super.getMessage();
61+
return getOption().getTranslatedName()+": " + super.getMessage();
5162
}
5263
};
64+
65+
textInput = new TextFieldWidget(0, MinecraftClient.getInstance().textRenderer,
66+
currentRect.x, currentRect.y + currentRect.height + 10, currentRect.width, 20);
5367
}
5468

5569
@Override
@@ -66,13 +80,36 @@ public void render(MinecraftClient client, int mouseX, int mouseY) {
6680
DrawUtil.outlineRect(currentRect, Color.DARK_GRAY.withAlpha(127));
6781

6882
GlStateManager.color3f(1, 1, 1);
69-
MinecraftClient.getInstance().getTextureManager().bindTexture(new Identifier("axolotlclient", "textures/gui/colorwheel.png"));
83+
84+
MinecraftClient.getInstance().getTextureManager().bindTexture(wheel);
7085
DrawableHelper.drawTexture(pickerImage.x, pickerImage.y, 0, 0, pickerImage.width, pickerImage.height, pickerImage.width, pickerImage.height);
7186
DrawUtil.outlineRect(pickerImage, Color.DARK_GRAY);
7287

7388
alphaSlider.render(client, mouseX, mouseY);
7489

75-
option.set(new Color(option.get().getRed(), option.get().getGreen(), option.get().getBlue(), alpha.get()));
90+
textInput.render();
91+
92+
93+
}
94+
95+
public void tick(){
96+
textInput.tick();
97+
98+
if(!Objects.equals(textInput.getText(), option.get().toString())){
99+
if(textInput.isFocused()){
100+
option.set(Color.parse(textInput.getText()));
101+
} else {
102+
textInput.setText(option.get().toString());
103+
}
104+
}
105+
106+
if(option.get().getAlpha() != alphaSlider.getSliderValueAsInt()){
107+
if(alphaSlider.isHovered() || alphaSlider.dragging){
108+
option.set(new Color(option.get().getRed(), option.get().getGreen(), option.get().getBlue(), alpha.get()));
109+
} else {
110+
alpha.set(option.get().getAlpha());
111+
}
112+
}
76113
}
77114

78115
public void onClick(int mouseX, int mouseY){
@@ -99,11 +136,18 @@ public void onClick(int mouseX, int mouseY){
99136
} else if (alphaSlider.isMouseOver(MinecraftClient.getInstance(), mouseX, mouseY)) {
100137
option.set(new Color(option.get().getRed(), option.get().getGreen(), option.get().getBlue(), alpha.get()));
101138
}
102-
139+
textInput.mouseClicked(mouseX, mouseY, 0);
103140
}
104141

105142
@Override
106143
public void mouseReleased(int mouseX, int mouseY) {
107144
alphaSlider.mouseReleased(mouseX, mouseY);
108145
}
146+
147+
public void keyPressed(char c, int code){
148+
if(textInput.isFocused()){
149+
textInput.keyPressed(c, code);
150+
}
151+
}
152+
109153
}

src/main/java/io/github/axolotlclient/config/screen/widgets/EnumOptionWidget.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.github.axolotlclient.config.screen.widgets;
22

33
import io.github.axolotlclient.config.options.EnumOption;
4+
import io.github.axolotlclient.config.screen.OptionsScreenBuilder;
5+
import net.minecraft.client.MinecraftClient;
46
import net.minecraft.client.gui.widget.ButtonWidget;
57

68
public class EnumOptionWidget extends ButtonWidget {
@@ -11,6 +13,16 @@ public EnumOptionWidget(int id, int x, int y, EnumOption option) {
1113
this.option=option;
1214
}
1315

16+
@Override
17+
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
18+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
19+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()){
20+
this.hovered = false;
21+
return false;
22+
}
23+
return super.isMouseOver(client, mouseX, mouseY);
24+
}
25+
1426
public void mouseClicked(){
1527
this.message = this.option.next().toString();
1628
}

src/main/java/io/github/axolotlclient/config/screen/widgets/OptionSliderWidget.java

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package io.github.axolotlclient.config.screen.widgets;
22

33
import com.mojang.blaze3d.platform.GlStateManager;
4-
import io.github.axolotlclient.config.options.DoubleOption;
5-
import io.github.axolotlclient.config.options.FloatOption;
6-
import io.github.axolotlclient.config.options.IntegerOption;
7-
import io.github.axolotlclient.config.options.Option;
4+
import io.github.axolotlclient.config.options.*;
5+
import io.github.axolotlclient.config.screen.OptionsScreenBuilder;
86
import net.minecraft.client.MinecraftClient;
97
import net.minecraft.client.gui.widget.ButtonWidget;
108
import net.minecraft.util.math.MathHelper;
@@ -18,7 +16,7 @@ public class OptionSliderWidget extends ButtonWidget {
1816

1917
private double value;
2018
public boolean dragging;
21-
private final Option option;
19+
private final OptionBase option;
2220
private final double min;
2321
private final double max;
2422

@@ -79,7 +77,7 @@ public int getSliderValueAsInt() {
7977
}
8078

8179
protected @NotNull String getMessage() {
82-
return ""+ (option instanceof IntegerOption? getSliderValueAsInt(): this.getSliderValue());
80+
return ""+ (option instanceof IntegerOption? getSliderValueAsInt()+"".split("\\.")[0]: this.getSliderValue());
8381
}
8482

8583
protected int getYImage(boolean isHovered) {
@@ -114,19 +112,36 @@ protected void renderBg(MinecraftClient client, int mouseX, int mouseY) {
114112
}
115113
}
116114

117-
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
118-
if (super.isMouseOver(client, mouseX, mouseY)) {
119-
this.value = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8);
120-
this.value = MathHelper.clamp(this.value, 0.0F, 1.0F);
121-
if (option instanceof FloatOption) ((FloatOption) option).set(getSliderValue());
122-
else if (option instanceof DoubleOption) ((DoubleOption) option).set(getSliderValue());
123-
else if (option instanceof IntegerOption) ((IntegerOption) option).set(getSliderValueAsInt());
124-
this.message = getMessage();
125-
this.dragging = true;
126-
return true;
127-
} else {
115+
protected boolean canHover(){
116+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
117+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()){
118+
this.hovered = false;
128119
return false;
129120
}
121+
return true;
122+
}
123+
124+
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
125+
if(canHover()) {
126+
127+
if (super.isMouseOver(client, mouseX, mouseY) || dragging) {
128+
this.value = (float) (mouseX - (this.x + 4)) / (float) (this.width - 8);
129+
this.value = MathHelper.clamp(this.value, 0.0F, 1.0F);
130+
if (option instanceof FloatOption) ((FloatOption) option).set(getSliderValue());
131+
else if (option instanceof DoubleOption) ((DoubleOption) option).set(getSliderValue());
132+
else if (option instanceof IntegerOption) ((IntegerOption) option).set(getSliderValueAsInt());
133+
this.message = getMessage();
134+
this.dragging = true;
135+
return true;
136+
} else {
137+
return false;
138+
}
139+
}
140+
return false;
141+
}
142+
143+
public OptionBase getOption(){
144+
return option;
130145
}
131146

132147
public void mouseReleased(int mouseX, int mouseY) {

src/main/java/io/github/axolotlclient/config/screen/widgets/StringOptionWidget.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mojang.blaze3d.platform.GlStateManager;
44
import io.github.axolotlclient.config.options.StringOption;
5+
import io.github.axolotlclient.config.screen.OptionsScreenBuilder;
56
import net.minecraft.client.MinecraftClient;
67
import net.minecraft.client.gui.widget.ButtonWidget;
78
import net.minecraft.client.gui.widget.TextFieldWidget;
@@ -47,6 +48,13 @@ public void keyPressed(char c, int code){
4748
this.option.set(textField.getText());
4849
}
4950

50-
51-
51+
@Override
52+
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
53+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
54+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()){
55+
this.hovered = false;
56+
return false;
57+
}
58+
return super.isMouseOver(client, mouseX, mouseY);
59+
}
5260
}
67.8 KB
Loading

0 commit comments

Comments
 (0)