From e370aa76efa681643f4e40f0823f01d90eb348c1 Mon Sep 17 00:00:00 2001 From: psikoi Date: Fri, 1 Jun 2018 00:58:43 +0100 Subject: [PATCH 1/2] Add Icon Material Tab + Hover effects As material tabs started being in different ways than planned, the code around them started being a little inconsistent. With this change I hope to create a new constructor for Icon Tabs (skill calculator, farm timer) and also add hover effects to them. --- .../components/materialtabs/MaterialTab.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java b/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java index fd4b4d2c82..ff056785a7 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/materialtabs/MaterialTab.java @@ -24,12 +24,15 @@ */ package net.runelite.client.ui.components.materialtabs; +import com.google.common.base.Strings; import java.awt.Color; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; +import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import lombok.Getter; @@ -91,6 +94,57 @@ public class MaterialTab extends JLabel group.select(MaterialTab.this); } }); + + if (!Strings.isNullOrEmpty(string)) + { + addMouseListener(new MouseAdapter() + { + @Override + public void mouseEntered(MouseEvent e) + { + MaterialTab tab = (MaterialTab) e.getSource(); + tab.setForeground(Color.WHITE); + } + + @Override + public void mouseExited(MouseEvent e) + { + MaterialTab tab = (MaterialTab) e.getSource(); + if (!tab.isSelected()) + { + tab.setForeground(Color.GRAY); + } + } + }); + } + } + + public MaterialTab(ImageIcon icon, MaterialTabGroup group, JComponent content) + { + this("", group, content); + setIcon(icon); + setOpaque(true); + setVerticalAlignment(SwingConstants.CENTER); + setHorizontalAlignment(SwingConstants.CENTER); + setBackground(ColorScheme.DARKER_GRAY_COLOR); + + addMouseListener(new MouseAdapter() + { + @Override + public void mouseEntered(MouseEvent e) + { + MaterialTab tab = (MaterialTab) e.getSource(); + tab.setBackground(ColorScheme.DARKER_GRAY_HOVER_COLOR); + } + + @Override + public void mouseExited(MouseEvent e) + { + MaterialTab tab = (MaterialTab) e.getSource(); + tab.setBackground(ColorScheme.DARKER_GRAY_COLOR); + } + }); + } public void select() From 715ce78bc48fc05fddbce778abc582818cebf518 Mon Sep 17 00:00:00 2001 From: psikoi Date: Fri, 1 Jun 2018 01:10:43 +0100 Subject: [PATCH 2/2] Refactor plugin panels for new Icon Tabs Refactors the GE, SkillCalcs and Farming plugins to use the new updated tabs. --- .../farmingtracker/FarmingTrackerPanel.java | 28 +++---------------- .../grandexchange/GrandExchangePanel.java | 26 ----------------- .../skillcalculator/SkillCalculatorPanel.java | 11 ++------ 3 files changed, 6 insertions(+), 59 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPanel.java index 5f95e052c9..6033ade2ee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/farmingtracker/FarmingTrackerPanel.java @@ -31,8 +31,6 @@ import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.time.Instant; import java.time.LocalDateTime; @@ -45,7 +43,6 @@ import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -139,7 +136,7 @@ class FarmingTrackerPanel extends PluginPanel { groupLabel.setBorder(new EmptyBorder(15, 0, 0, 0)); } - + groupLabel.setFont(FontManager.getRunescapeSmallFont()); container.add(groupLabel, c); @@ -169,7 +166,9 @@ class FarmingTrackerPanel extends PluginPanel scroller.getVerticalScrollBar().setBorder(new EmptyBorder(0, 9, 0, 0)); scroller.setBackground(ColorScheme.DARK_GRAY_COLOR); - MaterialTab materialTab = new MaterialTab("", tabGroup, scroller); + //Use a placeholder icon until the async image gets loaded + MaterialTab materialTab = new MaterialTab(new ImageIcon(), tabGroup, scroller); + materialTab.setPreferredSize(new Dimension(30, 27)); materialTab.setName(tab.getName()); AsyncBufferedImage icon = itemManager.getImage(tab.getItemID()); @@ -177,30 +176,11 @@ class FarmingTrackerPanel extends PluginPanel { BufferedImage subIcon = icon.getSubimage(0, 0, 32, 32); materialTab.setIcon(new ImageIcon(subIcon.getScaledInstance(24, 24, Image.SCALE_SMOOTH))); - materialTab.setHorizontalAlignment(SwingConstants.CENTER); - materialTab.setVerticalAlignment(SwingConstants.CENTER); - materialTab.setOpaque(true); - materialTab.setBackground(ColorScheme.DARKER_GRAY_COLOR); - materialTab.setPreferredSize(new Dimension(30, 27)); }; icon.onChanged(resize); resize.run(); materialTab.setOnSelectEvent(() -> config.setPatch(tab)); - materialTab.addMouseListener(new MouseAdapter() - { - @Override - public void mouseEntered(MouseEvent e) - { - materialTab.setBackground(ColorScheme.DARKER_GRAY_HOVER_COLOR); - } - - @Override - public void mouseExited(MouseEvent e) - { - materialTab.setBackground(ColorScheme.DARKER_GRAY_COLOR); - } - }); tabGroup.addTab(materialTab); if (config.patch() == tab) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java index f8c6717be2..b8bf685117 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java @@ -27,9 +27,6 @@ package net.runelite.client.plugins.grandexchange; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import javax.swing.JPanel; @@ -75,29 +72,6 @@ class GrandExchangePanel extends PluginPanel MaterialTab offersTab = new MaterialTab("Offers", tabGroup, offersPanel); searchTab = new MaterialTab("Search", tabGroup, searchPanel); - MouseAdapter materialTabMouseAdapter = new MouseAdapter() - { - @Override - public void mouseEntered(MouseEvent e) - { - MaterialTab tab = (MaterialTab)e.getSource(); - tab.setForeground(Color.WHITE); - } - - @Override - public void mouseExited(MouseEvent e) - { - MaterialTab tab = (MaterialTab)e.getSource(); - if (!tab.isSelected()) - { - tab.setForeground(Color.GRAY); - } - } - }; - - searchTab.addMouseListener(materialTabMouseAdapter); - offersTab.addMouseListener(materialTabMouseAdapter); - tabGroup.setBorder(new EmptyBorder(5, 0, 0, 0)); tabGroup.addTab(offersTab); tabGroup.addTab(searchTab); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java index be48d85c39..bd90a2963d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculatorPanel.java @@ -36,7 +36,6 @@ import java.awt.event.MouseListener; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JScrollPane; -import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import net.runelite.api.Client; import net.runelite.client.game.SkillIconManager; @@ -118,15 +117,9 @@ class SkillCalculatorPanel extends PluginPanel { for (CalculatorType calculatorType : CalculatorType.values()) { - MaterialTab tab = new MaterialTab("", tabGroup, null); - tab.setOpaque(true); - tab.setVerticalAlignment(SwingConstants.CENTER); - tab.setHorizontalAlignment(SwingConstants.CENTER); - tab.setBackground(ColorScheme.DARKER_GRAY_COLOR); - tab.setIcon(new ImageIcon(iconManager.getSkillImage(calculatorType.getSkill(), true))); + ImageIcon icon = new ImageIcon(iconManager.getSkillImage(calculatorType.getSkill(), true)); + MaterialTab tab = new MaterialTab(icon, tabGroup, null); tab.setOnSelectEvent(() -> uiCalculator.openCalculator(calculatorType)); - tab.addMouseListener(tabHoverListener); - tabGroup.addTab(tab); } }