From 9767b203863a7a544d8f71124e6404986d7f55ba Mon Sep 17 00:00:00 2001 From: elcnesh Date: Mon, 18 May 2015 07:33:21 +0000 Subject: [PATCH] Update and cleanup card viewing code. Fixes issue with morph colour leaking, viewing opponent's morphs through card zoomer, and other minor bugs. --- .../forge/gui/BoxedProductCardListViewer.java | 2 +- .../main/java/forge/gui/CardDetailPanel.java | 140 +++++++----------- .../main/java/forge/gui/CardListChooser.java | 2 +- .../main/java/forge/gui/CardListViewer.java | 2 +- .../main/java/forge/gui/CardPicturePanel.java | 31 ++-- .../forge/itemmanager/views/ImageView.java | 3 +- .../home/settings/VSubmenuAchievements.java | 6 +- .../screens/match/QuestWinLoseCardViewer.java | 2 +- .../screens/match/controllers/CDetail.java | 2 +- .../screens/match/controllers/CPicture.java | 9 +- .../forge/screens/match/views/VStack.java | 4 +- .../forge/toolbox/special/CardZoomer.java | 79 +++++----- .../forge/view/arcane/CardPanelContainer.java | 6 +- .../main/java/forge/card/CardDetailUtil.java | 15 ++ 14 files changed, 149 insertions(+), 154 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/gui/BoxedProductCardListViewer.java b/forge-gui-desktop/src/main/java/forge/gui/BoxedProductCardListViewer.java index 469e9860f95..70dfb0efe6d 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/BoxedProductCardListViewer.java +++ b/forge-gui-desktop/src/main/java/forge/gui/BoxedProductCardListViewer.java @@ -190,7 +190,7 @@ public class BoxedProductCardListViewer extends FDialog { if ((row >= 0) && (row < BoxedProductCardListViewer.this.list.size())) { final PaperCard cp = BoxedProductCardListViewer.this.list.get(row); BoxedProductCardListViewer.this.detail.setCard(CardView.getCardForUi(cp)); - BoxedProductCardListViewer.this.picture.setCard(cp); + BoxedProductCardListViewer.this.picture.setItem(cp); } } } diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java index dcc57843df1..7ee13993501 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java @@ -6,12 +6,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -34,7 +34,6 @@ import forge.card.CardDetailUtil; import forge.card.CardDetailUtil.DetailColors; import forge.card.CardEdition; import forge.card.CardRarity; -import forge.card.CardStateName; import forge.game.GameView; import forge.game.card.Card; import forge.game.card.CardView; @@ -51,7 +50,7 @@ import forge.toolbox.FSkin.SkinnedPanel; /** * The class CardDetailPanel. Shows the details of a card. - * + * * @author Clemens Koza * @version V0.0 17.02.2010 */ @@ -59,7 +58,7 @@ public class CardDetailPanel extends SkinnedPanel { /** Constant serialVersionUID=-8461473263764812323L. */ private static final long serialVersionUID = -8461473263764812323L; - private static Color fromDetailColor(DetailColors detailColor) { + private static Color fromDetailColor(final DetailColors detailColor) { return new Color(detailColor.r, detailColor.g, detailColor.b); } @@ -110,13 +109,13 @@ public class CardDetailPanel extends SkinnedPanel { @Override public void doLayout() { - int insets = 3; - int setInfoWidth = 40; - int x = insets; + final int insets = 3; + final int setInfoWidth = 40; + final int x = insets; int y = insets; - int lineWidth = getWidth() - 2 * insets; - int lineHeight = nameCostLabel.getPreferredSize().height; - int dy = lineHeight + 1; + final int lineWidth = getWidth() - 2 * insets; + final int lineHeight = nameCostLabel.getPreferredSize().height; + final int dy = lineHeight + 1; nameCostLabel.setBounds(x, y, lineWidth, lineHeight); y += dy; @@ -142,18 +141,18 @@ public class CardDetailPanel extends SkinnedPanel { cdArea.setText(CardDetailUtil.getItemDescription(item)); updateBorder(item instanceof IPaperCard ? Card.getCardForUi((IPaperCard)item).getView().getCurrentState() : null, true); - String set = item.getEdition(); + final String set = item.getEdition(); setInfoLabel.setText(set); setInfoLabel.setToolTipText(""); if (StringUtils.isEmpty(set)) { setInfoLabel.setOpaque(false); setInfoLabel.setBorder(null); } else { - CardEdition edition = FModel.getMagicDb().getEditions().get(set); + final CardEdition edition = FModel.getMagicDb().getEditions().get(set); if (null != edition) { setInfoLabel.setToolTipText(edition.getName()); } - + setInfoLabel.setOpaque(true); setInfoLabel.setBackground(Color.BLACK); setInfoLabel.setForeground(Color.WHITE); @@ -169,115 +168,86 @@ public class CardDetailPanel extends SkinnedPanel { } public final void setCard(final CardView card) { - setCard(card, false); + setCard(card, true, false); } - public final void setCard(final CardView card, final boolean isInAltState) { - nameCostLabel.setText(""); + public final void setCard(final CardView card, final boolean mayView, final boolean isInAltState) { typeLabel.setVisible(true); - typeLabel.setText(""); powerToughnessLabel.setVisible(true); - powerToughnessLabel.setText(""); - idLabel.setText(""); - setInfoLabel.setText(""); - setInfoLabel.setToolTipText(""); - setInfoLabel.setOpaque(false); - setInfoLabel.setBorder(null); - cdArea.setText(""); - if (card == null) { - updateBorder(null, false); - return; - } - - final CardStateView state = card.getState(isInAltState); + final CardStateView state = card == null ? null : card.getState(isInAltState); if (state == null) { + nameCostLabel.setText(""); + typeLabel.setText(""); + powerToughnessLabel.setText(""); + idLabel.setText(""); + setInfoLabel.setText(""); + setInfoLabel.setToolTipText(""); + setInfoLabel.setOpaque(false); + setInfoLabel.setBorder(null); + cdArea.setText(""); updateBorder(null, false); return; } - boolean canShow = true; - - if (state.getManaCost().isNoCost() || !canShow) { - nameCostLabel.setText(CardDetailUtil.formatCardName(card, canShow, isInAltState)); - } - else { + final String name = CardDetailUtil.formatCardName(card, mayView, isInAltState), nameCost; + if (state.getManaCost().isNoCost() || !mayView) { + nameCost = name; + } else { final String manaCost; if (card.isSplitCard() && card.hasAlternateState() && card.getZone() != ZoneType.Stack) { //only display current state's mana cost when on stack manaCost = card.getCurrentState().getManaCost() + " // " + card.getAlternateState().getManaCost(); - } - else { + } else { manaCost = state.getManaCost().toString(); } - nameCostLabel.setText(FSkin.encodeSymbols(CardDetailUtil.formatCardName(card, canShow, isInAltState) + " - " + manaCost, true)); + nameCost = String.format("%s - %s", name, manaCost); } - typeLabel.setText(CardDetailUtil.formatCardType(state, canShow)); + nameCostLabel.setText(FSkin.encodeSymbols(nameCost, false)); + typeLabel.setText(CardDetailUtil.formatCardType(state, mayView)); - String set = state.getSetCode(); - CardRarity rarity = state.getRarity(); - if (!canShow) { + final String set; + final CardRarity rarity; + if (mayView) { + set = state.getSetCode(); + rarity = state.getRarity(); + } else { set = CardEdition.UNKNOWN.getCode(); rarity = CardRarity.Unknown; } setInfoLabel.setText(set); + if (null != set && !set.isEmpty()) { - if (canShow) { - CardEdition edition = FModel.getMagicDb().getEditions().get(set); + if (mayView) { + final CardEdition edition = FModel.getMagicDb().getEditions().get(set); + final String setTooltip; if (null == edition) { - setInfoLabel.setToolTipText(rarity.name()); - } - else { - setInfoLabel.setToolTipText(String.format("%s (%s)", edition.getName(), rarity.name())); + setTooltip = rarity.name(); + } else { + setTooltip = String.format("%s (%s)", edition.getName(), rarity.name()); } + setInfoLabel.setToolTipText(setTooltip); } setInfoLabel.setOpaque(true); - Color backColor; - switch (rarity) { - case Uncommon: - backColor = fromDetailColor(DetailColors.UNCOMMON); - break; - - case Rare: - backColor = fromDetailColor(DetailColors.RARE); - break; - - case MythicRare: - backColor = fromDetailColor(DetailColors.MYTHIC); - break; - - case Special: //"Timeshifted" or other Special Rarity Cards - backColor = fromDetailColor(DetailColors.SPECIAL); - break; - - default: //case BasicLand: + case Common: - backColor = fromDetailColor(DetailColors.COMMON); - break; - } - - Color foreColor = FSkin.getHighContrastColor(backColor); + final Color backColor = fromDetailColor(CardDetailUtil.getRarityColor(rarity)); setInfoLabel.setBackground(backColor); + final Color foreColor = FSkin.getHighContrastColor(backColor); setInfoLabel.setForeground(foreColor); setInfoLabel.setBorder(BorderFactory.createLineBorder(foreColor)); } - if (state.getState() == CardStateName.FaceDown) { - updateBorder(state, false); // do not spoil the color of face-down cards - } else { - updateBorder(state, canShow); - } + updateBorder(state, mayView); - powerToughnessLabel.setText(CardDetailUtil.formatPowerToughness(state, canShow)); + powerToughnessLabel.setText(CardDetailUtil.formatPowerToughness(state, mayView)); - idLabel.setText(canShow ? CardDetailUtil.formatCardId(state) : ""); + idLabel.setText(mayView ? CardDetailUtil.formatCardId(state) : ""); // fill the card text - cdArea.setText(FSkin.encodeSymbols(CardDetailUtil.composeCardText(state, gameView, canShow), true)); + cdArea.setText(FSkin.encodeSymbols(CardDetailUtil.composeCardText(state, gameView, mayView), true)); SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { + @Override public void run() { scrArea.getVerticalScrollBar().setValue(scrArea.getVerticalScrollBar().getMinimum()); } }); @@ -316,7 +286,7 @@ public class CardDetailPanel extends SkinnedPanel { return; } - Color color = fromDetailColor(CardDetailUtil.getBorderColor(card, canShow)); + final Color color = fromDetailColor(CardDetailUtil.getBorderColor(card, canShow)); setBorder(BorderFactory.createLineBorder(color, 2)); scrArea.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, color)); } diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardListChooser.java b/forge-gui-desktop/src/main/java/forge/gui/CardListChooser.java index de6a84e3be1..e514469e8e5 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardListChooser.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardListChooser.java @@ -174,7 +174,7 @@ public class CardListChooser extends FDialog { if ((row >= 0) && (row < CardListChooser.this.list.size())) { final PaperCard cp = CardListChooser.this.list.get(row); CardListChooser.this.detail.setCard(CardView.getCardForUi(cp)); - CardListChooser.this.picture.setCard(cp); + CardListChooser.this.picture.setItem(cp); } } } diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardListViewer.java b/forge-gui-desktop/src/main/java/forge/gui/CardListViewer.java index 52e7eeb0d83..917e28199e9 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardListViewer.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardListViewer.java @@ -173,7 +173,7 @@ public class CardListViewer extends FDialog { if ((row >= 0) && (row < CardListViewer.this.list.size())) { final PaperCard cp = CardListViewer.this.list.get(row); CardListViewer.this.detail.setCard(CardView.getCardForUi(cp)); - CardListViewer.this.picture.setCard(cp); + CardListViewer.this.picture.setItem(cp); } } } diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardPicturePanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardPicturePanel.java index 25d5e872335..24c6f30821f 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardPicturePanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardPicturePanel.java @@ -6,12 +6,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -35,15 +35,16 @@ import forge.toolbox.imaging.FImageUtil; /** * Displays image associated with a card or inventory item. - * + * * @version $Id: CardPicturePanel.java 25265 2014-03-27 02:18:47Z drdev $ - * + * */ public final class CardPicturePanel extends JPanel { /** Constant serialVersionUID=-3160874016387273383L. */ private static final long serialVersionUID = -3160874016387273383L; private Object displayed; + private boolean mayView = true; private final FImagePanel panel; private BufferedImage currentImage; @@ -55,18 +56,22 @@ public final class CardPicturePanel extends JPanel { this.add(this.panel); } - public void setCard(final InventoryItem cp) { - this.displayed = cp; - this.setImage(); + public void setItem(final InventoryItem item) { + setImage(item ,true); } public void setCard(final CardStateView c) { - this.displayed = c; - this.setImage(); + setCard(c, true); + } + public void setCard(final CardStateView c, final boolean mayView) { + setImage(c, mayView); } - public void setImage() { - BufferedImage image = getImage(); + private void setImage(final Object display, final boolean mayView) { + this.displayed = display; + this.mayView = mayView; + + final BufferedImage image = getImage(); if (image != null && image != this.currentImage) { this.currentImage = image; this.panel.setImage(image, getAutoSizeImageMode()); @@ -74,6 +79,10 @@ public final class CardPicturePanel extends JPanel { } private BufferedImage getImage() { + if (!mayView) { + return ImageCache.getOriginalImage(ImageKeys.getTokenKey(ImageKeys.HIDDEN_CARD), true); + } + if (displayed instanceof InventoryItem) { final InventoryItem item = (InventoryItem) displayed; return ImageCache.getOriginalImage(ImageKeys.getImageKey(item, false), true); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java index f1af01ea4f3..49e43be2748 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java @@ -256,7 +256,8 @@ public class ImageView extends ItemView { if (item != null && item.item instanceof IPaperCard) { setLockHoveredItem(true); //lock hoveredItem while zoomer open final CardView card = CardView.getCardForUi((IPaperCard) item.item); - CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(card); + CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), true); + CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java index 9cc2203e7aa..361b27c1ab8 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/settings/VSubmenuAchievements.java @@ -99,12 +99,12 @@ public enum VSubmenuAchievements implements IVSubmenu { } private void showCard(MouseEvent e) { - Achievement achievement = getAchievementAt(e.getX(), e.getY()); + final Achievement achievement = getAchievementAt(e.getX(), e.getY()); if (achievement != null) { - IPaperCard pc = achievement.getPaperCard(); + final IPaperCard pc = achievement.getPaperCard(); if (pc != null) { preventMouseOut = true; - CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(CardView.getCardForUi(pc)); + CardZoomer.SINGLETON_INSTANCE.setCard(CardView.getCardForUi(pc).getCurrentState(), true); } } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java b/forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java index 88e52a48910..9ae8d4fea6d 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java @@ -113,7 +113,7 @@ public class QuestWinLoseCardViewer extends FPanel { if ((row >= 0) && (row < QuestWinLoseCardViewer.this.list.size())) { final PaperCard cp = QuestWinLoseCardViewer.this.list.get(row); QuestWinLoseCardViewer.this.detail.setCard(CardView.getCardForUi(cp)); - QuestWinLoseCardViewer.this.picture.setCard(cp); + QuestWinLoseCardViewer.this.picture.setItem(cp); } } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java index 4065a73da6d..596ff357bbc 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDetail.java @@ -58,7 +58,7 @@ public class CDetail implements ICDoc { void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) { final CardView toShow = mayView ? c : null; view.getLblFlipcard().setVisible(toShow != null && mayFlip); - view.getPnlDetail().setCard(toShow, isInAltState); + view.getPnlDetail().setCard(toShow, mayView, isInAltState); if (view.getParentCell() != null) { view.getParentCell().repaintSelf(); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java index 4254e7cc8fb..82adc1b36f3 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPicture.java @@ -72,12 +72,13 @@ public class CPicture implements ICDoc { void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) { final CardStateView toShow = c != null && mayView ? c.getState(isInAltState) : null; flipIndicator.setVisible(toShow != null && mayFlip); - picturePanel.setCard(toShow); + picturePanel.setCard(toShow, mayView); + zoomer.setCard(toShow, mayFlip); } void showItem(final InventoryItem item) { flipIndicator.setVisible(false); - picturePanel.setCard(item); + picturePanel.setItem(item); } @Override @@ -105,7 +106,7 @@ public class CPicture implements ICDoc { @Override public void onMiddleMouseDown(final MouseEvent e) { if (isCardDisplayed()) { - zoomer.doMouseButtonZoom(controller.getCurrentCard()); + zoomer.doMouseButtonZoom(); } } @@ -130,7 +131,7 @@ public class CPicture implements ICDoc { public void mouseWheelMoved(final MouseWheelEvent arg0) { if (isCardDisplayed()) { if (arg0.getWheelRotation() < 0) { - zoomer.doMouseWheelZoom(controller.getCurrentCard()); + zoomer.doMouseWheelZoom(); } } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java index 2447170ff06..b3f12550f80 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java @@ -196,9 +196,7 @@ public class VStack implements IVDoc { @Override public void mouseEntered(final MouseEvent e) { hoveredItem = StackInstanceTextArea.this; - if (!txt.startsWith("Morph ")) { - controller.getMatchUI().setCard(item.getSourceCard()); - } + controller.getMatchUI().setCard(item.getSourceCard()); } @Override diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java index 540c9a2ad5d..f023dea570c 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/special/CardZoomer.java @@ -6,12 +6,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -33,7 +33,6 @@ import javax.swing.Timer; import net.miginfocom.swing.MigLayout; import forge.assets.FSkinProp; -import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; import forge.gui.SOverlayUtils; import forge.toolbox.FOverlay; @@ -43,14 +42,14 @@ import forge.toolbox.imaging.FImagePanel; import forge.toolbox.imaging.FImagePanel.AutoSizeImageMode; import forge.toolbox.imaging.FImageUtil; -/** +/** * Displays card image at its original size and correct orientation. *

* Supports split, flip and double-sided cards as well as cards that * can be played face-down (eg. morph). * * @version $Id: CardZoomer.java 24769 2014-02-09 13:56:04Z Hellfish $ - * + * */ public enum CardZoomer { SINGLETON_INSTANCE; @@ -59,11 +58,11 @@ public enum CardZoomer { private final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel(); private JPanel pnlMain; private FImagePanel imagePanel; - private SkinnedLabel lblFlipcard = new SkinnedLabel(); + private final SkinnedLabel lblFlipcard = new SkinnedLabel(); // Details about the current card being displayed. - private CardView thisCard; - private boolean isInAltState; + private CardStateView thisCard; + private boolean mayFlip, isInAltState; // The zoomer is in button mode when it is activated by holding down the // middle mouse button or left and right mouse buttons simultaneously. @@ -83,6 +82,12 @@ public enum CardZoomer { setKeyListeners(); } + public void setCard(final CardStateView card, final boolean mayFlip) { + this.thisCard = card; + this.mayFlip = mayFlip; + this.isInAltState = card == null ? false : card == card.getCard().getAlternateState(); + } + /** * Creates listener for keys that are recognised by zoomer. *

    @@ -91,8 +96,7 @@ public enum CardZoomer { */ private void setKeyListeners() { overlay.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { + @Override public void keyPressed(final KeyEvent e) { if (!isButtonMode) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { closeZoomer(); @@ -101,7 +105,7 @@ public enum CardZoomer { if (e.getKeyCode() == KeyEvent.VK_CONTROL) { toggleCardImage(); } - } + } }); } @@ -113,8 +117,7 @@ public enum CardZoomer { */ private void setMouseButtonListener() { overlay.addMouseListener(new MouseAdapter() { - @Override - public void mouseReleased(MouseEvent e) { + @Override public void mouseReleased(final MouseEvent e) { closeZoomer(); } }); @@ -135,8 +138,7 @@ public enum CardZoomer { */ private void setMouseWheelListener() { overlay.addMouseWheelListener(new MouseWheelListener() { - @Override - public void mouseWheelMoved(MouseWheelEvent e) { + @Override public void mouseWheelMoved(final MouseWheelEvent e) { if (!isButtonMode) { if (isMouseWheelEnabled) { isMouseWheelEnabled = false; @@ -159,9 +161,9 @@ public enum CardZoomer { * This method should be called if the zoomer is activated by rotating the * mouse wheel. */ - public void doMouseWheelZoom(final CardView card) { + public void doMouseWheelZoom() { isButtonMode = false; - displayCard(card); + displayCard(); startMouseWheelCoolDownTimer(200); } @@ -172,25 +174,23 @@ public enum CardZoomer { * This method should be called if the zoomer is activated by holding down * the middle mouse button or left and right mouse buttons simultaneously. */ - public void doMouseButtonZoom(final CardView newCard) { - // don't display zoom if already zoomed or just closed zoom + public void doMouseButtonZoom() { + // don't display zoom if already zoomed or just closed zoom // (handles mouse wheeling while middle clicking) if (isOpen || System.currentTimeMillis() - lastClosedTime < 250) { return; } isButtonMode = true; - displayCard(newCard); + displayCard(); } public boolean isZoomerOpen() { return isOpen; } - private void displayCard(final CardView newCard) { + private void displayCard() { isMouseWheelEnabled = false; - thisCard = newCard; - isInAltState = false; setLayout(); setImage(); SOverlayUtils.showOverlay(); @@ -201,7 +201,7 @@ public enum CardZoomer { * Displays a graphical indicator that shows whether the current card can be flipped or transformed. */ private void setFlipIndicator() { - if (thisCard != null && thisCard.hasAlternateState()) { + if (thisCard != null && mayFlip) { imagePanel.setLayout(new MigLayout("insets 0, w 100%!, h 100%!")); imagePanel.add(lblFlipcard, "pos (100% - 100px) 0"); } @@ -213,8 +213,8 @@ public enum CardZoomer { private void setImage() { imagePanel = new FImagePanel(); - final BufferedImage xlhqImage = FImageUtil.getImageXlhq(getState()); - imagePanel.setImage(xlhqImage == null ? FImageUtil.getImage(getState()) : xlhqImage, getInitialRotation(), AutoSizeImageMode.SOURCE); + final BufferedImage xlhqImage = FImageUtil.getImageXlhq(thisCard); + imagePanel.setImage(xlhqImage == null ? FImageUtil.getImage(thisCard) : xlhqImage, getInitialRotation(), AutoSizeImageMode.SOURCE); pnlMain.removeAll(); pnlMain.add(imagePanel, "w 80%!, h 80%!"); @@ -223,9 +223,11 @@ public enum CardZoomer { } private int getInitialRotation() { - return thisCard == null ? 0 : - (thisCard.isSplitCard() || thisCard.getCurrentState().getType().isPlane() || thisCard.getCurrentState().getType().isPhenomenon() ? 90 : 0); - } + if (thisCard == null) { + return 0; + } + return thisCard.getCard().isSplitCard() || thisCard.getType().isPlane() || thisCard.getType().isPhenomenon() ? 90 : 0; + } private void setLayout() { overlay.removeAll(); @@ -243,13 +245,13 @@ public enum CardZoomer { SOverlayUtils.hideOverlay(); lastClosedTime = System.currentTimeMillis(); } - + /** * If the zoomer is ativated using the mouse wheel then ignore - * wheel for a short period of time after opening. This will + * wheel for a short period of time after opening. This will * prevent flip and double side cards from immediately flipping. */ - private void startMouseWheelCoolDownTimer(int millisecsDelay) { + private void startMouseWheelCoolDownTimer(final int millisecsDelay) { isMouseWheelEnabled = false; createMouseWheelCoolDownTimer(millisecsDelay); mouseWheelCoolDownTimer.setInitialDelay(millisecsDelay); @@ -259,11 +261,10 @@ public enum CardZoomer { /** * Used to ignore mouse wheel rotation for {@code millisecsDelay} milliseconds. */ - private void createMouseWheelCoolDownTimer(int millisecsDelay) { + private void createMouseWheelCoolDownTimer(final int millisecsDelay) { if (mouseWheelCoolDownTimer == null) { mouseWheelCoolDownTimer = new Timer(millisecsDelay, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { + @Override public void actionPerformed(final ActionEvent e) { isMouseWheelEnabled = true; } }); @@ -280,7 +281,7 @@ public enum CardZoomer { * Toggles between primary and alternate image associated with card if applicable. */ private void toggleCardImage() { - if (thisCard != null && thisCard.hasAlternateState()) { + if (thisCard != null && mayFlip) { toggleFlipCard(); } } @@ -293,11 +294,9 @@ public enum CardZoomer { */ private void toggleFlipCard() { isInAltState = !isInAltState; - imagePanel.setRotation(thisCard.isFlipCard() && isInAltState ? 180 : 0); + thisCard = thisCard.getCard().getState(isInAltState); + imagePanel.setRotation(thisCard.getCard().isFlipCard() && isInAltState ? 180 : 0); setImage(); } - private CardStateView getState() { - return thisCard.getState(isInAltState); - } } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanelContainer.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanelContainer.java index ded08addc70..549aede5c0d 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanelContainer.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanelContainer.java @@ -77,12 +77,14 @@ public abstract class CardPanelContainer extends SkinnedPanel { private void mouseWheelZoom(final CardView card) { if (canZoom(card)) { - CardZoomer.SINGLETON_INSTANCE.doMouseWheelZoom(card); + CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), false); + CardZoomer.SINGLETON_INSTANCE.doMouseWheelZoom(); } } private void mouseButtonZoom(final CardView card) { if (canZoom(card)) { - CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(card); + CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), false); + CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(); } } private boolean canZoom(final CardView card) { diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index 58bfcef9c03..7d3b48f2be4 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -153,6 +153,21 @@ public class CardDetailUtil { return borderColors; } + public static DetailColors getRarityColor(final CardRarity rarity) { + switch (rarity) { + case Uncommon: + return DetailColors.UNCOMMON; + case Rare: + return DetailColors.RARE; + case MythicRare: + return DetailColors.MYTHIC; + case Special: //"Timeshifted" or other Special Rarity Cards + return DetailColors.SPECIAL; + default: //case BasicLand: + case Common: + return DetailColors.COMMON; + } + } + public static String getItemDescription(final InventoryItemFromSet item) { if (item instanceof SealedProduct) { return ((SealedProduct)item).getDescription();