From 46363355ba5a6c41ea705b468faeebb3449f2958 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Sat, 27 Jun 2015 00:00:18 -0700 Subject: [PATCH] Cleanup sky/sdk/examples * Remove all the DOM-based examples except for the old stocks app * Rename stocks2 to stocks * Promote hello_widgets.dart to a top-level hello_world example TBR=ianh@google.com Review URL: https://codereview.chromium.org/1219493003. --- sdk/example/color/color-chooser.sky | 96 ------------- sdk/example/color/color-wheel.png | Bin 33652 -> 0 bytes sdk/example/color/pubspec.yaml | 3 - .../lib/main.dart} | 2 +- sdk/example/hello_world/main.sky | 7 - sdk/example/hello_world/pubspec.yaml | 6 +- sdk/example/{ => old}/stocks/README.md | 0 .../stocks}/data/stock_data_0.json | 0 .../stocks}/data/stock_data_1.json | 0 .../stocks}/data/stock_data_10.json | 0 .../stocks}/data/stock_data_11.json | 0 .../stocks}/data/stock_data_12.json | 0 .../stocks}/data/stock_data_13.json | 0 .../stocks}/data/stock_data_14.json | 0 .../stocks}/data/stock_data_15.json | 0 .../stocks}/data/stock_data_16.json | 0 .../stocks}/data/stock_data_17.json | 0 .../stocks}/data/stock_data_18.json | 0 .../stocks}/data/stock_data_19.json | 0 .../stocks}/data/stock_data_2.json | 0 .../stocks}/data/stock_data_20.json | 0 .../stocks}/data/stock_data_21.json | 0 .../stocks}/data/stock_data_22.json | 0 .../stocks}/data/stock_data_23.json | 0 .../stocks}/data/stock_data_24.json | 0 .../stocks}/data/stock_data_25.json | 0 .../stocks}/data/stock_data_26.json | 0 .../stocks}/data/stock_data_27.json | 0 .../stocks}/data/stock_data_28.json | 0 .../stocks}/data/stock_data_29.json | 0 .../stocks}/data/stock_data_3.json | 0 .../stocks}/data/stock_data_4.json | 0 .../stocks}/data/stock_data_5.json | 0 .../stocks}/data/stock_data_6.json | 0 .../stocks}/data/stock_data_7.json | 0 .../stocks}/data/stock_data_8.json | 0 .../stocks}/data/stock_data_9.json | 0 .../{ => old}/stocks/lib/stock_app.dart | 0 sdk/example/old/stocks/lib/stock_arrow.dart | 93 +++++++++++++ .../stocks}/lib/stock_data.dart | 3 +- .../stocks}/lib/stock_list.dart | 24 ++-- sdk/example/old/stocks/lib/stock_menu.dart | 44 ++++++ sdk/example/old/stocks/lib/stock_row.dart | 72 ++++++++++ sdk/example/{ => old}/stocks/main.sky | 0 .../{stocks2 => old/stocks}/pubspec.yaml | 2 +- sdk/example/raw/launcher.dart | 57 -------- sdk/example/rendering/interactive_flex.dart | 2 +- sdk/example/rendering/justify_content.dart | 2 +- sdk/example/rendering/render_paragraph.dart | 2 +- .../{lib => rendering}/solid_color_box.dart | 0 sdk/example/rendering/spinning_flex.dart | 2 +- .../stock_app.dart => stocks/lib/main.dart} | 0 sdk/example/stocks/lib/stock_arrow.dart | 128 ++++++++---------- sdk/example/stocks/lib/stock_data.dart | 3 +- .../{stocks2 => stocks}/lib/stock_home.dart | 0 sdk/example/stocks/lib/stock_list.dart | 24 ++-- sdk/example/stocks/lib/stock_menu.dart | 43 +++--- sdk/example/stocks/lib/stock_row.dart | 89 ++++++------ .../lib/stock_settings.dart | 0 .../lib/stock_types.dart} | 8 +- sdk/example/stocks/pubspec.yaml | 2 +- sdk/example/stocks2/README.md | 4 - sdk/example/stocks2/lib/stock_arrow.dart | 75 ---------- sdk/example/stocks2/lib/stock_menu.dart | 43 ------ sdk/example/stocks2/lib/stock_row.dart | 63 --------- sdk/example/stocks2/lib/stock_types.dart | 1 - sdk/example/widgets/spinning_mixed.dart | 5 +- sdk/home.dart | 7 +- tests/examples/stocks.dart | 2 +- .../webkitpy/layout_tests/run_webkit_tests.py | 2 +- 70 files changed, 369 insertions(+), 547 deletions(-) delete mode 100644 sdk/example/color/color-chooser.sky delete mode 100644 sdk/example/color/color-wheel.png delete mode 100644 sdk/example/color/pubspec.yaml rename sdk/example/{widgets/hello_widgets.dart => hello_world/lib/main.dart} (88%) delete mode 100644 sdk/example/hello_world/main.sky rename sdk/example/{ => old}/stocks/README.md (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_0.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_1.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_10.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_11.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_12.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_13.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_14.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_15.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_16.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_17.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_18.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_19.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_2.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_20.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_21.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_22.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_23.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_24.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_25.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_26.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_27.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_28.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_29.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_3.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_4.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_5.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_6.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_7.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_8.json (100%) rename sdk/example/{stocks2 => old/stocks}/data/stock_data_9.json (100%) rename sdk/example/{ => old}/stocks/lib/stock_app.dart (100%) create mode 100644 sdk/example/old/stocks/lib/stock_arrow.dart rename sdk/example/{stocks2 => old/stocks}/lib/stock_data.dart (95%) rename sdk/example/{stocks2 => old/stocks}/lib/stock_list.dart (66%) create mode 100644 sdk/example/old/stocks/lib/stock_menu.dart create mode 100644 sdk/example/old/stocks/lib/stock_row.dart rename sdk/example/{ => old}/stocks/main.sky (100%) rename sdk/example/{stocks2 => old/stocks}/pubspec.yaml (90%) delete mode 100644 sdk/example/raw/launcher.dart rename sdk/example/{lib => rendering}/solid_color_box.dart (100%) rename sdk/example/{stocks2/lib/stock_app.dart => stocks/lib/main.dart} (100%) rename sdk/example/{stocks2 => stocks}/lib/stock_home.dart (100%) rename sdk/example/{stocks2 => stocks}/lib/stock_settings.dart (100%) rename sdk/example/{hello_world/hello_world.dart => stocks/lib/stock_types.dart} (54%) delete mode 100644 sdk/example/stocks2/README.md delete mode 100644 sdk/example/stocks2/lib/stock_arrow.dart delete mode 100644 sdk/example/stocks2/lib/stock_menu.dart delete mode 100644 sdk/example/stocks2/lib/stock_row.dart delete mode 100644 sdk/example/stocks2/lib/stock_types.dart diff --git a/sdk/example/color/color-chooser.sky b/sdk/example/color/color-chooser.sky deleted file mode 100644 index ad66cf993ff..00000000000 --- a/sdk/example/color/color-chooser.sky +++ /dev/null @@ -1,96 +0,0 @@ -#!mojo mojo:sky_viewer - - - -
- -

