Animated "remind" feature in ViewMessage.

This commit is contained in:
Doublestrike
2012-02-16 02:32:07 +00:00
parent 496e2ca785
commit 778d96d605

View File

@@ -18,16 +18,16 @@
package forge.view.match;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import javax.swing.SwingUtilities;
import javax.swing.border.MatteBorder;
import net.miginfocom.swing.MigLayout;
@@ -48,6 +48,7 @@ public class ViewMessage extends FPanel {
private final JLabel lblGames;
private Timer timer1 = null;
private static int counter = 0;
private int[] newA = null, newR = null, newG = null, newB = null;
private boolean remindIsRunning = false;
/**
@@ -135,30 +136,52 @@ public class ViewMessage extends FPanel {
/** Flashes animation on input panel if play is currently waiting on input. */
public void remind() {
// To adjust, only touch these two values.
final int steps = 5; // Number of delays
final int delay = 80; // Milliseconds between steps
if (remindIsRunning) { return; }
remindIsRunning = true;
final int[] steps = {210, 215, 220, 220, 220, 215, 210};
final Color oldBG = getBackground();
final int oldR = getBackground().getRed();
final int oldG = getBackground().getGreen();
final int oldB = getBackground().getBlue();
final int oldA = getBackground().getAlpha();
counter = 0;
newR = new int[steps];
newG = new int[steps];
newB = new int[steps];
newA = new int[steps];
ActionListener fader = new ActionListener() {
for (int i = 0; i < steps; i++) {
newR[i] = (int) ((255 - oldR) / steps * i);
newG[i] = (int) (oldG / steps * i);
newB[i] = (int) (oldB / steps * i);
newA[i] = (int) ((255 - oldA) / steps * i);
}
final TimerTask tt = new TimerTask() {
@Override
public void actionPerformed(final ActionEvent evt) {
public void run() {
counter++;
if (counter != (steps.length - 1)) {
setBackground(new Color(255, 0, 0, steps[counter]));
if (counter != (steps - 1)) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() { setBackground(new Color(newR[counter], oldG, oldB, newA[counter])); } });
}
else {
setBackground(oldBG);
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() { setBackground(new Color(oldR, oldG, oldB, oldA)); } });
remindIsRunning = false;
timer1.stop();
timer1.cancel();
newR = null;
newG = null;
newB = null;
newA = null;
}
repaint();
}
};
timer1 = new Timer(100, fader);
timer1.start();
timer1 = new Timer();
timer1.scheduleAtFixedRate(tt, 0, delay);
}
}