anchor.diff:   static const PAN = 2;
   }
   
  -class Screen {
  -  num width, height, offsetLeft, offsetTop;
  -  Screen({this.width, this.height, this.offsetLeft, this.offsetTop});
  -}
   class TrackballControls extends EventEmitter {
   
     int _state, _prevState;
     Object3D object;
     Element domElement;
     bool enabled;
  -  Screen screen;
  -  num radius;
  +  Rect screen;
     num rotateSpeed,
         zoomSpeed,
         panSpeed;
     bool noRotate,
          noZoom,
  -       noPan;
  +       noPan,
  +       noRoll;
     bool staticMoving;
     num dynamicDampingFactor;
     num minDistance, maxDistance;
  
positive.code:     noRotate = false;
      noZoom = false;
      noPan = false;
  
      staticMoving = false;
      dynamicDampingFactor = 0.2;
  
negative.code: 
      getMouseOnScreen( clientX, clientY )
        => new Vector2(
            ( clientX - screen.left ) / screen.width,
            ( clientY - screen.top ) / screen.height
        );
  
      getMouseProjectionOnBall( clientX, clientY ) {
  
        var mouseOnBall = new Vector3(
            ( clientX - screen.width * 0.5 - screen.left ) / ( screen.width * 0.5 ),
            ( screen.height * 0.5 + screen.top - clientY ) / ( screen.height * 0.5 ),
            0.0
        );
  
        var length = mouseOnBall.length;
  
        if ( noRoll ) {
  
          if ( length < Math.SQRT1_2 ) {
  
            mouseOnBall.z = Math.sqrt( 1.0 - length * length );
  
          } else {
  
            mouseOnBall.z = 0.5 / length;
            
          }
  
        } else if ( length > 1.0 ) {
  
          mouseOnBall.normalize();
  
  