diff options
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/gui')
8 files changed, 159 insertions, 46 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java index d7f3223f..d155b9d4 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java @@ -51,7 +51,7 @@ public class MPanel { @Setter protected MPanel parent; - private boolean debug = false; + private boolean debug; public void setBackgroundColor(Color c) { if (c == null) return; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java index 6f147472..1e9bcd0a 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java @@ -45,6 +45,7 @@ public class MButton extends MPanel { private int clicked = RenderUtils.blendAlpha(0xFF141414, 0.16f); private int border = 0x0; private int disabled =0xFF141414; + private int roundness = 0; private boolean enabled = true; @@ -55,19 +56,29 @@ public class MButton extends MPanel { Dimension bounds = getSize(); int bg = background; - if (getTooltipsOpen() > 0) { - } else if (!enabled) { + if (!enabled) { bg = disabled; + } else if (getTooltipsOpen() > 0) { } else if (isclicked) { bg = clicked; } else if (new Rectangle(new Point(0,0),bounds).contains(relMousex0, relMousey0)) { bg = hover; } - if (((border >> 24) & 0xFF) == 0) - Gui.drawRect(0,0,getBounds().width, getBounds().height, bg); - else { - Gui.drawRect(0, 0, getBounds().width, getBounds().height, border); - Gui.drawRect(1, 1, getBounds().width-1, getBounds().height-1, bg); + if (roundness == 0) { + if (((border >> 24) & 0xFF) == 0) + Gui.drawRect(0, 0, getBounds().width, getBounds().height, bg); + else { + Gui.drawRect(0, 0, getBounds().width, getBounds().height, border); + Gui.drawRect(1, 1, getBounds().width - 1, getBounds().height - 1, bg); + } + } else { + if (((border >> 24) & 0xFF) == 0) + RenderUtils.drawRoundedRectangle(0, 0, getBounds().width, getBounds().height, roundness, Math.PI/8, bg); + else { + RenderUtils.drawRoundedRectangle(0, 0, getBounds().width, getBounds().height, roundness, Math.PI/8, border); + RenderUtils.drawRoundedRectangle(1, 1, getBounds().width-2, getBounds().height-2, roundness, Math.PI/8, bg); + } + GlStateManager.enableTexture2D(); } FontRenderer renderer = Minecraft.getMinecraft().fontRendererObj; int width = renderer.getStringWidth(getText()); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java index 8823087e..cb755963 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java @@ -37,7 +37,8 @@ public class MList extends MPanel { realignChildren(); } - private final int gapLineColor = 0xFFFFFFFF; + @Getter @Setter + private int gapLineColor = 0xFFFFFFFF; public void realignChildren() { int y = 0; @@ -73,7 +74,8 @@ public class MList extends MPanel { for (int i = 1; i < getChildComponents().size(); i++) { MPanel panel = getChildComponents().get(i); Rectangle bound = panel.getBounds(); - Gui.drawRect(0, bound.y - gap, getBounds().width, bound.y, gapLineColor); + int top = bound.y - (int)Math.ceil(gap/2.0); + Gui.drawRect(0, top, getBounds().width, top + 1, gapLineColor); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModal.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModal.java index 71a13c93..be2c64d6 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModal.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModal.java @@ -30,6 +30,7 @@ import net.minecraft.client.renderer.GlStateManager; import java.awt.*; public class MModal extends MTooltip { + @Getter private MPanel modalContent = new MPanel(); @Getter @Setter @@ -50,8 +51,8 @@ public class MModal extends MTooltip { @Override - public void setBounds(Rectangle bounds) { - super.setBounds(bounds); + public void onBoundsUpdate() { + super.onBoundsUpdate(); Dimension effDim = getEffectiveDimension(); modalContent.setBounds(new Rectangle((effDim.width - modalSize.width)/2, (effDim.height - modalSize.height)/2 + 16, modalSize.width, modalSize.height-16)); @@ -64,15 +65,15 @@ public class MModal extends MTooltip { int x = (effDim.width-modalSize.width)/2; int y = (effDim.height - modalSize.height)/2; GlStateManager.translate(x,y, 0); - RenderUtils.drawRoundedRectangle(0,0,modalSize.width, modalSize.height, 10, Math.PI/8, RenderUtils.blendAlpha(0x141414, 0.20f)); + RenderUtils.drawRoundedRectangle(0,0,modalSize.width, modalSize.height, 3, Math.PI/8, RenderUtils.blendAlpha(0x141414, 0.20f)); Gui.drawRect(0,15, modalSize.width, 16, 0xFF02EE67); Gui.drawRect(0,16,modalSize.width, 26, RenderUtils.blendAlpha(0x141414, 0.1f)); - RenderUtils.drawRoundedRectangle(0,16,modalSize.width, modalSize.height-16, 10, Math.PI/8, RenderUtils.blendAlpha(0x141414, 0.1f)); + RenderUtils.drawRoundedRectangle(0,16,modalSize.width, modalSize.height-16, 3, Math.PI/8, RenderUtils.blendAlpha(0x141414, 0.1f)); GlStateManager.enableTexture2D(); FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - fr.drawString(title, 10,(16-fr.FONT_HEIGHT)/2, -1); + fr.drawString(title, 5,(16-fr.FONT_HEIGHT)/2, -1); } @Override @@ -80,6 +81,10 @@ public class MModal extends MTooltip { modalContent.add(child); } + protected void addSuper(MPanel child) { + super.add(child); + } + @Override public void remove(MPanel panel) { modalContent.remove(panel); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalConfirmation.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalConfirmation.java index 238392ed..92f3b258 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalConfirmation.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalConfirmation.java @@ -67,7 +67,6 @@ public class MModalConfirmation extends MModal { @Override public void resize(int parentWidth, int parentHeight) { setBounds(new Rectangle(0,0,parentWidth, parentHeight)); - System.out.println("Resized to "+parentWidth+"-"+parentHeight); } @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalMessage.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalMessage.java new file mode 100644 index 00000000..28d23d48 --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalMessage.java @@ -0,0 +1,77 @@ +/* + * 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 net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.GlStateManager; +import org.lwjgl.opengl.GL11; + +import java.awt.*; + +public class MModalMessage extends MModal { + private String content; + private Runnable callBackOk; + @Getter + private MButton yes; + public MModalMessage(String title, String content, Runnable callBackOk) { + super(); + setTitle(title); + this.content = content; + this.callBackOk = callBackOk; + this.yes = new MButton(); + yes.setText("Ok"); + yes.setOnActionPerformed(() -> { + close(); + if (callBackOk != null) callBackOk.run(); + }); + yes.setBackground(RenderUtils.blendAlpha(0x141414, 0.15f)); + yes.setHover(RenderUtils.blendAlpha(0x141414, 0.17f)); + + add(new MessageContent()); + } + + public class MessageContent extends MPanel { + public MessageContent() { + add(yes); + } + + @Override + public void resize(int parentWidth, int parentHeight) { + setBounds(new Rectangle(0,0,parentWidth, parentHeight)); + } + + @Override + public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { + GlStateManager.translate(5,5,0); + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + GL11.glDisable(GL11.GL_SCISSOR_TEST); + fr.drawSplitString(content, 0,0, MModalMessage.MessageContent.this.bounds.width-10, -1); + } + + @Override + public void setBounds(Rectangle bounds) { + super.setBounds(bounds); + yes.setBounds(new Rectangle(10,bounds.height-25,(bounds.width-20), 15)); + } + } +} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java index 82e91dab..dbc30e7e 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java @@ -43,34 +43,32 @@ public class MScrollBar extends MPanel { private int width = 10; public void setMax(int max) { + if (max < min) max = min; this.max = max; - current = MathHelper.clamp_int(current, min, max - thumbSize); - if (max - min < thumbSize) current = min; + current = MathHelper.clamp_int(current, min, max); if (onUpdate != null) onUpdate.run(); } public void setMin(int min) { + if (max < min) max = min; this.min = min; - current = MathHelper.clamp_int(current, min, max - thumbSize); - if (max - min < thumbSize) current = min; + current = MathHelper.clamp_int(current, min, max); if (onUpdate != null) onUpdate.run(); } public void setThumbSize(int thumbSize) { this.thumbSize = thumbSize; - current = MathHelper.clamp_int(current, min, max - thumbSize); - if (max - min < thumbSize) current = min; + current = MathHelper.clamp_int(current, min, max); if (onUpdate != null) onUpdate.run(); } public void addToCurrent(int dv) { int current2 = current + dv; - current = MathHelper.clamp_int(current2, min, max - thumbSize); - if (max - min < thumbSize) current = min; + current = MathHelper.clamp_int(current2, min, max); if (onUpdate != null) onUpdate.run(); } @@ -83,16 +81,16 @@ public class MScrollBar extends MPanel { @Getter @Setter private int background = RenderUtils.blendAlpha(0xFF141414, 0.04f), - thumb = RenderUtils.blendAlpha(0xFF141414, 0.08f), - thumbHover = RenderUtils.blendAlpha(0xFF141414, 0.09f), - thumbClick = RenderUtils.blendAlpha(0xFF141414, 0.14f); + thumb = RenderUtils.blendAlpha(0xFF141414, 0.14f), + thumbHover = RenderUtils.blendAlpha(0xFF141414, 0.15f), + thumbClick = RenderUtils.blendAlpha(0xFF141414, 0.20f); private Runnable onUpdate; public MScrollBar(int min, int max, int thumbSize, int current, Axis axis, Runnable onUpdate) { + if (max < min) max = min; this.min = min; this.min = max; this.thumbSize = thumbSize; this.current = current; this.axis = axis; - this.current = MathHelper.clamp_int(current, min, max - thumbSize); - if (max - min < thumbSize) this.current = min; + this.current = MathHelper.clamp_int(current, min, max); this.onUpdate = onUpdate; } @@ -106,13 +104,22 @@ public class MScrollBar extends MPanel { @Override public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) { // RENDER SUPER NICE SCROLL BAR + int minimalThumbLen = 20; + Gui.drawRect(0,0,getBounds().width, getBounds().height, background); - double startPerc, endPerc; + int length = axis == Axis.X ? bounds.width :bounds.height; + int totalUnscaledLength = max-min + thumbSize; + double subPoint = ((double)max-min) * length / totalUnscaledLength; + if (length - subPoint < minimalThumbLen) { + subPoint = length - minimalThumbLen; + } + double thumbSize = length - subPoint; + + double startPt; if (max - min == 0) { - startPerc =0; endPerc = 1; + startPt =0; } else { - startPerc = (current - min)/((double)max - min); - endPerc = (current+thumbSize - min)/((double)max - min); + startPt = subPoint * (current - min)/((double)max - min); } int color = thumbHover; @@ -120,16 +127,14 @@ public class MScrollBar extends MPanel { if (grabbed) color = thumbClick; if (axis == Axis.X) { - int startX = (int) (startPerc * getBounds().width); - int endX = (int) (endPerc * getBounds().width); - endX = Math.max(endX, startX + 20); + int startX = (int) startPt; + int endX = (int) (startPt + thumbSize); Gui.drawRect(startX,0,endX,getBounds().height, color); lastThumbRect.x = startX; lastThumbRect.y = 0; lastThumbRect.width = endX - startX; lastThumbRect.height = getBounds().height; } else if (axis == Axis.Y) { - int startY = (int) (startPerc * getBounds().height); - int endY = (int) (endPerc * getBounds().height); - endY = Math.max(endY, startY + 20); + int startY = (int) startPt; + int endY = (int) (startPt + thumbSize); Gui.drawRect(0,startY,getBounds().width,endY, color); lastThumbRect.x = 0; lastThumbRect.y = startY; lastThumbRect.width = getBounds().width; lastThumbRect.height = endY - startY; @@ -153,21 +158,33 @@ public class MScrollBar extends MPanel { @Override public void mouseClickMove(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int clickedMouseButton, long timeSinceLastClick) { if (!grabbed) return; + + int minimalThumbLen = 20; + + Gui.drawRect(0,0,getBounds().width, getBounds().height, background); + int length = axis == Axis.X ? bounds.width :bounds.height; + int totalUnscaledLength = max-min + thumbSize; + double subPoint = ((double)max-min) * length / totalUnscaledLength; + if (length - subPoint < minimalThumbLen) { + subPoint = length - minimalThumbLen; + } + double thumbSize = length - subPoint; + + + int dx = absMouseX - lastX, dy = absMouseY - lastY; lastX = absMouseX; lastY = absMouseY; int prevVal = current; - if (axis == Axis.Y) { - actualValue += dy * (max - min) / getBounds().height; + actualValue += dy * (max - min) / subPoint; } else if (axis == Axis.X) { - actualValue += dx * (max - min) / getBounds().width; + actualValue += dx * (max - min) / subPoint; } - current = MathHelper.clamp_int(actualValue, min, max - thumbSize); - if (max - min < thumbSize) current = min; + current = MathHelper.clamp_int(actualValue, min, max); if (onUpdate != null && prevVal != current) onUpdate.run(); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java index d09b7c5a..d5f27227 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java @@ -125,9 +125,9 @@ public class MScrollablePanel extends MPanel { } contentAreaDim = new Rectangle(minX, minY, maxX - minX, maxY - minY); scrollBarX.setMin(contentAreaDim.x); - scrollBarX.setMax(contentAreaDim.x + contentAreaDim.width); + scrollBarX.setMax(contentAreaDim.x + contentAreaDim.width-scrollBarX.getThumbSize()); scrollBarY.setMin(contentAreaDim.y); - scrollBarY.setMax(contentAreaDim.y + contentAreaDim.height); + scrollBarY.setMax(contentAreaDim.y + contentAreaDim.height-scrollBarY.getThumbSize()); } @Override @@ -161,6 +161,8 @@ public class MScrollablePanel extends MPanel { 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(); } |