/*
* Copyright © 2008, 2010, Oracle and/or its affiliates. All rights reserved
*/
package com.sun.me.web.sample.local;
import com.sun.lwuit.Image;
import com.sun.lwuit.Graphics;
import com.sun.lwuit.geom.Dimension;
import com.sun.lwuit.Component;
import com.sun.lwuit.plaf.Style;
/**
* A "washing machine" progress animation that rotates the given image as an
* animation. The image for rotation must be square.
*
* @author Shai Almog
*/
public class InfiniteProgressIndicator extends Component {
private Image[] angles;
private int angle;
public InfiniteProgressIndicator(Image image) {
Image fourtyFiveDeg = image.rotate(45);
angles = new Image[] {image, fourtyFiveDeg, image.rotate(90), fourtyFiveDeg.rotate(90),
image.rotate(180), fourtyFiveDeg.rotate(180), image.rotate(270), fourtyFiveDeg.rotate(270)};
getStyle().setBgTransparency(0);
}
protected Dimension calcPreferredSize() {
Style s = getStyle();
return new Dimension(angles[0].getWidth() + s.getPadding(LEFT) + s.getPadding(RIGHT),
angles[0].getHeight() + s.getPadding(TOP) + s.getPadding(BOTTOM));
}
public void initComponent() {
getComponentForm().registerAnimated(this);
}
public void paint(Graphics g) {
Style s = getStyle();
g.drawImage(angles[Math.abs(angle % angles.length)], getX() + s.getPadding(LEFT), getY() + s.getPadding(TOP));
}
public boolean animate() {
angle++;
return true;
}
}