package com.kreative.paint.datatransfer; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import com.kreative.paint.document.draw.DrawObject; import com.kreative.paint.document.draw.GroupDrawObject; public class DrawObjectSelection implements ClipboardOwner, Transferable { // I has a flavor. public static final DataFlavor drawObjectFlavor = new DataFlavor(GroupDrawObject.class, "Draw Objects"); private GroupDrawObject myObjects; public DrawObjectSelection(DrawObject o) { List<DrawObject> objects = new ArrayList<DrawObject>(); objects.add(o.clone()); myObjects = new GroupDrawObject(objects); } public DrawObjectSelection(DrawObject[] o) { List<DrawObject> objects = new ArrayList<DrawObject>(); for (DrawObject d : o) objects.add(d.clone()); myObjects = new GroupDrawObject(objects); } public DrawObjectSelection(Collection<? extends DrawObject> o) { List<DrawObject> objects = new ArrayList<DrawObject>(); for (DrawObject d : o) objects.add(d.clone()); myObjects = new GroupDrawObject(objects); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (drawObjectFlavor.equals(flavor)) { return myObjects; } else if (DataFlavor.imageFlavor.equals(flavor)) { Rectangle b = myObjects.getBounds(); BufferedImage bi = new BufferedImage(b.width, b.height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = bi.createGraphics(); myObjects.paint(g, -b.x, -b.y); g.dispose(); return bi; } else { throw new UnsupportedFlavorException(flavor); } } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{drawObjectFlavor, DataFlavor.imageFlavor}; } public boolean isDataFlavorSupported(DataFlavor flavor) { return (drawObjectFlavor.equals(flavor) || DataFlavor.imageFlavor.equals(flavor)); } public void lostOwnership(Clipboard clipboard, Transferable contents) { // nothing } }