diff options
author | Petr Mrázek <peterix@gmail.com> | 2017-10-29 12:24:49 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2017-10-29 12:24:49 +0100 |
commit | b76bdf9368245d0b770094ebc3945b2fcad07f50 (patch) | |
tree | 9b35162c96116367c1c5cd0aeb7cc9c414f55afc | |
parent | 7add9de1cf79615cebf73f2de49d4b60326d9d58 (diff) | |
download | MultiMC-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.txt | 7 | ||||
-rw-r--r-- | libraries/launcher/org/multimc/IconLoader.java | 132 | ||||
-rw-r--r-- | libraries/launcher/org/multimc/LegacyFrame.java | 4 | ||||
-rw-r--r-- | libraries/launcher/org/multimc/onesix/OneSixLauncher.java | 17 |
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. |