code: function move(event, activate) {
      var payload = context.payload,
          displacement = context.displacement;
  
      var globalStart = context.globalStart,
          globalCurrent = toPoint(event),
          globalDelta = deltaPos(globalCurrent, globalStart);
  
      var localStart = context.localStart,
          localCurrent = toLocalPoint(globalCurrent),
          localDelta = deltaPos(localCurrent, localStart);
  
  
      // activate context explicitly or once threshold is reached
      if (!context.active && (activate || getLength(globalDelta) > context.threshold)) {
  
        // fire start event with original
        // starting coordinates
  
        assign(payload, {
          x: round(localStart.x + displacement.x),
          y: round(localStart.y + displacement.y),
          dx: 0,
          dy: 0
        }, { originalEvent: event });
  
        if (false === fire('start')) {
          return cancel();
        }
  
        context.active = true;
  
        // unset selection and remember old selection
        // the previous (old) selection will always passed
        // with the event via the event.previousSelection property
        if (!context.keepSelection) {
          payload.previousSelection = selection.get();
          selection.select(null);
        }
  
        // allow custom cursor
        if (context.cursor) {
          cursorSet(context.cursor);
        }
  
        // indicate dragging via marker on root element
        canvas.addMarker(canvas.getRootElement(), DRAG_ACTIVE_CLS);
      }
  
      stopPropagation(event);
  
      if (context.active) {
  
        // update payload with actual coordinates
        assign(payload, {
          x: round(localCurrent.x + displacement.x),
          y: round(localCurrent.y + displacement.y),
          dx: round(localDelta.x),
          dy: round(localDelta.y)
        }, { originalEvent: event });
  
        // emit move event
        fire('move');
      }
    }
docs: event listeners