Let overlapping tooltips stack vertically

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-01-11 16:57:43 +01:00
parent 1066aa23a5
commit f26cf7ac00

View File

@@ -27,6 +27,7 @@ package net.runelite.client.ui.overlay.tooltip;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider; import javax.inject.Provider;
@@ -38,6 +39,7 @@ import net.runelite.client.ui.overlay.components.TooltipComponent;
public class TooltipOverlay extends Overlay public class TooltipOverlay extends Overlay
{ {
private static final int PADDING = 2;
private final TooltipManager tooltipManager; private final TooltipManager tooltipManager;
private final Provider<Client> clientProvider; private final Provider<Client> clientProvider;
@@ -60,25 +62,37 @@ public class TooltipOverlay extends Overlay
return null; return null;
} }
final Rectangle lastLocation = new Rectangle();
for (Tooltip tooltip : tooltips) for (Tooltip tooltip : tooltips)
{ {
final TooltipComponent tooltipComponent = new TooltipComponent(); final TooltipComponent tooltipComponent = new TooltipComponent();
tooltipComponent.setText(tooltip.getText()); tooltipComponent.setText(tooltip.getText());
final Point position = new Point();
if (tooltip.isFollowMouse()) if (tooltip.isFollowMouse())
{ {
final Client client = clientProvider.get(); final Client client = clientProvider.get();
final net.runelite.api.Point mouseCanvasPosition = client != null final net.runelite.api.Point mouseCanvasPosition = client != null
? client.getMouseCanvasPosition() ? client.getMouseCanvasPosition()
: new net.runelite.api.Point(0, 0); : new net.runelite.api.Point(0, 0);
tooltipComponent.setPosition(new Point(mouseCanvasPosition.getX(), mouseCanvasPosition.getY()));
position.setLocation(mouseCanvasPosition.getX(), mouseCanvasPosition.getY());
} }
else else
{ {
tooltipComponent.setPosition(tooltip.getPosition()); position.setLocation(tooltip.getPosition());
} }
tooltipComponent.render(graphics, parent); if (lastLocation.contains(position))
{
position.translate(0, -lastLocation.height - PADDING);
}
tooltipComponent.setPosition(position);
lastLocation.setLocation(position);
lastLocation.setSize(tooltipComponent.render(graphics, parent));
} }
tooltipManager.clear(); tooltipManager.clear();