| Index: sky/sdk/lib/framework/rendering/box.dart | 
| diff --git a/sky/sdk/lib/framework/rendering/box.dart b/sky/sdk/lib/framework/rendering/box.dart | 
| index c6c878354a103371bb426aef79612ae3cf2b46a1..41f9ed5af3665e66a9cd25df2089046ace200dc1 100644 | 
| --- a/sky/sdk/lib/framework/rendering/box.dart | 
| +++ b/sky/sdk/lib/framework/rendering/box.dart | 
| @@ -666,6 +666,33 @@ class RenderShadowedBox extends RenderProxyBox { | 
| } | 
| } | 
|  | 
| +typedef void CustomPaintCallback(RenderObjectDisplayList canvas); | 
| + | 
| +class RenderCustomPaint extends RenderProxyBox { | 
| + | 
| +  RenderCustomPaint({ | 
| +    CustomPaintCallback callback, | 
| +    RenderBox child | 
| +  }) : super(child) { | 
| +    assert(callback != null); | 
| +    _callback = callback; | 
| +  } | 
| + | 
| +  CustomPaintCallback _callback; | 
| +  void set callback (CustomPaintCallback value) { | 
| +    assert(value != null); | 
| +    if (_callback == value) | 
| +      return; | 
| +    _callback = value; | 
| +    markNeedsPaint(); | 
| +  } | 
| + | 
| +  void paint(RenderObjectDisplayList canvas) { | 
| +    _callback(canvas); | 
| +    super.paint(canvas); | 
| +  } | 
| +} | 
| + | 
| // RENDER VIEW LAYOUT MANAGER | 
|  | 
| class ViewConstraints { | 
|  |