package br.com.etyllica.effects.light; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.RadialGradientPaint; import br.com.etyllica.core.graphics.Graphics; import br.com.etyllica.layer.GeometricLayer; public class LightSource extends GeometricLayer implements LightSpot { private float[] fractions = {.2f,.8f}; private Color centerColor = new Color(0f, 0f, 0f, 0f); private Color borderColor = new Color(0f, 0f, 0f, 1f); private Color[] colors; private RadialGradientPaint rgp; public LightSource(int x, int y, int intensity) { super(x, y); w = intensity; h = intensity; resetColors(); } public int getIntensity() { return w; } public void setIntensity(int intensity) { w = intensity; h = intensity; } public void drawLight(Graphics g) { g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN, 1.0f)); java.awt.geom.Point2D center = new java.awt.geom.Point2D.Float(x+w/2, y+h/2); rgp = new RadialGradientPaint(center, w/2, fractions, colors); g.setPaint(rgp); g.fillOval(x, y, w, h); } private void resetColors() { colors = new Color[2]; colors[0] = centerColor; colors[1] = borderColor; } public Color getCenterColor() { return centerColor; } public void setCenterColor(Color centerColor) { this.centerColor = centerColor; resetColors(); } public Color getBorderColor() { return borderColor; } public void setBorderColor(Color borderColor) { this.borderColor = borderColor; resetColors(); } }