Use proxy methods for settings cursor via ClientUI

To not expose swing components directly just to set cursor on them,
create convenient proxy methods for updating and resetting cursor. Also
document that it is working properly only on Windows.

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2019-04-29 20:40:54 +02:00
parent 8d16c82377
commit bc2a5cf8f4
2 changed files with 36 additions and 13 deletions

View File

@@ -25,11 +25,7 @@
package net.runelite.client.plugins.customcursor; package net.runelite.client.plugins.customcursor;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import javax.inject.Inject; import javax.inject.Inject;
import javax.swing.JPanel;
import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ConfigChanged;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
@@ -65,7 +61,7 @@ public class CustomCursorPlugin extends Plugin
@Override @Override
protected void shutDown() protected void shutDown()
{ {
clientUI.getContainer().setCursor(Cursor.getDefaultCursor()); clientUI.resetCursor();
} }
@Subscribe @Subscribe
@@ -79,11 +75,7 @@ public class CustomCursorPlugin extends Plugin
private void updateCursor() private void updateCursor()
{ {
JPanel container = clientUI.getContainer();
CustomCursor selectedCursor = config.selectedCursor(); CustomCursor selectedCursor = config.selectedCursor();
clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(selectedCursor.getCursorImage(),
new Point(container.getX(), container.getY()), selectedCursor.toString());
container.setCursor(cursor);
} }
} }

View File

@@ -37,6 +37,7 @@ import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration; import java.awt.GraphicsConfiguration;
import java.awt.LayoutManager; import java.awt.LayoutManager;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.TrayIcon; import java.awt.TrayIcon;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
@@ -110,9 +111,6 @@ public class ClientUI
@Getter @Getter
private TrayIcon trayIcon; private TrayIcon trayIcon;
@Getter
private JPanel container;
private final RuneLiteProperties properties; private final RuneLiteProperties properties;
private final RuneLiteConfig config; private final RuneLiteConfig config;
private final KeyManager keyManager; private final KeyManager keyManager;
@@ -133,6 +131,7 @@ public class ClientUI
private JButton currentButton; private JButton currentButton;
private NavigationButton currentNavButton; private NavigationButton currentNavButton;
private boolean sidebarOpen; private boolean sidebarOpen;
private JPanel container;
private NavigationButton sidebarNavigationButton; private NavigationButton sidebarNavigationButton;
private JButton sidebarNavigationJButton; private JButton sidebarNavigationJButton;
private Dimension lastClientSize; private Dimension lastClientSize;
@@ -603,6 +602,38 @@ public class ClientUI
giveClientFocus(); giveClientFocus();
} }
/**
* Changes cursor for client window. Requires ${@link ClientUI#open(RuneLite)} to be called first.
* FIXME: This is working properly only on Windows, Linux and Mac are displaying cursor incorrectly
* @param image cursor image
* @param name cursor name
*/
public void setCursor(final BufferedImage image, final String name)
{
if (container == null)
{
return;
}
final java.awt.Point hotspot = new java.awt.Point(container.getX(), container.getY());
final Cursor cursorAwt = Toolkit.getDefaultToolkit().createCustomCursor(image, hotspot, name);
container.setCursor(cursorAwt);
}
/**
* Resets client window cursor to default one.
* @see ClientUI#setCursor(BufferedImage, String)
*/
public void resetCursor()
{
if (container == null)
{
return;
}
container.setCursor(Cursor.getDefaultCursor());
}
/** /**
* Get offset of game canvas in game window * Get offset of game canvas in game window
* *