| Index: sky/sdk/lib/framework/components2/radio.dart | 
| diff --git a/sky/sdk/lib/framework/components2/radio.dart b/sky/sdk/lib/framework/components2/radio.dart | 
| index b065dfe87f222897dd66a73dce899e4f1a2d7117..33d4fb2e26c54d174e95f01fbed120d93c586dc6 100644 | 
| --- a/sky/sdk/lib/framework/components2/radio.dart | 
| +++ b/sky/sdk/lib/framework/components2/radio.dart | 
| @@ -2,7 +2,12 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| +import 'package:sky/framework/theme2/colors.dart' as colors; | 
| + | 
| +import 'dart:sky' as sky; | 
| import '../fn2.dart'; | 
| +import '../rendering/box.dart'; | 
| +import '../rendering/object.dart'; | 
| import 'button_base.dart'; | 
| import 'ink_well.dart'; | 
|  | 
| @@ -13,31 +18,6 @@ class Radio extends ButtonBase { | 
| Object groupValue; | 
| ValueChanged onChanged; | 
|  | 
| -  static final Style _style = new Style(''' | 
| -    width: 14px; | 
| -    height: 14px; | 
| -    border-radius: 7px; | 
| -    border: 1px solid blue; | 
| -    margin: 0 5px;''' | 
| -  ); | 
| - | 
| -  static final Style _highlightStyle = new Style(''' | 
| -    width: 14px; | 
| -    height: 14px; | 
| -    border-radius: 7px; | 
| -    border: 1px solid blue; | 
| -    margin: 0 5px; | 
| -    background-color: orange;''' | 
| -  ); | 
| - | 
| -  static final Style _dotStyle = new Style(''' | 
| -    width: 10px; | 
| -    height: 10px; | 
| -    border-radius: 5px; | 
| -    background-color: black; | 
| -    margin: 2px;''' | 
| -  ); | 
| - | 
| Radio({ | 
| Object key, | 
| this.onChanged, | 
| @@ -46,12 +26,32 @@ class Radio extends ButtonBase { | 
| }) : super(key: key); | 
|  | 
| UINode buildContent() { | 
| +    // TODO(jackson): This should change colors with the theme | 
| +    sky.Color color = highlight ? colors.Purple[500] : const sky.Color(0x8A000000); | 
| +    const double diameter = 16.0; | 
| +    const double outerRadius = diameter / 2; | 
| +    const double innerRadius = 5.0; | 
| return new EventListenerNode( | 
| -      new StyleNode( | 
| -        new InkWell( | 
| -          children: value == groupValue ? [new Container(style: _dotStyle)] : [] | 
| -        ), | 
| -        highlight ? _highlightStyle : _style | 
| +      new Container( | 
| +        margin: const EdgeDims.symmetric(horizontal: 5.0), | 
| +        desiredSize: new sky.Size(diameter, diameter), | 
| +        child: new CustomPaint( | 
| +          callback: (RenderObjectDisplayList canvas) { | 
| + | 
| +            sky.Paint paint = new sky.Paint()..color = color; | 
| + | 
| +            // Draw the outer circle | 
| +            paint.style = 1; // SkPaint::STROKE_STYLE; | 
| +            paint.strokeWidth = 2.0; | 
| +            canvas.drawCircle(outerRadius, outerRadius, outerRadius, paint); | 
| + | 
| +            // Draw the inner circle | 
| +            if (value == groupValue) { | 
| +              paint.style = 0; // SkPaint::FILL_STYLE; | 
| +              canvas.drawCircle(outerRadius, outerRadius, innerRadius, paint); | 
| +            } | 
| +          } | 
| +        ) | 
| ), | 
| onGestureTap: _handleClick | 
| ); | 
|  |