aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java13
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java19
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/images/Image.java67
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/utils/IOUtils.java75
4 files changed, 153 insertions, 21 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
index 4103bca..668fdb3 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java
@@ -1,6 +1,5 @@
package cc.polyfrost.oneconfig.gui.elements;
-import cc.polyfrost.oneconfig.internal.assets.Colors;
import cc.polyfrost.oneconfig.config.core.OneColor;
import cc.polyfrost.oneconfig.gui.OneConfigGui;
import cc.polyfrost.oneconfig.gui.animations.Animation;
@@ -9,21 +8,21 @@ import cc.polyfrost.oneconfig.gui.animations.EaseInOutCubic;
import cc.polyfrost.oneconfig.gui.animations.EaseInOutQuad;
import cc.polyfrost.oneconfig.gui.elements.text.NumberInputField;
import cc.polyfrost.oneconfig.gui.elements.text.TextInputField;
+import cc.polyfrost.oneconfig.internal.assets.Colors;
+import cc.polyfrost.oneconfig.internal.assets.Images;
+import cc.polyfrost.oneconfig.internal.assets.SVGs;
import cc.polyfrost.oneconfig.internal.config.OneConfigConfig;
import cc.polyfrost.oneconfig.renderer.RenderManager;
import cc.polyfrost.oneconfig.renderer.font.Fonts;
-import cc.polyfrost.oneconfig.internal.assets.Images;
-import cc.polyfrost.oneconfig.internal.assets.SVGs;
import cc.polyfrost.oneconfig.renderer.scissor.Scissor;
import cc.polyfrost.oneconfig.renderer.scissor.ScissorManager;
+import cc.polyfrost.oneconfig.utils.IOUtils;
import cc.polyfrost.oneconfig.utils.InputUtils;
import cc.polyfrost.oneconfig.utils.NetworkUtils;
import cc.polyfrost.oneconfig.utils.color.ColorPalette;
import org.lwjgl.input.Mouse;
import java.awt.*;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
public class ColorSelector {
@@ -354,11 +353,11 @@ public class ColorSelector {
private void parseHex() {
if (copyBtn.isClicked()) {
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(color.getHex()), null);
+ IOUtils.copyStringToClipboard(color.getHex());
}
if (pasteBtn.isClicked() && mode != 2) {
try {
- color.setColorFromHex(Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).getTransferData(DataFlavor.stringFlavor).toString());
+ color.setColorFromHex(IOUtils.getStringFromClipboard());
hexInput.setInput("#" + color.getHex());
} catch (Exception ignored) {
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
index f0f1447..c164eb6 100644
--- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/text/TextInputField.java
@@ -1,24 +1,23 @@
package cc.polyfrost.oneconfig.gui.elements.text;
-import cc.polyfrost.oneconfig.internal.assets.Colors;
import cc.polyfrost.oneconfig.gui.elements.BasicElement;
+import cc.polyfrost.oneconfig.internal.assets.Colors;
+import cc.polyfrost.oneconfig.internal.assets.SVGs;
+import cc.polyfrost.oneconfig.libs.universal.UKeyboard;
import cc.polyfrost.oneconfig.renderer.RenderManager;
import cc.polyfrost.oneconfig.renderer.font.Fonts;
-import cc.polyfrost.oneconfig.internal.assets.SVGs;
import cc.polyfrost.oneconfig.renderer.scissor.Scissor;
import cc.polyfrost.oneconfig.renderer.scissor.ScissorManager;
+import cc.polyfrost.oneconfig.utils.IOUtils;
import cc.polyfrost.oneconfig.utils.InputUtils;
import cc.polyfrost.oneconfig.utils.MathUtils;
import cc.polyfrost.oneconfig.utils.TextUtils;
-import cc.polyfrost.oneconfig.libs.universal.UKeyboard;
import org.jetbrains.annotations.NotNull;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
-import java.awt.*;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
+import java.util.Objects;
public class TextInputField extends BasicElement {
@@ -262,15 +261,15 @@ public class TextInputField extends BasicElement {
if (toggled) {
if (UKeyboard.isKeyComboCtrlC(key)) {
if (selectedText != null && start != 0f && end != 0f) {
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(selectedText), null);
+ IOUtils.copyStringToClipboard(selectedText);
}
return;
}
if (UKeyboard.isKeyComboCtrlV(key) || key == Keyboard.KEY_INSERT) { // TODO: find the UKeyboard equivalent for insert
try {
- String clip = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).getTransferData(DataFlavor.stringFlavor).toString();
+ String clip = IOUtils.getStringFromClipboard();
input = input.substring(0, caretPos) + clip + input.substring(caretPos);
- caretPos = caretPos + clip.length();
+ caretPos = caretPos + Objects.requireNonNull(clip).length();
return;
} catch (Exception e) {
e.printStackTrace();
@@ -307,7 +306,7 @@ public class TextInputField extends BasicElement {
}
if (UKeyboard.isKeyComboCtrlX(key)) {
if (selectedText != null && start != 0f && end != 0f) {
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(selectedText), null);
+ IOUtils.copyStringToClipboard(selectedText);
key = UKeyboard.KEY_BACKSPACE;
} else return;
}
diff --git a/src/main/java/cc/polyfrost/oneconfig/images/Image.java b/src/main/java/cc/polyfrost/oneconfig/images/Image.java
index 9cc75a0..caae084 100644
--- a/src/main/java/cc/polyfrost/oneconfig/images/Image.java
+++ b/src/main/java/cc/polyfrost/oneconfig/images/Image.java
@@ -1,12 +1,20 @@
package cc.polyfrost.oneconfig.images;
+import cc.polyfrost.oneconfig.internal.OneConfig;
+import cc.polyfrost.oneconfig.utils.IOUtils;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.AffineTransform;
-import java.awt.image.*;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Base64;
import java.util.Objects;
/** An Image wrapper class that is used by the OneConfig system.*/
@@ -125,6 +133,57 @@ public class Image {
ImageIO.write(image, "png", new File(filePath));
}
+ /** Attempt to upload the image to Imgur, returning the JSON that the server replied with. */
+ public JsonObject uploadToImgur() {
+ try {
+ // thanks stack overflow for the help with this :_)
+ URL url = new URL("https://api.imgur.com/3/image");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setDoInput(true);
+ con.setDoOutput(true);
+ con.setRequestMethod("POST");
+ con.setRequestProperty("Authorization", "Client-ID " + "6cfc432a9954f4d");
+ con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+ con.connect();
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ ImageIO.write(image, "png", byteOut);
+ String encoded = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(Base64.getEncoder().encodeToString(byteOut.toByteArray()), "UTF-8");
+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
+ writer.write(encoded);
+ byteOut.close();
+ writer.close();
+ if(con.getResponseCode() != 200) {
+ OneConfig.LOGGER.error("Error uploading image to Imgur: " + con.getResponseCode());
+ return null;
+ }
+
+ BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ JsonObject object = new JsonParser().parse(rd).getAsJsonObject();
+ rd.close();
+
+ return object;
+ } catch (Exception e) {
+ e.printStackTrace();
+ OneConfig.LOGGER.error("Error uploading image to Imgur.");
+ return null;
+ }
+ }
+
+ /** Attempt to upload the image to Imgur, returning the URL that the image is hosted at.
+ * @param copy weather or not to copy the URL to the clipboard as well. */
+ public String uploadToImgur(boolean copy) {
+ JsonObject object = uploadToImgur();
+ String link = object.get("data").getAsJsonObject().get("link").getAsString();
+ if(copy) IOUtils.copyStringToClipboard(link);
+ return link;
+ }
+
+ /** Copy the image to the system clipboard and delete the graphics object. */
+ public void copyToClipboard() {
+ IOUtils.copyImageToClipboard(image);
+ dispose();
+ }
+
diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/IOUtils.java b/src/main/java/cc/polyfrost/oneconfig/utils/IOUtils.java
index efb0c16..ee7e80e 100644
--- a/src/main/java/cc/polyfrost/oneconfig/utils/IOUtils.java
+++ b/src/main/java/cc/polyfrost/oneconfig/utils/IOUtils.java
@@ -1,5 +1,9 @@
package cc.polyfrost.oneconfig.utils;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.*;
+import java.awt.datatransfer.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -52,4 +56,75 @@ public final class IOUtils {
}
}
+ /**
+ * Copy the specified String to the System Clipboard.
+ * @param s the string to copy
+ */
+ public static void copyStringToClipboard(String s) {
+ StringSelection stringSelection = new StringSelection(s);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
+ }
+
+ /**
+ * Return the String on the system clipboard.
+ * @return the string on the system clipboard, or null if there is no string on the clipboard or another error occurred.
+ */
+ public static String getStringFromClipboard() {
+ try {
+ return Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).getTransferData(DataFlavor.stringFlavor).toString();
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * Copy the given image to the System Clipboard.
+ * @param image the image to copy
+ */
+ public static void copyImageToClipboard(Image image) {
+ ImageSelection imageSelection = new ImageSelection(image);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imageSelection, null);
+ }
+
+ /**
+ * Return the image on the system clipboard.
+ * @return the image on the system clipboard, or null if there is no image on the clipboard or another error occurred.
+ */
+ public static Image getImageFromClipboard() {
+ try {
+ return (Image) Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).getTransferData(DataFlavor.imageFlavor);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+
+
+
+
+ private static class ImageSelection implements Transferable {
+ private final Image image;
+ public ImageSelection(Image image) {
+ this.image = image;
+ }
+
+ @Override
+ public DataFlavor[] getTransferDataFlavors() {
+ return new DataFlavor[] {DataFlavor.imageFlavor};
+ }
+
+ @Override
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
+ return DataFlavor.imageFlavor.equals(flavor);
+ }
+
+ @NotNull
+ @Override
+ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
+ if(!DataFlavor.imageFlavor.equals(flavor)) {
+ throw new UnsupportedFlavorException(flavor);
+ }
+ return image;
+ }
+ }
} \ No newline at end of file