package plots;

import java.awt.Graphics;
import java.awt.Color;

public class ActiveEllipse {
	public double a, b;
	double c[];
	Matrix2d m;

	// cx, cy = centre
	public ActiveEllipse(Matrix2d m, double c[], double a, double b) {
		this.m = m;
		this.a = a;
		this.b = b;
		this.c = c;
	}

	public double[] getCentre() {
		return(c);
	}
	
	public void setCentre(double x, double y) {
		c[0] = x; c[1] = y;
	}

	public void translate(double x, double y) {
		c[0] += x; c[1] += y;
	}

	public boolean contains(double x, double y) {
		double X = (x-c[0])/a;
		double Y = (y-c[1])/b;
		double d = X*X + Y*Y;
		return(d <= 1.0);
	}

	public void drag(double x, double y) {
		c[0] = x - offsetx; c[1] = y - offsety;
	}

	boolean active = false;
	double offsetx, offsety;
	public void activate(double x, double y) {
		active = true;
		offsetx = x - c[0]; offsety = y - c[1];
	}

	public void setActive(boolean t) {
		active = t;
	}

	// assumes standard orientation
	public void draw(Graphics gfx, Color col) {
		gfx.setColor(col);
		int[] corner = m.transform((float) (c[0]-a), (float) (c[1]+b));
		int[] diameter = m.transform((float) (c[0]+a), (float) (c[1]-b));
		gfx.drawOval(corner[0], corner[1], diameter[0]-corner[0], diameter[1]-corner[1]);
	}

	public void fill(Graphics gfx, Color col) {
		gfx.setColor(col);
		int[] corner = m.transform((float) (c[0]-a), (float) (c[1]+b));
		int[] diameter = m.transform((float) (c[0]+a), (float) (c[1]-b));
		gfx.fillOval(corner[0], corner[1], diameter[0]-corner[0], diameter[1]-corner[1]);
	}
}
