< prev index next >
src/java.desktop/share/classes/sun/awt/SunToolkit.java
Print this page
*** 35,45 ****
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;
--- 35,44 ----
*** 70,79 ****
--- 69,81 ----
import sun.security.action.GetBooleanAction;
import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger;
import static java.awt.RenderingHints.*;
+ import java.awt.image.ResolutionVariantItem;
+ import java.util.Arrays;
+ import java.util.List;
public abstract class SunToolkit extends Toolkit
implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
// 8014718: logging has been removed from SunToolkit
*** 745,760 ****
return createImage(new ByteArrayImageSource(data, offset, length));
}
@Override
public Image createImage(ImageProducer producer) {
! return new ToolkitImage(producer);
}
public static Image createImageWithResolutionVariant(Image image,
! Image resolutionVariant) {
! return new MultiResolutionToolkitImage(image, resolutionVariant);
}
@Override
public int checkImage(Image img, int w, int h, ImageObserver o) {
if (!(img instanceof ToolkitImage)) {
--- 747,768 ----
return createImage(new ByteArrayImageSource(data, offset, length));
}
@Override
public Image createImage(ImageProducer producer) {
! return (producer.isMultiResolutionImageProducer())
! ? new MultiResolutionToolkitImage(producer)
! : new ToolkitImage(producer);
}
public static Image createImageWithResolutionVariant(Image image,
! Image resolutionVariant)
! {
! return new MultiResolutionToolkitImage(Arrays.asList(
! new ResolutionVariantItem<>((ToolkitImage) image, 1, 1),
! new ResolutionVariantItem<>((ToolkitImage) resolutionVariant, 2, 2)
! ));
}
@Override
public int checkImage(Image img, int w, int h, ImageObserver o) {
if (!(img instanceof ToolkitImage)) {
*** 766,776 ****
if (w == 0 || h == 0) {
repbits = ImageObserver.ALLBITS;
} else {
repbits = tkimg.getImageRep().check(o);
}
! return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
}
@Override
public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
if (w == 0 || h == 0) {
--- 774,784 ----
if (w == 0 || h == 0) {
repbits = ImageObserver.ALLBITS;
} else {
repbits = tkimg.getImageRep().check(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) {
*** 789,838 ****
-1, -1, -1, -1);
}
return false;
}
ImageRepresentation ir = tkimg.getImageRep();
! return ir.prepare(o) & prepareResolutionVariant(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 boolean prepareResolutionVariant(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() || prepareImage(
! rvImage, rvw, rvh,
MultiResolutionToolkitImage.getResolutionVariantObserver(
! img, o, w, h, rvw, rvh, true));
! }
- 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;
}
}
! return null;
}
protected static boolean imageCached(String fileName) {
return fileImgCache.containsKey(fileName);
}
--- 797,857 ----
-1, -1, -1, -1);
}
return false;
}
ImageRepresentation ir = tkimg.getImageRep();
! return ir.prepare(o) & prepareResolutionVariants(img, w, h, o);
}
! private int checkResolutionVariants(Image img, int w, int h, ImageObserver o) {
! if (!(img instanceof MultiResolutionToolkitImage)) {
! return 0xFFFF;
}
! List<ResolutionVariantItem<Image>> rvItems
! = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
! return rvItems.stream().map(rvItem -> {
! double sx = rvItem.getScaleX();
! double sy = rvItem.getScaleY();
! return checkImage(
! rvItem.getValue(),
! getRVSize(w, sx),
! getRVSize(h, sy),
MultiResolutionToolkitImage.getResolutionVariantObserver(
! img, o, sx, sy, true));
! }).reduce(0xFFFF , (a, b) -> a & b);
!
}
! private boolean prepareResolutionVariants(Image img, int w, int h,
! ImageObserver o) {
!
! if (!(img instanceof MultiResolutionToolkitImage)) {
! return true;
}
+
+ List<ResolutionVariantItem<Image>> rvItems
+ = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
+
+ return rvItems.stream().map(rvItem -> {
+ double sx = rvItem.getScaleX();
+ double sy = rvItem.getScaleY();
+ return prepareImage(
+ rvItem.getValue(),
+ getRVSize(w, sx),
+ getRVSize(h, sy),
+ MultiResolutionToolkitImage.getResolutionVariantObserver(
+ img, o, sx, sy, true));
+ }).reduce(true, (a, b) -> a && b);
}
!
! private static int getRVSize(int size, double scale) {
! return (size == -1)
! ? -1
! : (scale == 1 ? size : (int) Math.round(scale * size));
}
protected static boolean imageCached(String fileName) {
return fileImgCache.containsKey(fileName);
}
< prev index next >