diff options
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/gui')
7 files changed, 50 insertions, 38 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java index c15940d..1f7e621 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java @@ -35,7 +35,6 @@ public class OneConfigGui extends UScreen { private final ArrayList<Page> nextPages = new ArrayList<>(); private final BasicElement backArrow = new BasicElement(40, 40, new ColorPalette(Colors.GRAY_700, Colors.GRAY_500, Colors.GRAY_500_80), true); private final BasicElement forwardArrow = new BasicElement(40, 40, new ColorPalette(Colors.GRAY_700, Colors.GRAY_500, Colors.GRAY_500_80), true); - private final ArrayList<Page> parents = new ArrayList<>(); public ColorSelector currentColorSelector; public boolean mouseDown; public boolean allowClose = true; @@ -70,7 +69,8 @@ public class OneConfigGui extends UScreen { RenderManager.setupAndDraw((vg) -> { if (currentPage == null) { currentPage = new ModsPage(); - parents.add(currentPage); + currentPage.parents = new ArrayList<>(); + currentPage.parents.add(currentPage); } if (OneConfigConfig.australia) { NanoVG.nvgTranslate(vg, UResolution.getWindowWidth(), UResolution.getWindowHeight()); @@ -154,17 +154,17 @@ public class OneConfigGui extends UScreen { ScissorManager.clearScissors(vg); float breadcrumbX = x + 352; - for (int i = 0; i < parents.size(); i++) { - String title = parents.get(i).getTitle(); + for (int i = 0; i < currentPage.parents.size(); i++) { + String title = currentPage.parents.get(i).getTitle(); float width = RenderManager.getTextWidth(vg, title, 24f, Fonts.SEMIBOLD); boolean hovered = InputUtils.isAreaHovered((int) breadcrumbX, y + 24, (int) width, 36); int color = Colors.WHITE_60; - if (i == parents.size() - 1) color = Colors.WHITE; + if (i == currentPage.parents.size() - 1) color = Colors.WHITE; else if (hovered && !Mouse.isButtonDown(0)) color = Colors.WHITE_80; RenderManager.drawText(vg, title, breadcrumbX, y + 38, color, 24f, Fonts.SEMIBOLD); if (i != 0) RenderManager.drawSvg(vg, SVGs.CARET_RIGHT, breadcrumbX - 28, y + 25, 24, 24, color); - if (hovered && InputUtils.isClicked()) openPage(parents.get(i)); + if (hovered && InputUtils.isClicked()) openPage(currentPage.parents.get(i)); breadcrumbX += width + 32; } @@ -203,20 +203,23 @@ public class OneConfigGui extends UScreen { if (page == currentPage) return; currentPage.finishUpAndClose(); textInputField.setInput(""); - if (!page.isBase()) { - boolean alreadyInParents = false; - for (int i = 0; i < parents.size(); i++) { - Page parent = parents.get(i); - if (parent == page) { - alreadyInParents = true; - parents.subList(i + 1, parents.size()).clear(); - break; + if (page.parents == null) { + page.parents = new ArrayList<>(currentPage.parents); + if (!page.isBase()) { + boolean alreadyInParents = false; + for (int i = 0; i < page.parents.size(); i++) { + Page parent = page.parents.get(i); + if (parent == page) { + alreadyInParents = true; + page.parents.subList(i + 1, page.parents.size()).clear(); + break; + } } + if (!alreadyInParents) page.parents.add(page); + } else { + page.parents.clear(); + page.parents.add(page); } - if (!alreadyInParents) parents.add(page); - } else { - parents.clear(); - parents.add(page); } if (addToPrevious) { previousPages.add(0, currentPage); @@ -235,7 +238,7 @@ public class OneConfigGui extends UScreen { * Correct usage: <code>OneConfigGui.INSTANCE.initColorSelector(new ColorSelector(color, InputUtils.mouseX(), InputUtils.mouseY()));</code> */ public void initColorSelector(ColorSelector colorSelector) { - InputUtils.blockClicks(true); + if (currentColorSelector != null) closeColorSelector(); currentColorSelector = colorSelector; } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java index a4a3321..56eac2d 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicElement.java @@ -44,7 +44,7 @@ public class BasicElement { public int currentColor; protected final float radius; /** - * Boolean to determine if this element is allowed to be clicked when {@link InputUtils#isBlockingClicks()} is true. + * Boolean to determine if this element is allowed to be clicked when {@link InputUtils#isBlockingInput()} is true. */ private boolean block = false; /** diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java index f331fd9..4103bca 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java @@ -54,6 +54,7 @@ public class ColorSelector { private int mode = 0; private boolean dragging, mouseWasDown; private final boolean hasAlpha; + private Scissor inputScissor = null; public ColorSelector(OneColor color, int mouseX, int mouseY) { this(color, mouseX, mouseY, true); @@ -106,7 +107,7 @@ public class ColorSelector { } public void draw(long vg) { - InputUtils.blockClicks(false); + if (inputScissor != null) InputUtils.stopBlock(inputScissor); doDrag(); int width = 416; int height = 768; @@ -201,11 +202,12 @@ public class ColorSelector { RenderManager.drawRoundImage(vg, Images.ALPHA_GRID, x + 20, y + 492, 376, 32, 8f); RenderManager.drawRoundedRect(vg, x + 20, y + 492, 376, 32, color.getRGB(), 8f); - InputUtils.blockClicks(true); - if (closeBtn.isClicked() || Mouse.isButtonDown(0) && !mouseWasDown && !InputUtils.isAreaHovered(x - 3, y - 3, width + 6, height + 6)) - OneConfigGui.INSTANCE.closeColorSelector(); + inputScissor = InputUtils.blockInputArea(x - 3, y - 3, width + 6, height + 6); ScissorManager.resetScissor(vg, scissor); mouseWasDown = Mouse.isButtonDown(0); + if (closeBtn.isClicked()) { + OneConfigGui.INSTANCE.closeColorSelector(); + } } private void drawColorSelector(long vg, int mode, int x, int y) { @@ -392,7 +394,7 @@ public class ColorSelector { } public void onClose() { - InputUtils.blockClicks(false); + if (inputScissor != null) InputUtils.stopBlock(inputScissor); /*for (int i = 0; i < OneConfigConfig.recentColors.size(); i++) { OneColor color1 = OneConfigConfig.recentColors.get(i); if (color1.getRGB() == color.getRGB()) { diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java index 67488d7..16796e9 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigColorElement.java @@ -85,14 +85,12 @@ public class ConfigColorElement extends BasicOption { RenderManager.drawHollowRoundRect(vg, x1 + 415, y - 1, 64, 32, Colors.GRAY_300, 12f, 2f); RenderManager.drawRoundImage(vg, Images.ALPHA_GRID, x1 + 420, y + 4, 56, 24, 8f); RenderManager.drawRoundedRect(vg, x1 + 420, y + 4, 56, 24, color.getRGB(), 8f); - if (element.isClicked() && !element.isToggled()) { - open = !open; + if (element.isClicked() && !open) { + open = true; OneConfigGui.INSTANCE.initColorSelector(new ColorSelector(color, InputUtils.mouseX(), InputUtils.mouseY(), allowAlpha)); } if (OneConfigGui.INSTANCE.currentColorSelector == null) open = false; - if (OneConfigGui.INSTANCE.currentColorSelector != null && open) { - color = (OneConfigGui.INSTANCE.getColor()); - } + else if (open) color = (OneConfigGui.INSTANCE.getColor()); setColor(color); RenderManager.setAlpha(vg, 1f); } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java index 657cf99..26d7348 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigDropdown.java @@ -7,6 +7,7 @@ import cc.polyfrost.oneconfig.gui.animations.ColorAnimation; import cc.polyfrost.oneconfig.renderer.RenderManager; import cc.polyfrost.oneconfig.renderer.font.Fonts; import cc.polyfrost.oneconfig.internal.assets.SVGs; +import cc.polyfrost.oneconfig.renderer.scissor.Scissor; import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.color.ColorPalette; import org.lwjgl.input.Mouse; @@ -20,6 +21,7 @@ public class ConfigDropdown extends BasicOption { private final ColorAnimation backgroundColor = new ColorAnimation(ColorPalette.SECONDARY); private final ColorAnimation atomColor = new ColorAnimation(new ColorPalette(Colors.PRIMARY_600, Colors.PRIMARY_500, Colors.PRIMARY_500)); private boolean opened = false; + private Scissor inputScissor = null; public ConfigDropdown(Field field, Object parent, String name, String category, String subcategory, int size, String[] options) { super(field, parent, name, category, subcategory, size); @@ -45,7 +47,8 @@ public class ConfigDropdown extends BasicOption { size == 2 && !InputUtils.isAreaHovered(x + 352, y + 40, 640, options.length * 32))) { opened = !opened; backgroundColor.setPalette(opened ? ColorPalette.PRIMARY : ColorPalette.SECONDARY); - InputUtils.blockClicks(opened); + if (opened) inputScissor = InputUtils.blockAllInput(); + else if (inputScissor != null) InputUtils.stopBlock(inputScissor); } if (opened) return; @@ -75,8 +78,8 @@ public class ConfigDropdown extends BasicOption { if (!opened) return; boolean hovered; - if (size == 1) hovered = InputUtils.isAreaHovered(x + 224, y, 256, 32); - else hovered = InputUtils.isAreaHovered(x + 352, y, 640, 32); + if (size == 1) hovered = InputUtils.isAreaHovered(x + 224, y, 256, 32, true); + else hovered = InputUtils.isAreaHovered(x + 352, y, 640, 32, true); int selected = 0; try { @@ -98,7 +101,7 @@ public class ConfigDropdown extends BasicOption { int optionY = y + 44; for (String option : options) { int color = Colors.WHITE_80; - boolean optionHovered = InputUtils.isAreaHovered(x + 224, optionY, 252, 32); + boolean optionHovered = InputUtils.isAreaHovered(x + 224, optionY, 252, 32, true); if (optionHovered && Mouse.isButtonDown(0)) { RenderManager.drawRoundedRect(vg, x + 228, optionY + 2, 248, 28, Colors.PRIMARY_700_80, 8); } else if (optionHovered) { @@ -112,7 +115,7 @@ public class ConfigDropdown extends BasicOption { } opened = false; backgroundColor.setPalette(ColorPalette.SECONDARY); - InputUtils.blockClicks(false); + if (inputScissor != null) InputUtils.stopBlock(inputScissor); } RenderManager.drawText(vg, option, x + 240, optionY + 18, color, 14, Fonts.MEDIUM); @@ -131,7 +134,7 @@ public class ConfigDropdown extends BasicOption { int optionY = y + 44; for (String option : options) { int color = Colors.WHITE_80; - boolean optionHovered = InputUtils.isAreaHovered(x + 352, optionY, 640, 36); + boolean optionHovered = InputUtils.isAreaHovered(x + 352, optionY, 640, 36, true); if (optionHovered && Mouse.isButtonDown(0)) { RenderManager.drawRoundedRect(vg, x + 356, optionY + 2, 632, 28, Colors.PRIMARY_700_80, 8); } else if (optionHovered) { @@ -148,7 +151,7 @@ public class ConfigDropdown extends BasicOption { } opened = false; backgroundColor.setPalette(ColorPalette.SECONDARY); - InputUtils.blockClicks(false); + if (inputScissor != null) InputUtils.stopBlock(inputScissor); } optionY += 32; } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java index 066fdd3..bd02d21 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigSlider.java @@ -41,7 +41,7 @@ public class ConfigSlider extends BasicOption { inputField.disable(!isEnabled()); if (!isEnabled()) RenderManager.setAlpha(vg, 0.5f); boolean isMouseDown = Mouse.isButtonDown(0); - if (hovered && isMouseDown && !mouseWasDown && !InputUtils.isBlockingClicks()) dragging = true; + if (hovered && isMouseDown && !mouseWasDown) dragging = true; mouseWasDown = isMouseDown; if (dragging) { xCoordinate = (int) MathUtils.clamp(InputUtils.mouseX(), x + 352, x + 864); diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java index 17f9498..8ec270c 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/pages/Page.java @@ -11,6 +11,8 @@ import cc.polyfrost.oneconfig.utils.InputUtils; import cc.polyfrost.oneconfig.utils.color.ColorPalette; import org.lwjgl.input.Mouse; +import java.util.ArrayList; + /** * A page is a 1056x728 rectangle of the GUI. It is the main content of the gui, and can be switched back and forwards easily. All the content of OneConfig is in a page. */ @@ -22,6 +24,7 @@ public abstract class Page { private long scrollTime; private boolean mouseWasDown, dragging; private float yStart; + public ArrayList<Page> parents = null; public Page(String title) { this.title = title; @@ -47,6 +50,7 @@ public abstract class Page { float scroll = scrollAnimation == null ? scrollTarget : scrollAnimation.get(); final float scrollBarLength = (728f / maxScroll) * 728f; Scissor scissor = ScissorManager.scissor(vg, x, y + scissorOffset, x + 1056, y + 728 - scissorOffset); + Scissor inputScissor = InputUtils.blockInputArea(x, y, x + 1056, y + scissorOffset); int dWheel = Mouse.getDWheel(); if (dWheel != 0) { scrollTarget += dWheel; @@ -60,6 +64,7 @@ public abstract class Page { if (maxScroll <= 728) { draw(vg, x, y); ScissorManager.resetScissor(vg, scissor); + InputUtils.stopBlock(inputScissor); return; } draw(vg, x, (int) (y + scroll)); @@ -68,6 +73,7 @@ public abstract class Page { } ScissorManager.resetScissor(vg, scissor); + InputUtils.stopBlock(inputScissor); if (!(scrollBarLength > 727f)) { final float scrollBarY = (scroll / maxScroll) * 720f; final boolean isMouseDown = Mouse.isButtonDown(0); |