diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ec80d2cb23b..e4af425b6a0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,10 +37,10 @@ target_os = ["android"] Building the code ----------------- -Currently we support building for an Android target and for a headless Linux -target. +Currently we support building on Linux only, for an Android target and for a headless Linux +target. Building on MacOS for Android, iOS, and a head-less MacOS target is coming soon. -### Android +### Android (cross-compiling from Linux) * (Only the first time) `sudo ./build/install-build-deps-android.sh` * (Only the first time) `./tools/android/download_android_tools.py` @@ -48,7 +48,7 @@ target. * `ninja -C out/android_Debug` * `./sky/tools/shelldb start out/android_Debug/ sky/sdk/example/hello_world/lib/main.dart` -### Linux +### Linux (on Linux) * (Only the first time) `sudo ./build/install-build-deps.sh` * `./sky/tools/gn` diff --git a/DEPS b/DEPS index 0b72d1e61b1..523a12e96cb 100644 --- a/DEPS +++ b/DEPS @@ -19,7 +19,7 @@ vars = { 'chromium_git': 'https://chromium.googlesource.com', - 'skia_revision': '2ced78866fcadd98895777c8dffe92e229775181', + 'skia_revision': '29ccdf86ab0a1649fd775c9431891bacb1391e99', 'dart_revision': 'e5e3d161e70d862608e6597facdf5ac8ae9ab2c3', 'dart_observatory_packages_revision': 'cdc4b3d4c15b9c0c8e7702dff127b440afbb7485', @@ -269,7 +269,7 @@ hooks = [ 'pattern': '.', 'action': [ 'python', - 'src/sky/sdk/lib/download_material_design_icons', + 'src/sky/tools/download_material_design_icons', ], }, # Pull binutils for linux, enabled debug fission for faster linking / diff --git a/build/config/ios/ios_sim.py b/build/config/ios/ios_sim.py index e56fd6e5788..c48445276d6 100755 --- a/build/config/ios/ios_sim.py +++ b/build/config/ios/ios_sim.py @@ -57,6 +57,10 @@ def InstallLaunchAndWait(args, wait): launch_args += [ 'booted', identifier, + '-target', + args.target, + '-server', + args.server ] return subprocess.check_output( SIMCTL_PATH + launch_args ).strip() @@ -83,10 +87,18 @@ def Debug(args): def Main(): parser = argparse.ArgumentParser(description='A script that launches an' ' application in the simulator and attaches' - ' the debugger to the same') + ' the debugger to it.') parser.add_argument('-p', dest='path', required=True, - help='Path the the simulator application') + help='Path to the simulator application.') + + parser.add_argument('-t', dest='target', required=False, + default='sky/sdk/example/demo_launcher/lib/main.dart', + help='Sky server-relative path to the Sky app to run.') + + parser.add_argument('-s', dest='server', required=False, + default='localhost:8080', + help='Sky server address.') subparsers = parser.add_subparsers() diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc index d7b2f0ee950..31163ed0ebd 100644 --- a/skia/ext/analysis_canvas.cc +++ b/skia/ext/analysis_canvas.cc @@ -191,7 +191,7 @@ void AnalysisCanvas::onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint* paint, - DrawBitmapRectFlags flags) { + SrcRectConstraint flags) { // Call drawRect to determine transparency, // but reset solid color to false. SkPaint tmpPaint; diff --git a/skia/ext/analysis_canvas.h b/skia/ext/analysis_canvas.h index f21b8d02cf7..9567cdaf82c 100644 --- a/skia/ext/analysis_canvas.h +++ b/skia/ext/analysis_canvas.h @@ -48,7 +48,7 @@ class SK_API AnalysisCanvas : public SkCanvas, const SkRect* src, const SkRect& dst, const SkPaint* paint, - DrawBitmapRectFlags flags) override; + SrcRectConstraint flags) override; void onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc index 904d6bdb0bf..1c08a0627f3 100644 --- a/skia/ext/benchmarking_canvas.cc +++ b/skia/ext/benchmarking_canvas.cc @@ -702,7 +702,7 @@ void BenchmarkingCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, const SkPaint* paint, - DrawBitmapRectFlags flags) { + SrcRectConstraint flags) { AutoOp op(this, "DrawBitmapRect", paint); op.addParam("bitmap", AsValue(bitmap)); if (src) @@ -726,7 +726,8 @@ void BenchmarkingCanvas::onDrawImage(const SkImage* image, } void BenchmarkingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, - const SkRect& dst, const SkPaint* paint) { + const SkRect& dst, const SkPaint* paint, + SrcRectConstraint flags) { DCHECK(image); AutoOp op(this, "DrawImageRect", paint); op.addParam("image", AsValue(*image)); @@ -734,7 +735,7 @@ void BenchmarkingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src op.addParam("src", AsValue(*src)); op.addParam("dst", AsValue(dst)); - INHERITED::onDrawImageRect(image, src, dst, op.paint()); + INHERITED::onDrawImageRect(image, src, dst, op.paint(), flags); } void BenchmarkingCanvas::onDrawBitmapNine(const SkBitmap& bitmap, diff --git a/skia/ext/benchmarking_canvas.h b/skia/ext/benchmarking_canvas.h index a33c42d9fd1..fccbebb4907 100644 --- a/skia/ext/benchmarking_canvas.h +++ b/skia/ext/benchmarking_canvas.h @@ -60,10 +60,10 @@ protected: void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override; void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, - const SkPaint*, DrawBitmapRectFlags flags) override; + const SkPaint*, SrcRectConstraint flags) override; void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override; void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, - const SkPaint*) override; + const SkPaint*, SrcRectConstraint flags) override; void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, const SkPaint*) override; void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override; diff --git a/skia/ext/pixel_ref_utils.cc b/skia/ext/pixel_ref_utils.cc index 7029d46ff6b..78d256df704 100644 --- a/skia/ext/pixel_ref_utils.cc +++ b/skia/ext/pixel_ref_utils.cc @@ -146,7 +146,7 @@ class GatherPixelRefDevice : public SkBitmapDevice { const SkRect* src_or_null, const SkRect& dst, const SkPaint& paint, - SkCanvas::DrawBitmapRectFlags flags) override { + SkCanvas::SrcRectConstraint flags) override { SkRect bitmap_rect = SkRect::MakeWH(bitmap.width(), bitmap.height()); SkMatrix matrix; matrix.setRectToRect(bitmap_rect, dst, SkMatrix::kFill_ScaleToFit); diff --git a/sky/BUILD.gn b/sky/BUILD.gn index 1f38125313b..47a5910c3e5 100644 --- a/sky/BUILD.gn +++ b/sky/BUILD.gn @@ -23,6 +23,7 @@ group("sky_dev") { testonly = true deps = [ + "//sky/packages", "//sky/sdk", "//sky/sdk/example/demo_launcher", "//sky/shell", diff --git a/sky/HACKING.md b/sky/HACKING.md deleted file mode 100644 index 20c8c062629..00000000000 --- a/sky/HACKING.md +++ /dev/null @@ -1,85 +0,0 @@ -Hacking on Sky -============== - -Building --------- - -* Follow the setup & build instructions for [Mojo](https://github.com/domokit/mojo) - -The build directory will be `out/Debug` for Linux debug builds, and -`out/Release` for Linux release builds. For Android builds, prefix -`android_`, as in, `android_Debug`. - -For Sky on iOS, you can try following these [experimental instructions](https://docs.google.com/document/d/1qm8Vvyz8Mngw6EsSg4FELQ7FOegjBJ5Itg9OBJGN5JM/edit#heading=h.ikz9bdwswdct). - -Running applications --------------------- - -To run an application on your device, run: - -* `mojo/devtools/common/mojo_shell --sky [url] --android` - -When the shell is running, `mojo/devtools/common/debugger` allows you to -collect traces, symbolize stack crashes and attach gdb if needed. Refer to the -[documentation](https://github.com/domokit/mojo#debugging-tracing-profiling) -for the details. - -Running tests -------------- - -Tests are only supported on Linux currently. - -* ``sky/tools/test_sky --debug`` - * This runs the tests against ``//out/Debug``. If you want to run against - ``//out/Release``, omit the ``--debug`` flag. - -Running tests manually ----------------------- - -Running tests manually lets you more quickly iterate during -development; rather than having to compile and rerun all the tests, -then trawl through the build output to find the current results, you -can just run the test you're working on and reload it over and over, -seeing the output right there on your console. - -* ``sky/tools/skygo/linux64/sky_server -v -p 8000 out/Debug out/Debug/gen/dart-pkg/packages`` -* ``out/Debug/mojo_shell --args-for="mojo:native_viewport_service --use-headless-config --use-osmesa" --args-for"=mojo:sky_viewer --testing" --content-handlers=application/dart,mojo:sky_viewer --url-mappings=mojo:window_manager=mojo:sky_tester,mojo:surfaces_service=mojo:fake_surfaces_service mojo:window_manager`` -* The ``sky_tester`` should print ``#READY`` when ready -* Type the URL you wish to run, for example ``http://127.0.0.1:8000/sky/tests/widgets/dialog.dart``, and press the enter key -* The harness should print the results of the test. You can then type another URL. - -Writing tests -------------- - -We recommend using the [Dart -``test``](https://pub.dartlang.org/packages/test) testing framework. -See [``sky/tests/raw/color_bounds.dart``](tests/raw/color_bounds.dart) -for an example. - -Debugging Sky -------------- - -This document aims to explain how to debug Sky itself. - -### C++ - -Launch a debug Sky build on Android as usual: - -``` -mojo/devtools/common/mojo_shell --sky [url] --android` -``` - -and use the debugger to attach gdb: -``` -mojo/devtools/common/debugger gdb attach -``` - -Once gdb has loaded, hit `c` to continue the execution. When your app crashes, -it will pause in the debugger. At that point, regular gdb commands will work: -`n` to step over the current statement, `s` to step into the current statement, -`f` to step out of the current block, `c` to continue until the next breakpoint -or exception. - -### Dart - -Use Observatory. diff --git a/sky/build/clean_sky_package.py b/sky/build/clean_sky_package.py deleted file mode 100644 index e7b88191190..00000000000 --- a/sky/build/clean_sky_package.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# 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 argparse -import os -import shutil - -def remove_empty_dirs(root_dir): - for root, dirs, _ in os.walk(root_dir): - for name in dirs: - fname = os.path.join(root, name) - if not os.listdir(fname): - os.removedirs(fname) - -def main(): - parser = argparse.ArgumentParser( - description='Clean Sky package for distribution') - parser.add_argument('package_dir', type=str) - parser.add_argument('--touch', type=str) - args = parser.parse_args() - - remove_empty_dirs(args.package_dir) - - material_design_icons = os.path.join(args.package_dir, 'lib/assets/material-design-icons') - if os.path.exists(material_design_icons): - shutil.rmtree(material_design_icons) - - with open(args.touch, 'w') as f: - pass - - -if __name__ == '__main__': - main() diff --git a/sky/build/skyx.gni b/sky/build/skyx.gni index 1a1dd128ef0..0deaae77a76 100644 --- a/sky/build/skyx.gni +++ b/sky/build/skyx.gni @@ -53,7 +53,7 @@ template("skyx") { } action("gen_${bundle_prefix}_bundle") { - asset_base = "$package_root/sky/assets/material-design-icons" + asset_base = "//sky/packages/material_design_icons/lib/icons" sources = [ "//sky/tools/skyx/bin/skyx.dart", diff --git a/sky/dist/BUILD.gn b/sky/dist/BUILD.gn index 21fd28cac36..2268dba057b 100644 --- a/sky/dist/BUILD.gn +++ b/sky/dist/BUILD.gn @@ -50,60 +50,46 @@ copy("sky_shell") { if (is_android) { import("//build/config/android/rules.gni") - sky_sdk_dir = "$root_dist_dir/sdk/sky" + sky_engine_package_dir = "$root_dist_dir/packages/sky_engine" - copy_ex("create_sky_sdk") { + copy_ex("copy_sky_engine_package") { clear_dir = true - dest = "$root_dist_dir/sdk" + dest = "$root_dist_dir/packages" sources = [ - "$root_gen_dir/dart-pkg/sky", + "$root_gen_dir/dart-pkg/sky_engine", ] deps = [ - "//sky/sdk:sky", + "//sky/packages/sky_engine", ] } - copy("copy_sky_sdk_license") { + copy("copy_sky_engine_license") { sources = [ "//AUTHORS", "//LICENSE", ] - outputs = [ "$sky_sdk_dir/{{source_file_part}}" ] + outputs = [ "$sky_engine_package_dir/{{source_file_part}}" ] deps = [ - ":create_sky_sdk" + ":copy_sky_engine_package" ] } - copy("copy_sky_sdk_apks") { + copy("copy_sky_engine_apks") { sources = [ "$root_dist_dir/shell/SkyShell.apk", ] - outputs = [ "$sky_sdk_dir/apks/{{source_file_part}}" ] + outputs = [ "$sky_engine_package_dir/apks/{{source_file_part}}" ] deps = [ - ":create_sky_sdk", + ":copy_sky_engine_package", ":sky_shell", ] } - action("sky_sdk") { - stamp_file = "$target_gen_dir/sky_sdk_cleaned.stamp" - - script = "//sky/build/clean_sky_package.py" - - inputs = [ "$root_gen_dir/dart-pkg/sky.stamp" ] - outputs = [ stamp_file ] - - args = [ - rebase_path(sky_sdk_dir, root_build_dir), - "--touch", - rebase_path(stamp_file, root_build_dir), - ] - + group("sky_engine") { deps = [ - ":copy_sky_sdk_apks", - ":copy_sky_sdk_license", - ":create_sky_sdk", - "//sky/sdk:sky", + ":copy_sky_engine_package", + ":copy_sky_engine_license", + ":copy_sky_engine_apks", ] } } @@ -112,11 +98,12 @@ group("dist") { deps = [ ":sky_viewer", ] + if (!is_ios) { deps += [ ":sky_shell" ] } if (is_android) { - deps += [ ":sky_sdk" ] + deps += [ ":sky_engine" ] } } diff --git a/sky/engine/core/BUILD.gn b/sky/engine/core/BUILD.gn index 57edbfa8a1b..e655074b911 100644 --- a/sky/engine/core/BUILD.gn +++ b/sky/engine/core/BUILD.gn @@ -77,6 +77,7 @@ static_library("core") { "//dart/runtime/bin:embedded_dart_io", "//dart/runtime:libdart", "//dart/runtime/vm:libdart_platform", + "//mojo/services/navigation/public/interfaces", ] sources = sky_core_files diff --git a/sky/engine/core/painting/Canvas.cpp b/sky/engine/core/painting/Canvas.cpp index 39df62a65c0..f7deed3a27b 100644 --- a/sky/engine/core/painting/Canvas.cpp +++ b/sky/engine/core/painting/Canvas.cpp @@ -226,7 +226,7 @@ void Canvas::drawImageRect(const CanvasImage* image, Rect& src, Rect& dst, Paint if (!m_canvas) return; ASSERT(image); - m_canvas->drawBitmapRectToRect(image->bitmap(), &src.sk_rect, dst.sk_rect, &paint->paint()); + m_canvas->drawBitmapRect(image->bitmap(), &src.sk_rect, dst.sk_rect, &paint->paint()); } void Canvas::drawPicture(Picture* picture) diff --git a/sky/engine/platform/graphics/GraphicsContext.cpp b/sky/engine/platform/graphics/GraphicsContext.cpp index 225660ee92c..7ef82048d0c 100644 --- a/sky/engine/platform/graphics/GraphicsContext.cpp +++ b/sky/engine/platform/graphics/GraphicsContext.cpp @@ -967,10 +967,10 @@ void GraphicsContext::drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, if (contextDisabled()) return; - SkCanvas::DrawBitmapRectFlags flags = - immutableState()->shouldClampToSourceRect() ? SkCanvas::kNone_DrawBitmapRectFlag : SkCanvas::kBleed_DrawBitmapRectFlag; + SkCanvas::SrcRectConstraint flags = + immutableState()->shouldClampToSourceRect() ? SkCanvas::kStrict_SrcRectConstraint : SkCanvas::kFast_SrcRectConstraint; - m_canvas->drawBitmapRectToRect(bitmap, src, dst, paint, flags); + m_canvas->drawBitmapRect(bitmap, src, dst, paint, flags); if (regionTrackingEnabled()) m_trackedRegion.didDrawRect(this, dst, *paint, &bitmap); diff --git a/sky/engine/platform/graphics/filters/FilterEffect.cpp b/sky/engine/platform/graphics/filters/FilterEffect.cpp index 6cca08f2c2b..90e9763e124 100644 --- a/sky/engine/platform/graphics/filters/FilterEffect.cpp +++ b/sky/engine/platform/graphics/filters/FilterEffect.cpp @@ -556,20 +556,20 @@ SkImageFilter::CropRect FilterEffect::getCropRect(const FloatSize& cropOffset) c if (hasX()) { rect.setX(boundaries.x()); flags |= SkImageFilter::CropRect::kHasLeft_CropEdge; - flags |= SkImageFilter::CropRect::kHasRight_CropEdge; + flags |= SkImageFilter::CropRect::kHasWidth_CropEdge; } if (hasY()) { rect.setY(boundaries.y()); flags |= SkImageFilter::CropRect::kHasTop_CropEdge; - flags |= SkImageFilter::CropRect::kHasBottom_CropEdge; + flags |= SkImageFilter::CropRect::kHasHeight_CropEdge; } if (hasWidth()) { rect.setWidth(boundaries.width()); - flags |= SkImageFilter::CropRect::kHasRight_CropEdge; + flags |= SkImageFilter::CropRect::kHasWidth_CropEdge; } if (hasHeight()) { rect.setHeight(boundaries.height()); - flags |= SkImageFilter::CropRect::kHasBottom_CropEdge; + flags |= SkImageFilter::CropRect::kHasHeight_CropEdge; } rect.scale(filter()->absoluteTransform().a(), filter()->absoluteTransform().d()); return SkImageFilter::CropRect(rect, flags); diff --git a/sky/packages/BUILD.gn b/sky/packages/BUILD.gn new file mode 100644 index 00000000000..d404d91d31c --- /dev/null +++ b/sky/packages/BUILD.gn @@ -0,0 +1,13 @@ +# 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. + +group("packages") { + testonly = true + + deps = [ + "//sky/packages/sky_engine", + "//sky/packages/sky_services", + "//sky/packages/material_design_icons", + ] +} diff --git a/sky/packages/material_design_icons/BUILD.gn b/sky/packages/material_design_icons/BUILD.gn new file mode 100644 index 00000000000..60bf59a2d8f --- /dev/null +++ b/sky/packages/material_design_icons/BUILD.gn @@ -0,0 +1,23 @@ +# 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. + +action("material_design_icons") { + script = "//sky/build/symlink.py" + + stamp_file = "$target_gen_dir/symlink.stamp" + + sources = [ "lib/.version.sha1" ] + outputs = [ stamp_file ] + + args = [ + rebase_path("lib", root_build_dir), + rebase_path("$root_gen_dir/dart-pkg/packages/material_design_icons", root_build_dir), + "--touch", + rebase_path(stamp_file, root_build_dir) + ] + + deps = [ + "//third_party/dart-pkg", + ] +} diff --git a/sky/packages/material_design_icons/LICENSE b/sky/packages/material_design_icons/LICENSE new file mode 100644 index 00000000000..dc8853a70cf --- /dev/null +++ b/sky/packages/material_design_icons/LICENSE @@ -0,0 +1,393 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public +licenses to material it publishes and in those instances will be +considered the "Licensor." Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the public +licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/sky/packages/material_design_icons/README.md b/sky/packages/material_design_icons/README.md new file mode 100644 index 00000000000..c582b93246b --- /dev/null +++ b/sky/packages/material_design_icons/README.md @@ -0,0 +1,14 @@ +Material Design Icons +===================== + +A set of icons designed under the +[material design guidelines](http://www.google.com/design/spec). + +License +------- + +We have made these icons available for you to incorporate them into your +products under the Creative Common Attribution 4.0 International License +(CC-BY 4.0). Feel free to remix and re-share these icons and documentation in +your products. We'd love attribution in your app's about screen, but it's not +required. The only thing we ask is that you not re-sell the icons themselves. diff --git a/sky/packages/material_design_icons/lib/.gitignore b/sky/packages/material_design_icons/lib/.gitignore new file mode 100644 index 00000000000..30af5fe09cf --- /dev/null +++ b/sky/packages/material_design_icons/lib/.gitignore @@ -0,0 +1 @@ +icons diff --git a/sky/sdk/lib/assets/material-design-icons.sha1 b/sky/packages/material_design_icons/lib/.version.sha1 similarity index 100% rename from sky/sdk/lib/assets/material-design-icons.sha1 rename to sky/packages/material_design_icons/lib/.version.sha1 diff --git a/sky/packages/material_design_icons/pubspec.yaml b/sky/packages/material_design_icons/pubspec.yaml new file mode 100644 index 00000000000..fd06bf85e3e --- /dev/null +++ b/sky/packages/material_design_icons/pubspec.yaml @@ -0,0 +1,5 @@ +name: material_design_icons +version: 0.0.1 +author: Chromium Authors +description: Material Design Icons +homepage: https://github.com/google/material-design-icons diff --git a/sky/packages/sky_engine/BUILD.gn b/sky/packages/sky_engine/BUILD.gn new file mode 100644 index 00000000000..a6af8f7ef41 --- /dev/null +++ b/sky/packages/sky_engine/BUILD.gn @@ -0,0 +1,27 @@ +# 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("//mojo/public/dart/rules.gni") + +dart_pkg("sky_engine") { + sources = [ + "README.md", + "pubspec.yaml", + ] + + deps = [ + "//sky/engine/bindings", + ] + + sdk_ext_directory = "$root_gen_dir/sky/bindings" + sdk_ext_files = [ + "//sky/engine/bindings/sky_internals.dart", + "//sky/engine/bindings/builtin_natives.dart", + ] + sdk_ext_mappings = [ + "dart:sky,dart_sky.dart", + "dart:sky.internals,sky_internals.dart", + "dart:sky_builtin_natives,builtin_natives.dart", + ] +} diff --git a/sky/packages/sky_engine/README.md b/sky/packages/sky_engine/README.md new file mode 100644 index 00000000000..c13095c9589 --- /dev/null +++ b/sky/packages/sky_engine/README.md @@ -0,0 +1,7 @@ +Sky Engine +========== + +This packages describes the dart:sky library, which is the interface between +Dart and the Sky Engine. This package also contains a number of Sky shell +binaries that let you run code that uses the dart:sky library on various +platforms. diff --git a/sky/packages/sky_engine/pubspec.yaml b/sky/packages/sky_engine/pubspec.yaml new file mode 100644 index 00000000000..9bae97102dc --- /dev/null +++ b/sky/packages/sky_engine/pubspec.yaml @@ -0,0 +1,5 @@ +name: sky_engine +version: 0.0.1 +author: Chromium Authors +description: Dart SDK extensions for dart:sky +homepage: https://github.com/domokit/sky_engine diff --git a/sky/packages/sky_services/BUILD.gn b/sky/packages/sky_services/BUILD.gn new file mode 100644 index 00000000000..e3d30034d90 --- /dev/null +++ b/sky/packages/sky_services/BUILD.gn @@ -0,0 +1,20 @@ +# 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("//mojo/public/dart/rules.gni") + +dart_pkg("sky_services") { + sources = [ + "README.md", + "pubspec.yaml", + ] + + deps = [ + "//mojo/services/asset_bundle/public/interfaces", + "//mojo/services/keyboard/public/interfaces", + "//sky/services/activity:interfaces", + "//sky/services/media:interfaces", + "//sky/services/testing:interfaces", + ] +} diff --git a/sky/packages/sky_services/README.md b/sky/packages/sky_services/README.md new file mode 100644 index 00000000000..3f93e00e7e4 --- /dev/null +++ b/sky/packages/sky_services/README.md @@ -0,0 +1,6 @@ +Sky Services +============ + +This packages contains `mojom` interfaces to services associated with Sky. Most +developers should depend on the [Sky package](https://pub.dartlang.org/packages/sky) +instead of using this package directly. diff --git a/sky/packages/sky_services/pubspec.yaml b/sky/packages/sky_services/pubspec.yaml new file mode 100644 index 00000000000..1133396f820 --- /dev/null +++ b/sky/packages/sky_services/pubspec.yaml @@ -0,0 +1,8 @@ +name: sky_services +version: 0.0.1 +author: Chromium Authors +description: Mojom interfaces associated with Sky +homepage: https://github.com/domokit/sky_engine/tree/master/sky/packages/sky_services +dependencies: + mojo: ^0.0.17 + mojom: ^0.0.17 diff --git a/sky/sdk/BUILD.gn b/sky/sdk/BUILD.gn index 5bff99bca1a..7d127962e02 100644 --- a/sky/sdk/BUILD.gn +++ b/sky/sdk/BUILD.gn @@ -2,157 +2,33 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//mojo/public/dart/rules.gni") +action("sky") { + script = "//sky/build/symlink.py" -dart_pkg("sky") { - sources = [ - "CHANGELOG.md", - "bin/init.dart", - "lib/animation/animated_simulation.dart", - "lib/animation/animated_value.dart", - "lib/animation/animation_performance.dart", - "lib/animation/curves.dart", - "lib/animation/forces.dart", - "lib/animation/scroll_behavior.dart", - "lib/animation/timeline.dart", - "lib/assets/.gitignore", - "lib/assets/material-design-icons.sha1", - "lib/base/debug.dart", - "lib/base/hit_test.dart", - "lib/base/lerp.dart", - "lib/base/node.dart", - "lib/base/scheduler.dart", - "lib/download_material_design_icons", - "lib/editing/editable_string.dart", - "lib/editing/editable_text.dart", - "lib/editing/input.dart", - "lib/mojo/activity.dart", - "lib/mojo/asset_bundle.dart", - "lib/mojo/embedder.dart", - "lib/mojo/keyboard.dart", - "lib/mojo/net/fetch.dart", - "lib/mojo/net/image_cache.dart", - "lib/mojo/shell.dart", - "lib/painting/box_painter.dart", - "lib/painting/shadows.dart", - "lib/painting/text_style.dart", - "lib/rendering/auto_layout.dart", - "lib/rendering/block.dart", - "lib/rendering/box.dart", - "lib/rendering/flex.dart", - "lib/rendering/object.dart", - "lib/rendering/paragraph.dart", - "lib/rendering/sky_binding.dart", - "lib/rendering/stack.dart", - "lib/sky_tool", - "lib/theme/colors.dart", - "lib/theme/shadows.dart", - "lib/theme/theme_data.dart", - "lib/theme/typography.dart", - "lib/theme/view_configuration.dart", - "lib/widgets/animated_component.dart", - "lib/widgets/animated_container.dart", - "lib/widgets/basic.dart", - "lib/widgets/block_viewport.dart", - "lib/widgets/button_base.dart", - "lib/widgets/card.dart", - "lib/widgets/checkbox.dart", - "lib/widgets/default_text_style.dart", - "lib/widgets/dialog.dart", - "lib/widgets/dismissable.dart", - "lib/widgets/drawer.dart", - "lib/widgets/drawer_divider.dart", - "lib/widgets/drawer_header.dart", - "lib/widgets/drawer_item.dart", - "lib/widgets/fixed_height_scrollable.dart", - "lib/widgets/flat_button.dart", - "lib/widgets/floating_action_button.dart", - "lib/widgets/focus.dart", - "lib/widgets/icon.dart", - "lib/widgets/icon_button.dart", - "lib/widgets/ink_well.dart", - "lib/widgets/material.dart", - "lib/widgets/material_button.dart", - "lib/widgets/modal_overlay.dart", - "lib/widgets/navigator.dart", - "lib/widgets/popup_menu.dart", - "lib/widgets/popup_menu_item.dart", - "lib/widgets/radio.dart", - "lib/widgets/raised_button.dart", - "lib/widgets/scaffold.dart", - "lib/widgets/scrollable.dart", - "lib/widgets/scrollable_list.dart", - "lib/widgets/scrollable_viewport.dart", - "lib/widgets/snack_bar.dart", - "lib/widgets/switch.dart", - "lib/widgets/tabs.dart", - "lib/widgets/task_description.dart", - "lib/widgets/theme.dart", - "lib/widgets/toggleable.dart", - "lib/widgets/tool_bar.dart", - "lib/widgets/variable_height_scrollable.dart", - "lib/widgets/widget.dart", - "pubspec.yaml", + stamp_file = "$target_gen_dir/symlink.stamp" + + sources = [ "pubspec.yaml" ] + outputs = [ stamp_file ] + + args = [ + rebase_path("lib", root_build_dir), + rebase_path("$root_gen_dir/dart-pkg/packages/sky", root_build_dir), + "--touch", + rebase_path(stamp_file, root_build_dir) ] - # List of mojom targets that the sky pkg exports deps = [ - "//mojo/services/asset_bundle/public/interfaces", - "//mojo/services/keyboard/public/interfaces", - "//sky/services/activity:interfaces", - "//sky/services/engine:interfaces", - ] - - datadeps = [ "//mojo/dart/mojo_services", "//mojo/dart/mojom", "//mojo/public/dart:mojo", - "//sky/engine/bindings", - "//sky/services/testing:interfaces", - "//sky/services/media:interfaces", + "//sky/packages/sky_engine", + "//sky/packages/sky_services", "//third_party/dart-pkg", ] - - sdk_ext_directory = "$root_gen_dir/sky/bindings" - sdk_ext_files = [ - "//sky/engine/bindings/sky_internals.dart", - "//sky/engine/bindings/builtin_natives.dart", - ] - sdk_ext_mappings = [ - "dart:sky,dart_sky.dart", - "dart:sky.internals,sky_internals.dart", - "dart:sky_builtin_natives,builtin_natives.dart", - ] -} - -action("material_design_icons") { - source_file = "lib/assets/material-design-icons" - target_file = "$root_gen_dir/dart-pkg/sky/lib/assets/material-design-icons" - stamp = "$target_gen_dir/material_design_icons_linked" - - sources = [ - "lib/assets/material-design-icons.sha1", - ] - outputs = [ - stamp, - ] - - script = "//sky/build/symlink.py" - args = [ - rebase_path(source_file, root_build_dir), - rebase_path(target_file, root_build_dir), - "--touch", - rebase_path(stamp, root_build_dir), - ] - - deps = [ - ":sky", - ] } group("sdk") { deps = [ ":sky", - ":material_design_icons", ] } diff --git a/sky/sdk/example/address_book/lib/main.dart b/sky/sdk/example/address_book/lib/main.dart index 7dee745cdee..b623c4a0189 100644 --- a/sky/sdk/example/address_book/lib/main.dart +++ b/sky/sdk/example/address_book/lib/main.dart @@ -7,11 +7,14 @@ import 'package:sky/theme/colors.dart' as colors; import 'package:sky/theme/typography.dart' as typography; import 'package:sky/widgets/basic.dart'; import 'package:sky/widgets/default_text_style.dart'; +import 'package:sky/widgets/dialog.dart'; import 'package:sky/widgets/floating_action_button.dart'; +import 'package:sky/widgets/flat_button.dart'; import 'package:sky/widgets/focus.dart'; import 'package:sky/widgets/icon.dart'; import 'package:sky/widgets/icon_button.dart'; import 'package:sky/widgets/material.dart'; +import 'package:sky/widgets/navigator.dart'; import 'package:sky/widgets/scaffold.dart'; import 'package:sky/widgets/scrollable_viewport.dart'; import 'package:sky/widgets/task_description.dart'; @@ -51,17 +54,23 @@ class Field extends Component { class AddressBookApp extends App { - Widget buildToolBar() { + Widget buildToolBar(Navigator navigator) { return new ToolBar( left: new IconButton(icon: "navigation/arrow_back"), right: [new IconButton(icon: "navigation/check")] ); } - Widget buildFloatingActionButton() { + Widget buildFloatingActionButton(Navigator navigator) { return new FloatingActionButton( child: new Icon(type: 'image/photo_camera', size: 24), - backgroundColor: Theme.of(this).accentColor + backgroundColor: Theme.of(this).accentColor, + onPressed: () { + showDialog = true; + navigator.pushState(this, (_) { + showDialog = false; + }); + } ); } @@ -71,8 +80,10 @@ class AddressBookApp extends App { static final GlobalKey addressKey = new GlobalKey(); static final GlobalKey ringtoneKey = new GlobalKey(); static final GlobalKey noteKey = new GlobalKey(); + static final GlobalKey fillKey = new GlobalKey(); + static final GlobalKey emoticonKey = new GlobalKey(); - Widget buildBody() { + Widget buildBody(Navigator navigator) { return new Material( child: new ScrollableBlock([ new AspectRatio( @@ -91,12 +102,59 @@ class AddressBookApp extends App { ); } - Widget buildMain() { - return new Scaffold( - toolbar: buildToolBar(), - body: buildBody(), - floatingActionButton: buildFloatingActionButton() - ); + bool showDialog = false; + + Widget buildMain(Navigator navigator) { + List layers = [ + new Focus( + initialFocus: nameKey, + child: new Scaffold( + toolbar: buildToolBar(navigator), + body: buildBody(navigator), + floatingActionButton: buildFloatingActionButton(navigator) + ) + ) + ]; + if (showDialog) { + layers.add(new Focus( + initialFocus: fillKey, + child: new Dialog( + title: new Text("Describe your picture"), + content: new ScrollableBlock([ + new Field(inputKey: fillKey, icon: "editor/format_color_fill", placeholder: "Color"), + new Field(inputKey: emoticonKey, icon: "editor/insert_emoticon", placeholder: "Emotion"), + ]), + onDismiss: navigator.pop, + actions: [ + new FlatButton( + child: new Text('DISCARD'), + onPressed: () { + navigator.pop(); + } + ), + new FlatButton( + child: new Text('SAVE'), + onPressed: () { + navigator.pop(); + } + ), + ] + ) + )); + } + return new Stack(layers); + } + + NavigationState _navigationState; + + void initState() { + _navigationState = new NavigationState([ + new Route( + name: '/', + builder: (navigator, route) => buildMain(navigator) + ), + ]); + super.initState(); } Widget build() { @@ -111,10 +169,7 @@ class AddressBookApp extends App { style: typography.error, // if you see this, you've forgotten to correctly configure the text style! child: new TaskDescription( label: 'Address Book', - child: new Focus( - initialFocus: nameKey, - child: buildMain() - ) + child: new Navigator(_navigationState) ) ) ); diff --git a/sky/sdk/example/fitness/lib/feed.dart b/sky/sdk/example/fitness/lib/feed.dart index 63e2449bf4d..21859ca3a3d 100644 --- a/sky/sdk/example/fitness/lib/feed.dart +++ b/sky/sdk/example/fitness/lib/feed.dart @@ -4,6 +4,7 @@ import 'package:sky/painting/text_style.dart'; import 'package:sky/widgets/basic.dart'; +import 'package:sky/widgets/button_base.dart'; import 'package:sky/widgets/dialog.dart'; import 'package:sky/widgets/drawer.dart'; import 'package:sky/widgets/drawer_divider.dart'; @@ -13,10 +14,13 @@ import 'package:sky/widgets/flat_button.dart'; import 'package:sky/widgets/floating_action_button.dart'; import 'package:sky/widgets/icon_button.dart'; import 'package:sky/widgets/icon.dart'; +import 'package:sky/widgets/ink_well.dart'; import 'package:sky/widgets/material.dart'; import 'package:sky/widgets/navigator.dart'; +import 'package:sky/widgets/radio.dart'; import 'package:sky/widgets/scaffold.dart'; import 'package:sky/widgets/scrollable_list.dart'; +import 'package:sky/widgets/scrollable_viewport.dart'; import 'package:sky/widgets/snack_bar.dart'; import 'package:sky/widgets/theme.dart'; import 'package:sky/widgets/tool_bar.dart'; @@ -27,7 +31,10 @@ import 'fitness_item.dart'; import 'measurement.dart'; class FitnessItemList extends Component { - FitnessItemList({ Key key, this.items, this.onDismissed }) : super(key: key); + FitnessItemList({ Key key, this.items, this.onDismissed }) : super(key: key) { + assert(items != null); + assert(onDismissed != null); + } final List items; final FitnessItemHandler onDismissed; @@ -36,11 +43,40 @@ class FitnessItemList extends Component { return new Material( type: MaterialType.canvas, child: new ScrollableList( + padding: const EdgeDims.all(4.0), items: items, itemHeight: kFitnessItemHeight, - itemBuilder: (item) => new MeasurementRow( - measurement: item as Measurement, - onDismissed: onDismissed + itemBuilder: (item) => item.toRow(onDismissed: onDismissed) + ) + ); + } +} + +class DialogMenuItem extends ButtonBase { + DialogMenuItem(this.children, { Key key, this.onPressed }) : super(key: key); + + List children; + Function onPressed; + + void syncFields(DialogMenuItem source) { + children = source.children; + onPressed = source.onPressed; + super.syncFields(source); + } + + Widget buildContent() { + return new Listener( + onGestureTap: (_) { + if (onPressed != null) + onPressed(); + }, + child: new Container( + height: 48.0, + child: new InkWell( + child: new Padding( + padding: const EdgeDims.symmetric(horizontal: 16.0), + child: new Flex(children) + ) ) ) ); @@ -204,11 +240,30 @@ class FeedFragment extends StatefulComponent { } bool _isShowingDialog = false; + String _addItemRoute; + + void _handleAddItemRouteChanged(String routeName) { + setState(() { + _addItemRoute = routeName; + }); + } Widget buildDialog() { + // TODO(jackson): Internationalize + Map labels = { + '/meals/new': 'Eat', + '/measurements/new': 'Measure', + }; + List menuItems = []; + for(String routeName in labels.keys) { + menuItems.add(new DialogMenuItem([ + new Flexible(child: new Text(labels[routeName])), + new Radio(value: routeName, groupValue: _addItemRoute, onChanged: _handleAddItemRouteChanged), + ], onPressed: () => _handleAddItemRouteChanged(routeName))); + } return new Dialog( - title: new Text("New item"), - content: new Text("What are you trying to do?"), + title: new Text("What are you doing?"), + content: new ScrollableBlock(menuItems), onDismiss: navigator.pop, actions: [ new FlatButton( @@ -216,17 +271,10 @@ class FeedFragment extends StatefulComponent { onPressed: navigator.pop ), new FlatButton( - child: new Text('EAT'), + child: new Text('ADD'), onPressed: () { navigator.pop(); - navigator.pushNamed("/meals/new"); - } - ), - new FlatButton( - child: new Text('MEASURE'), - onPressed: () { - navigator.pop(); - navigator.pushNamed("/measurements/new"); + navigator.pushNamed(_addItemRoute); } ), ] @@ -236,6 +284,9 @@ class FeedFragment extends StatefulComponent { void _handleActionButtonPressed() { setState(() { _isShowingDialog = true; + navigator.pushState(this, (_) { + _isShowingDialog = false; + }); }); } diff --git a/sky/sdk/example/fitness/lib/fitness_item.dart b/sky/sdk/example/fitness/lib/fitness_item.dart index d46bbb01df4..26eff9850df 100644 --- a/sky/sdk/example/fitness/lib/fitness_item.dart +++ b/sky/sdk/example/fitness/lib/fitness_item.dart @@ -10,7 +10,7 @@ typedef void FitnessItemHandler(FitnessItem item); const double kFitnessItemHeight = 79.0; -class FitnessItem { +abstract class FitnessItem { FitnessItem({ this.when }) { assert(when != null); } @@ -18,13 +18,17 @@ class FitnessItem { // TODO(jackson): Internationalize String get displayDate => "${when.year.toString()}-${when.month.toString().padLeft(2,'0')}-${when.day.toString().padLeft(2,'0')}"; + + FitnessItemRow toRow({ FitnessItemHandler onDismissed }); } abstract class FitnessItemRow extends Component { FitnessItemRow({ FitnessItem item, this.onDismissed }) : this.item = item, - super(key: new Key(item.when.toString())); + super(key: new Key(item.when.toString())) { + assert(onDismissed != null); + } final FitnessItem item; final FitnessItemHandler onDismissed; diff --git a/sky/sdk/example/fitness/lib/meal.dart b/sky/sdk/example/fitness/lib/meal.dart index db0489f76ea..4c56fe542ff 100644 --- a/sky/sdk/example/fitness/lib/meal.dart +++ b/sky/sdk/example/fitness/lib/meal.dart @@ -21,6 +21,10 @@ class Meal extends FitnessItem { Meal({ DateTime when, this.description }) : super(when: when); final String description; + + FitnessItemRow toRow({ FitnessItemHandler onDismissed }) { + return new MealRow(meal: this, onDismissed: onDismissed); + } } class MealRow extends FitnessItemRow { @@ -91,6 +95,8 @@ class MealFragment extends StatefulComponent { }); } + static final GlobalKey descriptionKey = new GlobalKey(); + Widget buildBody() { Meal meal = new Meal(when: new DateTime.now()); return new Material( @@ -101,7 +107,7 @@ class MealFragment extends StatefulComponent { child: new Block([ new Text(meal.displayDate), new Input( - focused: false, + key: descriptionKey, placeholder: 'Describe meal', onChanged: _handleDescriptionChanged ), diff --git a/sky/sdk/example/fitness/lib/measurement.dart b/sky/sdk/example/fitness/lib/measurement.dart index 6ce36fb5bde..125ccb912f3 100644 --- a/sky/sdk/example/fitness/lib/measurement.dart +++ b/sky/sdk/example/fitness/lib/measurement.dart @@ -25,6 +25,10 @@ class Measurement extends FitnessItem { // TODO(jackson): Internationalize String get displayWeight => "${weight.toStringAsFixed(2)} lbs"; + + FitnessItemRow toRow({ FitnessItemHandler onDismissed }) { + return new MeasurementRow(measurement: this, onDismissed: onDismissed); + } } class MeasurementRow extends FitnessItemRow { @@ -105,6 +109,8 @@ class MeasurementFragment extends StatefulComponent { }); } + static final GlobalKey weightKey = new GlobalKey(); + Widget buildBody() { Measurement measurement = new Measurement(when: new DateTime.now()); return new Material( @@ -115,7 +121,7 @@ class MeasurementFragment extends StatefulComponent { child: new Block([ new Text(measurement.displayDate), new Input( - focused: false, + key: weightKey, placeholder: 'Enter weight', onChanged: _handleWeightChanged ), diff --git a/sky/sdk/example/game/lib/particle_system.dart b/sky/sdk/example/game/lib/particle_system.dart index f250a1280f3..9eed9614711 100644 --- a/sky/sdk/example/game/lib/particle_system.dart +++ b/sky/sdk/example/game/lib/particle_system.dart @@ -271,43 +271,10 @@ class ParticleSystem extends Node { colors.add(particleColor); } - // TODO(viktork): Verify that the C++ version looks right and is faster! Paint paint = new Paint()..setTransferMode(transferMode) ..setFilterQuality(FilterQuality.low) // All Skia examples do this. ..isAntiAlias = false; // Antialiasing breaks SkCanvas.drawAtlas? - return canvas.drawAtlas(texture.image, transforms, rects, colors, + canvas.drawAtlas(texture.image, transforms, rects, colors, TransferMode.modulate, null, paint); - - dartDrawAtlas(canvas, texture.image, transforms, rects, colors, - TransferMode.modulate, paint); - } -} - -void dartDrawAtlas(Canvas canvas, Image image, List transforms, - List rects, List colors, TransferMode transferMode, Paint paint) { - assert(transforms.length == rects.length && transforms.length == colors.length); - - Texture mainTexture = new Texture(image); - - for (int i = 0; i < transforms.length; i++) { - RSTransform transform = transforms[i]; - Rect rect = rects[i]; - Color color = colors[i]; - - canvas.save(); - - Matrix4 matrix = new Matrix4(transform.scos, transform.ssin, 0.0, 0.0, - -transform.ssin, transform.scos, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - transform.tx, transform.ty, 0.0, 1.0); - canvas.concat(matrix.storage); - - paint.setColorFilter(new ColorFilter.mode(color, transferMode)); - paint.color = color; - - Texture texture = mainTexture.textureFromRect(rect); - texture.drawTexture(canvas, new Point(-texture.size.width/2.0, -texture.size.height/2.0), paint); - - canvas.restore(); } } diff --git a/sky/sdk/example/stocks/lib/stock_settings.dart b/sky/sdk/example/stocks/lib/stock_settings.dart index 76e5c0389e7..325c515a713 100644 --- a/sky/sdk/example/stocks/lib/stock_settings.dart +++ b/sky/sdk/example/stocks/lib/stock_settings.dart @@ -31,7 +31,7 @@ class StockSettings extends StatefulComponent { BackupMode backup; SettingsUpdater updater; - bool showModeDialog = false; + bool _showModeDialog = false; void syncFields(StockSettings source) { navigator = source.navigator; @@ -60,9 +60,9 @@ class StockSettings extends StatefulComponent { _handleOptimismChanged(false); break; case StockMode.pessimistic: - showModeDialog = true; + _showModeDialog = true; navigator.pushState(this, (_) { - showModeDialog = false; + _showModeDialog = false; }); break; } @@ -123,7 +123,7 @@ class StockSettings extends StatefulComponent { body: buildSettingsPane() ) ]; - if (showModeDialog) { + if (_showModeDialog) { layers.add(new Dialog( title: new Text("Change mode?"), content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"), diff --git a/sky/sdk/example/widgets/card_collection.dart b/sky/sdk/example/widgets/card_collection.dart index 5680645cf6e..37fc2b521bd 100644 --- a/sky/sdk/example/widgets/card_collection.dart +++ b/sky/sdk/example/widgets/card_collection.dart @@ -9,10 +9,12 @@ import 'package:sky/widgets/basic.dart'; import 'package:sky/widgets/block_viewport.dart'; import 'package:sky/widgets/card.dart'; import 'package:sky/widgets/dismissable.dart'; +import 'package:sky/widgets/icon.dart'; import 'package:sky/widgets/variable_height_scrollable.dart'; import 'package:sky/widgets/scaffold.dart'; import 'package:sky/widgets/theme.dart'; import 'package:sky/widgets/tool_bar.dart'; +import 'package:sky/theme/typography.dart' as typography; import 'package:sky/widgets/widget.dart'; import 'package:sky/widgets/task_description.dart'; @@ -27,8 +29,11 @@ class CardModel { class CardCollectionApp extends App { - final TextStyle cardLabelStyle = - new TextStyle(color: white, fontSize: 18.0, fontWeight: bold); + static const TextStyle cardLabelStyle = + const TextStyle(color: white, fontSize: 18.0, fontWeight: bold); + + final TextStyle backgroundTextStyle = + typography.white.title.copyWith(textAlign: TextAlign.center); BlockViewportLayoutState layoutState = new BlockViewportLayoutState(); List cardModels; @@ -57,21 +62,50 @@ class CardCollectionApp extends App { Widget builder(int index) { if (index >= cardModels.length) return null; - CardModel card = cardModels[index]; - return new Dismissable( - key: card.key, + CardModel cardModel = cardModels[index]; + Widget card = new Dismissable( onResized: () { layoutState.invalidate([index]); }, - onDismissed: () { dismissCard(card); }, + onDismissed: () { dismissCard(cardModel); }, child: new Card( - color: card.color, + color: cardModel.color, child: new Container( - height: card.height, + height: cardModel.height, padding: const EdgeDims.all(8.0), - child: new Center(child: new Text(card.label, style: cardLabelStyle)) + child: new Center(child: new Text(cardModel.label, style: cardLabelStyle)) ) ) ); + + Widget backgroundText = new Center( + child: new Text("Swipe in either direction", style: backgroundTextStyle) + ); + + // The background Widget appears behind the Dismissable card when the card + // moves to the left or right. The Positioned widget ensures that the + // size of the background,card Stack will be based only on the card. The + // Viewport ensures that when the card's resize animation occurs, the + // background (text and icons) will just be clipped, not resized. + Widget background = new Positioned( + top: 0.0, + left: 0.0, + child: new Container( + margin: const EdgeDims.all(4.0), + child: new Viewport( + child: new Container( + height: cardModel.height, + decoration: new BoxDecoration(backgroundColor: Theme.of(this).primaryColor), + child: new Flex([ + new Icon(type: 'navigation/arrow_back', size: 36), + new Flexible(child: backgroundText), + new Icon(type: 'navigation/arrow_forward', size: 36) + ]) + ) + ) + ) + ); + + return new Stack([background, card], key: cardModel.key); } Widget build() { @@ -85,17 +119,20 @@ class CardCollectionApp extends App { ) ); - return new Theme( - data: new ThemeData( - brightness: ThemeBrightness.light, - primarySwatch: Blue, - accentColor: RedAccent[200] - ), - child: new TaskDescription( - label: 'Cards', - child: new Scaffold( - toolbar: new ToolBar(center: new Text('Swipe Away')), - body: cardCollection + return new IconTheme( + data: const IconThemeData(color: IconThemeColor.white), + child: new Theme( + data: new ThemeData( + brightness: ThemeBrightness.light, + primarySwatch: Blue, + accentColor: RedAccent[200] + ), + child: new TaskDescription( + label: 'Cards', + child: new Scaffold( + toolbar: new ToolBar(center: new Text('Swipe Away')), + body: cardCollection + ) ) ) ); diff --git a/sky/sdk/lib/assets/.gitignore b/sky/sdk/lib/assets/.gitignore deleted file mode 100644 index 91b6e9d20c9..00000000000 --- a/sky/sdk/lib/assets/.gitignore +++ /dev/null @@ -1 +0,0 @@ -material-design-icons diff --git a/sky/sdk/lib/download_material_design_icons b/sky/sdk/lib/download_material_design_icons deleted file mode 100755 index f0d987e646b..00000000000 --- a/sky/sdk/lib/download_material_design_icons +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 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 os -import shutil -import subprocess -import sys -import urllib2 - - -def main(): - sky_lib_dir = os.path.dirname(os.path.abspath(__file__)) - assets_dir = os.path.join(sky_lib_dir, 'assets') - icons_dir = os.path.join(assets_dir, 'material-design-icons') - existing_sha1_path = os.path.join(icons_dir, 'material-design-icons.sha1') - - existing_sha1 = None - if os.path.isfile(existing_sha1_path): - with open(existing_sha1_path, 'r') as f: - existing_sha1 = f.read() - - sha1_path = os.path.join(assets_dir, 'material-design-icons.sha1') - - with open(sha1_path, 'r') as f: - sha1 = f.read() - - if existing_sha1 == sha1: - return - - print "Downloading missing material design icons" - - tgz_path = os.path.join(assets_dir, 'material-design-icons.tgz') - url = 'https://storage.googleapis.com/mojo/material-design-icons/%s' % sha1 - response = urllib2.urlopen(url) - - with open(tgz_path, 'wb') as f: - f.write(response.read()) - - shutil.rmtree(icons_dir, ignore_errors=True) - - output_path = os.path.join(assets_dir, tgz_path) - subprocess.call([ - 'tar', '-xzf', output_path, '-C', assets_dir - ]) - - subprocess.call([ - 'cp', sha1_path, icons_dir - ]) - - os.unlink(tgz_path) - -if __name__ == '__main__': - sys.exit(main()) diff --git a/sky/sdk/lib/sky_tool b/sky/sdk/lib/sky_tool index 1ab9b2ca7f1..3d82fcf5f7f 100755 --- a/sky/sdk/lib/sky_tool +++ b/sky/sdk/lib/sky_tool @@ -18,6 +18,8 @@ import time # TODO(eseidel): This should be BIN_DIR. LIB_DIR = os.path.realpath(os.path.dirname(os.path.abspath(__file__))) SKY_PACKAGE_ROOT = os.path.realpath(os.path.dirname(LIB_DIR)) +SKY_ENGINE_PACKAGE_ROOT = os.path.realpath(os.path.join(SKY_PACKAGE_ROOT, + os.pardir, 'sky_engine')) SKY_SERVER_PORT = 9888 OBSERVATORY_PORT = 8181 @@ -164,7 +166,7 @@ class StartSky(object): args.install = True if args.install: - apk_path = os.path.join(SKY_PACKAGE_ROOT, 'apks', APK_NAME) + apk_path = os.path.join(SKY_ENGINE_PACKAGE_ROOT, 'apks', APK_NAME) if not os.path.exists(apk_path): print "'%s' does not exist?" % apk_path return 2 diff --git a/sky/sdk/lib/widgets/dismissable.dart b/sky/sdk/lib/widgets/dismissable.dart index f25920707c9..aa7852b45a6 100644 --- a/sky/sdk/lib/widgets/dismissable.dart +++ b/sky/sdk/lib/widgets/dismissable.dart @@ -53,7 +53,6 @@ class Dismissable extends AnimatedComponent { ..duration = _kCardDismissFadeout ..variable = new AnimatedList([_position, _opacity]) ..addListener(_handleFadeProgressChanged); - watch(_fadePerformance); } void _handleFadeProgressChanged() { @@ -85,8 +84,6 @@ class Dismissable extends AnimatedComponent { } void _maybeCallOnDismissed() { - _resizePerformance.stop(); - _resizePerformance.removeListener(_handleResizeProgressChanged); if (onDismissed != null) onDismissed(); } @@ -96,22 +93,19 @@ class Dismissable extends AnimatedComponent { assert(_fadePerformance != null); assert(_resizePerformance == null); + // TODO(hansmuller): _fadePerformance is completed; stop shouldn't be needed. _fadePerformance.stop(); - _fadePerformance.removeListener(_handleFadeProgressChanged); - - _maybeCallOnResized(); AnimatedValue dismissHeight = new AnimatedValue(_size.height, - end: 0.0, - curve: ease, - interval: new Interval(_kCardDismissResizeDelay, 1.0) + end: 0.0, + curve: ease, + interval: new Interval(_kCardDismissResizeDelay, 1.0) ); _resizePerformance = new AnimationPerformance() ..variable = dismissHeight ..duration = _kCardDismissResize ..addListener(_handleResizeProgressChanged) ..play(); - watch(_resizePerformance); } void _handleResizeProgressChanged() { diff --git a/sky/sdk/lib/widgets/icon.dart b/sky/sdk/lib/widgets/icon.dart index 7888d4f2d0f..9955c4cc9ba 100644 --- a/sky/sdk/lib/widgets/icon.dart +++ b/sky/sdk/lib/widgets/icon.dart @@ -41,7 +41,7 @@ class IconTheme extends Inherited { AssetBundle _initIconBundle() { if (rootBundle != null) return rootBundle; - const String _kAssetBase = '/packages/sky/assets/material-design-icons/'; + const String _kAssetBase = '/packages/material_design_icons/icons/'; return new NetworkAssetBundle(Uri.base.resolve(_kAssetBase)); } diff --git a/sky/sdk/pubspec.yaml b/sky/sdk/pubspec.yaml index 469f0638be0..db43cec57ac 100644 --- a/sky/sdk/pubspec.yaml +++ b/sky/sdk/pubspec.yaml @@ -1,15 +1,18 @@ +name: sky +version: 0.0.21 author: Chromium Authors +description: A framework for writing Sky applications +homepage: https://github.com/domokit/sky_engine/tree/master/sky/sdk dependencies: cassowary: ^0.1.7 + material_design_icons: ^0.0.1 mojo_services: ^0.0.15 mojo: ^0.0.17 mojom: ^0.0.17 newton: ^0.1.0 + sky_engine: ^0.0.1 + sky_services: ^0.0.1 sky_tools: ^0.0.2 vector_math: ^1.4.3 -description: Dart files to support executing inside Sky environment: sdk: '>=1.8.0 <2.0.0' -homepage: https://github.com/domokit/mojo/tree/master/sky -name: sky -version: 0.0.21 diff --git a/sky/shell/ios/sky_surface.mm b/sky/shell/ios/sky_surface.mm index b33a063deaf..92122b69c72 100644 --- a/sky/shell/ios/sky_surface.mm +++ b/sky/shell/ios/sky_surface.mm @@ -125,6 +125,13 @@ static sky::InputEventPtr BasicInputEventFromRecognizer( } - (NSString*)skyInitialLoadURL { + NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; + NSString *target = [standardDefaults stringForKey:@"target"]; + NSString *server = [standardDefaults stringForKey:@"server"]; + if (server && target) { + return [NSString stringWithFormat:@"http://%@/%@", server, target]; + } + return [NSBundle mainBundle].infoDictionary[@"org.domokit.sky.load_url"]; } diff --git a/sky/tests/examples/card_collection-expected.txt b/sky/tests/examples/card_collection-expected.txt index a313ac9bdf6..119c2a2ccc1 100644 --- a/sky/tests/examples/card_collection-expected.txt +++ b/sky/tests/examples/card_collection-expected.txt @@ -19,216 +19,398 @@ PAINT FOR FRAME #2 ---------------------------------------------- 2 | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | save 2 | | | | | | clipRect(Rect.fromLTRB(8.0, 68.0, 792.0, 588.0)) -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 68.0) +2 | | | | | | paintChild RenderStack at Point(8.0, 68.0) 2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 68.0) +2 | | | | | | | paintChild RenderPadding at Point(8.0, 68.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 68.0) +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 72.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 68.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 72.0, 788.0, 120.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 72.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 72.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffe57373), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 72.0, 788.0, 120.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 72.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 52.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 78.0) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 82.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 82.0) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 15.5) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 15.5) -2 | | | | | | | | | | | | | | | | translate(-359.0, -15.5) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 82.0) +2 | | | | | | | | | | | | | | translate(-278.0, -82.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 78.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 124.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 124.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 68.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 124.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 68.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 68.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 68.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffe57373), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 52.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 15.5) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 15.5) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -15.5) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 124.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 124.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 128.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 124.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 128.0, 788.0, 191.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 128.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 128.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffdd7174), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 128.0, 788.0, 191.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 128.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 67.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 141.5) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 145.5) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 145.5) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 23.0) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 23.0) -2 | | | | | | | | | | | | | | | | translate(-359.0, -23.0) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 145.5) +2 | | | | | | | | | | | | | | translate(-278.0, -145.5) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 141.5) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 195.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 195.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 124.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 195.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 124.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 124.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 124.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffdd7174), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 67.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 23.0) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 23.0) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -23.0) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 195.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 195.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 199.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 195.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 199.0, 788.0, 281.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 199.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 199.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffd56f76), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 199.0, 788.0, 281.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 199.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 86.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 222.0) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 226.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 226.0) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 32.5) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 32.5) -2 | | | | | | | | | | | | | | | | translate(-359.0, -32.5) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 226.0) +2 | | | | | | | | | | | | | | translate(-278.0, -226.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 222.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 285.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 285.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 195.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 285.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 195.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 195.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 195.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffd56f76), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 86.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 32.5) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 32.5) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -32.5) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 285.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 285.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 289.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 285.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 289.0, 788.0, 435.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 289.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 289.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffcd6e78), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 289.0, 788.0, 435.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 289.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 150.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 344.0) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 348.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 348.0) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 64.5) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 64.5) -2 | | | | | | | | | | | | | | | | translate(-359.0, -64.5) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 348.0) +2 | | | | | | | | | | | | | | translate(-278.0, -348.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 344.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 439.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 439.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 285.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 439.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 285.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 285.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 285.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffcd6e78), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 150.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 64.5) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 64.5) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -64.5) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 439.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 439.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 443.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 439.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 443.0, 788.0, 503.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 443.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 443.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffc56c79), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 443.0, 788.0, 503.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 443.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 64.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 455.0) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 459.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 459.0) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 21.5) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 21.5) -2 | | | | | | | | | | | | | | | | translate(-359.0, -21.5) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 459.0) +2 | | | | | | | | | | | | | | translate(-278.0, -459.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 455.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 507.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 507.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 439.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 507.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 439.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 439.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 439.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffc56c79), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 64.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 21.5) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 21.5) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -21.5) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 507.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 507.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 511.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 507.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 511.0, 788.0, 566.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 511.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 511.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffbd6a7b), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 511.0, 788.0, 566.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 511.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 59.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 520.5) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 524.5) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 524.5) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 19.0) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 19.0) -2 | | | | | | | | | | | | | | | | translate(-359.0, -19.0) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 524.5) +2 | | | | | | | | | | | | | | translate(-278.0, -524.5) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 520.5) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore -2 | | | | | | paintChild RenderSizeObserver at Point(8.0, 570.0) -2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | paintChild RenderOpacity at Point(8.0, 570.0) +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 507.0) 2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | paintChild RenderTransform at Point(8.0, 570.0) +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 507.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 507.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 507.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffbd6a7b), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 59.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 19.0) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 19.0) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -19.0) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore +2 | | | | | | paintChild RenderStack at Point(8.0, 570.0) +2 | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | paintChild RenderPadding at Point(8.0, 570.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderViewport at Point(12.0, 574.0) 2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | save -2 | | | | | | | | | translate(8.0, 570.0) -2 | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) -2 | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | clipRect(Rect.fromLTRB(12.0, 574.0, 788.0, 658.0)) +2 | | | | | | | | | paintChild RenderConstrainedBox at Point(12.0, 574.0) 2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | paintChild RenderDecoratedBox at Point(12.0, 574.0) 2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffb5697d), drawLooper:true)) -2 | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | drawRect(Rect.fromLTRB(12.0, 574.0, 788.0, 658.0), Paint(color:Color(0xff2196f3))) +2 | | | | | | | | | | | paintChild RenderFlex at Point(12.0, 574.0) 2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 88.0), Paint(color:Color(0xff000000))) -2 | | | | | | | | | | | | clipRRect() -2 | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(12.0, 598.0) 2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | paintChild RenderPositionedBox at Point(48.0, 602.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | paintChild RenderParagraph at Point(278.0, 602.0) 2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) -2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 33.5) -2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 -2 | | | | | | | | | | | | | | | | translate(359.0, 33.5) -2 | | | | | | | | | | | | | | | | translate(-359.0, -33.5) -2 | | | | | | | | | | | | restore +2 | | | | | | | | | | | | | | translate(278.0, 602.0) +2 | | | | | | | | | | | | | | translate(-278.0, -602.0) +2 | | | | | | | | | | | | paintChild RenderImage at Point(752.0, 598.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 2 | | | | | | | | | restore +2 | | | | | | | paintChild RenderSizeObserver at Point(8.0, 570.0) +2 | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | paintChild RenderOpacity at Point(8.0, 570.0) +2 | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | paintChild RenderTransform at Point(8.0, 570.0) +2 | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | save +2 | | | | | | | | | | translate(8.0, 570.0) +2 | | | | | | | | | | concat([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]) +2 | | | | | | | | | | paintChild RenderPadding at Point(0.0, 0.0) +2 | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | paintChild RenderDecoratedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | drawRRect(Instance of 'RRect', Paint(color:Color(0xffb5697d), drawLooper:true)) +2 | | | | | | | | | | | | paintChild RenderClipRRect at Point(4.0, 4.0) +2 | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | saveLayer(Rect.fromLTRB(4.0, 4.0, 780.0, 88.0), Paint(color:Color(0xff000000))) +2 | | | | | | | | | | | | | clipRRect() +2 | | | | | | | | | | | | | paintChild RenderConstrainedBox at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | paintChild RenderPadding at Point(4.0, 4.0) +2 | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | paintChild RenderPositionedBox at Point(12.0, 12.0) +2 | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | paintChild RenderParagraph at Point(359.0, 33.5) +2 | | | | | | | | | | | | | | | | | TestPaintingCanvas() constructor: 800.0 x 600.0 +2 | | | | | | | | | | | | | | | | | translate(359.0, 33.5) +2 | | | | | | | | | | | | | | | | | translate(-359.0, -33.5) +2 | | | | | | | | | | | | | restore +2 | | | | | | | | | | restore 2 | | | | | | restore 2 | | paintChild RenderDecoratedBox at Point(0.0, 0.0) 2 | | | TestPaintingCanvas() constructor: 800.0 x 600.0 diff --git a/sky/tools/download_material_design_icons b/sky/tools/download_material_design_icons new file mode 100755 index 00000000000..07692f0abcb --- /dev/null +++ b/sky/tools/download_material_design_icons @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# Copyright (c) 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 os +import shutil +import subprocess +import sys +import urllib2 + +SRC_ROOT = os.path.abspath(os.path.join(__file__, os.pardir, os.pardir, os.pardir)) +VERSION_FILE = '.version.sha1' + +def main(): + package_dir = os.path.join(SRC_ROOT, 'sky/packages/material_design_icons/lib') + icons_dir = os.path.join(package_dir, 'icons') + existing_sha1_path = os.path.join(icons_dir, VERSION_FILE) + + existing_sha1 = None + if os.path.isfile(existing_sha1_path): + with open(existing_sha1_path, 'r') as f: + existing_sha1 = f.read() + + desired_sha1_path = os.path.join(package_dir, VERSION_FILE) + + with open(desired_sha1_path, 'r') as f: + desired_sha1 = f.read() + + if existing_sha1 == desired_sha1: + return + + print "Downloading missing material design icons" + + tgz_path = os.path.join(package_dir, 'material-design-icons.tgz') + untar_path = os.path.join(package_dir, 'material-design-icons') + + url = 'https://storage.googleapis.com/mojo/material-design-icons/%s' % desired_sha1 + response = urllib2.urlopen(url) + + with open(tgz_path, 'wb') as f: + f.write(response.read()) + + shutil.rmtree(icons_dir, ignore_errors=True) + + subprocess.call([ 'tar', '-xzf', tgz_path, '-C', package_dir ]) + subprocess.call([ 'mv', untar_path, icons_dir ]) + subprocess.call([ 'cp', desired_sha1_path, icons_dir ]) + + os.unlink(tgz_path) + +if __name__ == '__main__': + sys.exit(main()) diff --git a/sky/tools/gn b/sky/tools/gn index d4ee5a425cb..501f64c58b6 100755 --- a/sky/tools/gn +++ b/sky/tools/gn @@ -52,7 +52,7 @@ def to_gn_args(args): gn_args['use_glib'] = False gn_args['use_system_harfbuzz'] = False - if args.target_os in ['android', 'ios']: + if args.target_os in ['android', 'ios'] and not args.simulator: gn_args['target_cpu'] = 'arm' else: gn_args['target_cpu'] = 'x64' diff --git a/sky/tools/gn_test.py b/sky/tools/gn_test.py index 455d05ffac1..7bbc37c0144 100644 --- a/sky/tools/gn_test.py +++ b/sky/tools/gn_test.py @@ -22,6 +22,15 @@ class GNTestCase(unittest.TestCase): self._expect_build_dir(['--android'], 'out/android_Debug') self._expect_build_dir(['--android', '--release'], 'out/android_Release') + def _gn_args(self, arg_list): + args = gn.parse_args(['gn'] + arg_list) + return gn.to_gn_args(args) + + def test_to_gn_args(self): + # This would not necesarily be true on a 32-bit machine? + self.assertEquals(self._gn_args(['--ios', '--simulator'])['target_cpu'], 'x64') + self.assertEquals(self._gn_args(['--ios'])['target_cpu'], 'arm') + if __name__ == '__main__': unittest.main() diff --git a/sky/tools/roll/roll.py.orig b/sky/tools/roll/roll.py.orig deleted file mode 100755 index 5389d638b71..00000000000 --- a/sky/tools/roll/roll.py.orig +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python -# 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 argparse -import json -import os -import subprocess -import sys -import urllib2 -from utils import commit -from utils import system -import patch - -# //base and its dependencies -_base_deps = [ - 'base', - 'testing', - 'third_party/ashmem', - 'third_party/libevent', - 'third_party/libxml', # via //base/test - 'third_party/modp_b64', - 'third_party/tcmalloc', -] - -# //build and its dependencies -_build_deps = [ - 'build', - 'third_party/android_testrunner', - 'third_party/binutils', - 'third_party/instrumented_libraries', - 'third_party/pymock', - 'tools/android', - 'tools/clang', - 'tools/generate_library_loader', - 'tools/gritsettings', - 'tools/valgrind', -] - -_chromium_libs = [ - 'crypto', - 'url', -] - -_third_party_deps = [ - 'third_party/android_platform', - 'third_party/apple_apsl', - 'third_party/brotli', - 'third_party/expat', - 'third_party/freetype-android', - 'third_party/harfbuzz-ng', - 'third_party/iccjpeg', - 'third_party/jinja2', - 'third_party/jsr-305', - 'third_party/junit', - 'third_party/khronos', - 'third_party/libjpeg', - 'third_party/libpng', - 'third_party/libXNVCtrl', - 'third_party/markupsafe', - 'third_party/mesa', - 'third_party/mockito', - 'third_party/ots', - 'third_party/ply', - 'third_party/qcms', - 'third_party/re2', - 'third_party/robolectric', - 'third_party/zlib', -] - -dirs_from_chromium = _base_deps + _build_deps + _chromium_libs + _third_party_deps - -dirs_from_mojo = [ - 'gpu', - 'mojo', - 'mojom', - 'services/android', - 'services/asset_bundle', - 'services/keyboard', - 'services/sensors', -] - -# The contents of these files before the roll will be preserved after the roll, -# even though they live in directories rolled in from Chromium. -files_not_to_roll = [ - 'build/config/crypto.gni', - 'build/config/ui.gni', - 'build/ls.py', - 'build/module_args/mojo.gni', - 'crypto/BUILD.gn', - 'gpu/BUILD.gn', - 'tools/android/download_android_tools.py', - 'tools/android/VERSION_LINUX_NDK', - 'tools/android/VERSION_LINUX_SDK', - 'tools/android/VERSION_MACOSX_NDK', - 'tools/android/VERSION_MACOSX_SDK', -] - - -def rev(source_dir, dest_dir, dirs_to_rev, name): - for d in dirs_to_rev: - print "removing directory %s" % d - try: - system(["git", "rm", "-r", d], cwd=dest_dir) - except subprocess.CalledProcessError: - print "Could not remove %s" % d - print "cloning directory %s" % d - files = system(["git", "ls-files", d], cwd=source_dir) - for f in files.splitlines(): - source_path = os.path.join(source_dir, f) - if not os.path.isfile(source_path): - continue - dest_path = os.path.join(dest_dir, f) - system(["mkdir", "-p", os.path.dirname(dest_path)], cwd=source_dir) - system(["cp", source_path, dest_path], cwd=source_dir) - system(["git", "add", d], cwd=dest_dir) - - for f in files_not_to_roll: - system(["git", "checkout", "HEAD", f], cwd=dest_dir) - - system(["git", "add", "."], cwd=dest_dir) - src_commit = system(["git", "rev-parse", "HEAD"], cwd=source_dir).strip() - commit("Update to %s %s" % (name, src_commit), cwd=dest_dir) - - -def main(): - parser = argparse.ArgumentParser(description="Update the mojo repo's " + - "snapshot of things imported from chromium.") - parser.add_argument("--mojo-dir", type=str) - parser.add_argument("--chromium-dir", type=str) - parser.add_argument("--dest-dir", type=str) - - args = parser.parse_args() - - if args.mojo_dir: - rev(args.mojo_dir, args.dest_dir, dirs_from_mojo, 'mojo') - - if args.chromium_dir: - rev(args.chromium_dir, args.dest_dir, dirs_from_chromium, 'chromium') - - try: - patch.patch_and_filter(args.dest_dir) - except subprocess.CalledProcessError: - print "ERROR: Roll failed due to a patch not applying" - print "Fix the patch to apply, commit the result, and re-run this script" - return 1 - - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/sky/tools/roll_versions.py b/sky/tools/roll_versions.py index 80861c4c967..e74259b66d1 100755 --- a/sky/tools/roll_versions.py +++ b/sky/tools/roll_versions.py @@ -10,6 +10,7 @@ import xml.etree.ElementTree as ET PUBSPECS = [ + 'sky/packages/sky_engine/pubspec.yaml', 'sky/sdk/pubspec.yaml', ] diff --git a/sky/tools/setup_dart_analyzer b/sky/tools/setup_dart_analyzer index 8062ea96528..0d733742600 100755 --- a/sky/tools/setup_dart_analyzer +++ b/sky/tools/setup_dart_analyzer @@ -15,13 +15,6 @@ SRC_ROOT = os.path.dirname(os.path.dirname(SKY_TOOLS_DIR)) SKY_SDK_DIR = os.path.join(SRC_ROOT, 'sky', 'sdk') SKY_PUBSPEC = os.path.join(SKY_SDK_DIR, 'pubspec.yaml') SKY_PUBSPEC_LOCK = os.path.join(SKY_SDK_DIR, 'pubspec.lock') -SDK_EXT = os.path.join(SKY_SDK_DIR, 'lib', '_sdkext') - -SDK_EXT_TEMPLATE = '''{ - "dart:sky": "%(build_dir)s/gen/dart-pkg/sky/sdk_ext/dart_sky.dart", - "dart:sky.internals": "%(build_dir)s/gen/dart-pkg/sky/sdk_ext/sky_internals.dart", - "dart:sky_builtin_natives": "%(build_dir)s/gen/dart-pkg/sky/sdk_ext/builtin_natives.dart" -}''' def version_for_pubspec(pubspec_path): with open(pubspec_path, 'r') as stream: @@ -31,7 +24,10 @@ def version_for_pubspec(pubspec_path): def entry_for_dependency(dart_pkg_dir, dependency): dependency_path = os.path.join(dart_pkg_dir, dependency) - version = version_for_pubspec(os.path.join(dependency_path, 'pubspec.yaml')) + pubspec_path = os.path.join(dependency_path, 'pubspec.yaml') + if not os.path.exists(pubspec_path): + return + version = version_for_pubspec(pubspec_path) return { 'description': { 'path': os.path.relpath(dependency_path, SKY_SDK_DIR), @@ -59,16 +55,15 @@ def main(): with open(SKY_PUBSPEC, 'r') as stream: spec = yaml.load(stream) for dependency in spec['dependencies'].keys(): - packages[dependency] = entry_for_dependency(dart_pkg_dir, dependency) + entry = entry_for_dependency(dart_pkg_dir, dependency) + if not entry: + continue + packages[dependency] = entry lock = { 'packages': packages } with open(SKY_PUBSPEC_LOCK, 'w') as stream: yaml.dump(lock, stream=stream, default_flow_style=False) - with open(SDK_EXT, 'w') as stream: - rebased_build_dir = os.path.relpath(args.build_dir, os.path.dirname(SDK_EXT)) - stream.write(SDK_EXT_TEMPLATE % { 'build_dir': rebased_build_dir }) - if __name__ == '__main__': sys.exit(main())