From cb338dd7e6ab834a1446b65ea9adcc47b233217b Mon Sep 17 00:00:00 2001
From: Juuxel
Date: Sat, 20 Mar 2021 14:02:47 +0200
Subject: Switch to SVG icons instead of PNGs and add icon for records
The PNG icons scaled horribly on FlatLaf but these ones look smooth on any scaling level.
Note: even though the icons are FlatSVGIcons from FlatLaf, they work properly on all LaFs
if the FlatLaf UI scale property is set to the correct value (which
LookAndFeel.setGlobalLAF does).
---
enigma-swing/build.gradle | 1 +
.../java/cuchaz/enigma/gui/config/LookAndFeel.java | 1 +
.../main/java/cuchaz/enigma/gui/util/GuiUtil.java | 20 ++--
.../src/main/resources/icons/annotation.png | Bin 877 -> 0 bytes
.../src/main/resources/icons/annotation.svg | 112 ++++++++++++++++++++
enigma-swing/src/main/resources/icons/class.png | Bin 768 -> 0 bytes
enigma-swing/src/main/resources/icons/class.svg | 88 ++++++++++++++++
.../src/main/resources/icons/constructor.png | Bin 751 -> 0 bytes
.../src/main/resources/icons/constructor.svg | 113 +++++++++++++++++++++
enigma-swing/src/main/resources/icons/enum.png | Bin 506 -> 0 bytes
enigma-swing/src/main/resources/icons/enum.svg | 88 ++++++++++++++++
enigma-swing/src/main/resources/icons/field.png | Bin 534 -> 0 bytes
enigma-swing/src/main/resources/icons/field.svg | 88 ++++++++++++++++
.../src/main/resources/icons/interface.png | Bin 538 -> 0 bytes
.../src/main/resources/icons/interface.svg | 88 ++++++++++++++++
enigma-swing/src/main/resources/icons/method.png | Bin 633 -> 0 bytes
enigma-swing/src/main/resources/icons/method.svg | 113 +++++++++++++++++++++
enigma-swing/src/main/resources/icons/record.svg | 88 ++++++++++++++++
18 files changed, 787 insertions(+), 13 deletions(-)
delete mode 100644 enigma-swing/src/main/resources/icons/annotation.png
create mode 100644 enigma-swing/src/main/resources/icons/annotation.svg
delete mode 100644 enigma-swing/src/main/resources/icons/class.png
create mode 100644 enigma-swing/src/main/resources/icons/class.svg
delete mode 100644 enigma-swing/src/main/resources/icons/constructor.png
create mode 100644 enigma-swing/src/main/resources/icons/constructor.svg
delete mode 100644 enigma-swing/src/main/resources/icons/enum.png
create mode 100644 enigma-swing/src/main/resources/icons/enum.svg
delete mode 100644 enigma-swing/src/main/resources/icons/field.png
create mode 100644 enigma-swing/src/main/resources/icons/field.svg
delete mode 100644 enigma-swing/src/main/resources/icons/interface.png
create mode 100644 enigma-swing/src/main/resources/icons/interface.svg
delete mode 100644 enigma-swing/src/main/resources/icons/method.png
create mode 100644 enigma-swing/src/main/resources/icons/method.svg
create mode 100644 enigma-swing/src/main/resources/icons/record.svg
(limited to 'enigma-swing')
diff --git a/enigma-swing/build.gradle b/enigma-swing/build.gradle
index 06b28bb3..319f73a3 100644
--- a/enigma-swing/build.gradle
+++ b/enigma-swing/build.gradle
@@ -9,6 +9,7 @@ dependencies {
implementation 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3'
implementation 'com.formdev:flatlaf:1.0'
+ implementation 'com.formdev:flatlaf-extras:1.0' // for SVG icons
implementation 'de.sciss:syntaxpane:1.2.0'
implementation 'com.github.lukeu:swing-dpi:0.9'
implementation 'org.drjekyll:fontchooser:2.4'
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
index e21ef52c..3edc87a2 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java
@@ -36,6 +36,7 @@ public enum LookAndFeel {
public void setGlobalLAF() {
// Configure FlatLaf's UI scale to be our scale factor.
+ // This is also used for the SVG icons, so it applies even when some other LaF is active.
System.setProperty(FlatSystemProperties.UI_SCALE, Float.toString(ScaleUtil.getScaleFactor()));
try {
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
index 1a86148d..60414f99 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
@@ -1,19 +1,18 @@
package cuchaz.enigma.gui.util;
+import com.formdev.flatlaf.extras.FlatSVGIcon;
import cuchaz.enigma.gui.Gui;
import cuchaz.enigma.translation.representation.AccessFlags;
import cuchaz.enigma.translation.representation.entry.ClassEntry;
import cuchaz.enigma.translation.representation.entry.MethodEntry;
import cuchaz.enigma.utils.Os;
-import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.font.TextAttribute;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
@@ -23,6 +22,7 @@ public class GuiUtil {
public static final Icon INTERFACE_ICON = loadIcon("interface");
public static final Icon ENUM_ICON = loadIcon("enum");
public static final Icon ANNOTATION_ICON = loadIcon("annotation");
+ public static final Icon RECORD_ICON = loadIcon("record");
public static final Icon METHOD_ICON = loadIcon("method");
public static final Icon FIELD_ICON = loadIcon("field");
public static final Icon CONSTRUCTOR_ICON = loadIcon("constructor");
@@ -79,15 +79,9 @@ public class GuiUtil {
}
public static Icon loadIcon(String name) {
- try {
- InputStream inputStream = GuiUtil.class.getResourceAsStream("/icons/" + name + ".png");
- Image image = ImageIO.read(inputStream).getScaledInstance(ScaleUtil.scale(16), ScaleUtil.scale(16), Image.SCALE_DEFAULT);
- return new ImageIcon(image);
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return null;
+ // Note: the width and height are scaled automatically because the FlatLaf UI scale
+ // is set in LookAndFeel.setGlobalLAF()
+ return new FlatSVGIcon("icons/" + name + ".svg", 16, 16, GuiUtil.class.getClassLoader());
}
public static Icon getClassIcon(Gui gui, ClassEntry entry) {
@@ -100,9 +94,9 @@ public class GuiUtil {
return INTERFACE_ICON;
} else if (access.isEnum()) {
return ENUM_ICON;
+ } else if (access.isRecord()) {
+ return RECORD_ICON;
}
-
- // TODO: Record icon?
}
return CLASS_ICON;
diff --git a/enigma-swing/src/main/resources/icons/annotation.png b/enigma-swing/src/main/resources/icons/annotation.png
deleted file mode 100644
index 9589a67e..00000000
Binary files a/enigma-swing/src/main/resources/icons/annotation.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/annotation.svg b/enigma-swing/src/main/resources/icons/annotation.svg
new file mode 100644
index 00000000..b6855571
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/annotation.svg
@@ -0,0 +1,112 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/class.png b/enigma-swing/src/main/resources/icons/class.png
deleted file mode 100644
index 17d82ecd..00000000
Binary files a/enigma-swing/src/main/resources/icons/class.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/class.svg b/enigma-swing/src/main/resources/icons/class.svg
new file mode 100644
index 00000000..bd76406d
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/class.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/constructor.png b/enigma-swing/src/main/resources/icons/constructor.png
deleted file mode 100644
index 3728b554..00000000
Binary files a/enigma-swing/src/main/resources/icons/constructor.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/constructor.svg b/enigma-swing/src/main/resources/icons/constructor.svg
new file mode 100644
index 00000000..8dd8f679
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/constructor.svg
@@ -0,0 +1,113 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/enum.png b/enigma-swing/src/main/resources/icons/enum.png
deleted file mode 100644
index b64dc829..00000000
Binary files a/enigma-swing/src/main/resources/icons/enum.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/enum.svg b/enigma-swing/src/main/resources/icons/enum.svg
new file mode 100644
index 00000000..25eaf0bb
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/enum.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/field.png b/enigma-swing/src/main/resources/icons/field.png
deleted file mode 100644
index 4ac1aab9..00000000
Binary files a/enigma-swing/src/main/resources/icons/field.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/field.svg b/enigma-swing/src/main/resources/icons/field.svg
new file mode 100644
index 00000000..6a89f3a8
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/field.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/interface.png b/enigma-swing/src/main/resources/icons/interface.png
deleted file mode 100644
index fc2bfe56..00000000
Binary files a/enigma-swing/src/main/resources/icons/interface.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/interface.svg b/enigma-swing/src/main/resources/icons/interface.svg
new file mode 100644
index 00000000..750e8125
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/interface.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/method.png b/enigma-swing/src/main/resources/icons/method.png
deleted file mode 100644
index e4e96797..00000000
Binary files a/enigma-swing/src/main/resources/icons/method.png and /dev/null differ
diff --git a/enigma-swing/src/main/resources/icons/method.svg b/enigma-swing/src/main/resources/icons/method.svg
new file mode 100644
index 00000000..751ea55d
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/method.svg
@@ -0,0 +1,113 @@
+
+
diff --git a/enigma-swing/src/main/resources/icons/record.svg b/enigma-swing/src/main/resources/icons/record.svg
new file mode 100644
index 00000000..32f2e5f0
--- /dev/null
+++ b/enigma-swing/src/main/resources/icons/record.svg
@@ -0,0 +1,88 @@
+
+
--
cgit v1.2.3
From 6feac8fd8839f54c1f91176cc0412c397de2b19e Mon Sep 17 00:00:00 2001
From: Juuxel
Date: Sat, 20 Mar 2021 14:19:41 +0200
Subject: Add a check for missing SVG icon files
Improves debugging if the icon is missing as FlatLaf's own error
is thrown at render time.
---
enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
(limited to 'enigma-swing')
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
index 60414f99..cfa02cbd 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
@@ -16,6 +16,7 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
+import java.util.NoSuchElementException;
public class GuiUtil {
public static final Icon CLASS_ICON = loadIcon("class");
@@ -79,9 +80,16 @@ public class GuiUtil {
}
public static Icon loadIcon(String name) {
+ String path = "icons/" + name + ".svg";
+
+ // Do an eager check for a missing icon since FlatSVGIcon does it later at render time
+ if (GuiUtil.class.getResource(path) == null) {
+ throw new NoSuchElementException("Missing icon: '" + name + "' at " + path);
+ }
+
// Note: the width and height are scaled automatically because the FlatLaf UI scale
// is set in LookAndFeel.setGlobalLAF()
- return new FlatSVGIcon("icons/" + name + ".svg", 16, 16, GuiUtil.class.getClassLoader());
+ return new FlatSVGIcon(path, 16, 16, GuiUtil.class.getClassLoader());
}
public static Icon getClassIcon(Gui gui, ClassEntry entry) {
--
cgit v1.2.3
From 3599ef60d245960d591fc022c4fcdacb085d55dc Mon Sep 17 00:00:00 2001
From: Juuxel
Date: Sat, 20 Mar 2021 14:21:42 +0200
Subject: Fix missing icon check
---
enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'enigma-swing')
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
index cfa02cbd..7f08fc25 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java
@@ -83,7 +83,7 @@ public class GuiUtil {
String path = "icons/" + name + ".svg";
// Do an eager check for a missing icon since FlatSVGIcon does it later at render time
- if (GuiUtil.class.getResource(path) == null) {
+ if (GuiUtil.class.getResource('/' + path) == null) {
throw new NoSuchElementException("Missing icon: '" + name + "' at " + path);
}
--
cgit v1.2.3