Move title toolbar buttons to sidebar in native

When native window decorations are enabled (e.g when custom window
chrome is disabled), to reduce code complexity, but to maintain current
usability (e.g prevent adding new UI elements in order to position the
icons somewhere) move the title toolbar icons to sidebar.

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-03-27 12:37:11 +02:00
parent c041c3eaf2
commit 9a47c4db6d
5 changed files with 29 additions and 92 deletions

View File

@@ -33,10 +33,8 @@ import javax.annotation.Nullable;
import javax.inject.Singleton;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client;
@@ -44,30 +42,20 @@ import net.runelite.api.events.SessionClose;
import net.runelite.api.events.SessionOpen;
import net.runelite.client.RuneLiteProperties;
import net.runelite.client.account.SessionManager;
import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.events.ClientUILoaded;
import net.runelite.client.events.TitleToolbarButtonAdded;
import net.runelite.client.events.TitleToolbarButtonRemoved;
import net.runelite.client.ui.ClientTitleToolbar;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.PluginPanel;
import net.runelite.client.util.RunnableExceptionLogger;
import net.runelite.client.util.SwingUtil;
@Slf4j
@Singleton
public class InfoPanel extends PluginPanel
{
private static final int TITLEBAR_SIZE = 23;
private static final String RUNELITE_LOGIN = "https://runelite_login/";
@Inject
@Nullable
private Client client;
@Inject
private RuneLiteConfig runeliteConfig;
@Inject
private RuneLiteProperties runeLiteProperties;
@@ -81,7 +69,6 @@ public class InfoPanel extends PluginPanel
private ScheduledExecutorService executor;
private final GroupLayout layout = new GroupLayout(this);
private final ClientTitleToolbar titleBar = new ClientTitleToolbar();
private final JLabel usernameHeader = new JLabel();
private final JRichTextPane username = new JRichTextPane();
@@ -90,7 +77,6 @@ public class InfoPanel extends PluginPanel
setLayout(layout);
final Font smallFont = FontManager.getRunescapeSmallFont();
updateTitleBar();
final JLabel runeliteVersionHeader = new JLabel("RuneLite version");
runeliteVersionHeader.setFont(smallFont);
@@ -132,8 +118,6 @@ public class InfoPanel extends PluginPanel
setBorder(BorderFactory.createEmptyBorder(2, 6, 6, 6));
layout.setVerticalGroup(layout.createSequentialGroup()
.addComponent(titleBar)
.addGap(3)
.addGroup(layout.createParallelGroup()
.addComponent(runeliteVersionHeader)
.addComponent(runescapeVersionHeader)
@@ -150,9 +134,6 @@ public class InfoPanel extends PluginPanel
);
layout.setHorizontalGroup(layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
.addComponent(titleBar))
.addGroup(layout.createSequentialGroup()
.addComponent(runeliteVersionHeader)
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
@@ -189,18 +170,6 @@ public class InfoPanel extends PluginPanel
}
}
private void updateTitleBar()
{
titleBar.setVisible(!runeliteConfig.enableCustomChrome());
}
@Subscribe
public void onClientUILoaded(ClientUILoaded e)
{
// Add the title toolbar to the infopanel if the custom chrome is disabled
updateTitleBar();
}
@Subscribe
public void onSessionOpen(SessionOpen sessionOpen)
{
@@ -212,38 +181,4 @@ public class InfoPanel extends PluginPanel
{
updateLoggedIn();
}
@Subscribe
public void onTitleToolbarButtonAdded(TitleToolbarButtonAdded event)
{
if (runeliteConfig.enableCustomChrome())
{
return;
}
SwingUtilities.invokeLater(() ->
{
final int iconSize = TITLEBAR_SIZE - 6;
final JButton button = SwingUtil.createSwingButton(event.getButton(), iconSize, null);
titleBar.addComponent(event.getButton(), button);
titleBar.revalidate();
titleBar.repaint();
});
}
@Subscribe
public void onTitleToolbarButtonRemoved(TitleToolbarButtonRemoved event)
{
if (runeliteConfig.enableCustomChrome())
{
return;
}
SwingUtilities.invokeLater(() ->
{
titleBar.removeComponent(event.getButton());
titleBar.revalidate();
titleBar.repaint();
});
}
}

View File

@@ -27,12 +27,10 @@ package net.runelite.client.plugins.info;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.inject.Inject;
import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.NavigationButton;
import net.runelite.client.ui.PluginToolbar;
import net.runelite.client.ui.TitleToolbar;
@PluginDescriptor(
name = "Info Panel",
@@ -43,12 +41,6 @@ public class InfoPlugin extends Plugin
@Inject
private PluginToolbar pluginToolbar;
@Inject
private TitleToolbar titleToolbar;
@Inject
private RuneLiteConfig runeLiteConfig;
private NavigationButton navButton;
@Override
@@ -70,11 +62,6 @@ public class InfoPlugin extends Plugin
.build();
pluginToolbar.addNavigation(navButton);
if (!runeLiteConfig.enableCustomChrome())
{
titleToolbar.refresh();
}
}
@Override

View File

@@ -50,13 +50,22 @@ public class ClientPluginToolbar extends JToolBar
setMinimumSize(new Dimension(TOOLBAR_WIDTH, TOOLBAR_HEIGHT));
setPreferredSize(new Dimension(TOOLBAR_WIDTH, TOOLBAR_HEIGHT));
setMaximumSize(new Dimension(TOOLBAR_WIDTH, Integer.MAX_VALUE));
addSeparator();
}
public void addComponent(final int index, final NavigationButton button, final Component component)
{
if (componentMap.put(button, component) == null)
{
add(component, index);
if (index < 0)
{
add(component);
}
else
{
add(component, index);
}
revalidate();
repaint();
}

View File

@@ -35,9 +35,9 @@ import javax.swing.JPanel;
/**
* Client title toolbar component.
*/
public class ClientTitleToolbar extends JPanel
class ClientTitleToolbar extends JPanel
{
public static final int TITLEBAR_SIZE = 23;
static final int TITLEBAR_SIZE = 23;
private static final int ITEM_PADDING = 4;
private final Map<NavigationButton, Component> componentMap = new HashMap<>();
@@ -45,7 +45,7 @@ public class ClientTitleToolbar extends JPanel
/**
* Instantiates a new Client title toolbar.
*/
public ClientTitleToolbar()
ClientTitleToolbar()
{
// The only other layout manager that would manage it's preferred size without padding
// was the GroupLayout manager, which doesn't work with dynamic layouts like this one.

View File

@@ -250,28 +250,34 @@ public class ClientUI
@Subscribe
public void onTitleToolbarButtonAdded(final TitleToolbarButtonAdded event)
{
if (!config.enableCustomChrome() && !SwingUtil.isCustomTitlePanePresent(frame))
{
return;
}
SwingUtilities.invokeLater(() ->
{
final int iconSize = ClientTitleToolbar.TITLEBAR_SIZE - 6;
final JButton button = SwingUtil.createSwingButton(event.getButton(), iconSize, null);
titleToolbar.addComponent(event.getButton(), button);
if (config.enableCustomChrome() || SwingUtil.isCustomTitlePanePresent(frame))
{
titleToolbar.addComponent(event.getButton(), button);
return;
}
pluginToolbar.addComponent(-1, event.getButton(), button);
});
}
@Subscribe
public void onTitleToolbarButtonRemoved(final TitleToolbarButtonRemoved event)
{
if (!config.enableCustomChrome() && !SwingUtil.isCustomTitlePanePresent(frame))
SwingUtilities.invokeLater(() ->
{
return;
}
if (config.enableCustomChrome() || SwingUtil.isCustomTitlePanePresent(frame))
{
titleToolbar.removeComponent(event.getButton());
return;
}
SwingUtilities.invokeLater(() -> titleToolbar.removeComponent(event.getButton()));
pluginToolbar.removeComponent(event.getButton());
});
}
/**