< prev index next >

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

Print this page




  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


 890                             sm.checkConnect(url.getHost(), url.getPort());
 891                         } else {
 892                             throw se;
 893                         }
 894                     }
 895                 }
 896             } catch (java.io.IOException ioe) {
 897                     sm.checkConnect(url.getHost(), url.getPort());
 898             }
 899         }
 900     }
 901 
 902     /**
 903      * Scans {@code imageList} for best-looking image of specified dimensions.
 904      * Image can be scaled and/or padded with transparency.
 905      */
 906     public static BufferedImage getScaledIconImage(java.util.List<Image> imageList, int width, int height) {
 907         if (width == 0 || height == 0) {
 908             return null;
 909         }

















 910         Image bestImage = null;
 911         int bestWidth = 0;
 912         int bestHeight = 0;
 913         double bestSimilarity = 3; //Impossibly high value
 914         double bestScaleFactor = 0;
 915         for (Iterator<Image> i = imageList.iterator();i.hasNext();) {
 916             //Iterate imageList looking for best matching image.
 917             //'Similarity' measure is defined as good scale factor and small insets.
 918             //best possible similarity is 0 (no scale, no insets).
 919             //It's found while the experiments that good-looking result is achieved
 920             //with scale factors x1, x3/4, x2/3, xN, x1/N.
 921             Image im = i.next();
 922             if (im == null) {
 923                 continue;
 924             }
 925             if (im instanceof ToolkitImage) {
 926                 ImageRepresentation ir = ((ToolkitImage)im).getImageRep();
 927                 ir.reconstruct(ImageObserver.ALLBITS);
 928             }
 929             int iw;
 930             int ih;
 931             try {
 932                 iw = im.getWidth(null);
 933                 ih = im.getHeight(null);
 934             } catch (Exception e){
 935                 continue;




  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.ArrayList;
  50 import java.util.Collections;
  51 import java.util.Iterator;
  52 import java.util.Locale;
  53 import java.util.Map;
  54 import java.util.Vector;
  55 import java.util.WeakHashMap;
  56 import java.util.concurrent.TimeUnit;
  57 import java.util.concurrent.locks.Condition;
  58 import java.util.concurrent.locks.ReentrantLock;
  59 import java.util.LinkedList;
  60 import sun.awt.im.InputContext;
  61 import sun.awt.image.ByteArrayImageSource;
  62 import sun.awt.image.FileImageSource;
  63 import sun.awt.image.ImageRepresentation;
  64 import java.awt.image.MultiResolutionImage;
  65 import sun.awt.image.MultiResolutionToolkitImage;
  66 import sun.awt.image.ToolkitImage;
  67 import sun.awt.image.URLImageSource;
  68 import sun.font.FontDesignMetrics;
  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


 891                             sm.checkConnect(url.getHost(), url.getPort());
 892                         } else {
 893                             throw se;
 894                         }
 895                     }
 896                 }
 897             } catch (java.io.IOException ioe) {
 898                     sm.checkConnect(url.getHost(), url.getPort());
 899             }
 900         }
 901     }
 902 
 903     /**
 904      * Scans {@code imageList} for best-looking image of specified dimensions.
 905      * Image can be scaled and/or padded with transparency.
 906      */
 907     public static BufferedImage getScaledIconImage(java.util.List<Image> imageList, int width, int height) {
 908         if (width == 0 || height == 0) {
 909             return null;
 910         }
 911         java.util.List<Image> multiResolutionList = new LinkedList<>();
 912         java.util.List<Image> imagesToRemove = new ArrayList<>();
 913         for (Image image : imageList) {
 914             if (image instanceof MultiResolutionImage) {
 915                 imagesToRemove.add(image);
 916                 Image im = ((MultiResolutionImage) image).getResolutionVariant(width, height);
 917                 multiResolutionList.add(im);
 918             }
 919         }
 920         multiResolutionList.addAll(imageList);
 921         multiResolutionList.removeAll(imagesToRemove);
 922         Collections.sort(multiResolutionList, (Image m1, Image m2) -> {
 923             return m1.getWidth(null) < m2.getWidth(null) &&
 924                     m1.getHeight(null) < m2.getHeight(null) ? -1 :
 925                     m1.getHeight(null) == m2.getHeight(null) &&
 926                     m1.getWidth(null) == m2.getWidth(null) ? 0 : 1;
 927         });
 928         Image bestImage = null;
 929         int bestWidth = 0;
 930         int bestHeight = 0;
 931         double bestSimilarity = 3; //Impossibly high value
 932         double bestScaleFactor = 0;
 933         for (Iterator<Image> i = multiResolutionList.iterator();i.hasNext();) {
 934             //Iterate imageList looking for best matching image.
 935             //'Similarity' measure is defined as good scale factor and small insets.
 936             //best possible similarity is 0 (no scale, no insets).
 937             //It's found while the experiments that good-looking result is achieved
 938             //with scale factors x1, x3/4, x2/3, xN, x1/N.
 939             Image im = i.next();
 940             if (im == null) {
 941                 continue;
 942             }
 943             if (im instanceof ToolkitImage) {
 944                 ImageRepresentation ir = ((ToolkitImage)im).getImageRep();
 945                 ir.reconstruct(ImageObserver.ALLBITS);
 946             }
 947             int iw;
 948             int ih;
 949             try {
 950                 iw = im.getWidth(null);
 951                 ih = im.getHeight(null);
 952             } catch (Exception e){
 953                 continue;


< prev index next >