anchor.diff:      if (_opacity == value)
         return;
       _opacity = value;
  +    _cachedPaint = null;
       markNeedsPaint();
  +  }
  +
  +  int get _alpha => (_opacity * 255).round();
  +
  +  Paint _cachedPaint;
  +  Paint get _paint {
  +    if (_cachedPaint == null) {
  +      _cachedPaint =  new Paint()
  +        ..color = new Color.fromARGB(_alpha, 0, 0, 0)
  +        ..setTransferMode(sky.TransferMode.srcOver);
  +    }
  +    return _cachedPaint;
     }
   
     void paint(PaintingCanvas canvas, Offset offset) {
       if (child != null) {
  -      int a = (_opacity * 255).round();
  +      int a = _alpha;
   
         if (a == 0)
           return;
  
positive.code:       canvas.scale(widthScale, heightScale);
        offset = Offset.zero;
      }
      Paint paint = new Paint();
      canvas.drawImage(_image, offset.toPoint(), paint);
      if (needsScale)
        canvas.restore();
    }
  
negative.code:         return;
        }
  
        canvas.saveLayer(null, _paint);
        canvas.paintChild(child, offset.toPoint());
        canvas.restore();
      }
  