protected void addMouseHandlers() {
    // To record the original position
    MouseDownHandler mouseDownHandler =
        new MouseDownHandler() {
          @Override
          public void onMouseDown(MouseDownEvent event) {
            event.stopPropagation();
            if (event.getNativeEvent().getButton() == NativeEvent.BUTTON_LEFT) mouseDown(event);
          }
        };
    MouseMoveHandler mouseMoveHandler =
        new MouseMoveHandler() {
          @Override
          public void onMouseMove(MouseMoveEvent event) {
            event.stopPropagation();
            mouseMove(event);
          }
        };
    MouseUpHandler mouseUpHandler =
        new MouseUpHandler() {

          @Override
          public void onMouseUp(MouseUpEvent event) {
            event.stopPropagation();
            mouseUp(event);
          }
        };
    MouseOutHandler mouseOutHandler =
        new MouseOutHandler() {

          @Override
          public void onMouseOut(MouseOutEvent event) {
            event.stopPropagation();
            mouseOut(event);
          }
        };

    MouseWheelHandler mouseWheelHandler =
        new MouseWheelHandler() {

          @Override
          public void onMouseWheel(MouseWheelEvent event) {
            event.stopPropagation();
            event.preventDefault();
            mouseWheel(event);
          }
        };

    DoubleClickHandler doubleClickHandler =
        new DoubleClickHandler() {

          @Override
          public void onDoubleClick(DoubleClickEvent event) {
            event.stopPropagation();
            doubleClick(event);
          }
        };

    canvas.addMouseDownHandler(mouseDownHandler);
    canvas.addMouseUpHandler(mouseUpHandler);
    canvas.addMouseMoveHandler(mouseMoveHandler);
    canvas.addMouseOutHandler(mouseOutHandler);
    canvas.addMouseWheelHandler(mouseWheelHandler);
    canvas.addDoubleClickHandler(doubleClickHandler);
  }