From 0eb533a14a6288d573a809257a94bb5c5e44b735 Mon Sep 17 00:00:00 2001 From: Ruben Date: Mon, 21 May 2018 00:51:33 +0100 Subject: [PATCH] Add mouse hover changes to various ui elements This commit adds the following with the main aim of improving the overall ui experience: InfoPanel: changes the panels to act more like buttons, they highlight on hover and the cursor changes to a pointer (since they are hyperlinks). NewsFeedPanel: changes the cursor to a pointer on hover to indicate a hyperlink HighscorePanel: changes the buttons below the search bar to highlight on hover to help indicate a clickable element. FarmingPanel: same as above expect for the patch buttons GE Panel: same as above but for the offer and search button ConfigPanel: Changes the cog color on hover to help indicate clickable element. --- .../client/plugins/config/ConfigPanel.java | 20 +++++++- .../farmingtracker/FarmingTrackerPanel.java | 16 +++++++ .../client/plugins/feed/FeedPanel.java | 3 ++ .../grandexchange/GrandExchangeItemPanel.java | 14 +++++- .../grandexchange/GrandExchangePanel.java | 26 +++++++++++ .../client/plugins/hiscore/HiscorePanel.java | 12 +++++ .../client/plugins/info/InfoPanel.java | 46 +++++++++++++++---- .../net/runelite/client/util/SwingUtil.java | 8 ++++ 8 files changed, 135 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index 7f43e6af22..6bd408f108 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -37,6 +37,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Comparator; import java.util.Map; @@ -80,6 +81,7 @@ import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.ComboBoxListRenderer; import net.runelite.client.ui.components.IconTextField; +import net.runelite.client.util.SwingUtil; @Slf4j public class ConfigPanel extends PluginPanel @@ -88,6 +90,7 @@ public class ConfigPanel extends PluginPanel private static final int SPINNER_FIELD_WIDTH = 6; private static final ImageIcon CONFIG_ICON; + private static final ImageIcon CONFIG_ICON_HOVER; private static final ImageIcon ON_SWITCHER; private static final ImageIcon OFF_SWITCHER; private static final ImageIcon SEARCH; @@ -98,7 +101,9 @@ public class ConfigPanel extends PluginPanel { synchronized (ImageIO.class) { - CONFIG_ICON = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("config_edit_icon.png"))); + BufferedImage configIcon = ImageIO.read(ConfigPanel.class.getResourceAsStream("config_edit_icon.png")); + CONFIG_ICON = new ImageIcon(configIcon); + CONFIG_ICON_HOVER = new ImageIcon(SwingUtil.grayscaleOffset(configIcon, -100)); ON_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/on.png"))); OFF_SWITCHER = new ImageIcon(ImageIO.read(ConfigPanel.class.getResourceAsStream("switchers/off.png"))); SEARCH = new ImageIcon(ImageIO.read(IconTextField.class.getResourceAsStream("search.png"))); @@ -246,8 +251,21 @@ public class ConfigPanel extends PluginPanel @Override public void mousePressed(MouseEvent mouseEvent) { + editConfigButton.setIcon(CONFIG_ICON); openGroupConfigPanel(config, configDescriptor, configManager); } + + @Override + public void mouseEntered(MouseEvent e) + { + editConfigButton.setIcon(CONFIG_ICON_HOVER); + } + + @Override + public void mouseExited(MouseEvent e) + { + editConfigButton.setIcon(CONFIG_ICON); + } }); editConfigButton.setVisible(true); editConfigButton.setToolTipText("Edit plugin configuration"); 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 62a8c976fe..5f95e052c9 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,6 +31,8 @@ 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; @@ -185,6 +187,20 @@ class FarmingTrackerPanel extends PluginPanel 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/feed/FeedPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java index 3665112647..19a570ea6a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.feed; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; @@ -328,12 +329,14 @@ class FeedPanel extends PluginPanel public void mouseEntered(MouseEvent e) { avatarAndRight.setBackground(hoverColor); + avatarAndRight.setCursor(new Cursor(Cursor.HAND_CURSOR)); } @Override public void mouseExited(MouseEvent e) { avatarAndRight.setBackground(backgroundColor); + avatarAndRight.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java index 05eacddd3b..22375486cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java @@ -27,6 +27,8 @@ package net.runelite.client.plugins.grandexchange; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter; @@ -65,13 +67,23 @@ class GrandExchangeItemPanel extends JPanel @Override public void mouseEntered(MouseEvent e) { - setBackground(getBackground().brighter()); + setBackground(background.brighter()); + for (Component component : getComponents()) + { + component.setBackground(component.getBackground().brighter()); + } + setCursor(new Cursor(Cursor.HAND_CURSOR)); } @Override public void mouseExited(MouseEvent e) { setBackground(background); + for (Component component : getComponents()) + { + component.setBackground(background); + } + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @Override 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 b8bf685117..f8c6717be2 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,6 +27,9 @@ 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; @@ -72,6 +75,29 @@ 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/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index 9c3b93124d..e5ef5648bf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -251,6 +251,18 @@ public class HiscorePanel extends PluginPanel selectedEndPoint = endpoint; updateButtons(); } + + @Override + public void mouseEntered(MouseEvent e) + { + panel.setBackground(ColorScheme.DARKER_GRAY_HOVER_COLOR); + } + + @Override + public void mouseExited(MouseEvent e) + { + panel.setBackground(ColorScheme.DARKER_GRAY_COLOR); + } }); endPoints.add(panel); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index 359cd45280..bccb6b2dc7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -30,6 +30,7 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Cursor; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.MouseAdapter; @@ -180,14 +181,9 @@ public class InfoPanel extends PluginPanel container.setBackground(ColorScheme.DARKER_GRAY_COLOR); container.setLayout(new BorderLayout()); container.setBorder(new EmptyBorder(10, 10, 10, 10)); - container.addMouseListener(new MouseAdapter() - { - @Override - public void mousePressed(MouseEvent mouseEvent) - { - LinkBrowser.browse(url); - } - }); + + final Color hoverColor = ColorScheme.DARKER_GRAY_HOVER_COLOR; + final Color pressedColor = ColorScheme.DARKER_GRAY_COLOR.brighter(); JLabel iconLabel = new JLabel(icon); container.add(iconLabel, BorderLayout.WEST); @@ -197,6 +193,40 @@ public class InfoPanel extends PluginPanel textContainer.setLayout(new GridLayout(2, 1)); textContainer.setBorder(new EmptyBorder(5, 10, 5, 10)); + container.addMouseListener(new MouseAdapter() + { + @Override + public void mousePressed(MouseEvent mouseEvent) + { + LinkBrowser.browse(url); + container.setBackground(pressedColor); + textContainer.setBackground(pressedColor); + } + + @Override + public void mouseReleased(MouseEvent e) + { + container.setBackground(hoverColor); + textContainer.setBackground(hoverColor); + } + + @Override + public void mouseEntered(MouseEvent e) + { + container.setBackground(hoverColor); + textContainer.setBackground(hoverColor); + container.setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + + @Override + public void mouseExited(MouseEvent e) + { + container.setBackground(ColorScheme.DARKER_GRAY_COLOR); + textContainer.setBackground(ColorScheme.DARKER_GRAY_COLOR); + container.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + } + }); + JLabel topLine = new JLabel(topText); topLine.setForeground(Color.WHITE); topLine.setFont(FontManager.getRunescapeSmallFont()); diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index 9462c599fa..6a4e1a0d65 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -288,6 +288,14 @@ public class SwingUtil }); } + /** + * Re-size a BufferedImage to the given dimensions. + * + * @param image the BufferedImage. + * @param newWidth The width to set the BufferedImage to. + * @param newHeight The height to set the BufferedImage to. + * @return The BufferedImage with the specified dimensions + */ private static BufferedImage resizeImage(BufferedImage image, int newWidth, int newHeight) { final Image tmp = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);