From 3e2a52bc2146f3179871f076bc1add04fedb89f5 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Tue, 13 Sep 2016 11:10:26 -0700 Subject: [PATCH] Remove playfair (#5844) The deprecation period has ended and we believe its clients have migrated to other solutions. Fixes #2205 --- packages/playfair/README.md | 11 -- packages/playfair/lib/playfair.dart | 8 - packages/playfair/lib/src/base.dart | 289 ---------------------------- packages/playfair/pubspec.yaml | 16 -- 4 files changed, 324 deletions(-) delete mode 100644 packages/playfair/README.md delete mode 100644 packages/playfair/lib/playfair.dart delete mode 100644 packages/playfair/lib/src/base.dart delete mode 100644 packages/playfair/pubspec.yaml diff --git a/packages/playfair/README.md b/packages/playfair/README.md deleted file mode 100644 index b7dbf8a91e6..00000000000 --- a/packages/playfair/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# playfair - -NOTE: This library is deprecated, -and we plan to remove it no earlier -than August 27th. If you do not -currently use this library, please -do not start using it :) If you do -currently use this library, please -reach us at flutter-dev@googlegroups.com -and let us know. We will be glad to point -you to its eventual replacement. diff --git a/packages/playfair/lib/playfair.dart b/packages/playfair/lib/playfair.dart deleted file mode 100644 index 30a7e99d23a..00000000000 --- a/packages/playfair/lib/playfair.dart +++ /dev/null @@ -1,8 +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. - -/// A simple charting library for Flutter. -library playfair; - -export 'src/base.dart'; diff --git a/packages/playfair/lib/src/base.dart b/packages/playfair/lib/src/base.dart deleted file mode 100644 index 9632ea3efde..00000000000 --- a/packages/playfair/lib/src/base.dart +++ /dev/null @@ -1,289 +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 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -class ChartData { - const ChartData({ - this.startX, - this.endX, - this.startY, - this.endY, - this.dataSet, - this.numHorizontalGridlines, - this.roundToPlaces, - this.indicatorLine, - this.indicatorText - }); - final double startX; - final double endX; - final double startY; - final double endY; - final int numHorizontalGridlines; - final int roundToPlaces; - final double indicatorLine; - final String indicatorText; - final List dataSet; -} - -// TODO(jackson): Make these configurable -const double kGridStrokeWidth = 1.0; -const Color kGridColor = const Color(0xFFCCCCCC); -const Color kMarkerColor = const Color(0xFF000000); -const double kMarkerStrokeWidth = 2.0; -const double kMarkerRadius = 2.0; -const double kScaleMargin = 10.0; -const double kIndicatorStrokeWidth = 2.0; -const Color kIndicatorColor = const Color(0xFFFF4081); -const double kIndicatorMargin = 2.0; - -class Chart extends StatelessWidget { - Chart({ Key key, this.data }) : super(key: key); - - final ChartData data; - - @override - Widget build(BuildContext context) { - return new _ChartWrapper(textTheme: Theme.of(context).textTheme, data: data); - } -} - -class _ChartWrapper extends LeafRenderObjectWidget { - _ChartWrapper({ Key key, this.textTheme, this.data }) : super(key: key); - - final TextTheme textTheme; - final ChartData data; - - @override - _RenderChart createRenderObject(BuildContext context) => new _RenderChart(textTheme: textTheme, data: data); - - @override - void updateRenderObject(BuildContext context, _RenderChart renderObject) { - renderObject - ..textTheme = textTheme - ..data = data; - } -} - -class _RenderChart extends RenderConstrainedBox { - _RenderChart({ - TextTheme textTheme, - ChartData data - }) : _painter = new ChartPainter(textTheme: textTheme, data: data), - super(child: null, additionalConstraints: const BoxConstraints.expand()); - - final ChartPainter _painter; - - ChartData get data => _painter.data; - set data(ChartData value) { - assert(value != null); - if (value == _painter.data) - return; - _painter.data = value; - markNeedsPaint(); - } - - TextTheme get textTheme => _painter.textTheme; - set textTheme(TextTheme value) { - assert(value != null); - if (value == _painter.textTheme) - return; - _painter.textTheme = value; - markNeedsPaint(); - } - - @override - void paint(PaintingContext context, Offset offset) { - assert(size.width != null); - assert(size.height != null); - _painter.paint(context.canvas, offset & size); - super.paint(context, offset); - } -} - -class _Gridline { - double value; - TextPainter labelPainter; - Point labelPosition; - Point start; - Point end; -} - -class _Indicator { - Point start; - Point end; - TextPainter labelPainter; - Point labelPosition; -} - -class ChartPainter { - ChartPainter({ TextTheme textTheme, ChartData data }) : _data = data, _textTheme = textTheme; - - ChartData _data; - ChartData get data => _data; - set data(ChartData value) { - assert(data != null); - if (_data == value) - return; - _data = value; - _needsLayout = true; - } - - TextTheme _textTheme; - TextTheme get textTheme => _textTheme; - set textTheme(TextTheme value) { - assert(value != null); - if (_textTheme == value) - return; - _textTheme = value; - _needsLayout = true; - } - - static double _roundToPlaces(double value, int places) { - int multiplier = math.pow(10, places); - return (value * multiplier).roundToDouble() / multiplier; - } - - // If this is set to true we will _layout() the next time we paint() - bool _needsLayout = true; - - // The last rectangle that we were drawn into. If it changes we will _layout() - Rect _rect; - - // These are updated by _layout() - List<_Gridline> _horizontalGridlines; - List _markers; - _Indicator _indicator; - - void _layout() { - // Create the scale labels - double yScaleWidth = 0.0; - _horizontalGridlines = new List<_Gridline>(); - assert(data.numHorizontalGridlines > 1); - double stepSize = (data.endY - data.startY) / (data.numHorizontalGridlines - 1); - for(int i = 0; i < data.numHorizontalGridlines; i++) { - _Gridline gridline = new _Gridline() - ..value = _roundToPlaces(data.startY + stepSize * i, data.roundToPlaces); - if (gridline.value < data.startY || gridline.value > data.endY) - continue; // TODO(jackson): Align things so this doesn't ever happen - TextSpan text = new TextSpan( - style: _textTheme.body1, - text: '${gridline.value}' - ); - gridline.labelPainter = new TextPainter(text: text) - ..layout(maxWidth: _rect.width); - _horizontalGridlines.add(gridline); - yScaleWidth = math.max(yScaleWidth, gridline.labelPainter.maxIntrinsicWidth); - } - - yScaleWidth += kScaleMargin; - - // Leave room for the scale on the right side - Rect markerRect = new Rect.fromLTWH( - _rect.left, - _rect.top, - _rect.width - yScaleWidth, - _rect.height - ); - - // Left align and vertically center the labels on the right side - for(_Gridline gridline in _horizontalGridlines) { - gridline.start = _convertPointToRectSpace(new Point(data.startX, gridline.value), markerRect); - gridline.end = _convertPointToRectSpace(new Point(data.endX, gridline.value), markerRect); - gridline.labelPosition = new Point( - gridline.end.x + kScaleMargin, - gridline.end.y - gridline.labelPainter.size.height / 2.0 - ); - } - - // Place the markers - List dataSet = data.dataSet; - assert(dataSet != null); - assert(dataSet.length > 0); - _markers = new List(); - for(int i = 0; i < dataSet.length; i++) - _markers.add(_convertPointToRectSpace(dataSet[i], markerRect)); - - // Place the indicator line - if (data.indicatorLine != null && - data.indicatorLine >= data.startY && - data.indicatorLine <= data.endY) { - _indicator = new _Indicator() - ..start = _convertPointToRectSpace(new Point(data.startX, data.indicatorLine), markerRect) - ..end = _convertPointToRectSpace(new Point(data.endX, data.indicatorLine), markerRect); - if (data.indicatorText != null) { - TextSpan text = new TextSpan( - style: _textTheme.body1, - text: '${data.indicatorText}' - ); - _indicator.labelPainter = new TextPainter(text: text) - ..layout(maxWidth: markerRect.width); - _indicator.labelPosition = new Point( - ((_indicator.start.x + _indicator.end.x) / 2.0) - _indicator.labelPainter.maxIntrinsicWidth / 2.0, - _indicator.start.y - _indicator.labelPainter.size.height - kIndicatorMargin - ); - } - } else { - _indicator = null; - } - - // we don't need to compute layout again unless something changes - _needsLayout = false; - } - - Point _convertPointToRectSpace(Point point, Rect rect) { - double x = rect.left + ((point.x - data.startX) / (data.endX - data.startX)) * rect.width; - double y = rect.bottom - ((point.y - data.startY) / (data.endY - data.startY)) * rect.height; - return new Point(x, y); - } - - void _paintGrid(Canvas canvas) { - Paint paint = new Paint() - ..strokeWidth = kGridStrokeWidth - ..color = kGridColor; - for(_Gridline gridline in _horizontalGridlines) { - gridline.labelPainter.paint(canvas, gridline.labelPosition.toOffset()); - canvas.drawLine(gridline.start, gridline.end, paint); - } - } - - void _paintChart(Canvas canvas) { - Paint paint = new Paint() - ..strokeWidth = kMarkerStrokeWidth - ..color = kMarkerColor; - Path path = new Path(); - path.moveTo(_markers[0].x, _markers[0].y); - for (Point marker in _markers) { - canvas.drawCircle(marker, kMarkerRadius, paint); - path.lineTo(marker.x, marker.y); - } - paint.style = PaintingStyle.stroke; - canvas.drawPath(path, paint); - } - - void _paintIndicator(Canvas canvas) { - if (_indicator == null) - return; - Paint paint = new Paint() - ..strokeWidth = kIndicatorStrokeWidth - ..color = kIndicatorColor; - canvas.drawLine(_indicator.start, _indicator.end, paint); - if (_indicator.labelPainter != null) - _indicator.labelPainter.paint(canvas, _indicator.labelPosition.toOffset()); - } - - void paint(Canvas canvas, Rect rect) { - if (rect != _rect) - _needsLayout = true; - _rect = rect; - if (_needsLayout) - _layout(); - _paintGrid(canvas); - _paintChart(canvas); - _paintIndicator(canvas); - } -} diff --git a/packages/playfair/pubspec.yaml b/packages/playfair/pubspec.yaml deleted file mode 100644 index a7e39f1efb3..00000000000 --- a/packages/playfair/pubspec.yaml +++ /dev/null @@ -1,16 +0,0 @@ -name: playfair -description: A simple charting library for Flutter -version: 0.0.10 -author: Flutter Authors -homepage: https://github.com/flutter/flutter/tree/master/packages/playfair - -dependencies: - flutter: - path: ../flutter - -dev_dependencies: - flutter_test: - path: ../flutter_test - -environment: - sdk: '>=1.19.0 <2.0.0'