Skip to content

Commit c9d4a6b

Browse files
committed
color picker (port from 1.8.9)
1 parent 6a1ece5 commit c9d4a6b

File tree

12 files changed

+252
-67
lines changed

12 files changed

+252
-67
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ pluginManagement {
22
repositories {
33
maven {
44
name = 'Quilt'
5-
url = 'https://maven.quiltmc.org/repository/release'
5+
url = 'https://maven.quiltmc.org/repository/release/'
66
}
77
// Currently needed for Intermediary and other temporary dependencies
88
maven {

src/main/java/io/github/axolotlclient/config/options/Option.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.axolotlclient.config.options;
22

33
import com.google.gson.JsonElement;
4+
import net.minecraft.text.MutableText;
45
import net.minecraft.text.Text;
56

67
public interface Option extends Tooltippable {
@@ -9,7 +10,7 @@ public interface Option extends Tooltippable {
910

1011
String getName();
1112

12-
default Text getTranslatedName(){
13+
default MutableText getTranslatedName(){
1314
return Text.translatable(this.getName());
1415
}
1516

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

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

3-
import com.mojang.blaze3d.systems.RenderSystem;
4-
import com.mojang.blaze3d.vertex.BufferBuilder;
5-
import com.mojang.blaze3d.vertex.Tessellator;
6-
import com.mojang.blaze3d.vertex.VertexFormat;
7-
import com.mojang.blaze3d.vertex.VertexFormats;
83
import io.github.axolotlclient.AxolotlClient;
94
import io.github.axolotlclient.config.ConfigManager;
105
import io.github.axolotlclient.config.options.BooleanOption;
@@ -23,7 +18,6 @@
2318
import io.github.axolotlclient.config.screen.widgets.EnumOptionWidget;
2419
import io.github.axolotlclient.config.screen.widgets.OptionSliderWidget;
2520
import io.github.axolotlclient.config.screen.widgets.StringOptionWidget;
26-
import io.github.axolotlclient.mixin.AccessorButtonListWidget;
2721
import io.github.axolotlclient.modules.hud.util.Rectangle;
2822
import io.github.axolotlclient.util.Util;
2923
import net.fabricmc.api.EnvType;
@@ -32,9 +26,7 @@
3226
import net.minecraft.client.gui.DrawableHelper;
3327
import net.minecraft.client.gui.widget.ButtonListWidget;
3428
import net.minecraft.client.gui.widget.ClickableWidget;
35-
import net.minecraft.client.render.GameRenderer;
3629
import net.minecraft.client.util.math.MatrixStack;
37-
import net.minecraft.util.math.MathHelper;
3830
import org.lwjgl.opengl.GL11;
3931

4032
import java.util.ArrayList;
@@ -120,22 +112,19 @@ public int getRowLeft() {
120112
}
121113

122114

123-
protected void renderTooltips(MatrixStack matrices, int x, int y, int mouseX, int mouseY){
115+
public void renderTooltips(MatrixStack matrices, int mouseX, int mouseY){
116+
Util.applyScissor(new Rectangle(0, top, this.width, bottom-top));
124117
int i = this.getEntryCount();
125-
126118
for(int j = 0; j < i; ++j) {
127-
int k = this.getRowTop(j);
128-
entries.get(j).renderTooltips(matrices, x, k, mouseX, mouseY);
119+
entries.get(j).renderTooltips(matrices, mouseX, mouseY);
129120
}
121+
GL11.glDisable(GL11.GL_SCISSOR_TEST);
130122
}
131123

132124
@Override
133125
protected void renderList(MatrixStack matrices, int x, int y, int mouseX, int mouseY, float delta) {
134126
Util.applyScissor(new Rectangle(0, top, this.width, bottom-top));
135127
super.renderList(matrices, x, y, mouseX, mouseY, delta);
136-
137-
renderTooltips(matrices, x, y, mouseX, mouseY);
138-
139128
GL11.glDisable(GL11.GL_SCISSOR_TEST);
140129
}
141130

@@ -194,7 +183,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth
194183

195184
}
196185

197-
public void renderTooltips(MatrixStack matrices, int x, int y, int mouseX, int mouseY){
186+
public void renderTooltips(MatrixStack matrices, int mouseX, int mouseY){
198187

199188
}
200189

@@ -300,7 +289,7 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth
300289
}
301290

302291
@Override
303-
public void renderTooltips(MatrixStack matrices, int x, int y, int mouseX, int mouseY) {
292+
public void renderTooltips(MatrixStack matrices, int mouseX, int mouseY) {
304293
if(AxolotlClient.CONFIG.showCategoryTooltips.get()) {
305294
if (super.left != null && super.left.isMouseOver(mouseX, mouseY)) {
306295
renderTooltip(matrices, left, mouseX, mouseY);
@@ -316,6 +305,7 @@ public class OptionEntry extends Pair {
316305

317306
private final Option option;
318307
protected int width;
308+
protected int renderX;
319309

320310
public OptionEntry(ClickableWidget left, Option option, int width) {
321311
super(left, null);
@@ -331,13 +321,15 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth
331321
DrawableHelper.drawTextWithShadow(matrices, client.textRenderer, option.getTranslatedName(), x, y + 5, -1);
332322
left.y = y;
333323
left.render(matrices, mouseX, mouseY, tickDelta);
324+
325+
renderX = x;
334326
}
335327

336328
@Override
337-
public void renderTooltips(MatrixStack matrices, int x, int y, int mouseX, int mouseY) {
329+
public void renderTooltips(MatrixStack matrices, int mouseX, int mouseY) {
338330

339331
if(AxolotlClient.CONFIG.showOptionTooltips.get() &&
340-
mouseX>=x && mouseX<=left.x + left.getWidth() && mouseY>= y && mouseY<= y + 20){
332+
mouseX>=renderX && mouseX<=left.x + left.getWidth() && mouseY>= left.y && mouseY<= left.y + 20){
341333
renderTooltip(matrices, option, mouseX, mouseY);
342334
}
343335

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

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.axolotlclient.config.screen;
22

33
import io.github.axolotlclient.AxolotlClient;
4+
import io.github.axolotlclient.config.ConfigManager;
45
import io.github.axolotlclient.config.options.ColorOption;
56
import io.github.axolotlclient.config.options.OptionCategory;
67
import io.github.axolotlclient.config.options.Tooltippable;
@@ -50,6 +51,8 @@ public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
5051

5152
if(picker!=null){
5253
picker.render(matrices, mouseX, mouseY, delta);
54+
} else {
55+
list.renderTooltips(matrices, mouseX, mouseY);
5356
}
5457

5558
super.render(matrices, mouseX, mouseY, delta);
@@ -60,6 +63,7 @@ public void openColorPicker(ColorOption option){
6063
}
6164

6265
public void closeColorPicker(){
66+
ConfigManager.save();
6367
picker=null;
6468
}
6569

@@ -73,6 +77,14 @@ public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
7377
//return super.mouseScrolled(mouseX, mouseY, amount);
7478
}
7579

80+
@Override
81+
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
82+
if(isPickerOpen()){
83+
return false;
84+
}
85+
return list.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
86+
}
87+
7688
@Override
7789
public boolean mouseClicked(double mouseX, double mouseY, int button) {
7890
if(picker!=null){
@@ -81,18 +93,25 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
8193
} else {
8294
picker.onClick(mouseX, mouseY);
8395
}
96+
return true;
8497
}
8598
return super.mouseClicked(mouseX, mouseY, button);
8699
}
87100

88101
@Override
89102
public boolean mouseReleased(double mouseX, double mouseY, int button) {
103+
if(isPickerOpen() && picker.mouseReleased(mouseX, mouseY, button)){
104+
return true;
105+
}
90106
return this.list.mouseReleased(mouseX, mouseY, button) || super.mouseReleased(mouseX, mouseY, button);
91107
}
92108

93109
@Override
94110
public void tick() {
95111
this.list.tick();
112+
if(isPickerOpen()){
113+
picker.tick();
114+
}
96115
}
97116

98117
@Override
@@ -101,17 +120,29 @@ public void init() {
101120

102121
this.addSelectableChild(list);
103122

104-
this.addDrawableChild(new ButtonWidget(this.width/2-100, this.height-40, 200, 20, Text.translatable("back"), buttonWidget -> MinecraftClient.getInstance().setScreen(parent)));
123+
this.addDrawableChild(new ButtonWidget(this.width/2-100, this.height-40, 200, 20, Text.translatable("back"), buttonWidget -> {
124+
if(isPickerOpen()){
125+
closeColorPicker();
126+
}
127+
ConfigManager.save();
128+
MinecraftClient.getInstance().setScreen(parent);
129+
}));
105130
if(Objects.equals(cat.getName(), "config")) this.addDrawableChild(new ButtonWidget(this.width-106, this.height-26, 100, 20, Text.translatable("credits"), buttonWidget -> MinecraftClient.getInstance().setScreen(new CreditsScreen(this))));
106131
}
107132

108133
@Override
109134
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
135+
if(isPickerOpen() && picker.keyPressed(keyCode, scanCode, modifiers)){
136+
return true;
137+
}
110138
return this.list.keyPressed(keyCode, scanCode, modifiers) || super.keyPressed(keyCode, scanCode, modifiers);
111139
}
112140

113141
@Override
114142
public boolean charTyped(char chr, int modifiers) {
143+
if(isPickerOpen() && picker.charTyped(chr, modifiers)){
144+
return true;
145+
}
115146
return list.charTyped(chr, modifiers);
116147
}
117148

@@ -126,4 +157,13 @@ public void renderTooltip(MatrixStack matrices, Tooltippable option, int x, int
126157
public boolean isPauseScreen() {
127158
return false;
128159
}
160+
161+
@Override
162+
public void resize(MinecraftClient client, int width, int height) {
163+
if(isPickerOpen()){
164+
picker.init();
165+
}
166+
ConfigManager.save();
167+
super.resize(client, width, height);
168+
}
129169
}

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

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

33
import com.mojang.blaze3d.systems.RenderSystem;
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.gui.widget.ButtonWidget;
78
import net.minecraft.client.gui.widget.ClickableWidget;
@@ -23,10 +24,12 @@ public Text getMessage(){
2324
return option.get()? Text.translatable("options."+"on"): Text.translatable ("options."+"off");
2425
}
2526

26-
/*@Override
27-
public boolean isMouseOver(MinecraftClient client, int mouseX, int mouseY) {
28-
return mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
29-
}*/
27+
@Override
28+
public boolean isMouseOver(double mouseX, double mouseY) {
29+
if(MinecraftClient.getInstance().currentScreen instanceof OptionsScreenBuilder &&
30+
((OptionsScreenBuilder) MinecraftClient.getInstance().currentScreen).isPickerOpen()) return false;
31+
return super.isMouseOver(mouseX, mouseY);
32+
}
3033

3134
@Override
3235
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {

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
@@ -33,6 +33,12 @@ public CategoryWidget(OptionCategory category, int x, int y, int width, int heig
3333

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

0 commit comments

Comments
 (0)