add watermark to card image to indicate card is transformable in CardViewer (closes #781).

master
lodici 2016-06-15 21:50:53 +01:00
parent 42c0b82067
commit 0ed79aa20d
3 changed files with 31 additions and 24 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -40,7 +40,7 @@ public enum MagicIcon {
EDIT_ICON("w_edit.png"),
HELP_ICON("w_help.png"),
OPEN_ICON("w_open.png"),
REFRESH2_ICON("w_cycle.png"),
CYCLE_ICON("w_cycle.png"),
RANDOM_ICON("w_random32.png"),
CLEAR_ICON("w_clear28.png"),
FILTER_ICON("w_filter24.png"),

View File

@ -1,9 +1,11 @@
package magic.ui.duel.viewer;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@ -14,6 +16,7 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import magic.data.GeneralConfig;
import magic.data.MagicIcon;
import magic.model.MagicCardDefinition;
import magic.ui.MagicImages;
import magic.ui.cardtable.ICardSelectionListener;
@ -28,11 +31,15 @@ import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class CardViewer extends JPanel implements ICardSelectionListener {
private static final Image TRANSFORM_ICON =
MagicImages.getIcon(MagicIcon.CYCLE_ICON).getImage();
private final Dimension IMAGE_SIZE = getImageSize();
private Image thisImage;
private Image gsImage;
private boolean isMouseOver = false;
private int defaultCursor = Cursor.DEFAULT_CURSOR;
private MagicCardDefinition thisCard = MagicCardDefinition.UNKNOWN;
private boolean isSwitchedAspect = false;
private CardImageWorker worker;
@ -62,7 +69,7 @@ public class CardViewer extends JPanel implements ICardSelectionListener {
add(cardLabel, "w 100%");
setDefaultImage();
setTransformCardListener();
setMouseListener();
}
private void setDefaultImage() {
@ -79,28 +86,25 @@ public class CardViewer extends JPanel implements ICardSelectionListener {
private void showColorImageIfGreyscale(boolean b) {
isMouseOver = b;
if (thisCard.isInvalid()) {
if (thisCard.isInvalid() || thisCard.hasMultipleAspects()) {
repaint();
}
}
private void setTransformCardListener() {
private void setMouseListener() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (thisCard != null) {
SwingUtilities.invokeLater(() -> {
switchCardAspect();
});
if (thisCard.hasMultipleAspects()) {
switchCardAspect();
}
}
@Override
public void mouseEntered(MouseEvent e) {
if (thisCard.hasMultipleAspects() && thisCard.isValid()) {
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} else {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
defaultCursor = thisCard.hasMultipleAspects()
? Cursor.HAND_CURSOR
: Cursor.DEFAULT_CURSOR;
setCursor(Cursor.getPredefinedCursor(defaultCursor));
showColorImageIfGreyscale(true);
}
@Override
@ -114,16 +118,14 @@ public class CardViewer extends JPanel implements ICardSelectionListener {
}
private void switchCardAspect() {
if (thisCard.hasMultipleAspects()) {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (thisCard.isDoubleFaced()) {
setCard(thisCard.getTransformedDefinition());
} else if (thisCard.isFlipCard()) {
setCard(thisCard.getFlippedDefinition());
}
isSwitchedAspect = !isSwitchedAspect;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (thisCard.isDoubleFaced()) {
setCard(thisCard.getTransformedDefinition());
} else if (thisCard.isFlipCard()) {
setCard(thisCard.getFlippedDefinition());
}
isSwitchedAspect = !isSwitchedAspect;
setCursor(Cursor.getPredefinedCursor(defaultCursor));
}
public final void setCard(final MagicCardDefinition aCard) {
@ -181,7 +183,12 @@ public class CardViewer extends JPanel implements ICardSelectionListener {
@Override
public void paintComponent(final Graphics g) {
if (thisImage != null) {
g.drawImage(gsImage != null && !isMouseOver ? gsImage : thisImage, 0, 0, null);
final Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(gsImage != null && !isMouseOver ? gsImage : thisImage, 0, 0, null);
if (thisCard.hasMultipleAspects() && !isMouseOver) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
g2d.drawImage(TRANSFORM_ICON, (getWidth() - TRANSFORM_ICON.getWidth(null)) / 2, 60, null);
}
}
if (isImagePending) {
super.paintComponent(g);