package com.stormbrain.test.client;
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.event.dom.client.DragEvent;
import com.google.gwt.event.dom.client.DragHandler;
import com.google.gwt.event.dom.client.DragOverEvent;
import com.google.gwt.event.dom.client.DragOverHandler;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.touch.client.Point;
import com.google.gwt.user.client.Window;
import com.stormbrain.test.client.model.Arc;
public class Controller implements MouseUpHandler, MouseDownHandler, MouseMoveHandler {
private Canvas canvas;
private Painter painter;
private Context2d context;
private Point lastMouseDown = null;
private Arc bubble = null;
private HandlerRegistration mouseMove;
public Controller(Canvas canvas, Painter painter) {
this.canvas = canvas;
this.painter = painter;
this.context = canvas.getContext2d();
this.canvas.addMouseDownHandler(this);
this.canvas.addMouseUpHandler(this);
context.setFillStyle(CssColor.make(0, 0, 255));
context.setStrokeStyle(CssColor.make(0, 0, 255));
}
public void onMouseUp(MouseUpEvent event) {
double distance = getDistance(lastMouseDown, new Point(event.getX(), event.getY()));
lastMouseDown = null;
context.closePath();
bubble.showFill(true);
if(distance < 5.0) {
bubble.setRadius(5);
} else {
bubble.setRadius(distance);
}
mouseMove.removeHandler();
}
private double getDistance(Point point1, Point point2) {
return Math.sqrt((point2.getY() - point1.getY()) * (point2.getY() - point1.getY()) +
(point2.getX() - point1.getX()) * (point2.getX() - point1.getX()));
}
public void onMouseDown(MouseDownEvent event) {
lastMouseDown = new Point(event.getX(), event.getY());
bubble = new Arc(lastMouseDown, 0);
bubble.showFill(false);
painter.add(bubble);
mouseMove = canvas.addMouseMoveHandler(this);
}
public void onMouseMove(MouseMoveEvent event) {
double distance = getDistance(lastMouseDown, new Point(event.getX(), event.getY()));
bubble.setRadius(distance);
}
}