Skip to content

Commit 45d34f8

Browse files
committed
Better icon scaling on Linux
1 parent a38c1a0 commit 45d34f8

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

src/main/java/club/bytecode/the/jda/Resources.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package club.bytecode.the.jda;
22

3-
import org.imgscalr.Scalr;
3+
import club.bytecode.the.jda.util.GuiUtils;
44

55
import javax.imageio.ImageIO;
66
import javax.swing.*;
@@ -36,6 +36,7 @@ public class Resources {
3636
public static ImageIcon javaIcon = new ImageIcon(Resources.class.getClass().getResource("/club/bytecode/the/jda/images/java.png"));
3737

3838
public static ImageIcon fileNavigatorIcon = new ImageIcon(Resources.class.getClass().getResource("/club/bytecode/the/jda/images/icon.png"));
39+
public static ImageIcon fileViewerIcon = new ImageIcon(Resources.class.getClass().getResource("/club/bytecode/the/jda/images/icon.png"));
3940

4041
public static ArrayList<BufferedImage> iconList;
4142
public static BufferedImage icon;
@@ -50,11 +51,8 @@ public class Resources {
5051

5152
iconList = new ArrayList<>();
5253
for (int size : new int[]{8, 16, 24, 32, 48, 64, 96, 128, 192, 256}) {
53-
iconList.add(resize(icon, size, size));
54+
iconList.add(GuiUtils.resize(icon, size, size));
5455
}
5556
}
5657

57-
public static BufferedImage resize(BufferedImage image, int width, int height) {
58-
return Scalr.resize(image, Scalr.Method.ULTRA_QUALITY, width, height);
59-
}
6058
}

src/main/java/club/bytecode/the/jda/gui/JDAWindow.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import club.bytecode.the.jda.JDA;
44
import club.bytecode.the.jda.settings.IPersistentWindow;
5+
import club.bytecode.the.jda.util.GuiUtils;
56

67
import javax.swing.*;
8+
import javax.swing.plaf.basic.BasicInternalFrameUI;
79
import java.awt.*;
810
import java.awt.event.ComponentAdapter;
911
import java.awt.event.ComponentEvent;
@@ -30,7 +32,7 @@ public JDAWindow(final String id, final String title, final Icon icon) {
3032
super(title, true, true, true, true);
3133
windowId = id;
3234
setName(title);
33-
setFrameIcon(icon);
35+
setFrameIcon(GuiUtils.resize(icon, (int) getTitleHeight(), (int) getTitleHeight()));
3436
setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE);
3537

3638
unmaximizedPos = getDefaultPosition();
@@ -93,6 +95,10 @@ public void onJDAMaximized() {
9395
setSize(unmaximizedSize);
9496
}
9597

98+
private double getTitleHeight() {
99+
return (((BasicInternalFrameUI) this.getUI()).getNorthPane()).getPreferredSize().getHeight();
100+
}
101+
96102
protected static Dimension defaultDimensions;
97103
protected static Point defaultPosition;
98104

src/main/java/club/bytecode/the/jda/gui/navigation/FileNavigationPane.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ private void quickSearch(String qt) {
106106
}
107107

108108
public FileNavigationPane() {
109-
super("ClassNavigation", "File Navigator", Resources.fileNavigatorIcon);
109+
super("ClassNavigation", "File Navigator", Resources.fileViewerIcon);
110110

111111
tree.setRootVisible(false);
112112
tree.setShowsRootHandles(true);

src/main/java/club/bytecode/the/jda/util/GuiUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package club.bytecode.the.jda.util;
22

3+
import org.imgscalr.Scalr;
4+
5+
import javax.swing.*;
36
import java.awt.*;
7+
import java.awt.image.BufferedImage;
48

59
public class GuiUtils {
610
public static void setWmClassName(String className) throws NoSuchFieldException, IllegalAccessException {
@@ -9,4 +13,17 @@ public static void setWmClassName(String className) throws NoSuchFieldException,
913
awtAppClassNameField.setAccessible(true);
1014
awtAppClassNameField.set(xToolkit, className);
1115
}
16+
17+
public static BufferedImage resize(BufferedImage image, int width, int height) {
18+
return Scalr.resize(image, Scalr.Method.ULTRA_QUALITY, width, height);
19+
}
20+
21+
public static ImageIcon resize(Icon icon, int width, int height){
22+
BufferedImage srcImg = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
23+
Graphics g = srcImg.createGraphics();
24+
icon.paintIcon(null, g, 0,0);
25+
g.dispose();
26+
BufferedImage resized = resize(srcImg, width, height);
27+
return new ImageIcon(resized);
28+
}
1229
}

0 commit comments

Comments
 (0)