ge plugin: move item composition and image calls off of awt thread
This commit is contained in:
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.grandexchange;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.CardLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.text.NumberFormat;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.swing.BorderFactory;
|
||||
@@ -43,7 +44,6 @@ import net.runelite.api.GrandExchangeOffer;
|
||||
import net.runelite.api.GrandExchangeOfferState;
|
||||
import static net.runelite.api.GrandExchangeOfferState.EMPTY;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
|
||||
@Slf4j
|
||||
public class GrandExchangeOfferSlot extends JPanel
|
||||
@@ -57,8 +57,6 @@ public class GrandExchangeOfferSlot extends JPanel
|
||||
private static final String INFO_CARD = "INFO_CARD";
|
||||
private static final String EMPTY_CARD = "EMPTY_CARD";
|
||||
|
||||
private final ItemManager itemManager;
|
||||
|
||||
private final CardLayout cardLayout = new CardLayout();
|
||||
private final JLabel itemIcon = new JLabel();
|
||||
private final TitledBorder itemName = BorderFactory.createTitledBorder("Nothing");
|
||||
@@ -69,9 +67,8 @@ public class GrandExchangeOfferSlot extends JPanel
|
||||
* This (sub)panel is used for each GE slot displayed
|
||||
* in the sidebar
|
||||
*/
|
||||
GrandExchangeOfferSlot(ItemManager itemManager)
|
||||
GrandExchangeOfferSlot()
|
||||
{
|
||||
this.itemManager = itemManager;
|
||||
buildPanel();
|
||||
}
|
||||
|
||||
@@ -120,12 +117,9 @@ public class GrandExchangeOfferSlot extends JPanel
|
||||
emptySlotCard.add(Box.createHorizontalGlue());
|
||||
|
||||
cardLayout.show(this, EMPTY_CARD);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void updateOffer(@Nullable GrandExchangeOffer newOffer)
|
||||
void updateOffer(ItemComposition offerItem, BufferedImage itemImage, @Nullable GrandExchangeOffer newOffer)
|
||||
{
|
||||
if (newOffer == null || newOffer.getState() == EMPTY)
|
||||
{
|
||||
@@ -136,12 +130,10 @@ public class GrandExchangeOfferSlot extends JPanel
|
||||
{
|
||||
cardLayout.show(this, INFO_CARD);
|
||||
|
||||
ItemComposition offerItem = itemManager.getItemComposition(newOffer.getItemId());
|
||||
|
||||
itemName.setTitle(offerItem.getName());
|
||||
|
||||
boolean shouldStack = offerItem.isStackable() || newOffer.getTotalQuantity() > 1;
|
||||
ImageIcon newItemIcon = new ImageIcon(itemManager.getImage(newOffer.getItemId(), newOffer.getTotalQuantity(), shouldStack));
|
||||
ImageIcon newItemIcon = new ImageIcon(itemImage);
|
||||
itemIcon.setIcon(newItemIcon);
|
||||
|
||||
offerState.setText(getNameForState(newOffer.getState()) + " at " + NUMBER_FORMATTER.format(newOffer.getPrice()) + (newOffer.getTotalQuantity() > 1 ? "gp ea" : "gp"));
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
package net.runelite.client.plugins.grandexchange;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import javax.inject.Inject;
|
||||
import javax.swing.BoxLayout;
|
||||
@@ -35,6 +36,7 @@ import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GrandExchangeOffer;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import net.runelite.client.ui.PluginPanel;
|
||||
|
||||
@@ -62,7 +64,7 @@ class GrandExchangePanel extends PluginPanel
|
||||
offerPanel.setLayout(new BoxLayout(offerPanel, BoxLayout.Y_AXIS));
|
||||
for (int i = 0; i < offerSlotPanels.length; ++i)
|
||||
{
|
||||
offerSlotPanels[i] = new GrandExchangeOfferSlot(itemManager);
|
||||
offerSlotPanels[i] = new GrandExchangeOfferSlot();
|
||||
offerPanel.add(offerSlotPanels[i]);
|
||||
}
|
||||
|
||||
@@ -73,9 +75,9 @@ class GrandExchangePanel extends PluginPanel
|
||||
tabbedPane.addTab("Search", searchPanel);
|
||||
}
|
||||
|
||||
void updateOffer(GrandExchangeOffer newOffer, int slot)
|
||||
void updateOffer(ItemComposition item, BufferedImage itemImage, GrandExchangeOffer newOffer, int slot)
|
||||
{
|
||||
offerSlotPanels[slot].updateOffer(newOffer);
|
||||
offerSlotPanels[slot].updateOffer(item, itemImage, newOffer);
|
||||
}
|
||||
|
||||
void showSearch()
|
||||
|
||||
@@ -36,6 +36,7 @@ import javax.imageio.ImageIO;
|
||||
import javax.inject.Inject;
|
||||
import javax.swing.SwingUtilities;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GrandExchangeOffer;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
@@ -44,6 +45,7 @@ import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.api.widgets.WidgetItem;
|
||||
import net.runelite.client.config.ConfigManager;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import net.runelite.client.input.MouseListener;
|
||||
import net.runelite.client.input.MouseManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
@@ -62,6 +64,9 @@ public class GrandExchangePlugin extends Plugin
|
||||
|
||||
private MouseListener itemClick;
|
||||
|
||||
@Inject
|
||||
private ItemManager itemManager;
|
||||
|
||||
@Inject
|
||||
private MouseManager mouseManager;
|
||||
|
||||
@@ -179,6 +184,10 @@ public class GrandExchangePlugin extends Plugin
|
||||
@Subscribe
|
||||
public void onGrandExchangeOfferChanged(GrandExchangeOfferChanged offerEvent)
|
||||
{
|
||||
SwingUtilities.invokeLater(() -> panel.updateOffer(offerEvent.getOffer(), offerEvent.getSlot()));
|
||||
GrandExchangeOffer offer = offerEvent.getOffer();
|
||||
ItemComposition offerItem = itemManager.getItemComposition(offer.getItemId());
|
||||
boolean shouldStack = offerItem.isStackable() || offer.getTotalQuantity() > 1;
|
||||
BufferedImage itemImage = itemManager.getImage(offer.getItemId(), offer.getTotalQuantity(), shouldStack);
|
||||
SwingUtilities.invokeLater(() -> panel.updateOffer(offerItem, itemImage, offerEvent.getOffer(), offerEvent.getSlot()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,8 @@ import java.awt.image.BufferedImage;
|
||||
import net.runelite.api.GrandExchangeOffer;
|
||||
import net.runelite.api.GrandExchangeOfferState;
|
||||
import net.runelite.api.ItemComposition;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -42,21 +39,16 @@ import org.mockito.runners.MockitoJUnitRunner;
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class GrandExchangeOfferSlotTest
|
||||
{
|
||||
@Mock
|
||||
private ItemManager itemManager;
|
||||
|
||||
@Mock
|
||||
private GrandExchangeOffer offer;
|
||||
|
||||
@Test
|
||||
public void testUpdateOffer()
|
||||
{
|
||||
when(itemManager.getItemComposition(anyInt())).thenReturn(mock(ItemComposition.class));
|
||||
when(itemManager.getImage(anyInt(), anyInt(), anyBoolean())).thenReturn(mock(BufferedImage.class));
|
||||
when(offer.getState()).thenReturn(GrandExchangeOfferState.CANCELLED);
|
||||
|
||||
GrandExchangeOfferSlot offerSlot = new GrandExchangeOfferSlot(itemManager);
|
||||
offerSlot.updateOffer(offer);
|
||||
GrandExchangeOfferSlot offerSlot = new GrandExchangeOfferSlot();
|
||||
offerSlot.updateOffer(mock(ItemComposition.class), mock(BufferedImage.class), offer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user