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
|