package org.ripple.power.ui.view; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import org.ripple.power.ui.graphics.LGraphics; public class WaitAnimation { private Color color; private static final Color defaultBlackColor = new Color(0.5f, 0.5f, 0.5f); private static final Color defaultWhiteColor = new Color(240, 240, 240); private double r; private final LinkedList<Object> list; private boolean isRunning = false; private static final double sx = 1.0D, sy = 1.0D; public WaitAnimation(int width, int height) { int r1 = width / 8, r2 = height / 8; this.r = (r1 < r2 ? r1 : r2) / 2; this.list = new LinkedList<Object>(Arrays.asList(new Object[] { new Ellipse2D.Double(sx + 3 * r, sy + 0 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 5 * r, sy + 1 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 6 * r, sy + 3 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 5 * r, sy + 5 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 3 * r, sy + 6 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 1 * r, sy + 5 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 0 * r, sy + 3 * r, 2 * r, 2 * r), new Ellipse2D.Double(sx + 1 * r, sy + 1 * r, 2 * r, 2 * r) })); } public void setColor(Color color) { this.color = color; } public void black() { this.color = defaultBlackColor; } public void white() { this.color = defaultWhiteColor; } public synchronized void next() { if (isRunning) { list.add(list.remove(0)); } } public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) { this.isRunning = isRunning; } public synchronized void draw(LGraphics g, int x, int y, int w, int h) { g.setAntialiasAll(true); g.setColor(color); float alpha = 0.0f; int nx = x + w / 2 - (int) r * 4, ny = y + h / 2 - (int) r * 4; g.translate(nx, ny); for (Iterator<Object> it = list.iterator(); it.hasNext();) { Shape s = (Shape) it.next(); alpha = isRunning ? alpha + 0.1f : 0.5f; g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); g.fill(s); } g.setAntialiasAll(false); g.setAlpha(1.0F); g.translate(-nx, -ny); } }