package com.kartoflane.superluminal2.mvc.controllers;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import com.kartoflane.superluminal2.core.LayeredPainter.Layers;
import com.kartoflane.superluminal2.mvc.View;
import com.kartoflane.superluminal2.mvc.models.BaseModel;
import com.kartoflane.superluminal2.mvc.views.CursorView;
public class CursorController extends AbstractController {
private static CursorController instance = null;
private int mouseX = 0;
private int mouseY = 0;
private CursorController(BaseModel model, CursorView view) {
super();
setModel(model);
setView(view);
setSelectable(false);
setBounded(false);
instance = this;
}
public static CursorController newInstance() {
if (instance != null)
throw new IllegalStateException("Cursor already exists.");
BaseModel model = new BaseModel();
CursorView view = new CursorView();
CursorController controller = new CursorController(model, view);
return controller;
}
public static CursorController getInstance() {
return instance;
}
@Override
public void setView(View view) {
super.setView(view);
this.view.addToPainter(Layers.CURSOR);
}
public Point getMouseLocation() {
return new Point(mouseX, mouseY);
}
public int getMouseX() {
return mouseX;
}
public int getMouseY() {
return mouseY;
}
/*
* Override mouse events to do nothing;
* Cursor behaviour is implemented by tools.
*/
@Override
public void mouseMove(MouseEvent e) {
mouseX = e.x;
mouseY = e.y;
}
@Override
public void mouseDown(MouseEvent e) {
mouseX = e.x;
mouseY = e.y;
}
@Override
public void mouseUp(MouseEvent e) {
mouseX = e.x;
mouseY = e.y;
}
}