diff --git a/README.md b/README.md index d449056..ac771b6 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,8 @@ A screenshot tool which opens GIMP (or any other image editor) with a shot of th I originally wanted to use rust for this, however, screenshot-rs is completely broken and I don't feel like fixing it because I don't have much experience with rust. + +## Roadmap + +- Support for some primitive on-screen cutting +- Support for automatic copying to clipboard [DONE] diff --git a/bin/main/de/tudbut/gimpshot/GIMPShot.class b/bin/main/de/tudbut/gimpshot/GIMPShot.class index 1892cd7..6c39bae 100644 Binary files a/bin/main/de/tudbut/gimpshot/GIMPShot.class and b/bin/main/de/tudbut/gimpshot/GIMPShot.class differ diff --git a/src/main/java/de/tudbut/gimpshot/Config.java b/src/main/java/de/tudbut/gimpshot/Config.java new file mode 100644 index 0000000..99adae3 --- /dev/null +++ b/src/main/java/de/tudbut/gimpshot/Config.java @@ -0,0 +1,47 @@ +package de.tudbut.gimpshot; + +import java.io.FileInputStream; +import java.io.FileOutputStream; + +import javax.swing.JOptionPane; + +import de.tudbut.io.StreamReader; +import tudbut.parsing.TCN; + +public class Config { + TCN data; + + public Config(String path) { + try { + FileInputStream st = new FileInputStream(path); + data = TCN.read(new StreamReader(st).readAllAsString()); + st.close(); + } catch(Exception e) { + data = new TCN(); + data.set("command", "gimp -ndfs '$f'"); + data.set("copy", "false"); + try { + FileOutputStream st = new FileOutputStream(path); + st.write(data.toString().getBytes()); + st.flush(); + st.close(); + } catch (Exception e1) { + JOptionPane.showMessageDialog(null, "Unable to take screenshot because the config (" + path + ") could not be accessed (rw)"); + e.printStackTrace(); + e1.printStackTrace(); + } + } + } + + public String getCommand() { + return data.getString("command"); + } + + public boolean shouldCopy() { + Boolean copy = data.getBoolean("copy"); + if(copy == null) { + copy = false; + } + return copy; + } +} diff --git a/src/main/java/de/tudbut/gimpshot/GIMPShot.java b/src/main/java/de/tudbut/gimpshot/GIMPShot.java index fda78fb..ff77a88 100644 --- a/src/main/java/de/tudbut/gimpshot/GIMPShot.java +++ b/src/main/java/de/tudbut/gimpshot/GIMPShot.java @@ -1,6 +1,10 @@ package de.tudbut.gimpshot; import java.awt.AWTException; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; @@ -8,6 +12,7 @@ import java.io.IOException; import javax.imageio.ImageIO; +import de.tudbut.gimpshot.clipboard.ImageTransferable; import tudbut.tools.Tools2; public class GIMPShot { @@ -23,6 +28,10 @@ public class GIMPShot { // Read config now Config config = new Config(getConfigPath()); + if(config.shouldCopy()) { + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new ImageTransferable(image, "GIMPShot Screenshot"), null); + System.out.println("Copied!"); + } Runtime.getRuntime().exec(new String[] { "sh", "-c", diff --git a/src/main/java/de/tudbut/gimpshot/clipboard/ImageTransferable.java b/src/main/java/de/tudbut/gimpshot/clipboard/ImageTransferable.java new file mode 100644 index 0000000..85b0d52 --- /dev/null +++ b/src/main/java/de/tudbut/gimpshot/clipboard/ImageTransferable.java @@ -0,0 +1,46 @@ +package de.tudbut.gimpshot.clipboard; + +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; +import java.awt.Image; +import java.awt.datatransfer.DataFlavor; + +public class ImageTransferable implements Transferable { + + Image imageData; + String stringData; + + public ImageTransferable(Image imageData, String stringData) { + this.imageData = imageData; + this.stringData = stringData; + } + + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[] { + DataFlavor.stringFlavor, + DataFlavor.imageFlavor + }; + } + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + DataFlavor[] flavors = getTransferDataFlavors(); + for(int i = 0; i < flavors.length ; i++) { + if(flavors[i].equals(flavor)) + return true; + } + return false; + } + + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + if(flavor.equals(DataFlavor.stringFlavor)) + return stringData; + if(flavor.equals(DataFlavor.imageFlavor)) + return imageData; + throw new UnsupportedFlavorException(flavor); + } + +}