Index: sky/sdk/lib/rendering/box.dart |
diff --git a/sky/sdk/lib/rendering/box.dart b/sky/sdk/lib/rendering/box.dart |
index ccfea1208efcb4c24d34698252bb45aa19945119..6f67225220edc25c8de32c9bdd938c870efce0f1 100644 |
--- a/sky/sdk/lib/rendering/box.dart |
+++ b/sky/sdk/lib/rendering/box.dart |
@@ -482,7 +482,43 @@ class RenderOpacity extends RenderProxyBox { |
Paint paint = new Paint() |
..color = new Color.fromARGB(a, 0, 0, 0) |
- ..setTransferMode(sky.TransferMode.srcOverMode); |
+ ..setTransferMode(sky.TransferMode.srcOver); |
+ canvas.saveLayer(null, paint); |
+ child.paint(canvas); |
+ canvas.restore(); |
+ } |
+ } |
+} |
+ |
+class RenderColorFilter extends RenderProxyBox { |
+ RenderColorFilter({ RenderBox child, Color color, sky.TransferMode transferMode }) |
+ : this._color = color, _transferMode = transferMode, super(child) { |
Hixie
2015/06/17 23:59:12
you don't need the this.
|
+ } |
+ |
+ Color _color; |
+ Color get color => _color; |
+ void set color (Color value) { |
+ assert(value != null); |
+ if (_color == value) |
+ return; |
+ _color = value; |
+ markNeedsPaint(); |
+ } |
+ |
+ sky.TransferMode _transferMode; |
+ sky.TransferMode get transferMode => _transferMode; |
+ void set transferMode (sky.TransferMode value) { |
+ assert(value != null); |
+ if (_transferMode == value) |
+ return; |
+ _transferMode = value; |
+ markNeedsPaint(); |
+ } |
+ |
+ void paint(RenderObjectDisplayList canvas) { |
+ if (child != null) { |
+ Paint paint = new Paint() |
+ ..setColorFilter(new sky.ColorFilter.mode(_color, _transferMode)); |
canvas.saveLayer(null, paint); |
child.paint(canvas); |
canvas.restore(); |