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;
|