From de1b5cbb75d1fd8849866840ceec6b06d501ce09 Mon Sep 17 00:00:00 2001 From: TudbuT Date: Fri, 29 Jul 2022 00:48:36 +0200 Subject: [PATCH] add Config.java to repo (i forgot to do that in previous commit), add clipboard support --- README.md | 5 ++ bin/main/de/tudbut/gimpshot/GIMPShot.class | Bin 2782 -> 3433 bytes src/main/java/de/tudbut/gimpshot/Config.java | 47 ++++++++++++++++++ .../java/de/tudbut/gimpshot/GIMPShot.java | 9 ++++ .../gimpshot/clipboard/ImageTransferable.java | 46 +++++++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 src/main/java/de/tudbut/gimpshot/Config.java create mode 100644 src/main/java/de/tudbut/gimpshot/clipboard/ImageTransferable.java 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 1892cd78a55c69611e76d8ce6f227753c50112c6..6c39baeab5c78a525b9a1b6278a4b6be586ec0d1 100644 GIT binary patch delta 1542 zcmZuwX;2$w7=Ato*=4(0yS9{KTUuKroDqvU6-UL?0;32+7$N)+mt;v&lHHhWpm@cj zRq?3RRcqB+>s76arRow2J*;;w{80NdmE;|uk$ECtD)}fCgEe>GuBzaW_TPpw^zHsyz`+ zgu!rXLsN6BmypZ6{7Dq%KO#w}P);25VzbO{@An}Azs zvK(yfbj;1Y9YfZbqttsRLrx+j;%+*t{1Q5GkBrUm(BjZQJw`OD>H!h=QFvvqgeACN z#sfS&m%{Zu2_up;wN}*(NvOdV84qErHIe6?_XsD%C2YfX0go{(wkDj5du2S19SkCI zJHi1oG_{dUocg4Uv+)$w?rO>|T13@@ZmK=32dVaF7}$C)_pFTPxJEu{G-}~sh(=zF z=Ve@g7bp#t9)2AV@d`i5??%`%Mv=D8an?HbVnV>U6>}Ek z?!yji$T?ikaFW+l{e8`9tex+ifCD1lqslwiG<17fE??W!(B0V5e2It;$WAh$#j8U` zRFi0)M`V12qn0MDc6~zSx~u($-Wv{z_>32y-EZE_FJ#)(FBwW*)>22IH7O`nU(5K0 zKis@%UmzS8@g0dDe-k3Ur^#g0s!hLcT`1~Iv4+K}{Da6RE#NQfnAnzDSHTyGzn}uY5$JbR;!l#BL(;XG24O!A(9MBAa1gJ7QS=B7;dSItx;w!ED_Ks&|`sBFBPQ@^Cl?or}1GLt9YM2rY=x}#!!(U{%Dr?1;M=`N@x z;9-qMW@BJepm=>C7Amf4i6tV@pvhY5)Yr7a(x664b66)Nv8c{q1rd`*$~BBoFi{?l zMgy^Wo%K>4*JKc5gNL~4^o-8mNRx&xpqfa1BCO%^PF!qILc*k!7WKoE<89T@HaksQ zOtw1kbb&7lMnd6)K>^!M=Fp~*tA2X2RHx?2D02wfO?I+NReGum_c&v#boL3+6rBT3 z+NyKNiD83Uj+h+fm}=3dr=8%Ghm)#PALcqulX|ar_;jvm3|TS1qPBc_<-)}kwTqT7 zTcC48gtRmVn|$GTG-xn}TPC-;qk7V3dhdy+VqaZ6)({ElJa8OFq8pmSaZ#MdBa>7f zYZQ7_zI(WuYFK4YO*-h*NR6(mkBCKC!%CfQ8BzSVQ|Gy?bAZ#AsEavFFHLMURcyzN zm^Mg#Gm6rKqzgNIQCS&P?MYUry{5$Pvg)h-ZmXf%pE|;A6Smg%QQ)6!6HU_G!whSa z&1^|G+ibI$YqP`J{SRXAe~A5m`W^H^r&+ki#s~E`|atVsBM)KuF3S=jv=w&qTr2aux{F$+2^#7av7Ezp$%*{v6 zat=+nZ*iUrGIf@GxyYbPxP-io%Ur>&KAAb~R~=i{^&~fwOmm#y6<=cc6_Z`OrDSOz zdHzY({T?3LJgIRqr(@C|bk_jdde&cm(Iw*tEDn}QFoE$DG7WFPOj9I{$43uIscF1& Iw5HJe8>nv2sQ>@~ 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); + } + +}