aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java
blob: c098e4e2a75b13207e0bd21a489a6d48f78529f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package gregtech.api.gui.widgets;

import net.minecraft.client.gui.FontRenderer;

import java.util.ArrayList;
import java.util.List;

public class GT_GuiTooltipManager {
    public interface GT_IToolTipRenderer {
        int getGuiLeft();
        int getGuiTop();
        int getXSize();
        FontRenderer getFontRenderer();
        void drawHoveringText(List<String> par1List, int par2, int par3, FontRenderer font);
    }

    private static final long DELAY = 5;
    private int mouseStopped;
    private int lastMouseX = -1;
    private int lastMouseY = -1;
    private final List<GT_GuiTooltip> tips = new ArrayList<>();

    public void addToolTip(GT_GuiTooltip tip) {
        if (tip != null && !tips.contains(tip)) tips.add(tip);
    }

    public boolean removeToolTip(GT_GuiTooltip tip) {
        return tips.remove(tip);
    }

    public final void onTick(GT_IToolTipRenderer render, int mouseX, int mouseY) {
        if ((Math.abs(mouseX-lastMouseX) < 2 ) && (Math.abs(mouseY-lastMouseY) < 2 ))
            mouseStopped = Math.min(mouseStopped+1, 50);
        else
            mouseStopped = 0;

        lastMouseX = mouseX;
        lastMouseY = mouseY;

        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;
            }
        }
    }

    private void drawTooltip(GT_GuiTooltip tip, int mouseX, int mouseY, GT_IToolTipRenderer render) {
        List<String> text = tip.getToolTipText();
        if (text == null)
            return;

        if (mouseX > render.getGuiLeft() + render.getXSize()/2) {
            int maxWidth = 0;
            for (String s : text) {
                int w = render.getFontRenderer().getStringWidth(s);
                if (w > maxWidth) {
                    maxWidth = w;
                }
            }
            mouseX -= (maxWidth + 18);
        }

        render.drawHoveringText(text, mouseX, mouseY, render.getFontRenderer());
    }

}