summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2017-10-29 12:24:49 +0100
committerPetr Mrázek <peterix@gmail.com>2017-10-29 12:24:49 +0100
commitb76bdf9368245d0b770094ebc3945b2fcad07f50 (patch)
tree9b35162c96116367c1c5cd0aeb7cc9c414f55afc
parent7add9de1cf79615cebf73f2de49d4b60326d9d58 (diff)
downloadMultiMC-b76bdf9368245d0b770094ebc3945b2fcad07f50.tar
MultiMC-b76bdf9368245d0b770094ebc3945b2fcad07f50.tar.gz
MultiMC-b76bdf9368245d0b770094ebc3945b2fcad07f50.tar.lz
MultiMC-b76bdf9368245d0b770094ebc3945b2fcad07f50.tar.xz
MultiMC-b76bdf9368245d0b770094ebc3945b2fcad07f50.zip
GH-2026 avoid using awt Dimension class to fix input issues on macOS
-rw-r--r--libraries/launcher/CMakeLists.txt7
-rw-r--r--libraries/launcher/org/multimc/IconLoader.java132
-rw-r--r--libraries/launcher/org/multimc/LegacyFrame.java4
-rw-r--r--libraries/launcher/org/multimc/onesix/OneSixLauncher.java17
4 files changed, 15 insertions, 145 deletions
diff --git a/libraries/launcher/CMakeLists.txt b/libraries/launcher/CMakeLists.txt
index b1ee42fd..16148fea 100644
--- a/libraries/launcher/CMakeLists.txt
+++ b/libraries/launcher/CMakeLists.txt
@@ -12,15 +12,14 @@ set(SRC
net/minecraft/Launcher.java
org/multimc/LegacyFrame.java
- # onesix launcher
- org/multimc/onesix/OneSixLauncher.java
-
# generic launcher
org/multimc/EntryPoint.java
org/multimc/Launcher.java
+ org/multimc/LaunchParams.java
org/multimc/ParseException.java
org/multimc/Utils.java
- org/multimc/IconLoader.java
+
+ org/multimc/onesix/OneSixLauncher.java
)
add_jar(NewLaunch ${SRC})
diff --git a/libraries/launcher/org/multimc/IconLoader.java b/libraries/launcher/org/multimc/IconLoader.java
deleted file mode 100644
index f1638f3a..00000000
--- a/libraries/launcher/org/multimc/IconLoader.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.multimc;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-/*****************************************************************************
- * A convenience class for loading icons from images.
- *
- * Icons loaded from this class are formatted to fit within the required
- * dimension (16x16, 32x32, or 128x128). If the source image is larger than the
- * target dimension, it is shrunk down to the minimum size that will fit. If it
- * is smaller, then it is only scaled up if the new scale can be a per-pixel
- * linear scale (i.e., x2, x3, x4, etc). In both cases, the image's width/height
- * ratio is kept the same as the source image.
- *
- * @author Chris Molini
- *****************************************************************************/
-public class IconLoader
-{
- /*************************************************************************
- * Loads an icon in ByteBuffer form.
- *
- * @param filepath
- * The location of the Image to use as an icon.
- *
- * @return An array of ByteBuffers containing the pixel data for the icon in
- * various sizes (as recommended by the OS).
- *************************************************************************/
- public static ByteBuffer[] load(String filepath)
- {
- BufferedImage image;
- try {
- image = ImageIO.read ( new File( filepath ) );
- } catch ( IOException e ) {
- e.printStackTrace();
- return new ByteBuffer[0];
- }
- ByteBuffer[] buffers;
- buffers = new ByteBuffer[1];
- buffers[0] = loadInstance(image, 128);
- return buffers;
- }
-
- /*************************************************************************
- * Copies the supplied image into a square icon at the indicated size.
- *
- * @param image
- * The image to place onto the icon.
- * @param dimension
- * The desired size of the icon.
- *
- * @return A ByteBuffer of pixel data at the indicated size.
- *************************************************************************/
- private static ByteBuffer loadInstance(BufferedImage image, int dimension)
- {
- BufferedImage scaledIcon = new BufferedImage(dimension, dimension,
- BufferedImage.TYPE_INT_ARGB_PRE);
- Graphics2D g = scaledIcon.createGraphics();
- double ratio = getIconRatio(image, scaledIcon);
- double width = image.getWidth() * ratio;
- double height = image.getHeight() * ratio;
- g.drawImage(image, (int) ((scaledIcon.getWidth() - width) / 2),
- (int) ((scaledIcon.getHeight() - height) / 2), (int) (width),
- (int) (height), null);
- g.dispose();
-
- return convertToByteBuffer(scaledIcon);
- }
-
- /*************************************************************************
- * Gets the width/height ratio of the icon. This is meant to simplify
- * scaling the icon to a new dimension.
- *
- * @param src
- * The base image that will be placed onto the icon.
- * @param icon
- * The icon that will have the image placed on it.
- *
- * @return The amount to scale the source image to fit it onto the icon
- * appropriately.
- *************************************************************************/
- private static double getIconRatio(BufferedImage src, BufferedImage icon)
- {
- double ratio = 1;
- if (src.getWidth() > icon.getWidth())
- ratio = (double) (icon.getWidth()) / src.getWidth();
- else
- ratio = (int) (icon.getWidth() / src.getWidth());
- if (src.getHeight() > icon.getHeight())
- {
- double r2 = (double) (icon.getHeight()) / src.getHeight();
- if (r2 < ratio)
- ratio = r2;
- }
- else
- {
- double r2 = (int) (icon.getHeight() / src.getHeight());
- if (r2 < ratio)
- ratio = r2;
- }
- return ratio;
- }
-
- /*************************************************************************
- * Converts a BufferedImage into a ByteBuffer of pixel data.
- *
- * @param image
- * The image to convert.
- *
- * @return A ByteBuffer that contains the pixel data of the supplied image.
- *************************************************************************/
- public static ByteBuffer convertToByteBuffer(BufferedImage image)
- {
- byte[] buffer = new byte[image.getWidth() * image.getHeight() * 4];
- int counter = 0;
- for (int i = 0; i < image.getHeight(); i++)
- for (int j = 0; j < image.getWidth(); j++)
- {
- int colorSpace = image.getRGB(j, i);
- buffer[counter + 0] = (byte) ((colorSpace << 8) >> 24);
- buffer[counter + 1] = (byte) ((colorSpace << 16) >> 24);
- buffer[counter + 2] = (byte) ((colorSpace << 24) >> 24);
- buffer[counter + 3] = (byte) (colorSpace >> 24);
- counter += 4;
- }
- return ByteBuffer.wrap(buffer);
- }
-} \ No newline at end of file
diff --git a/libraries/launcher/org/multimc/LegacyFrame.java b/libraries/launcher/org/multimc/LegacyFrame.java
index 622367b6..8883f424 100644
--- a/libraries/launcher/org/multimc/LegacyFrame.java
+++ b/libraries/launcher/org/multimc/LegacyFrame.java
@@ -43,7 +43,7 @@ public class LegacyFrame extends Frame implements WindowListener
this.addWindowListener ( this );
}
- public void start ( Applet mcApplet, String user, String session, Dimension winSize, boolean maximize )
+ public void start ( Applet mcApplet, String user, String session, int winSizeW, int winSizeH, boolean maximize )
{
try {
appletWrap = new Launcher( mcApplet, new URL ( "http://www.minecraft.net/game" ) );
@@ -56,7 +56,7 @@ public class LegacyFrame extends Frame implements WindowListener
appletWrap.setParameter("fullscreen", "false");
mcApplet.setStub(appletWrap);
this.add ( appletWrap );
- appletWrap.setPreferredSize ( winSize );
+ appletWrap.setPreferredSize ( new Dimension (winSizeW, winSizeH) );
this.pack();
this.setLocationRelativeTo ( null );
this.setResizable ( true );
diff --git a/libraries/launcher/org/multimc/onesix/OneSixLauncher.java b/libraries/launcher/org/multimc/onesix/OneSixLauncher.java
index 8f0a498f..192ec16f 100644
--- a/libraries/launcher/org/multimc/onesix/OneSixLauncher.java
+++ b/libraries/launcher/org/multimc/onesix/OneSixLauncher.java
@@ -19,7 +19,6 @@ import org.multimc.*;
import java.applet.Applet;
import java.io.File;
-import java.awt.*;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -43,7 +42,8 @@ public class OneSixLauncher implements Launcher
private String windowParams;
// secondary parameters
- private Dimension winSize;
+ private int winSizeW;
+ private int winSizeH;
private boolean maximize;
private String cwd;
@@ -65,7 +65,9 @@ public class OneSixLauncher implements Launcher
windowParams = params.firstSafe("windowParams", "854x480");
cwd = System.getProperty("user.dir");
- winSize = new Dimension(854, 480);
+
+ winSizeW = 854;
+ winSizeH = 480;
maximize = false;
String[] dimStrings = windowParams.split("x");
@@ -78,7 +80,8 @@ public class OneSixLauncher implements Launcher
{
try
{
- winSize = new Dimension(Integer.parseInt(dimStrings[0]), Integer.parseInt(dimStrings[1]));
+ winSizeW = Integer.parseInt(dimStrings[0]);
+ winSizeH = Integer.parseInt(dimStrings[1]);
} catch (NumberFormatException ignored) {}
}
}
@@ -119,7 +122,7 @@ public class OneSixLauncher implements Launcher
Class<?> MCAppletClass = cl.loadClass(appletClass);
Applet mcappl = (Applet) MCAppletClass.newInstance();
LegacyFrame mcWindow = new LegacyFrame(windowTitle);
- mcWindow.start(mcappl, userName, sessionId, winSize, maximize);
+ mcWindow.start(mcappl, userName, sessionId, winSizeW, winSizeH, maximize);
return 0;
} catch (Exception e)
{
@@ -156,9 +159,9 @@ public class OneSixLauncher implements Launcher
else
{
mcparams.add("--width");
- mcparams.add(Integer.toString(winSize.width));
+ mcparams.add(Integer.toString(winSizeW));
mcparams.add("--height");
- mcparams.add(Integer.toString(winSize.height));
+ mcparams.add(Integer.toString(winSizeH));
}
// Get the Minecraft Class.