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


 734     }
 735 
 736     @Override
 737     public Image createImage(URL url) {
 738         checkPermissions(url);
 739         return createImage(new URLImageSource(url));
 740     }
 741 
 742     @Override
 743     public Image createImage(byte[] data, int offset, int length) {
 744         return createImage(new ByteArrayImageSource(data, offset, length));
 745     }
 746 
 747     @Override
 748     public Image createImage(ImageProducer producer) {
 749         return new ToolkitImage(producer);
 750     }
 751 
 752     public static Image createImageWithResolutionVariant(Image image,
 753             Image resolutionVariant) {
 754         return new MultiResolutionToolkitImage(image, resolutionVariant);

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

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

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














 831         }
 832         return null;


 833     }
 834 
 835     protected static boolean imageCached(String fileName) {
 836         return fileImgCache.containsKey(fileName);
 837     }
 838 
 839     protected static boolean imageCached(URL url) {
 840         String key = url.toString();
 841         return urlImgCache.containsKey(key);
 842     }
 843 
 844     protected static boolean imageExists(String filename) {
 845         if (filename != null) {
 846             checkPermissions(filename);
 847             return new File(filename).exists();
 848         }
 849         return false;
 850     }
 851 
 852     @SuppressWarnings("try")
 853     protected static boolean imageExists(URL url) {
 854         if (url != null) {
 855             checkPermissions(url);
 856             try (InputStream is = url.openStream()) {
 857                 return true;
 858             }catch(IOException e){
 859                 return false;
 860             }
 861         }
 862         return false;
 863     }
 864 




  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.net.util.URLUtil;
  68 import sun.security.action.GetBooleanAction;
  69 import sun.security.action.GetPropertyAction;
  70 import sun.util.logging.PlatformLogger;
  71 import java.util.Arrays;
  72 import java.util.List;
  73 import sun.awt.image.MultiResolutionToolkitImage.ResolutionVariantItem;
  74 
  75 import static java.awt.RenderingHints.*;
  76 
  77 public abstract class SunToolkit extends Toolkit
  78     implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
  79 
  80     // 8014718: logging has been removed from SunToolkit
  81 
  82     /* Load debug settings for native code */
  83     static {
  84         if (AccessController.doPrivileged(new GetBooleanAction("sun.awt.nativedebug"))) {
  85             DebugSettings.init();
  86         }
  87     };
  88 
  89     /**
  90      * Special mask for the UngrabEvent events, in addition to the
  91      * public masks defined in AWTEvent.  Should be used as the mask
  92      * value for Toolkit.addAWTEventListener.
  93      */


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






 802         }
 803 
 804         List<ResolutionVariantItem> rvItems
 805                 = ((MultiResolutionToolkitImage) img).getResolutionVariantItems();
 806 
 807         return rvItems.stream().map(rvItem -> {
 808             double scaleX = rvItem.getScaleX();
 809             double scaleY = rvItem.getScaleY();
 810             return checkImage(
 811                     rvItem.getImage(),
 812                     getRVSize(w, scaleX),
 813                     getRVSize(h, scaleY),
 814                     MultiResolutionToolkitImage.getResolutionVariantObserver(
 815                             img, o, scaleX, scaleY, true));
 816         }).reduce(0xFFFF , (a, b) -> a & b);
 817 
 818 


 819     }
 820 
 821     private boolean prepareResolutionVariants(Image img, int w, int h,
 822             ImageObserver o) {
 823 
 824         if (!(img instanceof MultiResolutionToolkitImage)) {
 825             return true;

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


< prev index next >