31 import java.awt.datatransfer.Transferable;
32 import java.awt.datatransfer.UnsupportedFlavorException;
33
34 import java.awt.image.BufferedImage;
35 import java.awt.image.ColorModel;
36 import java.awt.image.WritableRaster;
37
38 import java.io.BufferedReader;
39 import java.io.InputStream;
40 import java.io.InputStreamReader;
41 import java.io.IOException;
42
43 import java.net.URI;
44 import java.net.URISyntaxException;
45
46 import java.util.ArrayList;
47 import java.util.Iterator;
48 import java.util.List;
49
50 import javax.imageio.ImageIO;
51 import javax.imageio.ImageTypeSpecifier;
52 import javax.imageio.ImageWriter;
53 import javax.imageio.spi.ImageWriterSpi;
54
55 import sun.awt.datatransfer.DataTransferer;
56 import sun.awt.datatransfer.ToolkitThreadBlockedHandler;
57
58 import java.io.ByteArrayOutputStream;
59 import java.util.stream.Stream;
60
61 /**
62 * Platform-specific support for the data transfer subsystem.
63 */
64 public class XDataTransferer extends DataTransferer {
65 static final XAtom FILE_NAME_ATOM = XAtom.get("FILE_NAME");
66 static final XAtom DT_NET_FILE_ATOM = XAtom.get("_DT_NETFILE");
67 static final XAtom PNG_ATOM = XAtom.get("PNG");
68 static final XAtom JFIF_ATOM = XAtom.get("JFIF");
69 static final XAtom TARGETS_ATOM = XAtom.get("TARGETS");
70 static final XAtom INCR_ATOM = XAtom.get("INCR");
337 return flavors;
338 }
339
340 DataFlavor df = null;
341
342 try {
343 df = new DataFlavor(nat);
344 } catch (Exception e) {
345 // The string doesn't constitute a valid MIME type.
346 return flavors;
347 }
348
349 DataFlavor value = df;
350 final String primaryType = df.getPrimaryType();
351 final String baseType = primaryType + "/" + df.getSubType();
352
353 // For text formats we map natives to MIME strings instead of data
354 // flavors to enable dynamic text native-to-flavor mapping generation.
355 // See SystemFlavorMap.getFlavorsForNative() for details.
356 if ("image".equals(primaryType)) {
357 Iterator readers = ImageIO.getImageReadersByMIMEType(baseType);
358 if (readers.hasNext()) {
359 flavors.add(DataFlavor.imageFlavor);
360 }
361 }
362
363 flavors.add(value);
364
365 return flavors;
366 }
367
368 private static ImageTypeSpecifier defaultSpecifier = null;
369
370 private ImageTypeSpecifier getDefaultImageTypeSpecifier() {
371 if (defaultSpecifier == null) {
372 ColorModel model = ColorModel.getRGBdefault();
373 WritableRaster raster =
374 model.createCompatibleWritableRaster(10, 10);
375
376 BufferedImage bufferedImage =
377 new BufferedImage(model, raster, model.isAlphaPremultiplied(),
|
31 import java.awt.datatransfer.Transferable;
32 import java.awt.datatransfer.UnsupportedFlavorException;
33
34 import java.awt.image.BufferedImage;
35 import java.awt.image.ColorModel;
36 import java.awt.image.WritableRaster;
37
38 import java.io.BufferedReader;
39 import java.io.InputStream;
40 import java.io.InputStreamReader;
41 import java.io.IOException;
42
43 import java.net.URI;
44 import java.net.URISyntaxException;
45
46 import java.util.ArrayList;
47 import java.util.Iterator;
48 import java.util.List;
49
50 import javax.imageio.ImageIO;
51 import javax.imageio.ImageReader;
52 import javax.imageio.ImageTypeSpecifier;
53 import javax.imageio.ImageWriter;
54 import javax.imageio.spi.ImageWriterSpi;
55
56 import sun.awt.datatransfer.DataTransferer;
57 import sun.awt.datatransfer.ToolkitThreadBlockedHandler;
58
59 import java.io.ByteArrayOutputStream;
60 import java.util.stream.Stream;
61
62 /**
63 * Platform-specific support for the data transfer subsystem.
64 */
65 public class XDataTransferer extends DataTransferer {
66 static final XAtom FILE_NAME_ATOM = XAtom.get("FILE_NAME");
67 static final XAtom DT_NET_FILE_ATOM = XAtom.get("_DT_NETFILE");
68 static final XAtom PNG_ATOM = XAtom.get("PNG");
69 static final XAtom JFIF_ATOM = XAtom.get("JFIF");
70 static final XAtom TARGETS_ATOM = XAtom.get("TARGETS");
71 static final XAtom INCR_ATOM = XAtom.get("INCR");
338 return flavors;
339 }
340
341 DataFlavor df = null;
342
343 try {
344 df = new DataFlavor(nat);
345 } catch (Exception e) {
346 // The string doesn't constitute a valid MIME type.
347 return flavors;
348 }
349
350 DataFlavor value = df;
351 final String primaryType = df.getPrimaryType();
352 final String baseType = primaryType + "/" + df.getSubType();
353
354 // For text formats we map natives to MIME strings instead of data
355 // flavors to enable dynamic text native-to-flavor mapping generation.
356 // See SystemFlavorMap.getFlavorsForNative() for details.
357 if ("image".equals(primaryType)) {
358 Iterator<ImageReader> readers = ImageIO.getImageReadersByMIMEType(baseType);
359 if (readers.hasNext()) {
360 flavors.add(DataFlavor.imageFlavor);
361 }
362 }
363
364 flavors.add(value);
365
366 return flavors;
367 }
368
369 private static ImageTypeSpecifier defaultSpecifier = null;
370
371 private ImageTypeSpecifier getDefaultImageTypeSpecifier() {
372 if (defaultSpecifier == null) {
373 ColorModel model = ColorModel.getRGBdefault();
374 WritableRaster raster =
375 model.createCompatibleWritableRaster(10, 10);
376
377 BufferedImage bufferedImage =
378 new BufferedImage(model, raster, model.isAlphaPremultiplied(),
|