anchor.diff:        ctx.clip();
       }
   
  +    _setAlpha(ctx);
  +
       _drawInternal(ctx);
       ctx.restore();
     }
   
  -  void _drawInternal(CanvasRenderingContext2D ctx){
  +  void _drawInternal(CanvasRenderingContext2D ctx) {
  +    // possible for invalidateParent to be called during draw
  +    // which signals that another frame is wanted for animating content
  +    // so we're setting _lastDrawSize here
  +    _lastDrawSize = this.size;
  +
  +    // call the abstract draw method
  +    drawOverride(ctx);
  +  }
  +
  +  bool _isClipped(AffineTransform tx, CanvasRenderingContext2D ctx){
  +    if(clip){
  +      // a lot more impl to do here...
  +    }
  +    return false;
  +  }
  +
  +  void _invalidateParent(){
  +    assert(this._parent != null);
  +    _invalidatedEventHandle.fireEvent(EventArgs.empty);
  +    _parent.childInvalidated(this);
  +  }
  +
  +  void _setAlpha(CanvasRenderingContext2D ctx) {
       assert(_alpha != null);
       assert(_alpha >= 0);
       assert(_alpha <= 1);
       ctx.globalAlpha = _alpha;
  -
  -    // possible for invalidateParent to be called during draw
  -    // which signals that another frame is wanted for animating content
  -    // so we're setting _lastDrawSize here
  -    _lastDrawSize = this.size;
  -
  -    // call the abstract draw method
  -    drawOverride(ctx);
  -  }
  -
  -  bool _isClipped(AffineTransform tx, CanvasRenderingContext2D ctx){
  -    if(clip){
  -      // a lot more impl to do here...
  -    }
  -    return false;
  -  }
  -
  -  void _invalidateParent(){
  -    assert(this._parent != null);
  -    _invalidatedEventHandle.fireEvent(EventArgs.empty);
  -    _parent.childInvalidated(this);
     }
   }
  
positive.code: 
    void invalidateDraw(){
      validateNotDisposed();
      if(_lastDrawSize != null){
        _lastDrawSize = null;
        _invalidateParent();
      }
  
negative.code:     requireArgument(isValidNumber(value), 'value');
      requireArgument(value >= 0 && value <= 1, 'value');
      _alpha = value;
      if(parent != null) {
        _invalidateParent();
      }
    }
  
    ThingParent get parent => _parent;
  