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.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.function.Consumer;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
import net.runelite.api.MainBufferProvider;
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.OverlayPriority;
@Slf4j
public class ScreenshotOverlay extends Overlay
{
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MMM. dd, yyyy");
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 DrawManager drawManager;
private final ScreenshotPlugin plugin;
private final Queue<Consumer<Image>> consumers = new ConcurrentLinkedQueue<>();
@Inject
public ScreenshotOverlay(Client client, DrawManager drawManager)
public ScreenshotOverlay(Client client, DrawManager drawManager, ScreenshotPlugin plugin)
{
setPosition(OverlayPosition.DYNAMIC);
setPriority(OverlayPriority.HIGH);
setLayer(OverlayLayer.ABOVE_WIDGETS);
this.client = client;
this.drawManager = drawManager;
this.plugin = plugin;
}
@Override
@@ -97,9 +79,9 @@ public class ScreenshotOverlay extends Overlay
final MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
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());
FontMetrics fontMetrics = graphics.getFontMetrics();
@@ -108,8 +90,8 @@ public class ScreenshotOverlay extends Overlay
final int dateWidth = fontMetrics.stringWidth(date);
final int dateHeight = fontMetrics.getHeight();
final int textX = REPORT_BUTTON_X_OFFSET + REPORT_BUTTON.getWidth() / 2 - dateWidth / 2;
final int textY = y + REPORT_BUTTON.getHeight() / 2 + dateHeight / 2;
final int textX = REPORT_BUTTON_X_OFFSET + plugin.getReportButton().getWidth() / 2 - dateWidth / 2;
final int textY = y + plugin.getReportButton().getHeight() / 2 + dateHeight / 2;
graphics.setColor(Color.BLACK);
graphics.drawString(date, textX + 1, textY + 1);
@@ -130,7 +112,7 @@ public class ScreenshotOverlay extends Overlay
public void queueForTimestamp(Consumer<Image> screenshotConsumer)
{
if (REPORT_BUTTON == null)
if (plugin.getReportButton() == null)
{
return;
}

View File

@@ -52,13 +52,17 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.Point;
import net.runelite.api.SpriteID;
import net.runelite.api.WorldType;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
@@ -74,6 +78,7 @@ import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.Notifier;
import static net.runelite.client.RuneLite.SCREENSHOT_DIR;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.game.SpriteManager;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@@ -170,6 +175,12 @@ public class ScreenshotPlugin extends Plugin
@Inject
private KeyManager keyManager;
@Inject
private SpriteManager spriteManager;
@Getter(AccessLevel.PACKAGE)
private BufferedImage reportButton;
private NavigationButton titleBarButton;
private final HotkeyListener hotkeyListener = new HotkeyListener(() -> config.hotkey())
@@ -218,7 +229,6 @@ public class ScreenshotPlugin extends Plugin
catch (IOException ex)
{
log.warn("Error opening screenshot dir", ex);
}
})
.build())
@@ -240,6 +250,16 @@ public class ScreenshotPlugin extends Plugin
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
public void onGameTick(GameTick event)
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB