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:
@@ -53,6 +53,8 @@ import net.runelite.client.ui.overlay.OverlayPosition;
|
|||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||||
import net.runelite.client.ui.overlay.components.LineComponent;
|
import net.runelite.client.ui.overlay.components.LineComponent;
|
||||||
import net.runelite.client.ui.overlay.components.PanelComponent;
|
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
|
public class XpGlobesOverlay extends Overlay
|
||||||
{
|
{
|
||||||
@@ -66,8 +68,9 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
private final XpGlobesPlugin plugin;
|
private final XpGlobesPlugin plugin;
|
||||||
private final XpGlobesConfig config;
|
private final XpGlobesConfig config;
|
||||||
private final XpTrackerService xpTrackerService;
|
private final XpTrackerService xpTrackerService;
|
||||||
private final PanelComponent xpTooltip = new PanelComponent();
|
private final TooltipManager tooltipManager;
|
||||||
private final SkillIconManager iconManager;
|
private final SkillIconManager iconManager;
|
||||||
|
private final Tooltip xpTooltip = new Tooltip(new PanelComponent());
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private XpGlobesOverlay(
|
private XpGlobesOverlay(
|
||||||
@@ -75,7 +78,8 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
XpGlobesPlugin plugin,
|
XpGlobesPlugin plugin,
|
||||||
XpGlobesConfig config,
|
XpGlobesConfig config,
|
||||||
XpTrackerService xpTrackerService,
|
XpTrackerService xpTrackerService,
|
||||||
SkillIconManager iconManager)
|
SkillIconManager iconManager,
|
||||||
|
TooltipManager tooltipManager)
|
||||||
{
|
{
|
||||||
super(plugin);
|
super(plugin);
|
||||||
this.iconManager = iconManager;
|
this.iconManager = iconManager;
|
||||||
@@ -83,6 +87,8 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.xpTrackerService = xpTrackerService;
|
this.xpTrackerService = xpTrackerService;
|
||||||
|
this.tooltipManager = tooltipManager;
|
||||||
|
this.xpTooltip.getComponent().setPreferredSize(new Dimension(TOOLTIP_RECT_SIZE_X, 0));
|
||||||
setPosition(OverlayPosition.TOP_CENTER);
|
setPosition(OverlayPosition.TOP_CENTER);
|
||||||
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "XP Globes overlay"));
|
getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "XP Globes overlay"));
|
||||||
}
|
}
|
||||||
@@ -150,7 +156,7 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
|
|
||||||
if (config.enableTooltips())
|
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
|
// reset the timer on XpGlobe to prevent it from disappearing while hovered over it
|
||||||
mouseOverSkill.setTime(Instant.now());
|
mouseOverSkill.setTime(Instant.now());
|
||||||
|
|
||||||
@@ -244,9 +246,8 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
DecimalFormat decimalFormat = new DecimalFormat("###,###,###");
|
DecimalFormat decimalFormat = new DecimalFormat("###,###,###");
|
||||||
String skillCurrentXp = decimalFormat.format(mouseOverSkill.getCurrentXp());
|
String skillCurrentXp = decimalFormat.format(mouseOverSkill.getCurrentXp());
|
||||||
|
|
||||||
|
final PanelComponent xpTooltip = (PanelComponent) this.xpTooltip.getComponent();
|
||||||
xpTooltip.getChildren().clear();
|
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()
|
xpTooltip.getChildren().add(LineComponent.builder()
|
||||||
.left(skillName)
|
.left(skillName)
|
||||||
@@ -303,6 +304,6 @@ public class XpGlobesOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xpTooltip.render(graphics);
|
tooltipManager.add(this.xpTooltip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,10 +34,9 @@ import java.awt.Rectangle;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.runelite.api.IndexedSprite;
|
import net.runelite.api.IndexedSprite;
|
||||||
import net.runelite.client.ui.overlay.RenderableEntity;
|
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
public class TooltipComponent implements RenderableEntity
|
public class TooltipComponent implements LayoutableRenderableEntity
|
||||||
{
|
{
|
||||||
private static final Pattern BR = Pattern.compile("</br>");
|
private static final Pattern BR = Pattern.compile("</br>");
|
||||||
private static final int OFFSET = 4;
|
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)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,12 +24,22 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.ui.overlay.tooltip;
|
package net.runelite.client.ui.overlay.tooltip;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
|
||||||
public class Tooltip
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import net.runelite.client.ui.overlay.Overlay;
|
|||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
import net.runelite.client.ui.overlay.OverlayPriority;
|
||||||
|
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity;
|
||||||
import net.runelite.client.ui.overlay.components.TooltipComponent;
|
import net.runelite.client.ui.overlay.components.TooltipComponent;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -97,12 +98,22 @@ public class TooltipOverlay extends Overlay
|
|||||||
|
|
||||||
for (Tooltip tooltip : tooltips)
|
for (Tooltip tooltip : tooltips)
|
||||||
{
|
{
|
||||||
final TooltipComponent tooltipComponent = new TooltipComponent();
|
final LayoutableRenderableEntity entity;
|
||||||
tooltipComponent.setModIcons(client.getModIcons());
|
|
||||||
tooltipComponent.setText(tooltip.getText());
|
|
||||||
tooltipComponent.setPosition(new Point(tooltipX, tooltipY + newBounds.height));
|
|
||||||
|
|
||||||
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
|
// Create incremental tooltip newBounds
|
||||||
newBounds.height += dimension.height + PADDING;
|
newBounds.height += dimension.height + PADDING;
|
||||||
|
|||||||
Reference in New Issue
Block a user