Managing a canvas with mouse inputs requires you to add HandlerRegistration's to it. Here's how I've done it which may help you to put something together.
This class in my current project gets passed back and forth between modules.
public class PreviewCanvas {
public Canvas canvas;
public HandlerRegistration mousedown = null;
public HandlerRegistration mouseup = null;
public HandlerRegistration mousemove = null;
public PreviewCanvas() {}
public void setHandlers(HandlerRegistration mousedownhandler,
HandlerRegistration mouseuphandler,
HandlerRegistration mousemovehandler) {
mousedown = mousedownhandler;
mouseup = mouseuphandler;
mousemove = mousemovehandler;
}
public void removeHandlers() {
if (mousedown != null) {
mousedown.removeHandler();
mousedown = null;
}
if (mouseup != null) {
mouseup.removeHandler();
mouseup = null;
}
if (mousemove != null) {
mousemove.removeHandler();
mousemove = null;
}
}
}
To setup the handlers for your own use:
canvas.clearHandlers();
HandlerRegistration mousedownhandler = canvas.canvas.addMouseDownHandler(new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
int x = event.getX();
int y = event.getY();
}
});
HandlerRegistration mouseuphandler = canvas.canvas.addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
if (mousedown) {
int x = event.getX();
int y = event.getY();
}
mousedown = false;
}
});
HandlerRegistration mousemovehandler = canvas.canvas.addMouseMoveHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) {
if (mousedown) {
int x = event.getX();
int y = event.getY();
}
}
});
canvas.setHandlers(mousedownhandler, mouseuphandler, mousemovehandler);
Hope this helps...