anchor.diff:  
     @protected
     void drawCore(CanvasRenderingContext2D ctx){
  +    ctx.save();
  +    final tx = this.getTransform();
  +    CanvasUtil.transform(ctx, tx);
  +    assert(_alpha != null);
  +    assert(_alpha >= 0);
  +    assert(_alpha <= 1);
  +    ctx.globalAlpha = _alpha;
  +
       if(_cacheEnabled) {
         _drawCached(ctx);
       } else {
         _drawNormal(ctx);
       }
  -  }
  +
  +    ctx.restore();
  +  }
  +
  +  @protected
  +  void drawOverride(CanvasRenderingContext2D ctx);
   
     AffineTransform addTransform(){
       validateNotDisposed();
  
positive.code:     }
    }
  
    @protected
    void drawOverride(CanvasRenderingContext2D ctx);
  
    void invalidateDraw(){
      validateNotDisposed();
      if(_lastDrawSize != null) {
  
negative.code:       _drawInternal(cacheCtx);
      }
  
      ctx.drawImage(this._cacheCanvas, 0, 0);
    }
  
    void _drawNormal(CanvasRenderingContext2D ctx){
      _drawInternal(ctx);
    }
  
    void _drawInternal(CanvasRenderingContext2D ctx) {
  