mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Performance: Resizing bottleneck in FLabel eliminated.
This commit is contained in:
@@ -6,6 +6,8 @@ import java.awt.Font;
|
|||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.ComponentAdapter;
|
import java.awt.event.ComponentAdapter;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
@@ -15,6 +17,7 @@ import javax.swing.Icon;
|
|||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
|
import javax.swing.Timer;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
|
||||||
@@ -197,34 +200,17 @@ public class FLabel extends JLabel {
|
|||||||
|
|
||||||
private AlphaComposite alphaDim, alphaStrong;
|
private AlphaComposite alphaDim, alphaStrong;
|
||||||
|
|
||||||
// Resize adapter
|
private final ActionListener fireResize = new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent evt) { resize(); resizeTimer.stop(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
private Timer resizeTimer = new Timer(10, fireResize);
|
||||||
|
|
||||||
|
// Resize adapter; on a timer to prevent resizing while "sliding" between sizes
|
||||||
private final ComponentAdapter cadResize = new ComponentAdapter() {
|
private final ComponentAdapter cadResize = new ComponentAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void componentResized(ComponentEvent e) {
|
public void componentResized(ComponentEvent e) { resizeTimer.restart(); }
|
||||||
if (fontScaleAuto) {
|
|
||||||
ref = (fontScaleBy == SwingConstants.VERTICAL ? getHeight() : getWidth());
|
|
||||||
switch (fontStyle) {
|
|
||||||
case Font.BOLD:
|
|
||||||
setFont(FSkin.getBoldFont((int) (ref * fontScaleFactor)));
|
|
||||||
repaint();
|
|
||||||
break;
|
|
||||||
case Font.ITALIC:
|
|
||||||
setFont(FSkin.getItalicFont((int) (ref * fontScaleFactor)));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
setFont(FSkin.getFont((int) (ref * fontScaleFactor)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Non-background icon
|
|
||||||
if (img != null && iconScaleAuto && !iconInBackground) {
|
|
||||||
h = (int) (getHeight() * iconScaleFactor);
|
|
||||||
w = (int) (h * iar * iconScaleFactor);
|
|
||||||
if (w == 0 || h == 0) { return; }
|
|
||||||
|
|
||||||
FLabel.super.setIcon(new ImageIcon(img.getScaledInstance(w, h, Image.SCALE_SMOOTH)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Mouse event handler
|
// Mouse event handler
|
||||||
@@ -371,4 +357,30 @@ public class FLabel extends JLabel {
|
|||||||
|
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void resize() {
|
||||||
|
if (fontScaleAuto) {
|
||||||
|
ref = (fontScaleBy == SwingConstants.VERTICAL ? getHeight() : getWidth());
|
||||||
|
switch (fontStyle) {
|
||||||
|
case Font.BOLD:
|
||||||
|
setFont(FSkin.getBoldFont((int) (ref * fontScaleFactor)));
|
||||||
|
repaint();
|
||||||
|
break;
|
||||||
|
case Font.ITALIC:
|
||||||
|
setFont(FSkin.getItalicFont((int) (ref * fontScaleFactor)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
setFont(FSkin.getFont((int) (ref * fontScaleFactor)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Non-background icon
|
||||||
|
if (img != null && iconScaleAuto && !iconInBackground) {
|
||||||
|
h = (int) (getHeight() * iconScaleFactor);
|
||||||
|
w = (int) (h * iar * iconScaleFactor);
|
||||||
|
if (w == 0 || h == 0) { return; }
|
||||||
|
|
||||||
|
FLabel.super.setIcon(new ImageIcon(img.getScaledInstance(w, h, Image.SCALE_SMOOTH)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user