Fixed applet resize and bouncing

This commit is contained in:
Kronos
2017-05-01 03:23:45 +10:00
committed by Adam
parent 31a781e5f2
commit ad2696860c
4 changed files with 25 additions and 38 deletions

View File

@@ -28,7 +28,6 @@ package net.runelite.client;
import java.applet.Applet; import java.applet.Applet;
import java.applet.AppletContext; import java.applet.AppletContext;
import java.applet.AppletStub; import java.applet.AppletStub;
import java.awt.Dimension;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
@@ -83,10 +82,7 @@ public class RSStub implements AppletStub
@Override @Override
public void appletResize(int width, int height) public void appletResize(int width, int height)
{ {
Dimension d = new Dimension(width, height);
app.setSize(d);
app.setPreferredSize(d);
} }
} }

View File

@@ -80,6 +80,10 @@ public class RuneLite
public static void main(String[] args) throws Exception public static void main(String[] args) throws Exception
{ {
// Do not fill in background on repaint. Reduces flickering when
// the applet is resized.
System.setProperty("sun.awt.noerasebackground", "true");
OptionParser parser = new OptionParser(); OptionParser parser = new OptionParser();
parser.accepts("developer-mode"); parser.accepts("developer-mode");
options = parser.parse(args); options = parser.parse(args);

View File

@@ -27,8 +27,7 @@ package net.runelite.client.ui;
import java.applet.Applet; import java.applet.Applet;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.event.ComponentEvent; import java.awt.BorderLayout;
import java.awt.event.ComponentListener;
import javax.swing.JPanel; import javax.swing.JPanel;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.client.ClientLoader; import net.runelite.client.ClientLoader;
@@ -36,7 +35,7 @@ import net.runelite.client.RuneLite;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
final class ClientPanel extends JPanel implements ComponentListener final class ClientPanel extends JPanel
{ {
private static final Logger logger = LoggerFactory.getLogger(ClientPanel.class); private static final Logger logger = LoggerFactory.getLogger(ClientPanel.class);
@@ -49,16 +48,16 @@ final class ClientPanel extends JPanel implements ComponentListener
setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setLayout(new BorderLayout());
setBackground(Color.black); setBackground(Color.black);
this.addComponentListener(this);
ClientLoader loader = new ClientLoader(); ClientLoader loader = new ClientLoader();
rs = loader.load(); rs = loader.load();
rs.setSize(this.getSize()); rs.setLayout(null);
rs.init(); rs.init();
rs.start(); rs.start();
this.add(rs); add(rs, BorderLayout.CENTER);
Client client = null; Client client = null;
try try
@@ -74,30 +73,4 @@ final class ClientPanel extends JPanel implements ComponentListener
RuneLite.setClient(client); RuneLite.setClient(client);
} }
@Override
public void componentResized(ComponentEvent e)
{
if (rs != null)
{
rs.setLocation(0, 0);
rs.setSize(this.getSize());
rs.setPreferredSize(this.getPreferredSize());
}
this.setPreferredSize(this.getSize());
}
@Override
public void componentMoved(ComponentEvent e)
{
}
@Override
public void componentShown(ComponentEvent e)
{
}
@Override
public void componentHidden(ComponentEvent e)
{
}
} }

View File

@@ -26,6 +26,8 @@ package net.runelite.inject.callbacks;
import java.awt.Canvas; import java.awt.Canvas;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.OverlayRenderer;
@@ -45,8 +47,8 @@ public class RSCanvasCallback
{ {
if (canvas.getHeight() != clientBuffer.getHeight() || canvas.getWidth() != clientBuffer.getWidth()) if (canvas.getHeight() != clientBuffer.getHeight() || canvas.getWidth() != clientBuffer.getWidth())
{ {
clientBuffer = new BufferedImage(canvas.getWidth(), canvas.getHeight(), BufferedImage.TYPE_INT_RGB); clientBuffer = resize(clientBuffer, canvas.getWidth(), canvas.getHeight());
gameBuffer = new BufferedImage(canvas.getWidth(), canvas.getHeight(), BufferedImage.TYPE_INT_RGB); gameBuffer = resize(gameBuffer, canvas.getWidth(), canvas.getHeight());
} }
Graphics clientGraphics = clientBuffer.getGraphics(); Graphics clientGraphics = clientBuffer.getGraphics();
@@ -74,4 +76,16 @@ public class RSCanvasCallback
return gameBuffer.getGraphics(); return gameBuffer.getGraphics();
} }
private static BufferedImage resize(BufferedImage img, int newWidth, int newHeight)
{
Image tmp = img.getScaledInstance(newWidth, newHeight, Image.SCALE_FAST);
BufferedImage bufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = bufferedImage.createGraphics();
graphics.drawImage(tmp, 0, 0, null);
graphics.dispose();
return bufferedImage;
}
} }