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