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.MouseWheelEvent;
|
||||
import javax.inject.Inject;
|
||||
import javax.swing.SwingUtilities;
|
||||
import net.runelite.client.input.KeyListener;
|
||||
import net.runelite.client.input.MouseListener;
|
||||
import net.runelite.client.input.MouseWheelListener;
|
||||
@@ -111,12 +112,37 @@ public class InstanceMapInputListener extends MouseListener implements KeyListen
|
||||
return event;
|
||||
}
|
||||
|
||||
if (SwingUtilities.isLeftMouseButton(event) && isWithinCloseButton(event.getPoint()))
|
||||
{
|
||||
plugin.closeMap();
|
||||
}
|
||||
|
||||
event.consume();
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MouseEvent mouseMoved(MouseEvent event)
|
||||
{
|
||||
if (overlay.isMapShown())
|
||||
{
|
||||
overlay.setCloseButtonHovered(isWithinCloseButton(event.getPoint()));
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
private boolean isNotWithinOverlay(final Point 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 javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.Tile;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
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.OverlayLayer;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
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
|
||||
class InstanceMapOverlay extends Overlay
|
||||
@@ -70,6 +75,7 @@ class InstanceMapOverlay extends Overlay
|
||||
private int viewedPlane = 0;
|
||||
|
||||
private final Client client;
|
||||
private final SpriteManager spriteManager;
|
||||
|
||||
/**
|
||||
* 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 final BackgroundComponent backgroundComponent = new BackgroundComponent();
|
||||
|
||||
@Setter
|
||||
private boolean isCloseButtonHovered;
|
||||
@Getter
|
||||
private Rectangle closeButtonBounds;
|
||||
private BufferedImage closeButtonImage;
|
||||
private BufferedImage closeButtonHoveredImage;
|
||||
|
||||
@Inject
|
||||
InstanceMapOverlay(Client client)
|
||||
InstanceMapOverlay(Client client, SpriteManager spriteManager)
|
||||
{
|
||||
this.client = client;
|
||||
this.spriteManager = spriteManager;
|
||||
setPriority(OverlayPriority.HIGH);
|
||||
setPosition(OverlayPosition.TOP_LEFT);
|
||||
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
||||
@@ -152,6 +166,8 @@ class InstanceMapOverlay extends Overlay
|
||||
|
||||
if (image == null)
|
||||
{
|
||||
BufferedImage closeButton = getCloseButtonImage();
|
||||
|
||||
SpritePixels map = client.drawInstanceMap(viewedPlane);
|
||||
image = minimapToBufferedImage(map);
|
||||
synchronized (this)
|
||||
@@ -161,6 +177,9 @@ class InstanceMapOverlay extends Overlay
|
||||
mapImage = image;
|
||||
}
|
||||
}
|
||||
|
||||
closeButtonBounds = new Rectangle(image.getWidth() - closeButton.getWidth() - 5, 6,
|
||||
closeButton.getWidth(), closeButton.getHeight());
|
||||
}
|
||||
|
||||
graphics.drawImage(image, 0, 0, null);
|
||||
@@ -172,6 +191,9 @@ class InstanceMapOverlay extends Overlay
|
||||
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());
|
||||
}
|
||||
|
||||
@@ -229,4 +251,22 @@ class InstanceMapOverlay extends Overlay
|
||||
img = img.getSubimage(48, 48, TILE_SIZE * 104, TILE_SIZE * 104);
|
||||
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