import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class Pizarra extends Frame implements MouseListener,MouseMotionListener{
	Figura figuraRaiz=null;
	double r=50.0;
	Polygon p = new Polygon();
	public int x, y,t=0,t10, nS=0;
	public Pizarra(){
		this.setLayout(null);
		this.setSize(600,500);
		this.setVisible(true);
		this.setBackground(Color.black);
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
		hebra h = new hebra(this);
		h.start();
		timer tt = new timer(this);
		tt.start();
	}

	     public void mousePressed(MouseEvent e){
                int x=e.getX(); int y=e.getY(); int m = e.getModifiers();
		if (m==8) {figuraRaiz=null;r=20.0;repaint();return;}
		Figura nuevaFigura=null;
		if (m==16)nuevaFigura = new Figura(x,y,true,r);

		else if (m==4)nuevaFigura = new Figura(x,y,false,r);
		if (figuraRaiz == null)figuraRaiz = nuevaFigura;
		else  insertarDerecha(nuevaFigura);
		r=r+1.0;
		update(getGraphics());
	     } 
             public void mouseReleased(MouseEvent e){;} 
             public void mouseClicked(MouseEvent e){;} 
             public void mouseEntered(MouseEvent e){;} 
             public void mouseExited(MouseEvent e){;} 

             public void mouseMoved(MouseEvent e){;} 
             public void mouseDragged(MouseEvent e){
                int x=e.getX(); int y=e.getY(); int m = e.getModifiers();
		Figura nuevaFigura=null;
		if (m==16)nuevaFigura = new Figura(x,y,true,r);
		else if (m==4)nuevaFigura = new Figura(x,y,false,r);
		if (figuraRaiz == null)figuraRaiz = nuevaFigura;
		else  insertarDerecha(nuevaFigura);
		//r=r+1.0;
		update(getGraphics());
	     } 
	public void incT(){
		t++;
		t10 = t/10;
	}
	public void incNumSeq(){
		Dimension d = getSize();
		x=t10+10;
		y=300-nS/10;
		if (x>d.width-20){t=0;nS=0;p.npoints=0;}
		if (nS<=500)nS++;
		else {nS=0;p.npoints=0;}
	}

	public void insertarDerecha(Figura f){
		Figura aux = figuraRaiz;
		while(aux.figuraDerecha!=null){
			aux=aux.figuraDerecha;
		}
		aux.figuraDerecha=f;
	}

	Image offImage;
    	Graphics offGraphics;
	Dimension offDimension;
	public synchronized void update(Graphics g){                                  

  		Dimension d = getSize();

     		if ( (offGraphics == null)
          		|| (d.width != offDimension.width)
          		|| (d.height != offDimension.height) ) {  
     	   			offDimension = d;
           			offImage = createImage(d.width, d.height);
           			offGraphics = offImage.getGraphics();
		}
 
        	//Borra las imagenes previas:
        	offGraphics.setColor(getBackground());
       		offGraphics.fillRect(0,0,d.width,d.height);
		Figura aux = figuraRaiz;
		while(aux!=null){
		aux.xY();
		aux=aux.figuraDerecha;
		}
		aux = figuraRaiz;
		while(aux!=null){
		aux.dibujar(offGraphics);
		aux=aux.figuraDerecha;
		}
		aux = figuraRaiz;
		while(aux!=null){
		aux.nuevoAlfa();
		aux=aux.figuraDerecha;
		}
		offGraphics.setColor(Color.green);
		p.addPoint(x,y);
		offGraphics.drawPolyline(p.xpoints,p.ypoints,p.npoints);
		offGraphics.setColor(Color.red);
		offGraphics.drawRect(x-1,y-1,2,2);
		offGraphics.setColor(Color.white);
		offGraphics.drawLine(10,300,d.width-15,300);
		offGraphics.drawString(Integer.toString(300-y),x-3,y-3);
		offGraphics.setColor(Color.green);
		offGraphics.drawLine(x,300-3,x,300+3);
		offGraphics.drawString(Integer.toString(t10),x+3,300+15);

		g.drawImage(offImage, 0, 0, this);
		
	} 


 public void paint(Graphics g){
	update(g);
 }

}
