docs: function BrushController(zr) {
  
      if (__DEV__) {
          zrUtil.assert(zr);
      }
  
      Eventful.call(this);
  
      /**
       * @type {module:zrender/zrender~ZRender}
       * @private
       */
      this._zr = zr;
  
      /**
       * @type {module:zrender/container/Group}
       * @readOnly
       */
      this.group = new graphic.Group();
  
      /**
       * Only for drawing (after enabledBrush).
       *     'line', 'rect', 'polygon' or false
       *     If passing false/null/undefined, disable brush.
       *     If passing 'auto', determined by panel.defaultBrushType
       * @private
       * @type {string}
       */
      this._brushType;
  
      /**
       * Only for drawing (after enabledBrush).
       *
       * @private
       * @type {Object}
       */
      this._brushOption;
  
      /**
       * @private
       * @type {Object}
       */
      this._panels;
  
      /**
       * @private
       * @type {Array.<nubmer>}
       */
      this._track = [];
  
      /**
       * @private
       * @type {boolean}
       */
      this._dragging;
  
      /**
       * @private
       * @type {Array}
       */
      this._covers = [];
  
      /**
       * @private
       * @type {moudule:zrender/container/Group}
       */
      this._creatingCover;
  
      /**
       * `true` means global panel
       * @private
       * @type {module:zrender/container/Group|boolean}
       */
      this._creatingPanel;
  
      /**
       * @private
       * @type {boolean}
       */
      this._enableGlobalPan;
  
      /**
       * @private
       * @type {boolean}
       */
      if (__DEV__) {
          this._mounted;
      }
  
      /**
       * @private
       * @type {string}
       */
      this._uid = 'brushController_' + baseUID++;
  
      /**
       * @private
       * @type {Object}
       */
      this._handlers = {};
      each(mouseHandlers, function (handler, eventName) {
          this._handlers[eventName] = zrUtil.bind(handler, this);
      }, this);
  }