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.AppletContext;
import java.applet.AppletStub;
import java.awt.Dimension;
import java.net.MalformedURLException;
import java.net.URL;
@@ -83,10 +82,7 @@ public class RSStub implements AppletStub
@Override
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
{
// Do not fill in background on repaint. Reduces flickering when
// the applet is resized.
System.setProperty("sun.awt.noerasebackground", "true");
OptionParser parser = new OptionParser();
parser.accepts("developer-mode");
options = parser.parse(args);

View File

@@ -27,8 +27,7 @@ package net.runelite.client.ui;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import net.runelite.api.Client;
import net.runelite.client.ClientLoader;
@@ -36,7 +35,7 @@ import net.runelite.client.RuneLite;
import org.slf4j.Logger;
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);
@@ -49,16 +48,16 @@ final class ClientPanel extends JPanel implements ComponentListener
setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setMinimumSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
setLayout(new BorderLayout());
setBackground(Color.black);
this.addComponentListener(this);
ClientLoader loader = new ClientLoader();
rs = loader.load();
rs.setSize(this.getSize());
rs.setLayout(null);
rs.init();
rs.start();
this.add(rs);
add(rs, BorderLayout.CENTER);
Client client = null;
try
@@ -74,30 +73,4 @@ final class ClientPanel extends JPanel implements ComponentListener
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.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import net.runelite.client.RuneLite;
import net.runelite.client.ui.overlay.OverlayRenderer;
@@ -45,8 +47,8 @@ public class RSCanvasCallback
{
if (canvas.getHeight() != clientBuffer.getHeight() || canvas.getWidth() != clientBuffer.getWidth())
{
clientBuffer = new BufferedImage(canvas.getWidth(), canvas.getHeight(), BufferedImage.TYPE_INT_RGB);
gameBuffer = new BufferedImage(canvas.getWidth(), canvas.getHeight(), BufferedImage.TYPE_INT_RGB);
clientBuffer = resize(clientBuffer, canvas.getWidth(), canvas.getHeight());
gameBuffer = resize(gameBuffer, canvas.getWidth(), canvas.getHeight());
}
Graphics clientGraphics = clientBuffer.getGraphics();
@@ -74,4 +76,16 @@ public class RSCanvasCallback
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;
}
}