Select Color

-
- -
diff --git a/sdk/example/color/color-wheel.png b/sdk/example/color/color-wheel.png deleted file mode 100644 index 97dc31c22a8338919b0311f0684265c0b8000442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33652 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 K=d#Wzp$PzARL^q& diff --git a/sdk/example/color/pubspec.yaml b/sdk/example/color/pubspec.yaml deleted file mode 100644 index c3320617b13..00000000000 --- a/sdk/example/color/pubspec.yaml +++ /dev/null @@ -1,3 +0,0 @@ -name: color -dependencies: - sky: any diff --git a/sdk/example/widgets/hello_widgets.dart b/sdk/example/hello_world/lib/main.dart similarity index 88% rename from sdk/example/widgets/hello_widgets.dart rename to sdk/example/hello_world/lib/main.dart index 34c1f7e5847..699c117c939 100644 --- a/sdk/example/widgets/hello_widgets.dart +++ b/sdk/example/hello_world/lib/main.dart @@ -6,7 +6,7 @@ import 'package:sky/widgets/basic.dart'; class HelloWorldApp extends App { Widget build() { - return new Text('Hello, widgets!'); + return new Text('Hello, world!'); } } diff --git a/sdk/example/hello_world/main.sky b/sdk/example/hello_world/main.sky deleted file mode 100644 index a32206943c2..00000000000 --- a/sdk/example/hello_world/main.sky +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/sdk/example/hello_world/pubspec.yaml b/sdk/example/hello_world/pubspec.yaml index fb27d11e6b7..be33d87b1a9 100644 --- a/sdk/example/hello_world/pubspec.yaml +++ b/sdk/example/hello_world/pubspec.yaml @@ -1,3 +1,7 @@ name: hello_world +author: Chromium Authors +description: Hello, world using Sky +homepage: https://github.com/domokit/sky_sdk/tree/master/packages/sky/example/hello_world +version: 0.0.1 dependencies: - sky: any + sky: '>=0.0.10 <1.0.0' diff --git a/sdk/example/stocks/README.md b/sdk/example/old/stocks/README.md similarity index 100% rename from sdk/example/stocks/README.md rename to sdk/example/old/stocks/README.md diff --git a/sdk/example/stocks2/data/stock_data_0.json b/sdk/example/old/stocks/data/stock_data_0.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_0.json rename to sdk/example/old/stocks/data/stock_data_0.json diff --git a/sdk/example/stocks2/data/stock_data_1.json b/sdk/example/old/stocks/data/stock_data_1.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_1.json rename to sdk/example/old/stocks/data/stock_data_1.json diff --git a/sdk/example/stocks2/data/stock_data_10.json b/sdk/example/old/stocks/data/stock_data_10.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_10.json rename to sdk/example/old/stocks/data/stock_data_10.json diff --git a/sdk/example/stocks2/data/stock_data_11.json b/sdk/example/old/stocks/data/stock_data_11.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_11.json rename to sdk/example/old/stocks/data/stock_data_11.json diff --git a/sdk/example/stocks2/data/stock_data_12.json b/sdk/example/old/stocks/data/stock_data_12.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_12.json rename to sdk/example/old/stocks/data/stock_data_12.json diff --git a/sdk/example/stocks2/data/stock_data_13.json b/sdk/example/old/stocks/data/stock_data_13.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_13.json rename to sdk/example/old/stocks/data/stock_data_13.json diff --git a/sdk/example/stocks2/data/stock_data_14.json b/sdk/example/old/stocks/data/stock_data_14.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_14.json rename to sdk/example/old/stocks/data/stock_data_14.json diff --git a/sdk/example/stocks2/data/stock_data_15.json b/sdk/example/old/stocks/data/stock_data_15.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_15.json rename to sdk/example/old/stocks/data/stock_data_15.json diff --git a/sdk/example/stocks2/data/stock_data_16.json b/sdk/example/old/stocks/data/stock_data_16.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_16.json rename to sdk/example/old/stocks/data/stock_data_16.json diff --git a/sdk/example/stocks2/data/stock_data_17.json b/sdk/example/old/stocks/data/stock_data_17.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_17.json rename to sdk/example/old/stocks/data/stock_data_17.json diff --git a/sdk/example/stocks2/data/stock_data_18.json b/sdk/example/old/stocks/data/stock_data_18.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_18.json rename to sdk/example/old/stocks/data/stock_data_18.json diff --git a/sdk/example/stocks2/data/stock_data_19.json b/sdk/example/old/stocks/data/stock_data_19.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_19.json rename to sdk/example/old/stocks/data/stock_data_19.json diff --git a/sdk/example/stocks2/data/stock_data_2.json b/sdk/example/old/stocks/data/stock_data_2.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_2.json rename to sdk/example/old/stocks/data/stock_data_2.json diff --git a/sdk/example/stocks2/data/stock_data_20.json b/sdk/example/old/stocks/data/stock_data_20.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_20.json rename to sdk/example/old/stocks/data/stock_data_20.json diff --git a/sdk/example/stocks2/data/stock_data_21.json b/sdk/example/old/stocks/data/stock_data_21.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_21.json rename to sdk/example/old/stocks/data/stock_data_21.json diff --git a/sdk/example/stocks2/data/stock_data_22.json b/sdk/example/old/stocks/data/stock_data_22.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_22.json rename to sdk/example/old/stocks/data/stock_data_22.json diff --git a/sdk/example/stocks2/data/stock_data_23.json b/sdk/example/old/stocks/data/stock_data_23.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_23.json rename to sdk/example/old/stocks/data/stock_data_23.json diff --git a/sdk/example/stocks2/data/stock_data_24.json b/sdk/example/old/stocks/data/stock_data_24.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_24.json rename to sdk/example/old/stocks/data/stock_data_24.json diff --git a/sdk/example/stocks2/data/stock_data_25.json b/sdk/example/old/stocks/data/stock_data_25.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_25.json rename to sdk/example/old/stocks/data/stock_data_25.json diff --git a/sdk/example/stocks2/data/stock_data_26.json b/sdk/example/old/stocks/data/stock_data_26.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_26.json rename to sdk/example/old/stocks/data/stock_data_26.json diff --git a/sdk/example/stocks2/data/stock_data_27.json b/sdk/example/old/stocks/data/stock_data_27.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_27.json rename to sdk/example/old/stocks/data/stock_data_27.json diff --git a/sdk/example/stocks2/data/stock_data_28.json b/sdk/example/old/stocks/data/stock_data_28.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_28.json rename to sdk/example/old/stocks/data/stock_data_28.json diff --git a/sdk/example/stocks2/data/stock_data_29.json b/sdk/example/old/stocks/data/stock_data_29.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_29.json rename to sdk/example/old/stocks/data/stock_data_29.json diff --git a/sdk/example/stocks2/data/stock_data_3.json b/sdk/example/old/stocks/data/stock_data_3.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_3.json rename to sdk/example/old/stocks/data/stock_data_3.json diff --git a/sdk/example/stocks2/data/stock_data_4.json b/sdk/example/old/stocks/data/stock_data_4.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_4.json rename to sdk/example/old/stocks/data/stock_data_4.json diff --git a/sdk/example/stocks2/data/stock_data_5.json b/sdk/example/old/stocks/data/stock_data_5.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_5.json rename to sdk/example/old/stocks/data/stock_data_5.json diff --git a/sdk/example/stocks2/data/stock_data_6.json b/sdk/example/old/stocks/data/stock_data_6.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_6.json rename to sdk/example/old/stocks/data/stock_data_6.json diff --git a/sdk/example/stocks2/data/stock_data_7.json b/sdk/example/old/stocks/data/stock_data_7.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_7.json rename to sdk/example/old/stocks/data/stock_data_7.json diff --git a/sdk/example/stocks2/data/stock_data_8.json b/sdk/example/old/stocks/data/stock_data_8.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_8.json rename to sdk/example/old/stocks/data/stock_data_8.json diff --git a/sdk/example/stocks2/data/stock_data_9.json b/sdk/example/old/stocks/data/stock_data_9.json similarity index 100% rename from sdk/example/stocks2/data/stock_data_9.json rename to sdk/example/old/stocks/data/stock_data_9.json diff --git a/sdk/example/stocks/lib/stock_app.dart b/sdk/example/old/stocks/lib/stock_app.dart similarity index 100% rename from sdk/example/stocks/lib/stock_app.dart rename to sdk/example/old/stocks/lib/stock_app.dart diff --git a/sdk/example/old/stocks/lib/stock_arrow.dart b/sdk/example/old/stocks/lib/stock_arrow.dart new file mode 100644 index 00000000000..5395984f25c --- /dev/null +++ b/sdk/example/old/stocks/lib/stock_arrow.dart @@ -0,0 +1,93 @@ +// 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'; +import 'package:sky/framework/fn.dart'; +import 'package:sky/framework/layout.dart'; + +class StockArrow extends Component { + static final Style _style = new Style(''' + width: 40px; + height: 40px; + align-items: center; + justify-content: center; + border-radius: 40px; + margin-right: 16px; + border: 1px solid transparent;''' + ); + + static final Style _upStyle = new Style(''' + width: 0; + height: 0; + border-left: 9px solid transparent; + border-right: 9px solid transparent; + margin-bottom: 3px; + border-bottom: 9px solid white;''' + ); + + static final Style _downStyle = new Style(''' + width: 0; + height: 0; + border-left: 9px solid transparent; + border-right: 9px solid transparent; + margin-top: 3px; + border-top: 9px solid white''' + ); + + double percentChange; + + StockArrow({ Object key, this.percentChange }) : super(key: key); + + // TODO(abarth): These should use sky/framework/theme/colors.dart. + final List _kRedColors = [ + '#E57373', + '#EF5350', + '#F44336', + '#E53935', + '#D32F2F', + '#C62828', + '#B71C1C', + ]; + + // TODO(abarth): These should use sky/framework/theme/colors.dart. + final List _kGreenColors = [ + '#81C784', + '#66BB6A', + '#4CAF50', + '#43A047', + '#388E3C', + '#2E7D32', + '#1B5E20', + ]; + + int _colorIndexForPercentChange(double percentChange) { + // Currently the max is 10%. + double maxPercent = 10.0; + return max(0, ((percentChange.abs() / maxPercent) * _kGreenColors.length).floor()); + } + + String _colorForPercentChange(double percentChange) { + if (percentChange > 0) + return _kGreenColors[_colorIndexForPercentChange(percentChange)]; + return _kRedColors[_colorIndexForPercentChange(percentChange)]; + } + + UINode build() { + String border = _colorForPercentChange(percentChange).toString(); + bool up = percentChange > 0; + String type = up ? 'bottom' : 'top'; + + return new FlexContainer( + inlineStyle: 'border-color: $border', + direction: FlexDirection.Row, + style: _style, + children: [ + new Container( + inlineStyle: 'border-$type-color: $border', + style: up ? _upStyle : _downStyle + ) + ] + ); + } +} diff --git a/sdk/example/stocks2/lib/stock_data.dart b/sdk/example/old/stocks/lib/stock_data.dart similarity index 95% rename from sdk/example/stocks2/lib/stock_data.dart rename to sdk/example/old/stocks/lib/stock_data.dart index 075add26757..39201714fcb 100644 --- a/sdk/example/stocks2/lib/stock_data.dart +++ b/sdk/example/old/stocks/lib/stock_data.dart @@ -4,7 +4,6 @@ import 'dart:convert'; import 'dart:math'; - import 'package:sky/framework/net/fetch.dart'; // Snapshot from http://www.nasdaq.com/screening/company-list.aspx @@ -60,7 +59,7 @@ class StockDataFetcher { } void _fetchNextChunk() { - fetchBody('../data/stock_data_${_currentChunk++}.json').then((Response response) { + fetchBody('data/stock_data_${_currentChunk++}.json').then((Response response) { String json = response.bodyAsString(); JsonDecoder decoder = new JsonDecoder(); diff --git a/sdk/example/stocks2/lib/stock_list.dart b/sdk/example/old/stocks/lib/stock_list.dart similarity index 66% rename from sdk/example/stocks2/lib/stock_list.dart rename to sdk/example/old/stocks/lib/stock_list.dart index 4b36783d186..c0fbe44ee07 100644 --- a/sdk/example/stocks2/lib/stock_list.dart +++ b/sdk/example/old/stocks/lib/stock_list.dart @@ -2,30 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:sky/widgets/fixed_height_scrollable.dart'; -import 'package:sky/widgets/basic.dart'; - +import 'package:sky/framework/components/fixed_height_scrollable.dart'; +import 'package:sky/framework/fn.dart'; import 'stock_data.dart'; import 'stock_row.dart'; class Stocklist extends FixedHeightScrollable { - - Stocklist({ - String key, - this.stocks, - this.query - }) : super(itemHeight: StockRow.kHeight, key: key); - String query; List stocks; - void syncFields(Stocklist source) { - query = source.query; - stocks = source.stocks; - super.syncFields(source); - } + Stocklist({ + Object key, + this.stocks, + this.query + }) : super(key: key); - List buildItems(int start, int count) { + List buildItems(int start, int count) { var filteredStocks = stocks.where((stock) { return query == null || stock.symbol.contains(new RegExp(query, caseSensitive: false)); diff --git a/sdk/example/old/stocks/lib/stock_menu.dart b/sdk/example/old/stocks/lib/stock_menu.dart new file mode 100644 index 00000000000..33d19831685 --- /dev/null +++ b/sdk/example/old/stocks/lib/stock_menu.dart @@ -0,0 +1,44 @@ +// 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 'package:sky/framework/fn.dart'; +import 'package:sky/framework/layout.dart'; +import 'package:sky/framework/components/popup_menu.dart'; +import 'package:sky/framework/components/checkbox.dart'; +import 'package:sky/framework/theme/view_configuration.dart'; + +class StockMenu extends Component { + static final Style _style = new Style(''' + position: absolute; + right: 8px; + top: ${8 + kStatusBarHeight}px;'''); + + PopupMenuController controller; + + StockMenu({Object key, this.controller, this.autorefresh: false, this.onAutorefreshChanged}) : super(key: key); + + final bool autorefresh; + final ValueChanged onAutorefreshChanged; + + static FlexBoxParentData _flex1 = new FlexBoxParentData()..flex = 1; + + UINode build() { + var checkbox = new Checkbox( + checked: this.autorefresh, + onChanged: this.onAutorefreshChanged + ); + + return new StyleNode( + new PopupMenu( + controller: controller, + items: [ + [new Text('Add stock')], + [new Text('Remove stock')], + [new ParentDataNode(new Text('Autorefresh'), _flex1), checkbox], + ], + level: 4), + _style + ); + } +} diff --git a/sdk/example/old/stocks/lib/stock_row.dart b/sdk/example/old/stocks/lib/stock_row.dart new file mode 100644 index 00000000000..a0ef8bcf297 --- /dev/null +++ b/sdk/example/old/stocks/lib/stock_row.dart @@ -0,0 +1,72 @@ +// 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 'package:sky/framework/components/ink_well.dart'; +import 'package:sky/framework/fn.dart'; +import 'package:sky/framework/layout.dart'; +import 'package:sky/framework/theme/typography.dart' as typography; +import 'stock_arrow.dart'; +import 'stock_data.dart'; + +class StockRow extends Component { + static final Style _style = new Style(''' + align-items: center; + border-bottom: 1px solid #F4F4F4; + padding-top: 16px; + padding-left: 16px; + padding-right: 16px; + padding-bottom: 20px;''' + ); + + static final FlexBoxParentData _tickerFlex = new FlexBoxParentData()..flex = 1; + + static final Style _lastSaleStyle = new Style(''' + text-align: right; + padding-right: 16px;''' + ); + + static final Style _changeStyle = new Style(''' + ${typography.black.caption}; + text-align: right;''' + ); + + Stock stock; + + StockRow({Stock stock}) : super(key: stock.symbol) { + this.stock = stock; + } + + UINode build() { + String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}"; + + String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%"; + if (stock.percentChange > 0) + changeInPrice = "+" + changeInPrice; + + List children = [ + new StockArrow( + percentChange: stock.percentChange + ), + new ParentDataNode( + new Container( + key: 'Ticker', + children: [new Text(stock.symbol)] + ), + _tickerFlex + ), + new Container( + key: 'LastSale', + style: _lastSaleStyle, + children: [new Text(lastSale)] + ), + new Container( + key: 'Change', + style: _changeStyle, + children: [new Text(changeInPrice)] + ) + ]; + + return new StyleNode(new InkWell(children: children), _style); + } +} diff --git a/sdk/example/stocks/main.sky b/sdk/example/old/stocks/main.sky similarity index 100% rename from sdk/example/stocks/main.sky rename to sdk/example/old/stocks/main.sky diff --git a/sdk/example/stocks2/pubspec.yaml b/sdk/example/old/stocks/pubspec.yaml similarity index 90% rename from sdk/example/stocks2/pubspec.yaml rename to sdk/example/old/stocks/pubspec.yaml index d946687866c..06ec3dfe17c 100644 --- a/sdk/example/stocks2/pubspec.yaml +++ b/sdk/example/old/stocks/pubspec.yaml @@ -4,4 +4,4 @@ description: A demo application using Sky that shows stock data homepage: https://github.com/domokit/sky_sdk/tree/master/sdk/lib/example/stocks version: 0.0.1 dependencies: - sky: '>=0.0.10 <1.0.0' + sky: '>=0.0.1 <1.0.0' diff --git a/sdk/example/raw/launcher.dart b/sdk/example/raw/launcher.dart deleted file mode 100644 index 96dfc39bfef..00000000000 --- a/sdk/example/raw/launcher.dart +++ /dev/null @@ -1,57 +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"; -import 'dart:sky'; - -import 'package:sky/framework/shell.dart' as shell; -import 'package:mojom/intents/intents.mojom.dart'; - -Picture draw(int a, int r, int g, int b) { - Size size = new Size(view.width, view.height); - - PictureRecorder recorder = new PictureRecorder(); - Canvas canvas = new Canvas(recorder, size); - double radius = size.shortestSide * 0.45; - - Paint paint = new Paint()..color = new Color.fromARGB(a, r, g, b); - canvas.drawRect(new Rect.fromSize(size), paint); - return recorder.endRecording(); -} - -bool handleEvent(Event event) { - if (event.type == "pointerdown") { - view.picture = draw(255, 0, 0, 255); - view.scheduleFrame(); - return true; - } - - if (event.type == "pointerup") { - view.picture = draw(255, 255, 255, 0); - view.scheduleFrame(); - - ActivityManagerProxy activityManager = new ActivityManagerProxy.unbound(); - Intent intent = new Intent() - ..action = 'android.intent.action.VIEW' - ..url = 'sky://localhost:9888/sky/sdk/lib/example/raw/hello_world.dart'; - shell.requestService(null, activityManager); - activityManager.ptr.startActivity(intent); - return true; - } - - if (event.type == "back") { - print("Pressed back button."); - return true; - } - - return false; -} - -void main() { - print("Hello, world"); - view.picture = draw(255, 255, 255, 0); - view.scheduleFrame(); - - view.setEventCallback(handleEvent); -} diff --git a/sdk/example/rendering/interactive_flex.dart b/sdk/example/rendering/interactive_flex.dart index 0868ffc0ba9..7fd1d50125c 100644 --- a/sdk/example/rendering/interactive_flex.dart +++ b/sdk/example/rendering/interactive_flex.dart @@ -14,7 +14,7 @@ import 'package:sky/rendering/object.dart'; import 'package:sky/rendering/paragraph.dart'; import 'package:sky/rendering/sky_binding.dart'; -import '../lib/solid_color_box.dart'; +import 'solid_color_box.dart'; class Touch { final double x; diff --git a/sdk/example/rendering/justify_content.dart b/sdk/example/rendering/justify_content.dart index 68001009524..768b9a8b125 100644 --- a/sdk/example/rendering/justify_content.dart +++ b/sdk/example/rendering/justify_content.dart @@ -12,7 +12,7 @@ import 'package:sky/rendering/object.dart'; import 'package:sky/rendering/paragraph.dart'; import 'package:sky/rendering/sky_binding.dart'; -import '../lib/solid_color_box.dart'; +import 'solid_color_box.dart'; // Attempts to draw // http://www.w3.org/TR/2015/WD-css-flexbox-1-20150514/images/flex-pack.svg diff --git a/sdk/example/rendering/render_paragraph.dart b/sdk/example/rendering/render_paragraph.dart index 29252b412e3..4d96887504c 100644 --- a/sdk/example/rendering/render_paragraph.dart +++ b/sdk/example/rendering/render_paragraph.dart @@ -11,7 +11,7 @@ import 'package:sky/rendering/object.dart'; import 'package:sky/rendering/paragraph.dart'; import 'package:sky/rendering/sky_binding.dart'; -import '../lib/solid_color_box.dart'; +import 'solid_color_box.dart'; void main() { RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical); diff --git a/sdk/example/lib/solid_color_box.dart b/sdk/example/rendering/solid_color_box.dart similarity index 100% rename from sdk/example/lib/solid_color_box.dart rename to sdk/example/rendering/solid_color_box.dart diff --git a/sdk/example/rendering/spinning_flex.dart b/sdk/example/rendering/spinning_flex.dart index 3e1d5504648..67b404b6321 100644 --- a/sdk/example/rendering/spinning_flex.dart +++ b/sdk/example/rendering/spinning_flex.dart @@ -11,7 +11,7 @@ import 'package:sky/rendering/flex.dart'; import 'package:sky/rendering/sky_binding.dart'; import 'package:vector_math/vector_math.dart'; -import '../lib/solid_color_box.dart'; +import 'solid_color_box.dart'; double timeBase; RenderTransform transformBox; diff --git a/sdk/example/stocks2/lib/stock_app.dart b/sdk/example/stocks/lib/main.dart similarity index 100% rename from sdk/example/stocks2/lib/stock_app.dart rename to sdk/example/stocks/lib/main.dart diff --git a/sdk/example/stocks/lib/stock_arrow.dart b/sdk/example/stocks/lib/stock_arrow.dart index 5395984f25c..95da3307423 100644 --- a/sdk/example/stocks/lib/stock_arrow.dart +++ b/sdk/example/stocks/lib/stock_arrow.dart @@ -2,92 +2,74 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:math'; -import 'package:sky/framework/fn.dart'; -import 'package:sky/framework/layout.dart'; +import 'dart:math' as math; +import 'dart:sky' as sky; + +import 'package:sky/rendering/box.dart'; +import 'package:sky/rendering/object.dart'; +import 'package:sky/theme/colors.dart' as colors; +import 'package:sky/widgets/basic.dart'; class StockArrow extends Component { - static final Style _style = new Style(''' - width: 40px; - height: 40px; - align-items: center; - justify-content: center; - border-radius: 40px; - margin-right: 16px; - border: 1px solid transparent;''' - ); - static final Style _upStyle = new Style(''' - width: 0; - height: 0; - border-left: 9px solid transparent; - border-right: 9px solid transparent; - margin-bottom: 3px; - border-bottom: 9px solid white;''' - ); + StockArrow({ String key, this.percentChange }) : super(key: key); - static final Style _downStyle = new Style(''' - width: 0; - height: 0; - border-left: 9px solid transparent; - border-right: 9px solid transparent; - margin-top: 3px; - border-top: 9px solid white''' - ); - - double percentChange; - - StockArrow({ Object key, this.percentChange }) : super(key: key); - - // TODO(abarth): These should use sky/framework/theme/colors.dart. - final List _kRedColors = [ - '#E57373', - '#EF5350', - '#F44336', - '#E53935', - '#D32F2F', - '#C62828', - '#B71C1C', - ]; - - // TODO(abarth): These should use sky/framework/theme/colors.dart. - final List _kGreenColors = [ - '#81C784', - '#66BB6A', - '#4CAF50', - '#43A047', - '#388E3C', - '#2E7D32', - '#1B5E20', - ]; + final double percentChange; int _colorIndexForPercentChange(double percentChange) { - // Currently the max is 10%. double maxPercent = 10.0; - return max(0, ((percentChange.abs() / maxPercent) * _kGreenColors.length).floor()); + double normalizedPercentChange = math.min(percentChange.abs(), maxPercent) / maxPercent; + return 100 + (normalizedPercentChange * 8.0).floor() * 100; } - String _colorForPercentChange(double percentChange) { + Color _colorForPercentChange(double percentChange) { if (percentChange > 0) - return _kGreenColors[_colorIndexForPercentChange(percentChange)]; - return _kRedColors[_colorIndexForPercentChange(percentChange)]; + return colors.Green[_colorIndexForPercentChange(percentChange)]; + return colors.Red[_colorIndexForPercentChange(percentChange)]; } - UINode build() { - String border = _colorForPercentChange(percentChange).toString(); - bool up = percentChange > 0; - String type = up ? 'bottom' : 'top'; + Widget build() { + // TODO(jackson): This should change colors with the theme + Color color = _colorForPercentChange(percentChange); + const double kSize = 40.0; + var arrow = new CustomPaint(callback: (sky.Canvas canvas, Size size) { + Paint paint = new Paint()..color = color; + paint.strokeWidth = 1.0; + const double padding = 2.0; + assert(padding > paint.strokeWidth / 2.0); // make sure the circle remains inside the box + double r = (kSize - padding) / 2.0; // radius of the circle + double centerX = padding + r; + double centerY = padding + r; - return new FlexContainer( - inlineStyle: 'border-color: $border', - direction: FlexDirection.Row, - style: _style, - children: [ - new Container( - inlineStyle: 'border-$type-color: $border', - style: up ? _upStyle : _downStyle - ) - ] + // Draw the arrow. + double w = 8.0; + double h = 5.0; + double arrowY; + if (percentChange < 0.0) { + h = -h; + arrowY = centerX + 1.0; + } else { + arrowY = centerX - 1.0; + } + Path path = new Path(); + path.moveTo(centerX, arrowY - h); // top of the arrow + path.lineTo(centerX + w, arrowY + h); + path.lineTo(centerX - w, arrowY + h); + path.close(); + paint.setStyle(sky.PaintingStyle.fill); + canvas.drawPath(path, paint); + + // Draw a circle that circumscribes the arrow. + paint.setStyle(sky.PaintingStyle.stroke); + canvas.drawCircle(new Point(centerX, centerY), r, paint); + }); + + return new Container( + child: arrow, + width: kSize, + height: kSize, + margin: const EdgeDims.symmetric(horizontal: 5.0) ); } + } diff --git a/sdk/example/stocks/lib/stock_data.dart b/sdk/example/stocks/lib/stock_data.dart index 39201714fcb..075add26757 100644 --- a/sdk/example/stocks/lib/stock_data.dart +++ b/sdk/example/stocks/lib/stock_data.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'dart:math'; + import 'package:sky/framework/net/fetch.dart'; // Snapshot from http://www.nasdaq.com/screening/company-list.aspx @@ -59,7 +60,7 @@ class StockDataFetcher { } void _fetchNextChunk() { - fetchBody('data/stock_data_${_currentChunk++}.json').then((Response response) { + fetchBody('../data/stock_data_${_currentChunk++}.json').then((Response response) { String json = response.bodyAsString(); JsonDecoder decoder = new JsonDecoder(); diff --git a/sdk/example/stocks2/lib/stock_home.dart b/sdk/example/stocks/lib/stock_home.dart similarity index 100% rename from sdk/example/stocks2/lib/stock_home.dart rename to sdk/example/stocks/lib/stock_home.dart diff --git a/sdk/example/stocks/lib/stock_list.dart b/sdk/example/stocks/lib/stock_list.dart index c0fbe44ee07..4b36783d186 100644 --- a/sdk/example/stocks/lib/stock_list.dart +++ b/sdk/example/stocks/lib/stock_list.dart @@ -2,22 +2,30 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:sky/framework/components/fixed_height_scrollable.dart'; -import 'package:sky/framework/fn.dart'; +import 'package:sky/widgets/fixed_height_scrollable.dart'; +import 'package:sky/widgets/basic.dart'; + import 'stock_data.dart'; import 'stock_row.dart'; class Stocklist extends FixedHeightScrollable { + + Stocklist({ + String key, + this.stocks, + this.query + }) : super(itemHeight: StockRow.kHeight, key: key); + String query; List stocks; - Stocklist({ - Object key, - this.stocks, - this.query - }) : super(key: key); + void syncFields(Stocklist source) { + query = source.query; + stocks = source.stocks; + super.syncFields(source); + } - List buildItems(int start, int count) { + List buildItems(int start, int count) { var filteredStocks = stocks.where((stock) { return query == null || stock.symbol.contains(new RegExp(query, caseSensitive: false)); diff --git a/sdk/example/stocks/lib/stock_menu.dart b/sdk/example/stocks/lib/stock_menu.dart index 33d19831685..3d6450d27a5 100644 --- a/sdk/example/stocks/lib/stock_menu.dart +++ b/sdk/example/stocks/lib/stock_menu.dart @@ -2,43 +2,42 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:sky/framework/fn.dart'; -import 'package:sky/framework/layout.dart'; -import 'package:sky/framework/components/popup_menu.dart'; -import 'package:sky/framework/components/checkbox.dart'; +import 'package:sky/widgets/checkbox.dart'; +import 'package:sky/widgets/popup_menu.dart'; +import 'package:sky/widgets/basic.dart'; import 'package:sky/framework/theme/view_configuration.dart'; class StockMenu extends Component { - static final Style _style = new Style(''' - position: absolute; - right: 8px; - top: ${8 + kStatusBarHeight}px;'''); - PopupMenuController controller; - - StockMenu({Object key, this.controller, this.autorefresh: false, this.onAutorefreshChanged}) : super(key: key); + StockMenu({ + String key, + this.controller, + this.autorefresh: false, + this.onAutorefreshChanged + }) : super(key: key); + final PopupMenuController controller; final bool autorefresh; final ValueChanged onAutorefreshChanged; - static FlexBoxParentData _flex1 = new FlexBoxParentData()..flex = 1; - - UINode build() { + Widget build() { var checkbox = new Checkbox( - checked: this.autorefresh, + value: this.autorefresh, onChanged: this.onAutorefreshChanged ); - return new StyleNode( - new PopupMenu( + return new Positioned( + child: new PopupMenu( controller: controller, items: [ - [new Text('Add stock')], - [new Text('Remove stock')], - [new ParentDataNode(new Text('Autorefresh'), _flex1), checkbox], + new Text('Add stock'), + new Text('Remove stock'), + new Flex([new Flexible(child: new Text('Autorefresh')), checkbox]), ], - level: 4), - _style + level: 4 + ), + right: 8.0, + top: 8.0 + kStatusBarHeight ); } } diff --git a/sdk/example/stocks/lib/stock_row.dart b/sdk/example/stocks/lib/stock_row.dart index a0ef8bcf297..c13b66f2c22 100644 --- a/sdk/example/stocks/lib/stock_row.dart +++ b/sdk/example/stocks/lib/stock_row.dart @@ -2,71 +2,62 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:sky/framework/components/ink_well.dart'; -import 'package:sky/framework/fn.dart'; -import 'package:sky/framework/layout.dart'; -import 'package:sky/framework/theme/typography.dart' as typography; +import 'package:sky/painting/text_style.dart'; +import 'package:sky/rendering/box.dart'; +import 'package:sky/widgets/ink_well.dart'; +import 'package:sky/widgets/basic.dart'; +import 'package:sky/widgets/theme.dart'; + import 'stock_arrow.dart'; import 'stock_data.dart'; class StockRow extends Component { - static final Style _style = new Style(''' - align-items: center; - border-bottom: 1px solid #F4F4F4; - padding-top: 16px; - padding-left: 16px; - padding-right: 16px; - padding-bottom: 20px;''' - ); - static final FlexBoxParentData _tickerFlex = new FlexBoxParentData()..flex = 1; + StockRow({ Stock stock }) : this.stock = stock, super(key: stock.symbol); - static final Style _lastSaleStyle = new Style(''' - text-align: right; - padding-right: 16px;''' - ); + final Stock stock; - static final Style _changeStyle = new Style(''' - ${typography.black.caption}; - text-align: right;''' - ); + static const double kHeight = 79.0; - Stock stock; - - StockRow({Stock stock}) : super(key: stock.symbol) { - this.stock = stock; - } - - UINode build() { + Widget build() { String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}"; String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%"; - if (stock.percentChange > 0) - changeInPrice = "+" + changeInPrice; + if (stock.percentChange > 0) changeInPrice = "+" + changeInPrice; - List children = [ - new StockArrow( - percentChange: stock.percentChange - ), - new ParentDataNode( - new Container( - key: 'Ticker', - children: [new Text(stock.symbol)] - ), - _tickerFlex - ), + List children = [ new Container( - key: 'LastSale', - style: _lastSaleStyle, - children: [new Text(lastSale)] + child: new StockArrow(percentChange: stock.percentChange), + margin: const EdgeDims.only(right: 5.0) ), - new Container( - key: 'Change', - style: _changeStyle, - children: [new Text(changeInPrice)] + new Flexible( + child: new Text(stock.symbol), + flex: 2 + ), + new Flexible( + child: new Text( + lastSale, + style: const TextStyle(textAlign: TextAlign.right) + ) + ), + new Flexible( + child: new Text( + changeInPrice, + style: Theme.of(this).text.caption.copyWith(textAlign: TextAlign.right) + ) ) ]; - return new StyleNode(new InkWell(children: children), _style); + // TODO(hansmuller): An explicit |height| shouldn't be needed + return new InkWell( + child: new Container( + padding: const EdgeDims(16.0, 16.0, 20.0, 16.0), + height: kHeight, + decoration: const BoxDecoration( + border: const Border( + bottom: const BorderSide(color: const Color(0xFFF4F4F4)))), + child: new Flex(children) + ) + ); } } diff --git a/sdk/example/stocks2/lib/stock_settings.dart b/sdk/example/stocks/lib/stock_settings.dart similarity index 100% rename from sdk/example/stocks2/lib/stock_settings.dart rename to sdk/example/stocks/lib/stock_settings.dart diff --git a/sdk/example/hello_world/hello_world.dart b/sdk/example/stocks/lib/stock_types.dart similarity index 54% rename from sdk/example/hello_world/hello_world.dart rename to sdk/example/stocks/lib/stock_types.dart index e20978844d1..9b031110d7a 100644 --- a/sdk/example/hello_world/hello_world.dart +++ b/sdk/example/stocks/lib/stock_types.dart @@ -2,10 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'package:sky/framework/fn.dart'; - -class HelloWorldApp extends App { - UINode build() { - return new Text('Hello, world!'); - } -} +enum StockMode { optimistic, pessimistic } diff --git a/sdk/example/stocks/pubspec.yaml b/sdk/example/stocks/pubspec.yaml index 06ec3dfe17c..d946687866c 100644 --- a/sdk/example/stocks/pubspec.yaml +++ b/sdk/example/stocks/pubspec.yaml @@ -4,4 +4,4 @@ description: A demo application using Sky that shows stock data homepage: https://github.com/domokit/sky_sdk/tree/master/sdk/lib/example/stocks version: 0.0.1 dependencies: - sky: '>=0.0.1 <1.0.0' + sky: '>=0.0.10 <1.0.0' diff --git a/sdk/example/stocks2/README.md b/sdk/example/stocks2/README.md deleted file mode 100644 index 83f97d0db16..00000000000 --- a/sdk/example/stocks2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -This is a copy of the stocks app... with everything removed. - -The goal is to eventually replace the stocks app with this one, by -adding it back bit by bit as we port it to RenderNode. diff --git a/sdk/example/stocks2/lib/stock_arrow.dart b/sdk/example/stocks2/lib/stock_arrow.dart deleted file mode 100644 index 95da3307423..00000000000 --- a/sdk/example/stocks2/lib/stock_arrow.dart +++ /dev/null @@ -1,75 +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 'package:sky/rendering/box.dart'; -import 'package:sky/rendering/object.dart'; -import 'package:sky/theme/colors.dart' as colors; -import 'package:sky/widgets/basic.dart'; - -class StockArrow extends Component { - - StockArrow({ String key, this.percentChange }) : super(key: key); - - final double percentChange; - - int _colorIndexForPercentChange(double percentChange) { - double maxPercent = 10.0; - double normalizedPercentChange = math.min(percentChange.abs(), maxPercent) / maxPercent; - return 100 + (normalizedPercentChange * 8.0).floor() * 100; - } - - Color _colorForPercentChange(double percentChange) { - if (percentChange > 0) - return colors.Green[_colorIndexForPercentChange(percentChange)]; - return colors.Red[_colorIndexForPercentChange(percentChange)]; - } - - Widget build() { - // TODO(jackson): This should change colors with the theme - Color color = _colorForPercentChange(percentChange); - const double kSize = 40.0; - var arrow = new CustomPaint(callback: (sky.Canvas canvas, Size size) { - Paint paint = new Paint()..color = color; - paint.strokeWidth = 1.0; - const double padding = 2.0; - assert(padding > paint.strokeWidth / 2.0); // make sure the circle remains inside the box - double r = (kSize - padding) / 2.0; // radius of the circle - double centerX = padding + r; - double centerY = padding + r; - - // Draw the arrow. - double w = 8.0; - double h = 5.0; - double arrowY; - if (percentChange < 0.0) { - h = -h; - arrowY = centerX + 1.0; - } else { - arrowY = centerX - 1.0; - } - Path path = new Path(); - path.moveTo(centerX, arrowY - h); // top of the arrow - path.lineTo(centerX + w, arrowY + h); - path.lineTo(centerX - w, arrowY + h); - path.close(); - paint.setStyle(sky.PaintingStyle.fill); - canvas.drawPath(path, paint); - - // Draw a circle that circumscribes the arrow. - paint.setStyle(sky.PaintingStyle.stroke); - canvas.drawCircle(new Point(centerX, centerY), r, paint); - }); - - return new Container( - child: arrow, - width: kSize, - height: kSize, - margin: const EdgeDims.symmetric(horizontal: 5.0) - ); - } - -} diff --git a/sdk/example/stocks2/lib/stock_menu.dart b/sdk/example/stocks2/lib/stock_menu.dart deleted file mode 100644 index 3d6450d27a5..00000000000 --- a/sdk/example/stocks2/lib/stock_menu.dart +++ /dev/null @@ -1,43 +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 'package:sky/widgets/checkbox.dart'; -import 'package:sky/widgets/popup_menu.dart'; -import 'package:sky/widgets/basic.dart'; -import 'package:sky/framework/theme/view_configuration.dart'; - -class StockMenu extends Component { - - StockMenu({ - String key, - this.controller, - this.autorefresh: false, - this.onAutorefreshChanged - }) : super(key: key); - - final PopupMenuController controller; - final bool autorefresh; - final ValueChanged onAutorefreshChanged; - - Widget build() { - var checkbox = new Checkbox( - value: this.autorefresh, - onChanged: this.onAutorefreshChanged - ); - - return new Positioned( - child: new PopupMenu( - controller: controller, - items: [ - new Text('Add stock'), - new Text('Remove stock'), - new Flex([new Flexible(child: new Text('Autorefresh')), checkbox]), - ], - level: 4 - ), - right: 8.0, - top: 8.0 + kStatusBarHeight - ); - } -} diff --git a/sdk/example/stocks2/lib/stock_row.dart b/sdk/example/stocks2/lib/stock_row.dart deleted file mode 100644 index c13b66f2c22..00000000000 --- a/sdk/example/stocks2/lib/stock_row.dart +++ /dev/null @@ -1,63 +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 'package:sky/painting/text_style.dart'; -import 'package:sky/rendering/box.dart'; -import 'package:sky/widgets/ink_well.dart'; -import 'package:sky/widgets/basic.dart'; -import 'package:sky/widgets/theme.dart'; - -import 'stock_arrow.dart'; -import 'stock_data.dart'; - -class StockRow extends Component { - - StockRow({ Stock stock }) : this.stock = stock, super(key: stock.symbol); - - final Stock stock; - - static const double kHeight = 79.0; - - Widget build() { - String lastSale = "\$${stock.lastSale.toStringAsFixed(2)}"; - - String changeInPrice = "${stock.percentChange.toStringAsFixed(2)}%"; - if (stock.percentChange > 0) changeInPrice = "+" + changeInPrice; - - List children = [ - new Container( - child: new StockArrow(percentChange: stock.percentChange), - margin: const EdgeDims.only(right: 5.0) - ), - new Flexible( - child: new Text(stock.symbol), - flex: 2 - ), - new Flexible( - child: new Text( - lastSale, - style: const TextStyle(textAlign: TextAlign.right) - ) - ), - new Flexible( - child: new Text( - changeInPrice, - style: Theme.of(this).text.caption.copyWith(textAlign: TextAlign.right) - ) - ) - ]; - - // TODO(hansmuller): An explicit |height| shouldn't be needed - return new InkWell( - child: new Container( - padding: const EdgeDims(16.0, 16.0, 20.0, 16.0), - height: kHeight, - decoration: const BoxDecoration( - border: const Border( - bottom: const BorderSide(color: const Color(0xFFF4F4F4)))), - child: new Flex(children) - ) - ); - } -} diff --git a/sdk/example/stocks2/lib/stock_types.dart b/sdk/example/stocks2/lib/stock_types.dart deleted file mode 100644 index e7f06ff11d1..00000000000 --- a/sdk/example/stocks2/lib/stock_types.dart +++ /dev/null @@ -1 +0,0 @@ -enum StockMode { optimistic, pessimistic } diff --git a/sdk/example/widgets/spinning_mixed.dart b/sdk/example/widgets/spinning_mixed.dart index ffcac6f4b89..f5145894b95 100644 --- a/sdk/example/widgets/spinning_mixed.dart +++ b/sdk/example/widgets/spinning_mixed.dart @@ -13,8 +13,7 @@ import 'package:sky/widgets/raised_button.dart'; import 'package:sky/widgets/widget.dart'; import 'package:vector_math/vector_math.dart'; -import '../lib/solid_color_box.dart'; -import '../../tests/resources/display_list.dart'; +import '../rendering/solid_color_box.dart'; // Solid colour, RenderObject version void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) { @@ -61,8 +60,6 @@ Widget builder() { double timeBase; RenderTransform transformBox; -final TestRenderView tester = new TestRenderView(); - void rotate(double timeStamp) { if (timeBase == null) timeBase = timeStamp; diff --git a/sdk/home.dart b/sdk/home.dart index 1d142bab278..9e2733b3b72 100644 --- a/sdk/home.dart +++ b/sdk/home.dart @@ -51,18 +51,13 @@ class SkyDemo extends Component { class SkyHome extends App { Widget build() { List children = [ - new SkyDemo('Stocks App', 'example/stocks2/lib/stock_app.dart'), + new SkyDemo('Stocks App', 'example/stocks/lib/main.dart'), new SkyDemo('Asteroids Game', 'example/game/main.dart'), new SkyDemo('Interactive Flex', 'example/rendering/interactive_flex.dart'), new SkyDemo('Sector Layout', 'example/widgets/sector.dart'), new SkyDemo('Touch Demo', 'example/rendering/touch_demo.dart'), new SkyDemo('Minedigger Game', 'example/mine_digger/lib/main.dart'), - // TODO(eseidel): We could use to separate these groups? - new SkyDemo('Old Stocks App', 'example/stocks/main.sky'), - new SkyDemo('Old Touch Demo', 'example/raw/touch-demo.sky'), - new SkyDemo('Old Spinning Square', 'example/raw/spinning-square.sky'), - new SkyDemo('Licences (Old)', 'LICENSES.sky'), ]; diff --git a/tests/examples/stocks.dart b/tests/examples/stocks.dart index bcc715648c9..4db95d2f005 100644 --- a/tests/examples/stocks.dart +++ b/tests/examples/stocks.dart @@ -6,7 +6,7 @@ import 'dart:async'; import 'package:sky/widgets/widget.dart'; -import '../../sdk/example/stocks2/lib/stock_app.dart'; +import '../../sdk/example/stocks/lib/main.dart'; import '../resources/display_list.dart'; class TestStocksApp extends StocksApp { diff --git a/tools/webkitpy/layout_tests/run_webkit_tests.py b/tools/webkitpy/layout_tests/run_webkit_tests.py index 35d76a00adf..c53ad9b3653 100644 --- a/tools/webkitpy/layout_tests/run_webkit_tests.py +++ b/tools/webkitpy/layout_tests/run_webkit_tests.py @@ -397,7 +397,7 @@ def run_analyzer(port, options, args, logging_stream): sky_tools_dir = os.path.dirname(os.path.dirname(test_dir)) analyzer_path = os.path.join(sky_tools_dir, 'skyanalyzer') src_dir = os.path.dirname(os.path.dirname(sky_tools_dir)) - analyzer_target_path = os.path.join(src_dir, 'sky/sdk/example/stocks2/lib/stock_app.dart') + analyzer_target_path = os.path.join(src_dir, 'sky/sdk/example/stocks/lib/main.dart') analyzer_args = [ analyzer_path, build_dir,