src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java

Print this page

        

@@ -33,18 +33,27 @@
 import java.awt.event.InvocationEvent;
 import java.awt.event.KeyEvent;
 import java.awt.im.InputMethodHighlight;
 import java.awt.peer.*;
 import java.lang.reflect.*;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
 import java.security.*;
 import java.util.*;
 import java.util.concurrent.Callable;
 
 import sun.awt.*;
+import sun.awt.image.ToolkitImage;
 import sun.lwawt.*;
 import sun.lwawt.LWWindowPeer.PeerType;
 import sun.security.action.GetBooleanAction;
+import com.sun.awt.MultiResolutionImage;
+import java.net.MalformedURLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import sun.awt.image.ToolkitImageUtil;
 
 import sun.util.CoreResourceBundleControl;
 
 class NamedCursor extends Cursor {
     NamedCursor(String name) {

@@ -487,13 +496,24 @@
     }
 
     @Override
     public Image getImage(final String filename) {
         final Image nsImage = checkForNSImage(filename);
-        if (nsImage != null) return nsImage;
+        if (nsImage != null) {
+            return nsImage;
+        }
 
-        return super.getImage(filename);
+        String fileneame2x = getScaledImageName(filename);
+        return (fileneame2x == null) ? super.getImage(filename) : ToolkitImageUtil.
+                getImageWithResolutionVariant(this, filename, fileneame2x);
+    }
+
+    @Override
+    public Image getImage(URL url) {
+        URL url2x = getScaledImageURL(url);
+        return (url2x == null) ? super.getImage(url) : ToolkitImageUtil.
+                getImageWithResolutionVariant(this, url, url2x);
     }
 
     static final String nsImagePrefix = "NSImage://";
     protected Image checkForNSImage(final String imageName) {
         if (imageName == null) return null;

@@ -779,6 +799,38 @@
 
     @Override
     public boolean enableInputMethodsForTextComponent() {
         return true;
     }
+
+    private static URL getScaledImageURL(URL url) {
+        try {
+            String scaledImagePath = getScaledImageName(url.getPath());
+            return scaledImagePath == null ? null : new URL(url.getProtocol(),
+                    url.getHost(), url.getPort(), scaledImagePath);
+        } catch (MalformedURLException e) {
+            return null;
+        }
+    }
+
+    private static String getScaledImageName(String path) {
+        if (!isValidPath(path)) {
+            return null;
+        }
+
+        int slash = path.lastIndexOf('/');
+        String name = (slash < 0) ? path : path.substring(slash + 1);
+
+        if (name.contains("@2x")) {
+            return null;
+        }
+
+        int dot = name.lastIndexOf('.');
+        String name2x = (dot < 0) ? name + "@2x"
+                : name.substring(0, dot) + "@2x" + name.substring(dot);
+        return (slash < 0) ? name2x : path.substring(0, slash + 1) + name2x;
+    }
+
+    private static boolean isValidPath(String path) {
+        return !path.isEmpty() && !path.endsWith("/") && !path.endsWith(".");
+    }
 }