anchor.diff:      if (_transferMode == value)
         return;
       _transferMode = value;
  +    _cachedPaint = null;
       markNeedsPaint();
  +  }
  +
  +  Paint _cachedPaint;
  +  Paint get _paint {
  +    if (_cachedPaint == null) {
  +      _cachedPaint = new Paint()
  +        ..setColorFilter(new sky.ColorFilter.mode(_color, _transferMode));
  +    }
  +    return _cachedPaint;
     }
   
     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.saveLayer(offset & size, _paint);
         canvas.paintChild(child, offset.toPoint());
         canvas.restore();
       }
  
positive.code:     if (_color == value)
        return;
      _color = value;
      markNeedsPaint();
    }
  
  
negative.code:         return;
        }
  
        canvas.saveLayer(null, _paint);
        canvas.paintChild(child, offset.toPoint());
        canvas.restore();
      }
  