package magic.ui.widget.cards.canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import javax.swing.AbstractAction;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import magic.model.MagicCardDefinition;
import magic.ui.MagicImages;
import magic.ui.ScreenController;
import magic.ui.helpers.ImageHelper;
import magic.ui.utility.MagicStyle;
import magic.ui.widget.TexturedPanel;
@SuppressWarnings("serial")
public class CardImageOverlay extends TexturedPanel {
private BufferedImage cardImage = null;
public CardImageOverlay(final MagicCardDefinition aCard) {
getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "closeOverlay");
getActionMap().put("closeOverlay", new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
setVisible(false);
}
});
final MouseAdapter mouseClick = new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
setVisible(false);
}
};
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
drawCardImage(aCard);
}
});
addMouseListener(mouseClick);
addMouseMotionListener(new MouseMotionAdapter() {});
addKeyListener(new KeyAdapter() {});
setFocusTraversalKeysEnabled(false);
setBackground(MagicStyle.getTranslucentColor(Color.DARK_GRAY, 200));
ScreenController.getFrame().setGlassPane(this);
setVisible(true);
}
private void drawCardImage(final MagicCardDefinition aCard) {
final BufferedImage baseImage = MagicImages.getCardImage(aCard);
final int baseWidth = baseImage.getWidth();
final int baseHeight = baseImage.getHeight();
final double scale = Math.min(
Math.min(getWidth(), baseWidth) / (double) baseWidth,
Math.min(getHeight(), baseHeight) / (double) baseHeight
);
cardImage = ImageHelper.scale(baseImage, (int)(scale * baseWidth), (int)(scale * baseHeight));
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (cardImage != null) {
g.drawImage(
cardImage,
(getWidth() - cardImage.getWidth()) / 2,
(getHeight() - cardImage.getHeight()) / 2,
this
);
}
}
}