/**
* Javier Abell�n, 24 Mayo 2006
* Panel de paint.
*/
package gafetes.modules.sign;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.geom.Point2D;
import java.util.LinkedList;
/**
* Panel similar a un paintbrush de windows, que permite dibujar trazos
* arrastrando el rat�n.
* @author Chuidiang.
*
*/
public class PanelPaint extends Canvas
{
/**
* serial uid
*/
private static final long serialVersionUID = 3978706198935583032L;
/** Acci�n de pintar trazo mientrasa se arrastra el rat�n */
private PintaTrazo pintaTrazo = null;
/** Clase suscriptora de los arrastres de rat�n */
private ListenerArrastre listener = null;
/** Lista de trazos dibujados */
private LinkedList<Trazo> trazos = new LinkedList<Trazo>();
/** Acci�n de mover un trazo cuando se le arrastra con el rat�n. */
private ArrastraTrazo arrastraTrazo = null;
/** Indica si estamos en modo de arrastre de trazos o de dibujo de los
* mismos.
*/
private boolean modoArrastrar = false;
/**
* Pone el modo de arrastre de trazos.
*
*/
public void modoArrastrar()
{
listener.setAccion(arrastraTrazo);
modoArrastrar = true;
}
/**
* Pone el modo de dibujo de trazos.
*
*/
public void modoPintar()
{
listener.setAccion(pintaTrazo);
modoArrastrar = false;
}
/**
* Crea una intancia de esta clase, inicializando todo.
*
*/
public PanelPaint()
{
pintaTrazo = new PintaTrazo(trazos, this);
listener = new ListenerArrastre(pintaTrazo);
arrastraTrazo = new ArrastraTrazo(trazos, this);
addMouseMotionListener(listener);
}
/**
* Si el modo es arrastre, borra el canvas entero. Si no, no lo hace.
* Luego llama a paint(g)
*/
public void update(Graphics g)
{
if (modoArrastrar)
super.update(g);
paint(g);
}
/**
* Dibuja los trazos en este componente
*/
public void paint(Graphics g)
{
for (int i = 0; i < trazos.size(); i++)
{
dibujaTrazo(trazos.get(i), g);
}
}
/**
* Dibuja un trazo en este componente.
* @param trazo Trazo a dibujar.
* @param g Graphics para dibujo.
*/
private void dibujaTrazo(Trazo trazo, Graphics g)
{
g.setColor(trazo.getColor());
Point2D p0 = trazo.getPunto(0);
for (int i = 0; i < trazo.getNumeroPuntos() - 1; i++)
{
Point2D p1 = trazo.getPunto(i + 1);
g.drawLine((int) p0.getX(), (int) p0.getY(), (int) p1.getX(),
(int) p1.getY());
p0 = p1;
}
}
/**
* Cambia el color de dibujo del trazo.
* @param colorActual
*/
public void setColorActual(Color colorActual)
{
pintaTrazo.setColorActual(colorActual);
}
}