try to do fewer layout calculations when moving cards

This commit is contained in:
Peter F. Patel-Schneider
2019-02-02 16:46:23 -05:00
parent 30607291fc
commit 31bca6c614
2 changed files with 29 additions and 17 deletions

View File

@@ -291,6 +291,9 @@ public abstract class CardPanelContainer extends SkinnedPanel {
} }
public final void removeCardPanel(final CardPanel fromPanel) { public final void removeCardPanel(final CardPanel fromPanel) {
removeCardPanel(fromPanel,true);
}
public final void removeCardPanel(final CardPanel fromPanel, final boolean repaint) {
FThreads.assertExecutedByEdt(true); FThreads.assertExecutedByEdt(true);
if (getMouseDragPanel() != null) { if (getMouseDragPanel() != null) {
CardPanel.getDragAnimationPanel().setVisible(false); CardPanel.getDragAnimationPanel().setVisible(false);
@@ -303,9 +306,11 @@ public abstract class CardPanelContainer extends SkinnedPanel {
fromPanel.dispose(); fromPanel.dispose();
getCardPanels().remove(fromPanel); getCardPanels().remove(fromPanel);
remove(fromPanel); remove(fromPanel);
invalidate(); if ( repaint ) {
repaint(); invalidate();
doingLayout(); repaint();
doingLayout();
}
} }
public final void setCardPanels(final List<CardPanel> cardPanels) { public final void setCardPanels(final List<CardPanel> cardPanels) {
@@ -332,16 +337,21 @@ public abstract class CardPanelContainer extends SkinnedPanel {
} }
public final void clear() { public final void clear() {
clear(true);
}
public final void clear(final boolean repaint) {
FThreads.assertExecutedByEdt(true); FThreads.assertExecutedByEdt(true);
for (final CardPanel p : getCardPanels()) { for (final CardPanel p : getCardPanels()) {
p.dispose(); p.dispose();
} }
getCardPanels().clear(); getCardPanels().clear();
removeAll(); removeAll();
setPreferredSize(new Dimension(0, 0)); if ( repaint ) {
invalidate(); setPreferredSize(new Dimension(0, 0));
getParent().validate(); invalidate();
repaint(); getParent().validate();
repaint();
}
} }
public final FScrollPane getScrollPane() { public final FScrollPane getScrollPane() {

View File

@@ -620,11 +620,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
toDelete.removeAll(notToDelete); toDelete.removeAll(notToDelete);
if (toDelete.size() == getCardPanels().size()) { if (toDelete.size() == getCardPanels().size()) {
clear(); clear(false);
} }
else { else {
for (final CardView card : toDelete) { 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; needLayoutRefresh = true;
} }
} }
if (needLayoutRefresh) { if (needLayoutRefresh) {
doLayout(); doLayout();
} }
invalidate(); //pfps do the extra invalidate before any scrolling
if (!newPanels.isEmpty()) { if (!newPanels.isEmpty()) {
int i = newPanels.size();
for (final CardPanel toPanel : newPanels) { 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); Animation.moveCard(toPanel);
} }
} }
repaint();
invalidate();
repaint();
} }
public boolean updateCard(final CardView card, boolean fromRefresh) { public boolean updateCard(final CardView card, boolean fromRefresh) {