Reduce flicker during zone window resize

This commit is contained in:
drdev
2014-11-26 17:44:33 +00:00
parent d31212c9a9
commit 7de4e77eb8
4 changed files with 32 additions and 2 deletions

View File

@@ -305,6 +305,10 @@ public class FDialog extends SkinnedDialog implements ITitleBarOwner, KeyEventDi
getRootPane().setCursor(Cursor.getPredefinedCursor(resizeCursor0));
}
public boolean isResizing() {
return sizeBeforeResize != null;
}
private void addResizeSupport() {
final JRootPane resizeBorders = getRootPane();
resizeBorders.addMouseListener(new MouseAdapter() {

View File

@@ -97,7 +97,7 @@ public class CardArea extends CardPanelContainer implements CardPanelMouseListen
}
@Override
public final void doLayout() {
public void doLayout() {
if (this.getCardPanels().isEmpty()) {
return;
}

View File

@@ -41,12 +41,14 @@ import forge.view.FFrame;
import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.ScrollPaneConstants;
import javax.swing.Timer;
public class FloatingCardArea extends CardArea {
@@ -284,6 +286,29 @@ public class FloatingCardArea extends CardArea {
}
}
@Override
public void doLayout() {
if (window.isResizing()) {
//delay layout slightly to reduce flicker during window resize
layoutTimer.restart();
}
else {
finishDoLayout();
}
}
final Timer layoutTimer = new Timer(250, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
layoutTimer.stop();
finishDoLayout();
}
});
private void finishDoLayout() {
super.doLayout();
}
@Override
public final void mouseOver(final CardPanel panel, final MouseEvent evt) {
CMatchUI.SINGLETON_INSTANCE.setCard(panel.getCard(), evt.isShiftDown());