screenshot plugin: Use Sprite ID for overlay image

This commit is contained in:
Jordan Atwood
2018-07-19 13:21:19 -07:00
parent 24bc03bb1d
commit c8ba452c84
3 changed files with 29 additions and 27 deletions

View File

@@ -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;
} }

View File

@@ -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