/**
   * {@inheritDoc}
   *
   * @see
   *     org.eclipse.gef.tools.AbstractTool#handleNativeDragStarted(org.eclipse.swt.dnd.DragSourceEvent)
   */
  @Override
  protected boolean handleNativeDragStarted(DragSourceEvent i_event) {

    setCursor(SWT.CURSOR_CROSS);
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.nativeDragStarted(input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see
   *     org.eclipse.gef.tools.AbstractTool#handleNativeDragFinished(org.eclipse.swt.dnd.DragSourceEvent)
   */
  @Override
  protected boolean handleNativeDragFinished(DragSourceEvent i_event) {

    restoreCursor();
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.nativeDragFinished(input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleDrag()
   */
  @Override
  protected boolean handleDrag() {

    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.mouseMove(
        getStateMask(input), input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleDoubleClick(int)
   */
  @Override
  protected boolean handleDoubleClick(int i_button) {

    m_handler.setScene(getScene());
    Input3D input = getCurrentInput3D();
    m_handler.doubleClick(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleButtonUp(int)
   */
  @Override
  protected boolean handleButtonUp(int i_button) {

    restoreCursor();
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.buttonUp(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleButtonDown(int)
   */
  @Override
  protected boolean handleButtonDown(int i_button) {

    setCursor(SWT.CURSOR_CROSS);
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.buttonDown(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }