diff options
Diffstat (limited to 'src/main/java/gregtech/api/gui/widgets')
4 files changed, 111 insertions, 20 deletions
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java index db7029d60f..2c1d8aa886 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java @@ -1,44 +1,100 @@ package gregtech.api.gui.widgets; +import codechicken.lib.gui.GuiDraw; import gregtech.api.interfaces.IGuiScreen; +import gregtech.api.util.GT_UtilityClient; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import java.awt.*; +import java.util.List; public class GT_GuiFakeItemButton implements IGuiScreen.IGuiElement { - private final GT_GuiIcon bgIcon; + private GT_GuiIcon bgIcon; private ItemStack item; private IGuiScreen gui; - private int x0, y0, xPosition, yPosition; - private int width, height; + private int xPosition, yPosition; + private List<String> itemTooltips; + private final GT_GuiTooltip tooltip = new GT_GuiTooltip(null) { + @Override + public List<String> getToolTipText() { + return itemTooltips; + } + + @Override + public boolean isDelayed() { + return false; + } + + @Override + public Rectangle getBounds() { + return GT_GuiFakeItemButton.this.getBounds(); + } + }; + private final Rectangle rectangle; + private boolean mimicSlot; public GT_GuiFakeItemButton(IGuiScreen gui, int x, int y, GT_GuiIcon bgIcon) { this.gui = gui; - this.x0 = x; - this.y0 = y; this.bgIcon = bgIcon; item = null; - width = 18; - height = 18; + rectangle = new Rectangle(x, y, 18, 18); gui.addElement(this); } public GT_GuiFakeItemButton setItem(ItemStack i) { item = i; + if (getMimicSlot()) + updateTooltip(); return this; } + private void updateTooltip() { + itemTooltips = item == null ? null : GT_UtilityClient.getTooltip(item, true); + } + public ItemStack getItem(){ return item; } + public GT_GuiFakeItemButton setMimicSlot(boolean mimicSlot) { + if (mimicSlot != this.mimicSlot) { + if (mimicSlot) { + updateTooltip(); + gui.addToolTip(tooltip); + } else { + gui.removeToolTip(tooltip); + } + this.mimicSlot = mimicSlot; + } + return this; + } + + public boolean getMimicSlot() { + return mimicSlot; + } + + public GT_GuiIcon getBgIcon() { + return bgIcon; + } + + public GT_GuiFakeItemButton setBgIcon(GT_GuiIcon bgIcon) { + this.bgIcon = bgIcon; + return this; + } + @Override public void onInit() { - xPosition = x0 + gui.getGuiLeft(); - yPosition = y0 + gui.getGuiTop(); + xPosition = rectangle.x + gui.getGuiLeft(); + yPosition = rectangle.y + gui.getGuiTop(); + } + + @Override + public void onRemoved() { + if (mimicSlot) + gui.removeToolTip(tooltip); } @Override @@ -55,10 +111,36 @@ public class GT_GuiFakeItemButton implements IGuiScreen.IGuiElement { if (item != null) gui.getItemRenderer().renderItemAndEffectIntoGUI(gui.getFontRenderer(), Minecraft.getMinecraft().getTextureManager(), item, xPosition, yPosition); + if (getMimicSlot()) + if (getBounds().contains(mouseX - gui.getGuiLeft(), mouseY - gui.getGuiTop())) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glColorMask(true, true, true, false); + GuiDraw.drawGradientRect(xPosition, yPosition, 16, 16, 0x80ffffff, 0x80ffffff); + GL11.glColorMask(true, true, true, true); + // no glEnable, state will be recovered by glPopAttrib + } + GL11.glPopAttrib(); } public Rectangle getBounds() { - return new Rectangle(x0, y0, width, height); + return rectangle; + } + + public void setX(int x) { + rectangle.x = x; + } + + public void setY(int y) { + rectangle.y = y; + } + + public void setWidth(int width) { + rectangle.width = width; + } + + public void setHeight(int height) { + rectangle.height = height; } } diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java index 41e851054d..0b9231b40f 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java @@ -24,6 +24,8 @@ public enum GT_GuiIcon { IMPORT (0, 32, 32*2), ALLOW_INPUT (0, 32*2, 32*2), BLOCK_INPUT (0, 32*3, 32*2), + GREEN_ARROW_UP (0, 32*4, 32*2), + GREEN_ARROW_DOWN (0, 32*5, 32*2), SLOT_DARKGRAY (1, 176,0,18,18), SLOT_GRAY (1, 176,18,18,18); diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java index d24437f018..6b9e70a71b 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java @@ -34,4 +34,12 @@ public class GT_GuiTooltip { public List<String> getToolTipText() { return text; } + + public Rectangle getBounds() { + return bounds; + } + + public boolean isDelayed() { + return true; + } } diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java index d0e6964abc..c098e4e2a7 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java @@ -21,7 +21,7 @@ public class GT_GuiTooltipManager { private final List<GT_GuiTooltip> tips = new ArrayList<>(); public void addToolTip(GT_GuiTooltip tip) { - if (!tips.contains(tip)) tips.add(tip); + if (tip != null && !tips.contains(tip)) tips.add(tip); } public boolean removeToolTip(GT_GuiTooltip tip) { @@ -37,15 +37,14 @@ public class GT_GuiTooltipManager { lastMouseX = mouseX; lastMouseY = mouseY; - if (mouseStopped > DELAY) - mouseX -= render.getGuiLeft(); - mouseY -= render.getGuiTop(); - for (GT_GuiTooltip tip : tips) { - if(tip.enabled && tip.bounds.contains(mouseX, mouseY)){ - tip.updateText(); - drawTooltip(tip, mouseX, mouseY, render); - break; - } + mouseX -= render.getGuiLeft(); + mouseY -= render.getGuiTop(); + for (GT_GuiTooltip tip : tips) { + if (tip.enabled && (!tip.isDelayed() || mouseStopped > DELAY) && tip.getBounds().contains(mouseX, mouseY)) { + tip.updateText(); + drawTooltip(tip, mouseX, mouseY, render); + break; + } } } |