diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index f58af18727d..891583de44d 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -11,7 +11,6 @@ import java.net.URI; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import javax.swing.JFileChooser; import javax.swing.JPopupMenu; @@ -440,7 +439,7 @@ public class GuiDesktop implements IGuiBase { } @Override - public void updateCards(final Set cardsToUpdate) { + public void updateCards(final Iterable cardsToUpdate) { CMatchUI.SINGLETON_INSTANCE.updateCards(cardsToUpdate); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index fdfdefce6ae..36e77951592 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -388,7 +388,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider { } - public void updateCards(final Set cardsToUpdate) { + public void updateCards(final Iterable cardsToUpdate) { for (final CardView c : cardsToUpdate) { updateSingleCard(c); } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index 71fb430a65c..69634e17add 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -386,7 +386,6 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl displayCardNameOverlay(showText && showCardNameOverlay(), imgSize, imgPos); displayPTOverlay(showText && showCardPowerOverlay(), imgSize, imgPos); displayCardIdOverlay(showText && showCardIdOverlay(), imgSize, imgPos); - displayIconOverlay(getGraphics()); } private void displayCardIdOverlay(boolean isVisible, Dimension imgSize, Point imgPos) { @@ -656,11 +655,9 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl return; } - if (this.card != cardView) { - this.updatePTOverlay(); //update PT Overlay if card changes - } - this.card = cardView; + this.doLayout(); + if (!this.isShowing()) { return; } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java index 58acf6f4435..90e248bff79 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java @@ -707,7 +707,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen toPanel.setAttachedToPanel(null); } - toPanel.setCard(toPanel.getCard()); + toPanel.setCard(card); if (fromRefresh) { toPanel.updatePTOverlay(); //ensure PT Overlay updated on refresh } diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index d6e9175e081..435dd77bac9 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -5,7 +5,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import org.apache.commons.lang3.tuple.Pair; @@ -391,7 +390,7 @@ public class GuiMobile implements IGuiBase { } @Override - public void updateCards(Set cardsToUpdate) { + public void updateCards(Iterable cardsToUpdate) { FControl.updateCards(cardsToUpdate); } diff --git a/forge-gui-mobile/src/forge/screens/match/FControl.java b/forge-gui-mobile/src/forge/screens/match/FControl.java index 568746113d7..df9b7c54f5b 100644 --- a/forge-gui-mobile/src/forge/screens/match/FControl.java +++ b/forge-gui-mobile/src/forge/screens/match/FControl.java @@ -446,7 +446,7 @@ public class FControl { } } - public static void updateCards(Set cardsToUpdate) { + public static void updateCards(Iterable cardsToUpdate) { for (CardView c : cardsToUpdate) { updateSingleCard(c); } diff --git a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java index 8ba2b069ed0..534084498be 100644 --- a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java @@ -271,7 +271,8 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { @Override public void run() { synchronized (cardsToUpdate) { - gui.updateCards(cardsToUpdate); + final Iterable newCardsToUpdate = gameView.getRefreshedCardViews(cardsToUpdate); + gui.updateCards(newCardsToUpdate); cardsToUpdate.clear(); } } diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java index 4b394371542..788e31c3582 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java @@ -4,7 +4,6 @@ import java.io.File; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.commons.lang3.tuple.Pair; @@ -76,7 +75,7 @@ public interface IGuiBase { void restoreOldZones(Map playersToRestoreZonesFor); void updateStack(); void updateZones(List> zonesToUpdate); - void updateCards(Set cardsToUpdate); + void updateCards(Iterable cardsToUpdate); void refreshCardDetails(Iterable cards); void updateManaPool(List manaPoolUpdate); void updateLives(List livesUpdate); diff --git a/forge-gui/src/main/java/forge/view/Cache.java b/forge-gui/src/main/java/forge/view/Cache.java index 166dca69b6d..816f558b7bd 100644 --- a/forge-gui/src/main/java/forge/view/Cache.java +++ b/forge-gui/src/main/java/forge/view/Cache.java @@ -31,6 +31,22 @@ public class Cache { return inverseCache.get(value); } + /** + * Get a value as it is present in this Cache, compared using the equals + * method. + * + * @param value + * @return a value equal to value, if such a value is present in the Cache. + */ + public synchronized V getValue(final V value) { + for (final V currentValue : inverseCache.keySet()) { + if (currentValue.equals(value)) { + return currentValue; + } + } + return null; + } + /** * @param key * @param value diff --git a/forge-gui/src/main/java/forge/view/LocalGameView.java b/forge-gui/src/main/java/forge/view/LocalGameView.java index 68e58abf4cb..3c8b22fd14a 100644 --- a/forge-gui/src/main/java/forge/view/LocalGameView.java +++ b/forge-gui/src/main/java/forge/view/LocalGameView.java @@ -426,6 +426,15 @@ public abstract class LocalGameView implements IGameView { return ViewUtil.transformIfNotNull(cards, FN_GET_CARD_VIEW); } + public final List getRefreshedCardViews(final Iterable cardViews) { + return ViewUtil.transformIfNotNull(cardViews, new Function() { + @Override + public CardView apply(CardView input) { + return cards.getValue(input); + } + }); + } + private CardView getCardViewFast(final Card c) { if (c == null) { return null;