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