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(".");
+ }
}