package org.limewire.ui.swing.components; import java.awt.Color; import java.awt.Dimension; import java.awt.Shape; import java.awt.geom.Ellipse2D; import org.jdesktop.application.Resource; import org.jdesktop.swingx.JXBusyLabel; import org.jdesktop.swingx.painter.BusyPainter; import org.jdesktop.swingx.plaf.UIManagerExt; import org.limewire.ui.swing.util.GuiUtils; public class ColoredBusyLabel extends JXBusyLabel { @Resource private Color lightGrey; @Resource private Color darkGrey; public ColoredBusyLabel(Dimension dimension) { super(dimension); GuiUtils.assignResources(this); setBusyPainter(null); // null out the painter the super constructor set. getBusyPainter(); // recreate. } @Override protected BusyPainter createBusyPainter(final Dimension dim) { BusyPainter p = new BusyPainter() { @Override protected void init(Shape point, Shape trajectory, Color unused, Color unused2) { super.init(dim == null ? UIManagerExt.getShape("JXBusyLabel.pointShape") : getScaledCircularPoint(dim.height), dim == null ? UIManagerExt.getShape("JXBusyLabel.trajectoryShape") : getScaledDefaultTrajectory(dim.height), lightGrey, darkGrey); } /** * The method getScaledDefaultPoint returns an elongated ellipse, which one of LimeWire's designers dislikes. * This method returns a circle instead... */ private Ellipse2D.Float getScaledCircularPoint(float height) { return new Ellipse2D.Float(0, 0, height/5, height/5); } }; return p; } }