summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/config/gui
diff options
context:
space:
mode:
authorLorenz <ESs95s3P5z8Pheb>2022-07-16 01:02:22 +0200
committerLorenz <ESs95s3P5z8Pheb>2022-07-16 01:02:22 +0200
commit8a7a6f64852a4731630d6b76da2bad522bf93fb5 (patch)
tree0b83fee4371944e964197847e9ceb1bce21777bb /src/main/java/at/hannibal2/skyhanni/config/gui
parenta11f05faa905448c797086daff09c76847293211 (diff)
downloadskyhanni-8a7a6f64852a4731630d6b76da2bad522bf93fb5.tar.gz
skyhanni-8a7a6f64852a4731630d6b76da2bad522bf93fb5.tar.bz2
skyhanni-8a7a6f64852a4731630d6b76da2bad522bf93fb5.zip
moved packages
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/config/gui')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/GuiTextures.java32
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/commands/Commands.java60
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/commands/SimpleCommand.java60
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/config/ConfigEditor.java601
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/BackgroundBlur.java249
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/ChromaColour.java93
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GlScissorStack.java86
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElement.java12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementBoolean.java118
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementColour.java370
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementTextField.java549
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiScreenElementWrapper.java34
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/Config.java5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/KeybindHelper.java49
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/Position.java197
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/Category.java14
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigAccordionId.java12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorAccordion.java12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorBoolean.java11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorButton.java14
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorColour.java11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorDraggableList.java12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorDropdown.java14
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorKeybind.java12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorSlider.java16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorStyle.java11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorText.java11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigOption.java16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditor.java62
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorAccordion.java80
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorBoolean.java37
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorButton.java60
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorColour.java74
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorDraggableList.java268
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorDropdown.java145
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorKeybind.java88
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorSlider.java136
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorStyle.java42
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorText.java78
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiPositionEditor.java171
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/config/struct/ConfigProcessor.java166
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/GuiElementSlider.java120
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/StringUtils.java8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpUtils.java25
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpingFloat.java68
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpingInteger.java76
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/render/RenderUtils.java155
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/core/util/render/TextRenderUtils.java155
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/textures/TextureObject.java37
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/textures/Textures.java54
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/gui/utils/Utils.java367
51 files changed, 5153 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/gui/GuiTextures.java b/src/main/java/at/hannibal2/skyhanni/config/gui/GuiTextures.java
new file mode 100644
index 000000000..3bcf08e47
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/gui/GuiTextures.java
@@ -0,0 +1,32 @@
+package at.hannibal2.skyhanni.config.gui;
+
+import net.minecraft.util.ResourceLocation;
+
+public class GuiTextures {
+
+ private GuiTextures() {}
+
+ public static final ResourceLocation DISCORD = new ResourceLocation("skyhanni:discord.png");
+
+ public static final ResourceLocation button_tex = new ResourceLocation("skyhanni:button.png");
+
+ public static final ResourceLocation button_white = new ResourceLocation("skyhanni:button_white.png");
+
+ public static final ResourceLocation BAR = new ResourceLocation("skyhanni:core/bar.png");
+ public static final ResourceLocation OFF = new ResourceLocation("skyhanni:core/toggle_off.png");
+ public static final ResourceLocation ONE = new ResourceLocation("skyhanni:core/toggle_1.png");
+ public static final ResourceLocation TWO = new ResourceLocation("skyhanni:core/toggle_2.png");
+ public static final ResourceLocation THREE = new ResourceLocation("skyhanni:core/toggle_3.png");
+ public static final ResourceLocation ON = new ResourceLocation("skyhanni:core/toggle_on.png");
+ public static final ResourceLocation DELETE = new ResourceLocation("skyhanni:core/delete.png");
+
+ public static final ResourceLocation slider_off_cap = new ResourceLocation("skyhanni:core/slider/slider_off_cap.png");
+ public static final ResourceLocation slider_off_notch = new ResourceLocation("skyhanni:core/slider/slider_off_notch.png");
+ public static final ResourceLocation slider_off_segment = new ResourceLocation("skyhanni:core/slider/slider_off_segment.png");
+ public static final ResourceLocation slider_on_cap = new ResourceLocation("skyhanni:core/slider/slider_on_cap.png");
+ public static final ResourceLocation slider_on_notch = new ResourceLocation("skyhanni:core/slider/slider_on_notch.png");
+ public static final ResourceLocation slider_on_segment = new ResourceLocation("skyhanni:core/slider/slider_on_segment.png");
+ public static final ResourceLocation slider_button_new = new ResourceLocation("skyhanni:core/slider/slider_button.png");
+
+ public static final ResourceLocation mapOverlay = new ResourceLocation("skyhanni", "maps/map_overlay.png");
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/config/gui/commands/Commands.java b/src/main/java/at/hannibal2/skyhanni/config/gui/commands/Commands.java
new file mode 100644
index 000000000..b9260b71a
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/gui/commands/Commands.java
@@ -0,0 +1,60 @@
+package at.hannibal2.skyhanni.config.gui.commands;
+
+import at.hannibal2.skyhanni.SkyHanniMod;
+import at.hannibal2.skyhanni.config.gui.config.ConfigEditor;
+import at.hannibal2.skyhanni.config.gui.core.GuiScreenElementWrapper;
+import at.hannibal2.skyhanni.test.LorenzTest;
+import net.minecraft.command.ICommandSender;
+import net.minecraftforge.client.ClientCommandHandler;
+import org.apache.commons.lang3.StringUtils;
+
+public class Commands {
+
+ private static final SimpleCommand.ProcessCommandRunnable mainMenu = new SimpleCommand.ProcessCommandRunnable() {
+ public void processCommand(ICommandSender sender, String[] args) {
+ if (args.length > 0) {
+ SkyHanniMod.screenToOpen = new GuiScreenElementWrapper(new ConfigEditor(SkyHanniMod.feature, StringUtils.join(args, " ")));
+ } else {
+ SkyHanniMod.screenToOpen = new GuiScreenElementWrapper(new ConfigEditor(SkyHanniMod.feature));
+ }
+ }
+ };
+
+ public static void init() {
+ ClientCommandHandler.instance.registerCommand(new SimpleCommand("sh", mainMenu));
+ ClientCommandHandler.instance.registerCommand(new SimpleCommand("skyhanni", mainMenu));
+
+ ClientCommandHandler.instance.registerCommand(
+ new SimpleCommand(
+ "shreloadlocalrepo",
+ new SimpleCommand.ProcessCommandRunnable() {
+ public void processCommand(ICommandSender sender, String[] args) {
+ SkyHanniMod.repo.reloadLocalRepo();
+ }
+ }
+ )
+ );
+
+ ClientCommandHandler.instance.registerCommand(
+ new SimpleCommand(
+ "shupdaterepo",
+ new SimpleCommand.ProcessCommandRunnable() {
+ public void processCommand(ICommandSender sender, String[] args) {
+ SkyHanniMod.repo.updateRepo();
+ }
+ }
+ )
+ );
+
+ ClientCommandHandler.instance.registerCommand(
+ new SimpleCommand(
+ "ii",
+ new SimpleCommand.ProcessCommandRunnable() {
+ public void processCommand(ICommandSender sender, String[] args) {
+ LorenzTest.Companion.printLore();
+ }
+ }
+ )
+ );
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/config/gui/commands/SimpleCommand.java b/src/main/java/at/hannibal2/skyhanni/config/gui/commands/SimpleCommand.java
new file mode 100644
index 000000000..fe0e4fb55
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/gui/commands/SimpleCommand.java
@@ -0,0 +1,60 @@
+package at.hannibal2.skyhanni.config.gui.commands;
+
+import java.util.List;
+import net.minecraft.command.CommandBase;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.util.BlockPos;
+
+/**
+ @author Moulberry
+ **/
+public class SimpleCommand extends CommandBase {
+
+ private final String commandName;
+ private final ProcessCommandRunnable runnable;
+ private TabCompleteRunnable tabRunnable;
+
+ public SimpleCommand(String commandName, ProcessCommandRunnable runnable) {
+ this.commandName = commandName;
+ this.runnable = runnable;
+ }
+
+ public SimpleCommand(String commandName, ProcessCommandRunnable runnable, TabCompleteRunnable tabRunnable) {
+ this.commandName = commandName;
+ this.runnable = runnable;
+ this.tabRunnable = tabRunnable;
+ }
+
+ public abstract static class ProcessCommandRunnable {
+
+ public abstract void processCommand(ICommandSender sender, String[] args);
+ }
+
+ public abstract static class TabCompleteRunnable {
+
+ public abstract List<String> tabComplete(ICommandSender sender, String[] args, BlockPos pos);
+ }
+
+ public boolean canCommandSenderUseCommand(ICommandSender sender) {
+ return true;
+ }
+
+ public String getCommandName() {
+ return commandName;
+ }
+
+ public String getCommandUsage(ICommandSender sender) {
+ return "/" + commandName;
+ }
+
+ @Override
+ public void processCommand(ICommandSender sender, String[] args) {
+ runnable.processCommand(sender, args);
+ }
+
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) {
+ if (tabRunnable != null) return tabRunnable.tabComplete(sender, args, pos);
+ return null;
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/config/gui/config/ConfigEditor.java b/src/main/java/at/hannibal2/skyhanni/config/gui/config/ConfigEditor.java
new file mode 100644
index 000000000..39fd02780
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/config/gui/config/ConfigEditor.java
@@ -0,0 +1,601 @@
+package at.hannibal2.skyhanni.config.gui.config;
+
+import at.hannibal2.skyhanni.SkyHanniMod;
+import at.hannibal2.skyhanni.config.Features;
+import at.hannibal2.skyhanni.config.gui.GuiTextures;
+import at.hannibal2.skyhanni.config.gui.core.GlScissorStack;
+import at.hannibal2.skyhanni.config.gui.core.GuiElement;
+import at.hannibal2.skyhanni.config.gui.core.config.gui.GuiOptionEditor;
+import at.hannibal2.skyhanni.config.gui.core.config.gui.GuiOptionEditorAccordion;
+import at.hannibal2.skyhanni.config.gui.core.config.struct.ConfigProcessor;
+import at.hannibal2.skyhanni.config.gui.core.util.lerp.LerpUtils;
+import at.hannibal2.skyhanni.config.gui.core.util.lerp.LerpingInteger;
+import at.hannibal2.skyhanni.config.gui.core.util.render.RenderUtils;
+import at.hannibal2.skyhanni.config.gui.core.util.render.TextRenderUtils;
+import com.google.common.collect.Lists;
+import java.awt.*;
+import java.net.URI;
+import java.util.*;
+import java.util.List;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+public class ConfigEditor extends GuiElement {
+
+ private static final ResourceLocation[] socialsIco = new ResourceLocation[] { GuiTextures.DISCORD };
+ private static final String[] socialsLink = new String[] { "https://discord.gg/8DXVN4BJz3" };
+
+ private final long openedMillis;
+
+ private String selectedCategory = null;
+
+ private final LerpingInteger optionsScroll = new LerpingInteger(0, 150);
+ private final LerpingInteger categoryScroll = new LerpingInteger(0, 150);
+
+ private final LinkedHashMap<String, ConfigProcessor.ProcessedCategory> processedConfig;
+ private final TreeMap<String, Set<ConfigProcessor.ProcessedOption>> searchOptionMap = new TreeMap<>();
+ private final HashMap<ConfigProcessor.ProcessedOption, ConfigProcessor.ProcessedCategory> categoryForOption = new HashMap<>();
+
+ public ConfigEditor(Features config) {
+ this(config, null);
+ }
+
+ public ConfigEditor(Features config, String categoryOpen) {
+ this.openedMillis = System.currentTimeMillis();
+ this.processedConfig = ConfigProcessor.create(config);
+
+ for (ConfigProcessor.ProcessedCategory category : processedConfig.values()) {
+ for (ConfigProcessor.ProcessedOption option : category.options.values()) {
+ categoryForOption.put(option, category);
+ }
+ }
+
+ if (categoryOpen != null) {
+ for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) {
+ if (category.getValue().name.equalsIgnoreCase(categoryOpen)) {
+ selectedCategory = category.getKey();
+ break;
+ }
+ }
+ if (selectedCategory == null) {
+ for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) {
+ if (category.getValue().name.toLowerCase().startsWith(categoryOpen.toLowerCase())) {
+ selectedCategory = category.getKey();
+ break;
+ }
+ }
+ }
+ if (selectedCategory == null) {
+ for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) {
+ if (category.getValue().name.toLowerCase().contains(categoryOpen.toLowerCase())) {
+ selectedCategory = category.getKey();
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> getCurrentConfigEditing() {
+ return new LinkedHashMap<>(processedConfig);
+ }
+
+ private LinkedHashMap<String, ConfigProcessor.ProcessedOption> getOptionsInCategory(ConfigProcessor.ProcessedCategory cat) {
+ return new LinkedHashMap<>(cat.options);
+ }
+
+ public String getSelectedCategory() {
+ return selectedCategory;
+ }
+
+ public String getSelectedCategoryName() {
+ return processedConfig.get(selectedCategory).name;
+ }
+
+ private void setSelectedCategory(String category) {
+ selectedCategory = category;
+ optionsScroll.setValue(0);
+ }
+
+ public void render() {
+ optionsScroll.tick();
+ categoryScroll.tick();
+
+ List<String> tooltipToDisplay = null;
+
+ long currentTime = System.currentTimeMillis();
+ long delta = currentTime - openedMillis;
+
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ int width = scaledResolution.getScaledWidth();
+ int height = scaledResolution.getScaledHeight();
+ int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth;
+ int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1;
+
+ float opacityFactor = LerpUtils.sigmoidZeroOne(delta / 500f);
+ RenderUtils.drawGradientRect(0, 0, 0, width, height, (int) (0x80 * opacityFactor) << 24 | 0x101010, (int) (0x90 * opacityFactor) << 24 | 0x101010);
+
+ int xSize = Math.min(scaledResolution.getScaledWidth() - 100 / scaledResolution.getScaleFactor(), 500);
+ int ySize = Math.min(scaledResolution.getScaledHeight() - 100 / scaledResolution.getScaleFactor(), 400);
+
+ int x = (scaledResolution.getScaledWidth() - xSize) / 2;
+ int y = (scaledResolution.getScaledHeight() - ySize) / 2;
+
+ int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor());
+
+ int openingXSize = xSize;
+ int openingYSize = ySize;
+ if (delta < 150) {
+ openingXSize = (int) (delta * xSize / 150);
+ openingYSize = 5;
+ } else if (delta < 300) {
+ openingYSize = 5 + (int) (delta - 150) * (ySize - 5) / 150;
+ }
+ RenderUtils.drawFloatingRectDark((scaledResolution.getScaledWidth() - openingXSize) / 2, (scaledResolution.getScaledHeight() - openingYSize) / 2, openingXSize, openingYSize);
+ GlScissorStack.clear();
+ GlScissorStack.push((scaledResolution.getScaledWidth() - openingXSize) / 2, (scaledResolution.getScaledHeight() - openingYSize) / 2, (scaledResolution.getScaledWidth() + openingXSize) / 2, (scaledResolution.getScaledHeight() + openingYSize) / 2, scaledResolution);
+
+ RenderUtils.drawFloatingRectDark(x + 5, y + 5, xSize - 10, 20, false);
+
+ FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
+ TextRenderUtils.drawStringCenteredScaledMaxWidth("SkyHanni " + SkyHanniMod.VERSION + " by " + EnumChatFormatting.RED + "hannibal2" + EnumChatFormatting.RESET + ", config by " + EnumChatFormatting.DARK_PURPLE + "Moulberry", fr, x + xSize / 2f, y + 15, false, 200, 0xa0a0a0);
+
+ RenderUtils.drawFloatingRectDark(x + 4, y + 49 - 20, 140, ySize - 54 + 20, false);
+
+ int innerPadding = 20 / adjScaleFactor;
+ int innerLeft = x + 4 + innerPadding;
+ int innerRight = x + 144 - innerPadding;
+ int innerTop = y + 49 + innerPadding;
+ int innerBottom = y + ySize - 5 - innerPadding;
+ Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left
+ Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top
+ Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff28282E); //Right
+ Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff28282E); //Bottom
+ Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle
+
+ GlScissorStack.push(0, innerTop + 1, scaledResolution.getScaledWidth(), innerBottom - 1, scaledResolution);
+
+ float catBarSize = 1;
+ int catY = -categoryScroll.getValue();
+
+ LinkedHashMap<String, ConfigProcessor.ProcessedCategory> currentConfigEditing = getCurrentConfigEditing();
+ for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : currentConfigEditing.entrySet()) {
+ String selectedCategory = getSelectedCategory();
+ if (selectedCategory == null || !currentConfigEditing.containsKey(selectedCategory)) {
+ setSelectedCategory(entry.getKey());
+ }
+ String catName = entry.getValue().name;
+ if (entry.getKey().equals(getSelectedCategory())) {
+ catName = EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.UNDERLINE + catName;
+ } else {
+ catName = EnumChatFormatting.GRAY + catName;
+ }
+ TextRenderUtils.drawStringCenteredScaledMaxWidth(catName, fr, x + 75, y + 70 + catY, false, 100, -1);
+ catY += 15;
+ if (catY > 0) {
+ catBarSize = LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (catY + 5 + categoryScroll.getValue()));
+ }
+ }
+
+ float catBarStart = categoryScroll.getValue() / (float) (catY + categoryScroll.getValue());
+ float catBarEnd = catBarStart + catBarSize;
+ if (catBarEnd > 1) {
+ catBarEnd = 1;
+ if (categoryScroll.getTarget() / (float) (catY + categoryScroll.getValue()) + catBarSize < 1) {
+ int target = optionsScroll.getTarget();
+ categoryScroll.setValue((int) Math.ceil((catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue())));
+ categoryScroll.setTarget(target);
+ } else {
+ categoryScroll.setValue((int) Math.ceil((catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue())));
+ }
+ }
+ int catDist = innerBottom - innerTop - 12;
+ Gui.drawRect(innerLeft + 2, innerTop + 5, innerLeft + 7, innerBottom - 5, 0xff101010);
+ Gui.drawRect(innerLeft + 3, innerTop + 6 + (int) (catDist * catBarStart), innerLeft + 6, innerTop + 6 + (int) (catDist * catBarEnd), 0xff303030);
+
+ GlScissorStack.pop(scaledResolution);
+
+ TextRenderUtils.drawStringCenteredScaledMaxWidth("Categories", fr, x + 75, y + 44, false, 120, 0xa368ef);
+
+ RenderUtils.drawFloatingRectDark(x + 149, y + 29, xSize - 154, ySize - 34, false);
+
+ innerLeft = x + 149 + innerPadding;
+ innerRight = x + xSize - 5 - innerPadding;
+ innerBottom = y + ySize - 5 - innerPadding;
+
+ GlStateManager.color(1, 1, 1, 1);
+ int rightStuffLen = 20;
+
+ if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) {
+ ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory());
+
+ TextRenderUtils.drawStringScaledMaxWidth(cat.desc, fr, innerLeft + 5, y + 40, true, innerRight - innerLeft - rightStuffLen - 10, 0xb0b0b0);
+ }
+
+ Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left
+ Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top
+ Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff303036); //Right
+ Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff303036); //Bottom
+ Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle
+
+ GlScissorStack.push(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, scaledResolution);
+ float barSize = 1;
+ int optionY = -optionsScroll.getValue();
+ if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) {
+ ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory());
+ int optionWidthDefault = innerRight - innerLeft - 20;