From ba30018b1bd75bbae6a657340b57ca79e30070f8 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 8 Mar 2020 22:31:10 +0100 Subject: [PATCH 1/2] Add support for component tooltips Signed-off-by: Tomas Slusny --- .../overlay/components/TooltipComponent.java | 21 +++++++++++++++++-- .../client/ui/overlay/tooltip/Tooltip.java | 16 +++++++++++--- .../ui/overlay/tooltip/TooltipOverlay.java | 21 ++++++++++++++----- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java index 2e4b943063..fee7332497 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java @@ -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("
"); private static final int OFFSET = 4; @@ -225,4 +224,22 @@ 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) + { + + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/Tooltip.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/Tooltip.java index f0c3700850..50974ada31 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/Tooltip.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/Tooltip.java @@ -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; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java index 314adffee0..f808fa49f2 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/tooltip/TooltipOverlay.java @@ -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; From 623421350537b6c4f37e285ea4ed8cc29f78427d Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 8 Mar 2020 22:31:25 +0100 Subject: [PATCH 2/2] Migrate XpGlobesOverlay tooltips to component tooltips Signed-off-by: Tomas Slusny Co-Authored-By: Jordan --- .../plugins/xpglobes/XpGlobesOverlay.java | 23 ++++++++++--------- .../overlay/components/TooltipComponent.java | 1 - 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index 6b5b23b349..4b2654948c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -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); } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java index fee7332497..cd917c38a8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java @@ -240,6 +240,5 @@ public class TooltipComponent implements LayoutableRenderableEntity @Override public void setPreferredSize(Dimension dimension) { - } }