src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
Print this page
*** 33,50 ****
--- 33,53 ----
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.net.URL;
import java.security.*;
import java.util.*;
import java.util.concurrent.Callable;
+ import java.net.MalformedURLException;
import sun.awt.*;
import sun.lwawt.*;
import sun.lwawt.LWWindowPeer.PeerType;
import sun.security.action.GetBooleanAction;
+ import sun.awt.image.MultiResolutionImage;
import sun.util.CoreResourceBundleControl;
class NamedCursor extends Cursor {
NamedCursor(String name) {
*** 487,501 ****
}
@Override
public Image getImage(final String filename) {
final Image nsImage = checkForNSImage(filename);
! if (nsImage != null) return nsImage;
return super.getImage(filename);
}
static final String nsImagePrefix = "NSImage://";
protected Image checkForNSImage(final String imageName) {
if (imageName == null) return null;
if (!imageName.startsWith(nsImagePrefix)) return null;
return CImage.getCreator().createImageFromName(imageName.substring(nsImagePrefix.length()));
--- 490,525 ----
}
@Override
public Image getImage(final String filename) {
final Image nsImage = checkForNSImage(filename);
! if (nsImage != null) {
! return nsImage;
! }
+ if (imageCached(filename)) {
return super.getImage(filename);
}
+ String fileneame2x = getScaledImageName(filename);
+ return (imageExists(fileneame2x))
+ ? getImageWithResolutionVariant(filename, fileneame2x)
+ : super.getImage(filename);
+ }
+
+ @Override
+ public Image getImage(URL url) {
+
+ if (imageCached(url)) {
+ return super.getImage(url);
+ }
+
+ URL url2x = getScaledImageURL(url);
+ return (imageExists(url2x))
+ ? getImageWithResolutionVariant(url, url2x) : super.getImage(url);
+ }
+
static final String nsImagePrefix = "NSImage://";
protected Image checkForNSImage(final String imageName) {
if (imageName == null) return null;
if (!imageName.startsWith(nsImagePrefix)) return null;
return CImage.getCreator().createImageFromName(imageName.substring(nsImagePrefix.length()));
*** 779,784 ****
--- 803,840 ----
@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(".");
+ }
}