screenshot plugin: Use Sprite ID for overlay image
This commit is contained in:
@@ -31,16 +31,13 @@ import java.awt.FontMetrics;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.MainBufferProvider;
|
import net.runelite.api.MainBufferProvider;
|
||||||
import net.runelite.client.ui.DrawManager;
|
import net.runelite.client.ui.DrawManager;
|
||||||
@@ -50,41 +47,26 @@ 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;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class ScreenshotOverlay extends Overlay
|
public class ScreenshotOverlay extends Overlay
|
||||||
{
|
{
|
||||||
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMM. dd, yyyy");
|
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMM. dd, yyyy");
|
||||||
private static final int REPORT_BUTTON_X_OFFSET = 404;
|
private static final int REPORT_BUTTON_X_OFFSET = 404;
|
||||||
private static BufferedImage REPORT_BUTTON;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
synchronized (ImageIO.class)
|
|
||||||
{
|
|
||||||
REPORT_BUTTON = ImageIO.read(ScreenshotPlugin.class.getResourceAsStream("report_button.png"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
log.warn("Report button image failed to load", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Client client;
|
private final Client client;
|
||||||
private final DrawManager drawManager;
|
private final DrawManager drawManager;
|
||||||
|
private final ScreenshotPlugin plugin;
|
||||||
|
|
||||||
private final Queue<Consumer<Image>> consumers = new ConcurrentLinkedQueue<>();
|
private final Queue<Consumer<Image>> consumers = new ConcurrentLinkedQueue<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ScreenshotOverlay(Client client, DrawManager drawManager)
|
public ScreenshotOverlay(Client client, DrawManager drawManager, ScreenshotPlugin plugin)
|
||||||
{
|
{
|
||||||
setPosition(OverlayPosition.DYNAMIC);
|
setPosition(OverlayPosition.DYNAMIC);
|
||||||
setPriority(OverlayPriority.HIGH);
|
setPriority(OverlayPriority.HIGH);
|
||||||
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.drawManager = drawManager;
|
this.drawManager = drawManager;
|
||||||
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -97,9 +79,9 @@ public class ScreenshotOverlay extends Overlay
|
|||||||
|
|
||||||
final MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
final MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
||||||
final int imageHeight = ((BufferedImage) bufferProvider.getImage()).getHeight();
|
final int imageHeight = ((BufferedImage) bufferProvider.getImage()).getHeight();
|
||||||
final int y = imageHeight - REPORT_BUTTON.getHeight() - 1;
|
final int y = imageHeight - plugin.getReportButton().getHeight() - 1;
|
||||||
|
|
||||||
graphics.drawImage(REPORT_BUTTON, REPORT_BUTTON_X_OFFSET, y, null);
|
graphics.drawImage(plugin.getReportButton(), REPORT_BUTTON_X_OFFSET, y, null);
|
||||||
|
|
||||||
graphics.setFont(FontManager.getRunescapeSmallFont());
|
graphics.setFont(FontManager.getRunescapeSmallFont());
|
||||||
FontMetrics fontMetrics = graphics.getFontMetrics();
|
FontMetrics fontMetrics = graphics.getFontMetrics();
|
||||||
@@ -108,8 +90,8 @@ public class ScreenshotOverlay extends Overlay
|
|||||||
final int dateWidth = fontMetrics.stringWidth(date);
|
final int dateWidth = fontMetrics.stringWidth(date);
|
||||||
final int dateHeight = fontMetrics.getHeight();
|
final int dateHeight = fontMetrics.getHeight();
|
||||||
|
|
||||||
final int textX = REPORT_BUTTON_X_OFFSET + REPORT_BUTTON.getWidth() / 2 - dateWidth / 2;
|
final int textX = REPORT_BUTTON_X_OFFSET + plugin.getReportButton().getWidth() / 2 - dateWidth / 2;
|
||||||
final int textY = y + REPORT_BUTTON.getHeight() / 2 + dateHeight / 2;
|
final int textY = y + plugin.getReportButton().getHeight() / 2 + dateHeight / 2;
|
||||||
|
|
||||||
graphics.setColor(Color.BLACK);
|
graphics.setColor(Color.BLACK);
|
||||||
graphics.drawString(date, textX + 1, textY + 1);
|
graphics.drawString(date, textX + 1, textY + 1);
|
||||||
@@ -130,7 +112,7 @@ public class ScreenshotOverlay extends Overlay
|
|||||||
|
|
||||||
public void queueForTimestamp(Consumer<Image> screenshotConsumer)
|
public void queueForTimestamp(Consumer<Image> screenshotConsumer)
|
||||||
{
|
{
|
||||||
if (REPORT_BUTTON == null)
|
if (plugin.getReportButton() == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,13 +52,17 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.GameState;
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.WorldType;
|
import net.runelite.api.WorldType;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
@@ -74,6 +78,7 @@ import net.runelite.api.widgets.WidgetInfo;
|
|||||||
import net.runelite.client.Notifier;
|
import net.runelite.client.Notifier;
|
||||||
import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
|
import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
|
import net.runelite.client.game.SpriteManager;
|
||||||
import net.runelite.client.input.KeyManager;
|
import net.runelite.client.input.KeyManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
@@ -170,6 +175,12 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private KeyManager keyManager;
|
private KeyManager keyManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private SpriteManager spriteManager;
|
||||||
|
|
||||||
|
@Getter(AccessLevel.PACKAGE)
|
||||||
|
private BufferedImage reportButton;
|
||||||
|
|
||||||
private NavigationButton titleBarButton;
|
private NavigationButton titleBarButton;
|
||||||
|
|
||||||
private final HotkeyListener hotkeyListener = new HotkeyListener(() -> config.hotkey())
|
private final HotkeyListener hotkeyListener = new HotkeyListener(() -> config.hotkey())
|
||||||
@@ -218,7 +229,6 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
log.warn("Error opening screenshot dir", ex);
|
log.warn("Error opening screenshot dir", ex);
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build())
|
.build())
|
||||||
@@ -240,6 +250,16 @@ public class ScreenshotPlugin extends Plugin
|
|||||||
keyManager.unregisterKeyListener(hotkeyListener);
|
keyManager.unregisterKeyListener(hotkeyListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onGameStateChanged(GameStateChanged event)
|
||||||
|
{
|
||||||
|
if (event.getGameState() == GameState.LOGGED_IN
|
||||||
|
&& reportButton == null)
|
||||||
|
{
|
||||||
|
reportButton = spriteManager.getSprite(SpriteID.CHATBOX_REPORT_BUTTON, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGameTick(GameTick event)
|
public void onGameTick(GameTick event)
|
||||||
{
|
{
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 KiB |
Reference in New Issue
Block a user