Skip to content

Commit 358c6af

Browse files
committed
fix: deck menu icon scaling on high resolution displays
Using bicubic interpolation and anti-aliasing, the icons become much clearer and less "jank"
1 parent aff9425 commit 358c6af

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import java.awt.Component;
44
import java.awt.Graphics;
5+
import java.awt.Graphics2D;
56
import java.awt.Rectangle;
7+
import java.awt.RenderingHints;
68
import java.awt.event.MouseEvent;
79
import java.util.*;
10+
import java.util.List;
811
import java.util.Map.Entry;
912

1013
import javax.swing.JMenu;
@@ -480,6 +483,13 @@ else if (x >= imgSize && x < imgSize * 2) { //edit button
480483
public final void paint(final Graphics g) {
481484
super.paint(g);
482485

486+
// Improve scaling quality
487+
if (g instanceof Graphics2D g2d) {
488+
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
489+
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
490+
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
491+
}
492+
483493
FSkin.drawImage(g, /*overActionIndex == 0 ? icoDeleteOver : */icoDelete, 0, 0, imgSize, imgSize);
484494
FSkin.drawImage(g, /*overActionIndex == 0 ? icoDeleteOver : */icoEdit, imgSize - 1, -1, imgSize, imgSize);
485495
}

forge-gui-desktop/src/main/java/forge/itemmanager/views/DeckStarRenderer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import java.awt.Component;
2121
import java.awt.Graphics;
22+
import java.awt.Graphics2D;
23+
import java.awt.RenderingHints;
2224
import java.awt.event.MouseEvent;
2325

2426
import javax.swing.JTable;
@@ -110,6 +112,13 @@ public final void paint(final Graphics g) {
110112
if (size > width) {
111113
size = width;
112114
}
115+
116+
// Improve scaling quality
117+
if (g instanceof Graphics2D g2d) {
118+
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
119+
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
120+
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
121+
}
113122
FSkin.drawImage(g, skinImage, (width - size) / 2, (height - size) / 2, size, size);
114123
}
115124
}

0 commit comments

Comments
 (0)