anchor.diff:      if (_color == value)
         return;
       _color = value;
  +    _cachedPaint = null;
       markNeedsPaint();
     }
   
  
positive.code:     if (_transferMode == value)
        return;
      _transferMode = value;
      markNeedsPaint();
    }
  
    void paint(PaintingCanvas canvas, Offset offset) {
      if (child != null) {
        Paint paint = new Paint()
          ..setColorFilter(new sky.ColorFilter.mode(_color, _transferMode));
        canvas.saveLayer(null, paint);
        canvas.paintChild(child, offset.toPoint());
        canvas.restore();
      }
  
negative.code:     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 = _alpha;
  
        if (a == 0)
          return;
  