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")
|