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 520625626635d6ad86ce6195cdedd370a5a71dee..7355ef99c2c50a2389905ea0e78fe8cec21594d2 100644 |
--- a/sky/sdk/lib/framework/rendering/box.dart |
+++ b/sky/sdk/lib/framework/rendering/box.dart |
@@ -655,19 +655,72 @@ class BoxShadow { |
String toString() => 'BoxShadow($color, $offset, $blur)'; |
} |
+abstract class BoxGradient { |
+ String toString(); |
abarth-chromium
2015/06/09 21:23:39
You can skip this declaration. It's declared alre
Matt Perry
2015/06/09 21:38:28
Done.
|
+ sky.Shader createShader(); |
+} |
+ |
+class LinearBoxGradient extends BoxGradient { |
+ LinearBoxGradient({ |
+ this.endPoints, |
+ this.colors, |
+ this.colorStops, |
+ this.tileMode: sky.TileMode.clamp |
+ }); |
+ |
+ String toString() => |
+ 'LinearBoxGradient($endPoints, $colors, $colorStops, $tileMode)'; |
+ |
+ sky.Shader createShader() { |
+ return new sky.Gradient.Linear(this.endPoints, this.colors, this.colorStops, |
+ this.tileMode); |
+ } |
+ |
+ final List<Point> endPoints; |
+ final List<Color> colors; |
+ final List<double> colorStops; |
+ final sky.TileMode tileMode; |
+} |
+ |
+class RadialBoxGradient extends BoxGradient { |
+ RadialBoxGradient({ |
+ this.center, |
+ this.radius, |
+ this.colors, |
+ this.colorStops, |
+ this.tileMode: sky.TileMode.clamp |
+ }); |
+ |
+ String toString() => |
+ 'RadialBoxGradient($center, $radius, $colors, $colorStops, $tileMode)'; |
+ |
+ sky.Shader createShader() { |
+ return new sky.Gradient.Radial(this.center, this.radius, this.colors, |
+ this.colorStops, this.tileMode); |
+ } |
+ |
+ final Point center; |
+ final double radius; |
+ final List<Color> colors; |
+ final List<double> colorStops; |
+ final sky.TileMode tileMode; |
+} |
+ |
// This must be immutable, because we won't notice when it changes |
class BoxDecoration { |
const BoxDecoration({ |
this.backgroundColor, |
this.border, |
this.borderRadius, |
- this.boxShadow |
+ this.boxShadow, |
+ this.boxGradient |
}); |
final Color backgroundColor; |
final double borderRadius; |
final Border border; |
final List<BoxShadow> boxShadow; |
+ final BoxGradient boxGradient; |
abarth-chromium
2015/06/09 21:23:40
boxGradient -> gradient
We should probably rename
Matt Perry
2015/06/09 21:38:28
Done.
|
String toString([String prefix = '']) { |
List<String> result = []; |
@@ -679,6 +732,8 @@ class BoxDecoration { |
result.add('${prefix}borderRadius: $borderRadius'); |
if (boxShadow != null) |
result.add('${prefix}boxShadow: ${boxShadow.map((shadow) => shadow.toString())}'); |
+ if (boxGradient != null) |
+ result.add('${prefix}boxGradient: $boxGradient'); |
if (result.isEmpty) |
return '${prefix}<no decorations specified>'; |
return result.join('\n'); |
@@ -720,6 +775,9 @@ class RenderDecoratedBox extends RenderProxyBox { |
paint.setDrawLooper(builder.build()); |
} |
+ if (_decoration.boxGradient != null) |
+ paint.setShader(_decoration.boxGradient.createShader()); |
+ |
_cachedBackgroundPaint = paint; |
} |
@@ -730,7 +788,8 @@ class RenderDecoratedBox extends RenderProxyBox { |
assert(size.width != null); |
assert(size.height != null); |
- if (_decoration.backgroundColor != null || _decoration.boxShadow != null) { |
+ if (_decoration.backgroundColor != null || _decoration.boxShadow != null || |
+ _deocration.boxGradient != null) { |
Rect rect = new Rect.fromLTRB(0.0, 0.0, size.width, size.height); |
if (_decoration.borderRadius == null) |
canvas.drawRect(rect, _backgroundPaint); |