Merge pull request #10983 from deathbeam/add-panel-component-tooltips

Add panel component tooltips and migrate XpGlobesOverlay tooltips to new system
This commit is contained in:
Tomas Slusny
2020-03-14 18:43:51 +01:00
committed by GitHub
4 changed files with 59 additions and 21 deletions

View File

@@ -53,6 +53,8 @@ import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayUtil;
import net.runelite.client.ui.overlay.components.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.tooltip.Tooltip;
import net.runelite.client.ui.overlay.tooltip.TooltipManager;
public class XpGlobesOverlay extends Overlay
{
@@ -66,8 +68,9 @@ public class XpGlobesOverlay extends Overlay
private final XpGlobesPlugin plugin;
private final XpGlobesConfig config;
private final XpTrackerService xpTrackerService;
private final PanelComponent xpTooltip = new PanelComponent();
private final TooltipManager tooltipManager;
private final SkillIconManager iconManager;
private final Tooltip xpTooltip = new Tooltip(new PanelComponent());
@Inject
private XpGlobesOverlay(
@@ -75,7 +78,8 @@ public class XpGlobesOverlay extends Overlay
XpGlobesPlugin plugin,
XpGlobesConfig config,
XpTrackerService xpTrackerService,
SkillIconManager iconManager)
SkillIconManager iconManager,
TooltipManager tooltipManager)
{
super(plugin);
this.iconManager = iconManager;
@@ -83,6 +87,8 @@ public class XpGlobesOverlay extends Overlay
this.plugin = plugin;
this.config = config;
this.xpTrackerService = xpTrackerService;
this.tooltipManager = tooltipManager;
this.xpTooltip.getComponent().setPreferredSize(new Dimension(TOOLTIP_RECT_SIZE_X, 0));
setPosition(OverlayPosition.TOP_CENTER);
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "XP Globes overlay"));
}
@@ -150,7 +156,7 @@ public class XpGlobesOverlay extends Overlay
if (config.enableTooltips())
{
drawTooltip(graphics, skillToDraw, goalXp, backgroundCircle);
drawTooltip(skillToDraw, goalXp);
}
}
@@ -229,12 +235,8 @@ public class XpGlobesOverlay extends Overlay
);
}
private void drawTooltip(Graphics2D graphics, XpGlobe mouseOverSkill, int goalXp, Ellipse2D drawnGlobe)
private void drawTooltip(XpGlobe mouseOverSkill, int goalXp)
{
//draw tooltip under the globe of the mouse location
int x = (int) drawnGlobe.getX() - (TOOLTIP_RECT_SIZE_X / 2) + (config.xpOrbSize() / 2);
int y = (int) drawnGlobe.getY() + config.xpOrbSize() + 10;
// reset the timer on XpGlobe to prevent it from disappearing while hovered over it
mouseOverSkill.setTime(Instant.now());
@@ -244,9 +246,8 @@ public class XpGlobesOverlay extends Overlay
DecimalFormat decimalFormat = new DecimalFormat("###,###,###");
String skillCurrentXp = decimalFormat.format(mouseOverSkill.getCurrentXp());
final PanelComponent xpTooltip = (PanelComponent) this.xpTooltip.getComponent();
xpTooltip.getChildren().clear();
xpTooltip.setPreferredLocation(new java.awt.Point(x, y));
xpTooltip.setPreferredSize(new Dimension(TOOLTIP_RECT_SIZE_X, 0));
xpTooltip.getChildren().add(LineComponent.builder()
.left(skillName)
@@ -303,6 +304,6 @@ public class XpGlobesOverlay extends Overlay
}
}
xpTooltip.render(graphics);
tooltipManager.add(this.xpTooltip);
}
}

View File

@@ -34,10 +34,9 @@ import java.awt.Rectangle;
import java.util.regex.Pattern;
import lombok.Setter;
import net.runelite.api.IndexedSprite;
import net.runelite.client.ui.overlay.RenderableEntity;
@Setter
public class TooltipComponent implements RenderableEntity
public class TooltipComponent implements LayoutableRenderableEntity
{
private static final Pattern BR = Pattern.compile("</br>");
private static final int OFFSET = 4;
@@ -225,4 +224,21 @@ public class TooltipComponent implements RenderableEntity
}
}
}
@Override
public Rectangle getBounds()
{
return null;
}
@Override
public void setPreferredLocation(Point position)
{
this.position = position;
}
@Override
public void setPreferredSize(Dimension dimension)
{
}
}

View File

@@ -24,12 +24,22 @@
*/
package net.runelite.client.ui.overlay.tooltip;
import lombok.AllArgsConstructor;
import lombok.Data;
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity;
@Data
@AllArgsConstructor
public class Tooltip
{
private final String text;
private String text;
private LayoutableRenderableEntity component;
public Tooltip(final String text)
{
this.text = text;
}
public Tooltip(final LayoutableRenderableEntity component)
{
this.component = component;
}
}

View File

@@ -38,6 +38,7 @@ import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayPriority;
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity;
import net.runelite.client.ui.overlay.components.TooltipComponent;
@Singleton
@@ -97,12 +98,22 @@ public class TooltipOverlay extends Overlay
for (Tooltip tooltip : tooltips)
{
final TooltipComponent tooltipComponent = new TooltipComponent();
tooltipComponent.setModIcons(client.getModIcons());
tooltipComponent.setText(tooltip.getText());
tooltipComponent.setPosition(new Point(tooltipX, tooltipY + newBounds.height));
final LayoutableRenderableEntity entity;
final Dimension dimension = tooltipComponent.render(graphics);
if (tooltip.getComponent() != null)
{
entity = tooltip.getComponent();
}
else
{
final TooltipComponent tooltipComponent = new TooltipComponent();
tooltipComponent.setModIcons(client.getModIcons());
tooltipComponent.setText(tooltip.getText());
entity = tooltipComponent;
}
entity.setPreferredLocation(new Point(tooltipX, tooltipY + newBounds.height));
final Dimension dimension = entity.render(graphics);
// Create incremental tooltip newBounds
newBounds.height += dimension.height + PADDING;