< prev index next >
src/java.desktop/share/classes/sun/awt/SunToolkit.java
Print this page
@@ -35,11 +35,10 @@
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.Raster;
import java.awt.peer.FramePeer;
import java.awt.peer.KeyboardFocusManagerPeer;
-import java.awt.peer.MouseInfoPeer;
import java.awt.peer.SystemTrayPeer;
import java.awt.peer.TrayIconPeer;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -67,10 +66,13 @@
import sun.font.FontDesignMetrics;
import sun.net.util.URLUtil;
import sun.security.action.GetBooleanAction;
import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger;
+import java.util.Arrays;
+import java.util.List;
+import sun.awt.image.MultiResolutionToolkitImage.ResolutionVariantItem;
import static java.awt.RenderingHints.*;
public abstract class SunToolkit extends Toolkit
implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
@@ -749,11 +751,12 @@
return new ToolkitImage(producer);
}
public static Image createImageWithResolutionVariant(Image image,
Image resolutionVariant) {
- return new MultiResolutionToolkitImage(image, resolutionVariant);
+ return new MultiResolutionToolkitImage(image,
+ Arrays.asList(new ResolutionVariantItem(resolutionVariant, 2, 2)));
}
@Override
public int checkImage(Image img, int w, int h, ImageObserver o) {
if (!(img instanceof ToolkitImage)) {
@@ -765,11 +768,11 @@
if (w == 0 || h == 0) {
repbits = ImageObserver.ALLBITS;
} else {
repbits = tkimg.getImageRep().check(o);
}
- return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
+ return (tkimg.check(o) | repbits) & checkResolutionVariants(img, w, h, o);
}
@Override
public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
if (w == 0 || h == 0) {
@@ -788,50 +791,59 @@
-1, -1, -1, -1);
}
return false;
}
ImageRepresentation ir = tkimg.getImageRep();
- return ir.prepare(o) & prepareResolutionVariant(img, w, h, o);
+ return ir.prepare(o) & prepareResolutionVariants(img, w, h, o);
}
- private int checkResolutionVariant(Image img, int w, int h, ImageObserver o) {
- ToolkitImage rvImage = getResolutionVariant(img);
- int rvw = getRVSize(w);
- int rvh = getRVSize(h);
- // Ignore the resolution variant in case of error
- return (rvImage == null || rvImage.hasError()) ? 0xFFFF :
- checkImage(rvImage, rvw, rvh, MultiResolutionToolkitImage.
- getResolutionVariantObserver(
- img, o, w, h, rvw, rvh, true));
+ private int checkResolutionVariants(Image img, int w, int h, ImageObserver o) {
+ if (!(img instanceof MultiResolutionToolkitImage)) {
+ return 0xFFFF;
}
- private boolean prepareResolutionVariant(Image img, int w, int h,
- ImageObserver o) {
+ List<ResolutionVariantItem> rvItems
+ = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
- ToolkitImage rvImage = getResolutionVariant(img);
- int rvw = getRVSize(w);
- int rvh = getRVSize(h);
- // Ignore the resolution variant in case of error
- return rvImage == null || rvImage.hasError() || prepareImage(
- rvImage, rvw, rvh,
+ return rvItems.stream().map(rvItem -> {
+ double scaleX = rvItem.getScaleX();
+ double scaleY = rvItem.getScaleY();
+ return checkImage(
+ rvItem.getImage(),
+ getRVSize(w, scaleX),
+ getRVSize(h, scaleY),
MultiResolutionToolkitImage.getResolutionVariantObserver(
- img, o, w, h, rvw, rvh, true));
- }
+ img, o, scaleX, scaleY, true));
+ }).reduce(0xFFFF , (a, b) -> a & b);
+
- private static int getRVSize(int size){
- return size == -1 ? -1 : 2 * size;
}
- private static ToolkitImage getResolutionVariant(Image image) {
- if (image instanceof MultiResolutionToolkitImage) {
- Image resolutionVariant = ((MultiResolutionToolkitImage) image).
- getResolutionVariant();
- if (resolutionVariant instanceof ToolkitImage) {
- return (ToolkitImage) resolutionVariant;
+ private boolean prepareResolutionVariants(Image img, int w, int h,
+ ImageObserver o) {
+
+ if (!(img instanceof MultiResolutionToolkitImage)) {
+ return true;
}
+
+ List<ResolutionVariantItem> rvItems
+ = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
+
+ return rvItems.stream().map(rvItem -> {
+ double scaleX = rvItem.getScaleX();
+ double scaleY = rvItem.getScaleY();
+ return prepareImage(
+ rvItem.getImage(),
+ getRVSize(w, scaleX),
+ getRVSize(h, scaleY),
+ MultiResolutionToolkitImage.getResolutionVariantObserver(
+ img, o, scaleX, scaleY, true));
+ }).reduce(true, (a, b) -> a && b);
}
- return null;
+
+ private static int getRVSize(int size, double scale) {
+ return (scale == 1 || size == -1) ? size : (int) Math.ceil(scale * size);
}
protected static boolean imageCached(String fileName) {
return fileImgCache.containsKey(fileName);
}
@@ -839,11 +851,11 @@
protected static boolean imageCached(URL url) {
String key = url.toString();
return urlImgCache.containsKey(key);
}
- protected static boolean imageExists(String filename) {
+ public static boolean imageExists(String filename) {
if (filename != null) {
checkPermissions(filename);
return new File(filename).exists();
}
return false;
< prev index next >