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 b9f08c4cebf..ff358394ee0 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 @@ -291,6 +291,9 @@ public abstract class CardPanelContainer extends SkinnedPanel { } public final void removeCardPanel(final CardPanel fromPanel) { + removeCardPanel(fromPanel,true); + } + public final void removeCardPanel(final CardPanel fromPanel, final boolean repaint) { FThreads.assertExecutedByEdt(true); if (getMouseDragPanel() != null) { CardPanel.getDragAnimationPanel().setVisible(false); @@ -303,9 +306,11 @@ public abstract class CardPanelContainer extends SkinnedPanel { fromPanel.dispose(); getCardPanels().remove(fromPanel); remove(fromPanel); - invalidate(); - repaint(); - doingLayout(); + if ( repaint ) { + invalidate(); + repaint(); + doingLayout(); + } } public final void setCardPanels(final List cardPanels) { @@ -332,16 +337,21 @@ public abstract class CardPanelContainer extends SkinnedPanel { } public final void clear() { + clear(true); + } + public final void clear(final boolean repaint) { FThreads.assertExecutedByEdt(true); for (final CardPanel p : getCardPanels()) { p.dispose(); } getCardPanels().clear(); removeAll(); - setPreferredSize(new Dimension(0, 0)); - invalidate(); - getParent().validate(); - repaint(); + if ( repaint ) { + setPreferredSize(new Dimension(0, 0)); + invalidate(); + getParent().validate(); + repaint(); + } } public final FScrollPane getScrollPane() { 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 0cecda66dd1..dae89a13d9f 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 @@ -620,11 +620,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen toDelete.removeAll(notToDelete); if (toDelete.size() == getCardPanels().size()) { - clear(); + clear(false); } else { for (final CardView card : toDelete) { - removeCardPanel(getCardPanel(card.getId())); + removeCardPanel(getCardPanel(card.getId()),false); } } @@ -646,19 +646,21 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen needLayoutRefresh = true; } } - if (needLayoutRefresh) { - doLayout(); - } + if (needLayoutRefresh) { + doLayout(); + } + invalidate(); //pfps do the extra invalidate before any scrolling if (!newPanels.isEmpty()) { + int i = newPanels.size(); for (final CardPanel toPanel : newPanels) { - scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel.getCardWidth(), toPanel.getCardHeight())); + if ( --i == 0 ) { // only scroll to last panel to be added + scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel.getCardWidth(), toPanel.getCardHeight())); + } Animation.moveCard(toPanel); } - } - - invalidate(); - repaint(); + } + repaint(); } public boolean updateCard(final CardView card, boolean fromRefresh) {