Index: sky/sdk/lib/framework/painting/box_painter.dart |
diff --git a/sky/sdk/lib/framework/painting/box_painter.dart b/sky/sdk/lib/framework/painting/box_painter.dart |
deleted file mode 100644 |
index c1f3fba63daecbd720937152d66c5fb2b18a2dee..0000000000000000000000000000000000000000 |
--- a/sky/sdk/lib/framework/painting/box_painter.dart |
+++ /dev/null |
@@ -1,271 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-import 'dart:math' as math; |
-import 'dart:sky' as sky; |
-import 'dart:sky' show Point, Size, Rect, Color, Paint, Path; |
-import 'shadows.dart'; |
- |
-class BorderSide { |
- const BorderSide({ |
- this.color: const Color(0xFF000000), |
- this.width: 1.0 |
- }); |
- final Color color; |
- final double width; |
- |
- static const none = const BorderSide(width: 0.0); |
- |
- int get hashCode { |
- int value = 373; |
- value = 37 * value * color.hashCode; |
- value = 37 * value * width.hashCode; |
- return value; |
- } |
- String toString() => 'BorderSide($color, $width)'; |
-} |
- |
-class Border { |
- const Border({ |
- this.top: BorderSide.none, |
- this.right: BorderSide.none, |
- this.bottom: BorderSide.none, |
- this.left: BorderSide.none |
- }); |
- |
- const Border.all(BorderSide side) : |
- top = side, |
- right = side, |
- bottom = side, |
- left = side; |
- |
- final BorderSide top; |
- final BorderSide right; |
- final BorderSide bottom; |
- final BorderSide left; |
- |
- int get hashCode { |
- int value = 373; |
- value = 37 * value * top.hashCode; |
- value = 37 * value * right.hashCode; |
- value = 37 * value * bottom.hashCode; |
- value = 37 * value * left.hashCode; |
- return value; |
- } |
- String toString() => 'Border($top, $right, $bottom, $left)'; |
-} |
- |
-class BoxShadow { |
- const BoxShadow({ |
- this.color, |
- this.offset, |
- this.blur |
- }); |
- |
- final Color color; |
- final Size offset; |
- final double blur; |
- |
- String toString() => 'BoxShadow($color, $offset, $blur)'; |
-} |
- |
-abstract class Gradient { |
- sky.Shader createShader(); |
-} |
- |
-class LinearGradient extends Gradient { |
- LinearGradient({ |
- this.endPoints, |
- this.colors, |
- this.colorStops, |
- this.tileMode: sky.TileMode.clamp |
- }); |
- |
- String toString() => |
- 'LinearGradient($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 RadialGradient extends Gradient { |
- RadialGradient({ |
- this.center, |
- this.radius, |
- this.colors, |
- this.colorStops, |
- this.tileMode: sky.TileMode.clamp |
- }); |
- |
- String toString() => |
- 'RadialGradient($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; |
-} |
- |
-enum Shape { rectangle, circle } |
- |
-// This must be immutable, because we won't notice when it changes |
-class BoxDecoration { |
- const BoxDecoration({ |
- this.backgroundColor, // null = don't draw background |
- this.border, // null = don't draw border |
- this.borderRadius, // null = use more efficient background drawing; note that this must be null for circles |
- this.boxShadow, // null = don't draw shadows |
- this.gradient, // null = don't allocate gradient objects |
- this.shape: Shape.rectangle |
- }); |
- |
- final Color backgroundColor; |
- final double borderRadius; |
- final Border border; |
- final List<BoxShadow> boxShadow; |
- final Gradient gradient; |
- final Shape shape; |
- |
- String toString([String prefix = '']) { |
- List<String> result = []; |
- if (backgroundColor != null) |
- result.add('${prefix}backgroundColor: $backgroundColor'); |
- if (border != null) |
- result.add('${prefix}border: $border'); |
- if (borderRadius != null) |
- result.add('${prefix}borderRadius: $borderRadius'); |
- if (boxShadow != null) |
- result.add('${prefix}boxShadow: ${boxShadow.map((shadow) => shadow.toString())}'); |
- if (gradient != null) |
- result.add('${prefix}gradient: $gradient'); |
- if (shape != Shape.rectangle) |
- result.add('${prefix}shape: $shape'); |
- if (result.isEmpty) |
- return '${prefix}<no decorations specified>'; |
- return result.join('\n'); |
- } |
-} |
- |
-class BoxPainter { |
- BoxPainter(BoxDecoration decoration) : _decoration = decoration { |
- assert(decoration != null); |
- } |
- |
- BoxDecoration _decoration; |
- BoxDecoration get decoration => _decoration; |
- void set decoration (BoxDecoration value) { |
- assert(value != null); |
- if (value == _decoration) |
- return; |
- _decoration = value; |
- _cachedBackgroundPaint = null; |
- } |
- |
- Paint _cachedBackgroundPaint; |
- Paint get _backgroundPaint { |
- if (_cachedBackgroundPaint == null) { |
- Paint paint = new Paint(); |
- |
- if (_decoration.backgroundColor != null) |
- paint.color = _decoration.backgroundColor; |
- |
- if (_decoration.boxShadow != null) { |
- var builder = new ShadowDrawLooperBuilder(); |
- for (BoxShadow boxShadow in _decoration.boxShadow) |
- builder.addShadow(boxShadow.offset, boxShadow.color, boxShadow.blur); |
- paint.setDrawLooper(builder.build()); |
- } |
- |
- if (_decoration.gradient != null) |
- paint.setShader(_decoration.gradient.createShader()); |
- |
- _cachedBackgroundPaint = paint; |
- } |
- |
- return _cachedBackgroundPaint; |
- } |
- |
- void paint(sky.Canvas canvas, Rect rect) { |
- if (_decoration.backgroundColor != null || _decoration.boxShadow != null || |
- _decoration.gradient != null) { |
- switch (_decoration.shape) { |
- case Shape.circle: |
- assert(_decoration.borderRadius == null); |
- Point center = rect.center; |
- Size size = rect.size; |
- double radius = math.min(size.width, size.height) / 2.0; |
- canvas.drawCircle(center.x, center.y, radius, _backgroundPaint); |
- break; |
- case Shape.rectangle: |
- if (_decoration.borderRadius == null) |
- canvas.drawRect(rect, _backgroundPaint); |
- else |
- canvas.drawRRect(new sky.RRect()..setRectXY(rect, _decoration.borderRadius, _decoration.borderRadius), _backgroundPaint); |
- break; |
- } |
- } |
- |
- if (_decoration.border != null) { |
- assert(_decoration.borderRadius == null); // TODO(abarth): Implement borders with border radius. |
- assert(_decoration.shape == Shape.rectangle); // TODO(ianh): Implement borders on circles. |
- |
- assert(_decoration.border.top != null); |
- assert(_decoration.border.right != null); |
- assert(_decoration.border.bottom != null); |
- assert(_decoration.border.left != null); |
- |
- Paint paint = new Paint(); |
- Path path; |
- |
- paint.color = _decoration.border.top.color; |
- path = new Path(); |
- path.moveTo(rect.left, rect.top); |
- path.lineTo(rect.left + _decoration.border.left.width, rect.top + _decoration.border.top.width); |
- path.lineTo(rect.right - _decoration.border.right.width, rect.top + _decoration.border.top.width); |
- path.lineTo(rect.right, rect.top); |
- path.close(); |
- canvas.drawPath(path, paint); |
- |
- paint.color = _decoration.border.right.color; |
- path = new Path(); |
- path.moveTo(rect.right, rect.top); |
- path.lineTo(rect.right - _decoration.border.right.width, rect.top + _decoration.border.top.width); |
- path.lineTo(rect.right - _decoration.border.right.width, rect.bottom - _decoration.border.bottom.width); |
- path.lineTo(rect.right, rect.bottom); |
- path.close(); |
- canvas.drawPath(path, paint); |
- |
- paint.color = _decoration.border.bottom.color; |
- path = new Path(); |
- path.moveTo(rect.right, rect.bottom); |
- path.lineTo(rect.right - _decoration.border.right.width, rect.bottom - _decoration.border.bottom.width); |
- path.lineTo(rect.left + _decoration.border.left.width, rect.bottom - _decoration.border.bottom.width); |
- path.lineTo(rect.left, rect.bottom); |
- path.close(); |
- canvas.drawPath(path, paint); |
- |
- paint.color = _decoration.border.left.color; |
- path = new Path(); |
- path.moveTo(rect.left, rect.bottom); |
- path.lineTo(rect.left + _decoration.border.left.width, rect.bottom - _decoration.border.bottom.width); |
- path.lineTo(rect.left + _decoration.border.left.width, rect.top + _decoration.border.top.width); |
- path.lineTo(rect.left, rect.top); |
- path.close(); |
- canvas.drawPath(path, paint); |
- } |
- } |
-} |