< prev index next >

src/java.desktop/share/classes/sun/awt/SunToolkit.java

Print this page




  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.awt;
  27 
  28 import java.awt.*;
  29 import java.awt.event.InputEvent;
  30 import java.awt.event.KeyEvent;
  31 import java.awt.event.WindowEvent;
  32 import java.awt.image.BufferedImage;
  33 import java.awt.image.DataBuffer;
  34 import java.awt.image.DataBufferInt;
  35 import java.awt.image.ImageObserver;
  36 import java.awt.image.ImageProducer;
  37 import java.awt.image.Raster;
  38 import java.awt.peer.FramePeer;
  39 import java.awt.peer.KeyboardFocusManagerPeer;
  40 import java.awt.peer.MouseInfoPeer;
  41 import java.awt.peer.SystemTrayPeer;
  42 import java.awt.peer.TrayIconPeer;
  43 import java.io.File;
  44 import java.io.IOException;
  45 import java.io.InputStream;
  46 import java.lang.reflect.InvocationTargetException;
  47 import java.net.URL;
  48 import java.security.AccessController;
  49 import java.util.Collections;
  50 import java.util.Iterator;
  51 import java.util.Locale;
  52 import java.util.Map;
  53 import java.util.Vector;
  54 import java.util.WeakHashMap;
  55 import java.util.concurrent.TimeUnit;
  56 import java.util.concurrent.locks.Condition;
  57 import java.util.concurrent.locks.ReentrantLock;
  58 
  59 import sun.awt.im.InputContext;
  60 import sun.awt.image.ByteArrayImageSource;
  61 import sun.awt.image.FileImageSource;
  62 import sun.awt.image.ImageRepresentation;
  63 import java.awt.image.MultiResolutionImage;
  64 import sun.awt.image.MultiResolutionToolkitImage;
  65 import sun.awt.image.ToolkitImage;
  66 import sun.awt.image.URLImageSource;
  67 import sun.font.FontDesignMetrics;
  68 import sun.misc.SoftCache;
  69 import sun.net.util.URLUtil;
  70 import sun.security.action.GetBooleanAction;
  71 import sun.security.action.GetPropertyAction;
  72 import sun.util.logging.PlatformLogger;
  73 
  74 import static java.awt.RenderingHints.*;



  75 
  76 public abstract class SunToolkit extends Toolkit
  77     implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
  78 
  79     // 8014718: logging has been removed from SunToolkit
  80 
  81     /* Load debug settings for native code */
  82     static {
  83         if (AccessController.doPrivileged(new GetBooleanAction("sun.awt.nativedebug"))) {
  84             DebugSettings.init();
  85         }
  86     };
  87 
  88     /**
  89      * Special mask for the UngrabEvent events, in addition to the
  90      * public masks defined in AWTEvent.  Should be used as the mask
  91      * value for Toolkit.addAWTEventListener.
  92      */
  93     public static final int GRAB_EVENT_MASK = 0x80000000;
  94 


 730 
 731     @Override
 732     public Image createImage(String filename) {
 733         checkPermissions(filename);
 734         return createImage(new FileImageSource(filename));
 735     }
 736 
 737     @Override
 738     public Image createImage(URL url) {
 739         checkPermissions(url);
 740         return createImage(new URLImageSource(url));
 741     }
 742 
 743     @Override
 744     public Image createImage(byte[] data, int offset, int length) {
 745         return createImage(new ByteArrayImageSource(data, offset, length));
 746     }
 747 
 748     @Override
 749     public Image createImage(ImageProducer producer) {
 750         return new ToolkitImage(producer);


 751     }
 752 
 753     public static Image createImageWithResolutionVariant(Image image,
 754             Image resolutionVariant) {
 755         return new MultiResolutionToolkitImage(image, resolutionVariant);




 756     }
 757 
 758     @Override
 759     public int checkImage(Image img, int w, int h, ImageObserver o) {
 760         if (!(img instanceof ToolkitImage)) {
 761             return ImageObserver.ALLBITS;
 762         }
 763 
 764         ToolkitImage tkimg = (ToolkitImage)img;
 765         int repbits;
 766         if (w == 0 || h == 0) {
 767             repbits = ImageObserver.ALLBITS;
 768         } else {
 769             repbits = tkimg.getImageRep().check(o);
 770         }
 771         return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
 772     }
 773 
 774     @Override
 775     public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
 776         if (w == 0 || h == 0) {
 777             return true;
 778         }
 779 
 780         // Must be a ToolkitImage
 781         if (!(img instanceof ToolkitImage)) {
 782             return true;
 783         }
 784 
 785         ToolkitImage tkimg = (ToolkitImage)img;
 786         if (tkimg.hasError()) {
 787             if (o != null) {
 788                 o.imageUpdate(img, ImageObserver.ERROR|ImageObserver.ABORT,
 789                               -1, -1, -1, -1);
 790             }
 791             return false;
 792         }
 793         ImageRepresentation ir = tkimg.getImageRep();
 794         return ir.prepare(o) & prepareResolutionVariant(img, w, h, o);
 795     }
 796 
 797     private int checkResolutionVariant(Image img, int w, int h, ImageObserver o) {
 798         ToolkitImage rvImage = getResolutionVariant(img);
 799         int rvw = getRVSize(w);
 800         int rvh = getRVSize(h);
 801         // Ignore the resolution variant in case of error
 802         return (rvImage == null || rvImage.hasError()) ? 0xFFFF :
 803                 checkImage(rvImage, rvw, rvh, MultiResolutionToolkitImage.
 804                                 getResolutionVariantObserver(
 805                                         img, o, w, h, rvw, rvh, true));
 806     }
 807 
 808     private boolean prepareResolutionVariant(Image img, int w, int h,
 809             ImageObserver o) {
 810 
 811         ToolkitImage rvImage = getResolutionVariant(img);
 812         int rvw = getRVSize(w);
 813         int rvh = getRVSize(h);
 814         // Ignore the resolution variant in case of error
 815         return rvImage == null || rvImage.hasError() || prepareImage(
 816                 rvImage, rvw, rvh,

 817                 MultiResolutionToolkitImage.getResolutionVariantObserver(
 818                         img, o, w, h, rvw, rvh, true));
 819     }

 820 
 821     private static int getRVSize(int size){
 822         return size == -1 ? -1 : 2 * size;
 823     }
 824 
 825     private static ToolkitImage getResolutionVariant(Image image) {
 826         if (image instanceof MultiResolutionToolkitImage) {
 827             Image resolutionVariant = ((MultiResolutionToolkitImage) image).
 828                     getResolutionVariant();
 829             if (resolutionVariant instanceof ToolkitImage) {
 830                 return (ToolkitImage) resolutionVariant;
 831             }














 832         }
 833         return null;




 834     }
 835 
 836     protected static boolean imageCached(String fileName) {
 837         return fileImgCache.containsKey(fileName);
 838     }
 839 
 840     protected static boolean imageCached(URL url) {
 841         String key = url.toString();
 842         return urlImgCache.containsKey(key);
 843     }
 844 
 845     protected static boolean imageExists(String filename) {
 846         if (filename != null) {
 847             checkPermissions(filename);
 848             return new File(filename).exists();
 849         }
 850         return false;
 851     }
 852 
 853     @SuppressWarnings("try")




  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.awt;
  27 
  28 import java.awt.*;
  29 import java.awt.event.InputEvent;
  30 import java.awt.event.KeyEvent;
  31 import java.awt.event.WindowEvent;
  32 import java.awt.image.BufferedImage;
  33 import java.awt.image.DataBuffer;
  34 import java.awt.image.DataBufferInt;
  35 import java.awt.image.ImageObserver;
  36 import java.awt.image.ImageProducer;
  37 import java.awt.image.Raster;
  38 import java.awt.peer.FramePeer;
  39 import java.awt.peer.KeyboardFocusManagerPeer;

  40 import java.awt.peer.SystemTrayPeer;
  41 import java.awt.peer.TrayIconPeer;
  42 import java.io.File;
  43 import java.io.IOException;
  44 import java.io.InputStream;
  45 import java.lang.reflect.InvocationTargetException;
  46 import java.net.URL;
  47 import java.security.AccessController;
  48 import java.util.Collections;
  49 import java.util.Iterator;
  50 import java.util.Locale;
  51 import java.util.Map;
  52 import java.util.Vector;
  53 import java.util.WeakHashMap;
  54 import java.util.concurrent.TimeUnit;
  55 import java.util.concurrent.locks.Condition;
  56 import java.util.concurrent.locks.ReentrantLock;
  57 
  58 import sun.awt.im.InputContext;
  59 import sun.awt.image.ByteArrayImageSource;
  60 import sun.awt.image.FileImageSource;
  61 import sun.awt.image.ImageRepresentation;
  62 import java.awt.image.MultiResolutionImage;
  63 import sun.awt.image.MultiResolutionToolkitImage;
  64 import sun.awt.image.ToolkitImage;
  65 import sun.awt.image.URLImageSource;
  66 import sun.font.FontDesignMetrics;
  67 import sun.misc.SoftCache;
  68 import sun.net.util.URLUtil;
  69 import sun.security.action.GetBooleanAction;
  70 import sun.security.action.GetPropertyAction;
  71 import sun.util.logging.PlatformLogger;
  72 
  73 import static java.awt.RenderingHints.*;
  74 import java.awt.image.ResolutionVariantItem;
  75 import java.util.Arrays;
  76 import java.util.List;
  77 
  78 public abstract class SunToolkit extends Toolkit
  79     implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
  80 
  81     // 8014718: logging has been removed from SunToolkit
  82 
  83     /* Load debug settings for native code */
  84     static {
  85         if (AccessController.doPrivileged(new GetBooleanAction("sun.awt.nativedebug"))) {
  86             DebugSettings.init();
  87         }
  88     };
  89 
  90     /**
  91      * Special mask for the UngrabEvent events, in addition to the
  92      * public masks defined in AWTEvent.  Should be used as the mask
  93      * value for Toolkit.addAWTEventListener.
  94      */
  95     public static final int GRAB_EVENT_MASK = 0x80000000;
  96 


 732 
 733     @Override
 734     public Image createImage(String filename) {
 735         checkPermissions(filename);
 736         return createImage(new FileImageSource(filename));
 737     }
 738 
 739     @Override
 740     public Image createImage(URL url) {
 741         checkPermissions(url);
 742         return createImage(new URLImageSource(url));
 743     }
 744 
 745     @Override
 746     public Image createImage(byte[] data, int offset, int length) {
 747         return createImage(new ByteArrayImageSource(data, offset, length));
 748     }
 749 
 750     @Override
 751     public Image createImage(ImageProducer producer) {
 752         return (producer.isMultiResolutionImageProducer())
 753                 ? new MultiResolutionToolkitImage(producer)
 754                 : new ToolkitImage(producer);
 755     }
 756 
 757     public static Image createImageWithResolutionVariant(Image image,
 758                                                          Image resolutionVariant)
 759     {
 760         return new MultiResolutionToolkitImage(Arrays.asList(
 761                 new ResolutionVariantItem<>((ToolkitImage) image, 1, 1),
 762                 new ResolutionVariantItem<>((ToolkitImage) resolutionVariant, 2, 2)
 763         ));
 764     }
 765 
 766     @Override
 767     public int checkImage(Image img, int w, int h, ImageObserver o) {
 768         if (!(img instanceof ToolkitImage)) {
 769             return ImageObserver.ALLBITS;
 770         }
 771 
 772         ToolkitImage tkimg = (ToolkitImage)img;
 773         int repbits;
 774         if (w == 0 || h == 0) {
 775             repbits = ImageObserver.ALLBITS;
 776         } else {
 777             repbits = tkimg.getImageRep().check(o);
 778         }
 779         return (tkimg.check(o) | repbits) & checkResolutionVariants(img, w, h, o);
 780     }
 781 
 782     @Override
 783     public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
 784         if (w == 0 || h == 0) {
 785             return true;
 786         }
 787 
 788         // Must be a ToolkitImage
 789         if (!(img instanceof ToolkitImage)) {
 790             return true;
 791         }
 792 
 793         ToolkitImage tkimg = (ToolkitImage)img;
 794         if (tkimg.hasError()) {
 795             if (o != null) {
 796                 o.imageUpdate(img, ImageObserver.ERROR|ImageObserver.ABORT,
 797                               -1, -1, -1, -1);
 798             }
 799             return false;
 800         }
 801         ImageRepresentation ir = tkimg.getImageRep();
 802         return ir.prepare(o) & prepareResolutionVariants(img, w, h, o);
 803     }
 804 
 805     private int checkResolutionVariants(Image img, int w, int h, ImageObserver o) {
 806         if (!(img instanceof MultiResolutionToolkitImage)) {
 807             return 0xFFFF;






 808         }
 809 
 810         List<ResolutionVariantItem<Image>> rvItems
 811                 = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
 812 
 813         return rvItems.stream().map(rvItem -> {
 814             double sx = rvItem.getScaleX();
 815             double sy = rvItem.getScaleY();
 816             return checkImage(
 817                     rvItem.getValue(),
 818                     getRVSize(w, sx),
 819                     getRVSize(h, sy),
 820                     MultiResolutionToolkitImage.getResolutionVariantObserver(
 821                             img, o, sx, sy, true));
 822         }).reduce(0xFFFF , (a, b) -> a & b);
 823 
 824 


 825     }
 826 
 827     private boolean prepareResolutionVariants(Image img, int w, int h,
 828             ImageObserver o) {
 829 
 830         if (!(img instanceof MultiResolutionToolkitImage)) {
 831             return true;

 832         }
 833 
 834         List<ResolutionVariantItem<Image>> rvItems
 835                 = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
 836 
 837         return rvItems.stream().map(rvItem -> {
 838             double sx = rvItem.getScaleX();
 839             double sy = rvItem.getScaleY();
 840             return prepareImage(
 841                     rvItem.getValue(),
 842                     getRVSize(w, sx),
 843                     getRVSize(h, sy),
 844                     MultiResolutionToolkitImage.getResolutionVariantObserver(
 845                             img, o, sx, sy, true));
 846         }).reduce(true, (a, b) -> a && b);
 847     }
 848 
 849     private static int getRVSize(int size, double scale) {
 850         return (size == -1)
 851                 ? -1
 852                 : (scale == 1 ? size : (int) Math.round(scale * size));
 853     }
 854 
 855     protected static boolean imageCached(String fileName) {
 856         return fileImgCache.containsKey(fileName);
 857     }
 858 
 859     protected static boolean imageCached(URL url) {
 860         String key = url.toString();
 861         return urlImgCache.containsKey(key);
 862     }
 863 
 864     protected static boolean imageExists(String filename) {
 865         if (filename != null) {
 866             checkPermissions(filename);
 867             return new File(filename).exists();
 868         }
 869         return false;
 870     }
 871 
 872     @SuppressWarnings("try")


< prev index next >