aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/gui/widgets')
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java102
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java2
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java8
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java19
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;
+ }
}
}