docs: function(eventName, eventData) {
          // copy newest event to lastEvent
          var lastEvent = this.lastMouseEvent;
          lastEvent.eventName = eventName;
          lastEvent.mouseButton = eventData.mouseButton;
          lastEvent.target = eventData.target;
          lastEvent.realX = eventData.realX;
          lastEvent.realY = eventData.realY;
          lastEvent.clientX = eventData.clientX; // DEPRECATED: remove in upcoming release
          lastEvent.clientY = eventData.clientY; // DEPRECATED: remove in upcoming release
          lastEvent.originalEvent = eventData.originalEvent;
  
          // trigger event only if valid state
          var mouseButton = eventData.mouseButton;
          if (eventName === "MouseDown") {
              // ignore MouseDown due to inconsistent state caused by loosing focus
              if (this._buttonDown[mouseButton] !== true) {
                  this._buttonDown[mouseButton] = true;
                  this.triggerMouseEvent(eventName, eventData);
              }
          } else if (eventName === "MouseUp") {
              // ignore MouseUp due to inconsistent state caused by loosing focus
              if (this._buttonDown[mouseButton] === true) {
                  this._buttonDown[mouseButton] = false;
                  this.triggerMouseEvent(eventName, eventData);
              }
          } else {
              // trigger the event otherwise
              this.triggerMouseEvent(eventName, eventData);
          }
  
          return this;
      }