aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2022-05-21 21:18:14 +0900
committersyeyoung <cyoung06@naver.com>2022-05-21 21:28:52 +0900
commit20dd3f99a7b139b5848128246c622fd9cfefa478 (patch)
tree78e5f84ad22fd53876d488f6b58c3528aebe6501 /src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
parent50de034c046c4ddea033b73793c8825ecb5bb86f (diff)
downloadSkyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.tar.gz
Skyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.tar.bz2
Skyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.zip
- Project separation
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java187
1 files changed, 0 insertions, 187 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
deleted file mode 100644
index d5f27227..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
- * Copyright (C) 2021 cyoung06
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package kr.syeyoung.dungeonsguide.gui.elements;
-
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.util.MathHelper;
-import org.w3c.dom.css.Rect;
-
-import java.awt.*;
-
-public class MScrollablePanel extends MPanel {
- @Getter
- private boolean hideScrollBarWhenNotNecessary = false;
-
- public void setHideScrollBarWhenNotNecessary(boolean hideScrollBarWhenNotNecessary) {
- this.hideScrollBarWhenNotNecessary = hideScrollBarWhenNotNecessary;
- setBounds(getBounds());
- }
-
- private final int axis; // 1: Y 2: X 3: both.
-
-
- private MPanel viewPort;
- @Getter
- private MPanel contentArea;
- @Getter
- private MScrollBar scrollBarX, scrollBarY;
-
- private Rectangle contentAreaDim;
-
- public MScrollablePanel(int axis) {
- this.axis = axis;
- viewPort = new MPanel();
- scrollBarX = new MScrollBar(0, 1, 1, 0, MScrollBar.Axis.X, this::onScrollBarUpdate);
- scrollBarY = new MScrollBar(0, 1, 1, 0, MScrollBar.Axis.Y, this::onScrollBarUpdate);
-
- if ((axis & 1) > 0)
- super.add(scrollBarY);
- if ((axis & 2) > 0)
- super.add(scrollBarX);
- super.add(viewPort);
-
-
- contentArea = new MPanel() {
- @Override
- public void add(MPanel child) {
- super.add(child);
- evalulateContentArea();
- }
-
- @Override
- public void remove(MPanel panel) {
- super.remove(panel);
- evalulateContentArea();
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- if (bounds == null) return;
- this.bounds.x = bounds.x;
- this.bounds.y = bounds.y;
- this.bounds.width = bounds.width;
- this.bounds.height = bounds.height;
-
- onBoundsUpdate();
- }
-
- @Override
- public void resize(int parentWidth, int parentHeight) {
- for (MPanel childComponent : childComponents) {
- childComponent.resize0(parentWidth, parentHeight);
- }
- evalulateContentArea();
- }
- };
- viewPort.add(contentArea);
- contentArea.setIgnoreBoundOnClip(true);
- evalulateContentArea();
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- super.render(absMousex, absMousey, relMousex0, relMousey0, partialTicks, scissor);
-
- boolean hideX = (axis & 2) == 0, hideY = (axis & 1) == 0;
- if (bounds.width >= contentAreaDim.width && hideScrollBarWhenNotNecessary) hideX = true;
- if (bounds.height >= contentAreaDim.height && hideScrollBarWhenNotNecessary) hideY = true;
- if (axis == 3 && !(hideX && hideY)) {
- Gui.drawRect(scrollBarX.getBounds().width, scrollBarY.getBounds().height, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.03f));
- }
- }
-
- public void evalulateContentArea() {
- if (contentArea.getChildComponents().size() == 0) {
- contentAreaDim= new Rectangle(0,0,0,0);
- return;
- }
- int minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE, maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
- for (MPanel childComponent : contentArea.getChildComponents()) {
- Rectangle bounds = childComponent.getBounds();
- if (bounds.x < minX) minX = bounds.x;
- if (bounds.x + bounds.width > maxX) maxX = bounds.x + bounds.width;
- if (bounds.y < minY) minY = bounds.y;
- if (bounds.y + bounds.height > maxY) maxY = bounds.y + bounds.height;
- }
- contentAreaDim = new Rectangle(minX, minY, maxX - minX, maxY - minY);
- scrollBarX.setMin(contentAreaDim.x);
- scrollBarX.setMax(contentAreaDim.x + contentAreaDim.width-scrollBarX.getThumbSize());
- scrollBarY.setMin(contentAreaDim.y);
- scrollBarY.setMax(contentAreaDim.y + contentAreaDim.height-scrollBarY.getThumbSize());
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- boolean hideX = (axis & 2) == 0, hideY = (axis & 1) == 0;
- viewPort.setBounds(new Rectangle(0,0,bounds.width, bounds.height));
- evalulateContentArea();
- if (bounds.width >= contentAreaDim.width && hideScrollBarWhenNotNecessary) hideX = true;
- if (bounds.height >= contentAreaDim.height && hideScrollBarWhenNotNecessary) hideY = true;
-
- if (!(hideX || hideY)) {
- Dimension preferedX = scrollBarX.getPreferredSize();
- Dimension preferedY = scrollBarY.getPreferredSize();
- scrollBarY.setBounds(new Rectangle(bounds.width - preferedY.width, 0, preferedY.width, bounds.height - preferedX.height));
- scrollBarX.setBounds(new Rectangle(0, bounds.height - preferedX.height, bounds.width - preferedY.width, preferedX.height));
- } else if ((hideY && !hideX)) {
- Dimension preferedX = scrollBarX.getPreferredSize();
- scrollBarY.setBounds(new Rectangle(0,0,0,0));
- scrollBarX.setBounds(new Rectangle(0, bounds.height - preferedX.height, bounds.width, preferedX.height));
- } else if ((hideX && !hideY)) {
- Dimension preferedY = scrollBarY.getPreferredSize();
- scrollBarX.setBounds(new Rectangle(0,0,0,0));
- scrollBarY.setBounds(new Rectangle(bounds.width - preferedY.width, 0, preferedY.width, bounds.height));
- } else if (hideX && hideY){
- scrollBarY.setBounds(new Rectangle(0,0,0,0));
- scrollBarX.setBounds(new Rectangle(0,0,0,0));
- }
-
- viewPort.setBounds(new Rectangle(0,0,bounds.width-scrollBarY.getBounds().width, bounds.height - scrollBarX.getBounds().height));
-
- scrollBarX.setThumbSize(viewPort.getBounds().width);
- scrollBarY.setThumbSize(viewPort.getBounds().height);
- scrollBarX.setMax(contentAreaDim.x + contentAreaDim.width-scrollBarX.getThumbSize());
- scrollBarY.setMax(contentAreaDim.y + contentAreaDim.height-scrollBarY.getThumbSize());
- evalulateContentArea();
- }
-
-
- private void onScrollBarUpdate() {
- contentArea.setPosition(new Point(-scrollBarX.getCurrent(), -scrollBarY.getCurrent()));
- }
-
-
- @Override
- public void add(MPanel child) { contentArea.add(child); }
-
- @Override
- public void remove(MPanel panel) { contentArea.remove(panel); }
-
- @Override
- public void mouseScrolled(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int scrollAmount) {
- if (lastAbsClip.contains(absMouseX, absMouseY) && (axis == 1 || axis == 3)) {
- scrollBarY.addToCurrent(MathHelper.clamp_int(scrollAmount, -1, 1) * -30);
- }
- }
-}