instancemap: add 'X' button on the interface to close map
This commit is contained in:
@@ -29,6 +29,7 @@ import java.awt.event.KeyEvent;
|
|||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
import net.runelite.client.input.KeyListener;
|
import net.runelite.client.input.KeyListener;
|
||||||
import net.runelite.client.input.MouseListener;
|
import net.runelite.client.input.MouseListener;
|
||||||
import net.runelite.client.input.MouseWheelListener;
|
import net.runelite.client.input.MouseWheelListener;
|
||||||
@@ -111,12 +112,37 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
|
|||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SwingUtilities.isLeftMouseButton(event) && isWithinCloseButton(event.getPoint()))
|
||||||
|
{
|
||||||
|
plugin.closeMap();
|
||||||
|
}
|
||||||
|
|
||||||
event.consume();
|
event.consume();
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MouseEvent mouseMoved(MouseEvent event)
|
||||||
|
{
|
||||||
|
if (overlay.isMapShown())
|
||||||
|
{
|
||||||
|
overlay.setCloseButtonHovered(isWithinCloseButton(event.getPoint()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isNotWithinOverlay(final Point point)
|
private boolean isNotWithinOverlay(final Point point)
|
||||||
{
|
{
|
||||||
return !overlay.getBounds().contains(point);
|
return !overlay.getBounds().contains(point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isWithinCloseButton(final Point point)
|
||||||
|
{
|
||||||
|
Point overlayPoint = new Point(point.x - (int) overlay.getBounds().getX(),
|
||||||
|
point.y - (int) overlay.getBounds().getY());
|
||||||
|
|
||||||
|
return overlay.getCloseButtonBounds() != null
|
||||||
|
&& overlay.getCloseButtonBounds().contains(overlayPoint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,17 +31,22 @@ import java.awt.Rectangle;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.SpritePixels;
|
import net.runelite.api.SpritePixels;
|
||||||
import net.runelite.api.Tile;
|
import net.runelite.api.Tile;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
import net.runelite.api.events.GameStateChanged;
|
||||||
|
import net.runelite.client.game.SpriteManager;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
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.BackgroundComponent;
|
import net.runelite.client.ui.overlay.components.BackgroundComponent;
|
||||||
|
import static net.runelite.api.SpriteID.WINDOW_CLOSE_BUTTON_RED_X;
|
||||||
|
import static net.runelite.api.SpriteID.WINDOW_CLOSE_BUTTON_RED_X_HOVERED;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class InstanceMapOverlay extends Overlay
|
class InstanceMapOverlay extends Overlay
|
||||||
@@ -70,6 +75,7 @@ class InstanceMapOverlay extends Overlay
|
|||||||
private int viewedPlane = 0;
|
private int viewedPlane = 0;
|
||||||
|
|
||||||
private final Client client;
|
private final Client client;
|
||||||
|
private final SpriteManager spriteManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saved image of the scene, no reason to draw the whole thing every
|
* Saved image of the scene, no reason to draw the whole thing every
|
||||||
@@ -79,10 +85,18 @@ class InstanceMapOverlay extends Overlay
|
|||||||
private volatile boolean showMap = false;
|
private volatile boolean showMap = false;
|
||||||
private final BackgroundComponent backgroundComponent = new BackgroundComponent();
|
private final BackgroundComponent backgroundComponent = new BackgroundComponent();
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private boolean isCloseButtonHovered;
|
||||||
|
@Getter
|
||||||
|
private Rectangle closeButtonBounds;
|
||||||
|
private BufferedImage closeButtonImage;
|
||||||
|
private BufferedImage closeButtonHoveredImage;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
InstanceMapOverlay(Client client)
|
InstanceMapOverlay(Client client, SpriteManager spriteManager)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
this.spriteManager = spriteManager;
|
||||||
setPriority(OverlayPriority.HIGH);
|
setPriority(OverlayPriority.HIGH);
|
||||||
setPosition(OverlayPosition.TOP_LEFT);
|
setPosition(OverlayPosition.TOP_LEFT);
|
||||||
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
||||||
@@ -152,6 +166,8 @@ class InstanceMapOverlay extends Overlay
|
|||||||
|
|
||||||
if (image == null)
|
if (image == null)
|
||||||
{
|
{
|
||||||
|
BufferedImage closeButton = getCloseButtonImage();
|
||||||
|
|
||||||
SpritePixels map = client.drawInstanceMap(viewedPlane);
|
SpritePixels map = client.drawInstanceMap(viewedPlane);
|
||||||
image = minimapToBufferedImage(map);
|
image = minimapToBufferedImage(map);
|
||||||
synchronized (this)
|
synchronized (this)
|
||||||
@@ -161,6 +177,9 @@ class InstanceMapOverlay extends Overlay
|
|||||||
mapImage = image;
|
mapImage = image;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closeButtonBounds = new Rectangle(image.getWidth() - closeButton.getWidth() - 5, 6,
|
||||||
|
closeButton.getWidth(), closeButton.getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
graphics.drawImage(image, 0, 0, null);
|
graphics.drawImage(image, 0, 0, null);
|
||||||
@@ -172,6 +191,9 @@ class InstanceMapOverlay extends Overlay
|
|||||||
drawPlayerDot(graphics, client.getLocalPlayer(), Color.white, Color.black);
|
drawPlayerDot(graphics, client.getLocalPlayer(), Color.white, Color.black);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
graphics.drawImage(isCloseButtonHovered ? getCloseButtonHoveredImage() : getCloseButtonImage(),
|
||||||
|
(int) closeButtonBounds.getX(), (int) closeButtonBounds.getY(), null);
|
||||||
|
|
||||||
return new Dimension(image.getWidth(), image.getHeight());
|
return new Dimension(image.getWidth(), image.getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,4 +251,22 @@ class InstanceMapOverlay extends Overlay
|
|||||||
img = img.getSubimage(48, 48, TILE_SIZE * 104, TILE_SIZE * 104);
|
img = img.getSubimage(48, 48, TILE_SIZE * 104, TILE_SIZE * 104);
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BufferedImage getCloseButtonImage()
|
||||||
|
{
|
||||||
|
if (closeButtonImage == null)
|
||||||
|
{
|
||||||
|
closeButtonImage = spriteManager.getSprite(WINDOW_CLOSE_BUTTON_RED_X, 0);
|
||||||
|
}
|
||||||
|
return closeButtonImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BufferedImage getCloseButtonHoveredImage()
|
||||||
|
{
|
||||||
|
if (closeButtonHoveredImage == null)
|
||||||
|
{
|
||||||
|
closeButtonHoveredImage = spriteManager.getSprite(WINDOW_CLOSE_BUTTON_RED_X_HOVERED, 0);
|
||||||
|
}
|
||||||
|
return closeButtonHoveredImage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user