/**
 * testgeo5.java	22/09/22
 * auteur : Jean-Paul Quelen
 *
 */

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import geo.*;

public class testgeo5 extends JFrame implements MouseListener, MouseMotionListener {
	static final long serialVersionUID = 220922L;
	int w, h;
	static Image img;
	static Graphics g1;
	static Repere R;
	static PointLibre A, B, C;
	static Cercle ABC;
	static ArcDeCercle AOB;

	public testgeo5 (String titre) {
		super (titre);
		setFont (new Font ("Arial", Font.PLAIN, 12));
		addMouseMotionListener (this);
		addMouseListener (this);
	}

	public void update (Graphics g) {
		paint (g);
	}

	public void paint (Graphics g) {
		int w1 = getWidth();
		int h1 = getHeight();
		if ((img == null) || (w1 != w) || (h1 != h)) {
			w = w1;
			h = h1;
			img = createImage (w, h);
			g1 = img.getGraphics();
			if (R == null) {
				R = new Repere (w / 2, h / 2, w, h, 10.0, 10.0);
				A = new PointLibre (5.0, 0.0);
				B = new PointLibre (0.0, 5.0);
				C = new PointLibre (-2.0, -2.0);
			} else {
				R.MAJ (w / 2, h / 2, w, h, 10.0, 10.0);
			}
		}
		ABC = new Cercle (A, B, C);
		AOB = new ArcDeCercle (A, ABC.centre(), B);
		
		g1.setColor (Color.WHITE);
		g1.fillRect (0, 0, R.XMAX, R.YMAX);

		g1.setColor (Color.GREEN);
		R.trace (g1);

		g1.setColor (Color.BLUE);
		AOB.trace (true, "", R, g1);

		g1.setColor (Color.RED);
		A.trace ("A", R, g1);
		B.trace ("B", R, g1);
		C.trace ("C", R, g1);
		
		g.drawImage (img, 0, 0, this);
	}

	public void mousePressed (MouseEvent e) {
		int X = e.getX();
		int Y =  e.getY();
		if ((A.deplace = A.zone (X, Y, R)) || (B.deplace = B.zone (X, Y, R))
				|| (C.deplace = C.zone (X, Y, R))) {}
	}

	public void mouseDragged (MouseEvent e) {
		int X = e.getX();
		int Y =  e.getY();
		A.bouge (X, Y, R);
		B.bouge (X, Y, R);
		C.bouge (X, Y, R);
		repaint();
	}

	public void mouseReleased (MouseEvent e) {
		A.deplace = B.deplace = C.deplace = false;
	}

	public void mouseMoved (MouseEvent e) {
		int X = e.getX();
		int Y = e.getY();
		if (A.zone (X, Y, R) || B.zone (X, Y, R) || C.zone (X, Y, R)) {
			setCursor (new Cursor (Cursor.HAND_CURSOR));
		} else {
			setCursor (new Cursor (Cursor.DEFAULT_CURSOR));
		}
	}

public void mouseClicked (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseExited (MouseEvent e) {}

	public static void main (String args[]) {
		testgeo5 appl = new testgeo5 ("testgeo");
		appl.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
		appl.setSize (400, 300);
		appl.setVisible (true);
	}
}
