Commit f4870f26 authored by Kris Giesing's avatar Kris Giesing

Merge remote-tracking branch 'upstream/master'

parents cc201f32 6e91cfa4
......@@ -6,12 +6,9 @@ group("examples") {
testonly = true
deps = [
"//examples/demo_launcher",
"//examples/fitness",
"//examples/game",
"//examples/mine_digger",
"//examples/rendering",
"//examples/stocks",
"//examples/widgets",
]
}
......@@ -2,15 +2,22 @@ Flutter Examples
================
This directory contains several examples of using Flutter. Each of these is an
individual Dart application package. If you wish to run them with `sky_tool`
then you will want to run `pub get` inside their directory before running
`./packages/sky/sky_tool start`.
individual Dart application package.
1. *Hello, world.* The [hello world app](hello_world) is a basic app that shows
To run a sample with the `flutter` tool, run `pub get` inside its directory,
then run `flutter start`. (See the
[getting started guide](https://flutter.github.io/getting-started/) to install
the `flutter` tool.)
Available examples include:
- *Hello, world.* The [hello world app](hello_world) is a basic app that shows
the text "hello, world."
2. *Stocks.* The [stocks app](stocks) is an example of a typical mobile app
- *Stocks.* The [stocks app](stocks) is an example of a typical mobile app
built using Flutter. The app shows a list of all the stocks in the NASDAQ.
3. *Widgets.* The [widgets app](widgets) contains a number of Flutter widgets so
you can experiment with them in a simple container.
- *Widgets.* The [widget apps](widgets) demonstrate a number of Flutter widgets
so you can experiment with them in a simple container. There is no main.dart
in this directory because each file is a standalone sample. To run a
particular file, use `flutter start -t filename.dart`.
......@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/material.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
class Field extends StatelessComponent {
Field({
......@@ -95,7 +94,7 @@ final ThemeData theme = new ThemeData(
);
void main() {
runApp(new App(
runApp(new MaterialApp(
title: 'Address Book',
theme: theme,
routes: <String, RouteBuilder>{
......
name: address_book
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
# 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("//sky/build/sky_app.gni")
sky_app("demo_launcher") {
main_dart = "lib/main.dart"
manifest = "sky.yaml"
if (is_android) {
apk_name = "SkyDemo"
bundles = [
"//examples/fitness",
"//examples/game",
"//examples/mine_digger",
"//examples/rendering:interactive_flex",
"//examples/stocks",
"//examples/widgets:cards",
]
deps = [
"//examples/demo_launcher/apk:java",
"//examples/demo_launcher/apk:resources",
]
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.domokit.sky.demo" android:versionCode="24" android:versionName="0.0.24">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<application android:icon="@mipmap/ic_launcher" android:label="Sky" android:name="SkyDemoApplication">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize" android:documentLaunchMode="always" android:hardwareAccelerated="true" android:launchMode="standard" android:name="SkyDemoActivity" android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
# 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.
assert(is_android)
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
android_library("java") {
java_files = [
"org/domokit/sky/demo/SkyDemoActivity.java",
"org/domokit/sky/demo/SkyDemoApplication.java",
]
deps = [
"//base:base_java",
"//mojo/public/java:bindings",
"//mojo/public/java:system",
"//sky/shell:java",
]
}
android_resources("resources") {
resource_dirs = [ "res" ]
android_manifest = "AndroidManifest.xml"
}
Icon image comes from:
https://openclipart.org/detail/30073/tango%20weather%20few%20clouds
and is public domain.
Icon resources were generated using:
http://romannurik.github.io/AndroidAssetStudio/icons-launcher.html
which produces art under CC 3.0:
http://creativecommons.org/licenses/by/3.0/
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.domokit.sky.demo;
import android.content.Intent;
import org.domokit.sky.shell.SkyActivity;
/**
* Main activity for SkyDemo.
*/
public class SkyDemoActivity extends SkyActivity {
@Override
protected void onSkyReady() {
Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
String bundleName = intent.getStringExtra("bundleName");
if (bundleName != null && loadBundleByName(bundleName)) {
return;
}
loadUrl(intent.getDataString());
return;
}
super.onSkyReady();
}
}
// 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.
package org.domokit.sky.demo;
import android.content.Context;
import org.domokit.sky.shell.ResourceExtractor;
import org.domokit.sky.shell.SkyApplication;
/**
* SkyDemo implementation of {@link android.app.Application}
*/
public class SkyDemoApplication extends SkyApplication {
private static final String[] DEMO_RESOURCES = {
"cards.skyx",
"fitness.skyx",
"game.skyx",
"interactive_flex.skyx",
"mine_digger.skyx",
"stocks.skyx",
};
@Override
protected void onBeforeResourceExtraction(ResourceExtractor extractor) {
super.onBeforeResourceExtraction(extractor);
extractor.addResources(DEMO_RESOURCES);
}
}
First version published to production from our service account.
\ No newline at end of file
Fixed a common startup crasher on Android systems before 5.0
Fixed to not draw behind the status bar on before Android 5.0
First release from new http://github.com/domokit/sky_engine repository.
I suspect there may still be some crashes we will be fixing
in the coming days as we set up systems to catch these crashes
before they are shipped to users.
Huge speed improvements in Asteroids.
Fixed startup crash on many devices.
Lots of various other widget fixes.
- No longer crashes on Android M Developer Preview
- 3x scrolling speed improvement.
Small updates for various demos
Asteroids has sounds, Fitness has charting, etc.
This app is slowly being replaced by publishing individual apps.
Minor updates to various demos including game.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
return rootBundle;
const String _kAssetBase = '..';
return new NetworkAssetBundle(Uri.base.resolve(_kAssetBase));
}
final AssetBundle _bundle = _initBundle();
void launch(String relativeUrl, String bundle) {
// TODO(eseidel): This is a hack to keep non-skyx examples working for now:
Uri productionBase = Uri.parse(
'https://domokit.github.io/example/demo_launcher/lib/main.dart');
Uri base = rootBundle == null ? Uri.base : productionBase;
Uri url = base.resolve(relativeUrl);
ComponentName component = new ComponentName()
..packageName = 'org.domokit.sky.demo'
..className = 'org.domokit.sky.demo.SkyDemoActivity';
Intent intent = new Intent()
..action = 'android.intent.action.VIEW'
..component = component
..flags = MULTIPLE_TASK | NEW_DOCUMENT
..url = url.toString();
if (bundle != null) {
StringExtra extra = new StringExtra()
..name = 'bundleName'
..value = bundle;
intent.stringExtras = [extra];
}
activity.startActivity(intent);
}
class FlutterDemo {
FlutterDemo({
name,
this.href,
this.bundle,
this.description,
this.textTheme,
this.decoration
}) : name = name, key = new Key(name);
final String name;
final Key key;
final String href;
final String bundle;
final String description;
final TextTheme textTheme;
final BoxDecoration decoration;
}
List<FlutterDemo> demos = [
new FlutterDemo(
name: 'Stocks',
href: '../../stocks/lib/main.dart',
bundle: 'stocks.skyx',
description: 'Multi-screen app with scrolling list',
textTheme: Typography.black,
decoration: new BoxDecoration(
backgroundImage: new BackgroundImage(
image: _bundle.loadImage('assets/stocks_thumbnail.png'),
fit: ImageFit.cover
)
)
),
new FlutterDemo(
name: 'Asteroids',
href: '../../game/lib/main.dart',
bundle: 'game.skyx',
description: '2D game using sprite sheets',
textTheme: Typography.white,
decoration: new BoxDecoration(
backgroundImage: new BackgroundImage(
image: _bundle.loadImage('assets/game_thumbnail.png'),
fit: ImageFit.cover
)
)
),
new FlutterDemo(
name: 'Fitness',
href: '../../fitness/lib/main.dart',
bundle: 'fitness.skyx',
description: 'Track progress towards healthy goals',
textTheme: Typography.white,
decoration: new BoxDecoration(
backgroundColor: Colors.indigo[500]
)
),
new FlutterDemo(
name: 'Swipe Away',
href: '../../widgets/card_collection.dart',
bundle: 'cards.skyx',
description: 'Infinite list of swipeable cards',
textTheme: Typography.white,
decoration: new BoxDecoration(
backgroundColor: Colors.redAccent[200]
)
),
new FlutterDemo(
name: 'Interactive Text',
href: '../../rendering/interactive_flex.dart',
bundle: 'interactive_flex.skyx',
description: 'Swipe to reflow the app',
textTheme: Typography.white,
decoration: new BoxDecoration(
backgroundColor: const Color(0xFF0081C6)
)
),
// new SkyDemo(
// 'Touch Demo', '../../rendering/touch_demo.dart', 'Simple example showing handling of touch events at a low level'),
new FlutterDemo(
name: 'Minedigger Game',
href: '../../mine_digger/lib/main.dart',
bundle: 'mine_digger.skyx',
description: 'Clone of the classic Minesweeper game',
textTheme: Typography.white,
decoration: new BoxDecoration(
backgroundColor: Colors.black
)
),
// TODO(jackson): This doesn't seem to be working
// new SkyDemo('Licenses', 'LICENSES.sky'),
];
const double kCardHeight = 120.0;
const EdgeDims kListPadding = const EdgeDims.all(4.0);
class DemoCard extends StatelessComponent {
DemoCard({ Key key, this.demo }) : super(key: key);
final FlutterDemo demo;
Widget build(BuildContext context) {
return new Container(
height: kCardHeight,
child: new Card(
child: new Container(
decoration: demo.decoration,
child: new InkWell(
onTap: () => launch(demo.href, demo.bundle),
child: new Container(
margin: const EdgeDims.only(top: 24.0, left: 24.0),
child: new Column([
new Text(demo.name, style: demo.textTheme.title),
new Flexible(
child: new Text(demo.description, style: demo.textTheme.subhead)
)
],
alignItems: FlexAlignItems.start
)
)
)
)
)
);
}
}
class DemoList extends StatelessComponent {
Widget _buildDemoCard(BuildContext context, FlutterDemo demo) {
return new DemoCard(key: demo.key, demo: demo);
}
Widget build(BuildContext context) {
return new ScrollableList<FlutterDemo>(
items: demos,
itemExtent: kCardHeight,
itemBuilder: _buildDemoCard,
padding: kListPadding
);
}
}
final ThemeData _theme = new ThemeData(
brightness: ThemeBrightness.light,
primarySwatch: Colors.teal
);
class DemoHome extends StatelessComponent {
Widget build(BuildContext context) {
return new Scaffold(
toolBar: new ToolBar(center: new Text('Sky Demos')),
body: new Material(
type: MaterialType.canvas,
child: new DemoList()
)
);
}
}
void main() {
runApp(new App(
title: 'Flutter Demos',
theme: _theme,
routes: {
'/': (RouteArguments args) => new DemoHome()
}
));
}
name: demo_launcher
dependencies:
sky: any
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
path: ../../sky/packages/sky
assets:
- assets/game_thumbnail.png
- assets/sector_thumbnail.png
- assets/stocks_thumbnail.png
......@@ -15,7 +15,6 @@ class FitnessItemList extends StatelessComponent {
Widget build(BuildContext context) {
return new Material(
type: MaterialType.canvas,
child: new ScrollableList<FitnessItem>(
padding: const EdgeDims.all(4.0),
items: items,
......@@ -172,10 +171,9 @@ class FeedFragmentState extends State<FeedFragment> {
Widget buildBody() {
TextStyle style = Theme.of(context).text.title;
if (config.userData == null)
return new Material(type: MaterialType.canvas);
return new Material();
if (config.userData.items.length == 0)
return new Material(
type: MaterialType.canvas,
child: new Row(
[new Text("No data yet.\nAdd some!", style: style)],
justifyContent: FlexJustifyContent.center
......@@ -189,7 +187,6 @@ class FeedFragmentState extends State<FeedFragment> {
);
case FitnessMode.chart:
return new Material(
type: MaterialType.canvas,
child: new Container(
padding: const EdgeDims.all(20.0),
child: buildChart()
......
......@@ -5,9 +5,8 @@
library fitness;
import 'package:playfair/playfair.dart' as playfair;
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'user_data.dart';
import 'date_utils.dart';
......@@ -126,7 +125,7 @@ class FitnessAppState extends State<FitnessApp> {
}
Widget build(BuildContext) {
return new App(
return new MaterialApp(
theme: new ThemeData(
brightness: ThemeBrightness.light,
primarySwatch: Colors.indigo,
......
......@@ -86,7 +86,6 @@ class MealFragmentState extends State<MealFragment> {
Widget buildBody() {
Meal meal = new Meal(when: new DateTime.now());
return new Material(
type: MaterialType.canvas,
child: new ScrollableViewport(
child: new Container(
padding: const EdgeDims.all(20.0),
......
......@@ -173,7 +173,6 @@ class MeasurementFragmentState extends State<MeasurementFragment> {
Measurement measurement = new Measurement(when: _when);
// TODO(jackson): Revisit the layout of this pane to be more maintainable
return new Material(
type: MaterialType.canvas,
child: new Container(
padding: const EdgeDims.all(20.0),
child: new Column([
......
......@@ -93,7 +93,6 @@ class SettingsFragmentState extends State<SettingsFragment> {
Widget buildSettingsPane(BuildContext context) {
return new Material(
type: MaterialType.canvas,
child: new ScrollableViewport(
child: new Container(
padding: const EdgeDims.symmetric(vertical: 20.0),
......
......@@ -9,7 +9,7 @@ import 'dart:async';
import 'package:path/path.dart' as path;
import 'main.dart';
import 'package:sky/services.dart';
import 'package:flutter/services.dart';
String cachedDataFilePath = null;
......
name: fitness
dependencies:
sky: any
sky_tools: any
playfair: ^0.0.9
flutter: ">=0.0.3 <0.1.0"
playfair: ^0.0.10
path: ^1.3.6
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
......@@ -53,7 +53,7 @@ class TestAppState extends State<TestApp> {
];
Widget build(BuildContext context) {
return new App(
return new MaterialApp(
title: 'EffectLine Demo',
theme: _theme,
routes: {
......
......@@ -49,7 +49,7 @@ class ExplosionBig extends Explosion {
// Add ring
Sprite sprtRing = new Sprite(sheet["explosion_ring.png"]);
sprtRing.transferMode = sky.TransferMode.plus;
sprtRing.transferMode = ui.TransferMode.plus;
addChild(sprtRing);
Action scale = new ActionTween( (a) => sprtRing.scale = a, 0.2, 1.0, 0.75);
......@@ -63,7 +63,7 @@ class ExplosionBig extends Explosion {
Sprite sprtFlare = new Sprite(sheet["explosion_flare.png"]);
sprtFlare.pivot = new Point(0.3, 1.0);
sprtFlare.scaleX = 0.3;
sprtFlare.transferMode = sky.TransferMode.plus;
sprtFlare.transferMode = ui.TransferMode.plus;
sprtFlare.rotation = randomDouble() * 360.0;
addChild(sprtFlare);
......@@ -86,7 +86,7 @@ class ExplosionMini extends Explosion {
Sprite star = new Sprite(sheet["star_0.png"]);
star.scale = 0.5;
star.colorOverlay = new Color(0xff95f4fb);
star.transferMode = sky.TransferMode.plus;
star.transferMode = ui.TransferMode.plus;
addChild(star);
double rotationStart = randomDouble() * 90.0;
......
......@@ -2,10 +2,10 @@ library game;
import 'dart:async';
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/rendering.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
import 'package:vector_math/vector_math_64.dart';
part 'custom_actions.dart';
......
......@@ -26,7 +26,7 @@ class GameDemoNode extends NodeWithSize {
addChild(_starField);
// Add nebula
_nebula = new RepeatedImage(_images["assets/nebula.png"], sky.TransferMode.plus);
_nebula = new RepeatedImage(_images["assets/nebula.png"], ui.TransferMode.plus);
addChild(_nebula);
// Setup game screen, it will always be anchored to the bottom of the screen
......
......@@ -16,7 +16,7 @@ abstract class GameObject extends Node {
Paint _paintDebug = new Paint()
..color=new Color(0xffff0000)
..strokeWidth = 1.0
..setStyle(sky.PaintingStyle.stroke);
..setStyle(ui.PaintingStyle.stroke);
bool collidingWith(GameObject obj) {
return (GameMath.distanceBetweenPoints(position, obj.position)
......@@ -111,7 +111,7 @@ class Ship extends GameObject {
_sprtShield = new Sprite(f.sheet["shield.png"]);
_sprtShield.scale = 0.35;
_sprtShield.transferMode = sky.TransferMode.plus;
_sprtShield.transferMode = ui.TransferMode.plus;
addChild(_sprtShield);
radius = 20.0;
......@@ -188,7 +188,7 @@ class Laser extends GameObject {
Sprite sprt = new Sprite(f.sheet["explosion_particle.png"]);
sprt.scale = 0.5;
sprt.colorOverlay = laserColor;
sprt.transferMode = sky.TransferMode.plus;
sprt.transferMode = ui.TransferMode.plus;
addChild(sprt);
sprites.add(sprt);
}
......
......@@ -4,12 +4,11 @@
import 'dart:async';
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
import 'game_demo.dart';
......@@ -82,7 +81,7 @@ class GameDemoState extends State<GameDemo> {
int _lastScore = 0;
Widget build(BuildContext context) {
return new App(
return new MaterialApp(
title: 'Asteroids',
theme: _theme,
routes: {
......@@ -151,16 +150,18 @@ class TextureButton extends StatefulComponent {
TextureButtonState createState() => new TextureButtonState();
}
class TextureButtonState extends ButtonState<TextureButton> {
Widget buildContent(BuildContext context) {
return new Listener(
class TextureButtonState extends State<TextureButton> {
bool _highlight = false;
Widget build(BuildContext context) {
return new GestureDetector(
child: new Container(
width: config.width,
height: config.height,
child: new CustomPaint(
callback: paintCallback,
token: new _TextureButtonToken(
highlight,
_highlight,
config.texture,
config.textureDown,
config.width,
......@@ -168,9 +169,22 @@ class TextureButtonState extends ButtonState<TextureButton> {
)
)
),
onPointerUp: (_) {
onTapDown: () {
setState(() {
_highlight = true;
});
},
onTap: () {
setState(() {
_highlight = false;
});
if (config.onPressed != null)
config.onPressed();
},
onTapCancel: () {
setState(() {
_highlight = false;
});
}
);
}
......@@ -180,7 +194,7 @@ class TextureButtonState extends ButtonState<TextureButton> {
return;
canvas.save();
if (highlight && config.textureDown != null) {
if (_highlight && config.textureDown != null) {
// Draw down state
canvas.scale(size.width / config.textureDown.size.width, size.height / config.textureDown.size.height);
config.textureDown.drawTexture(canvas, Point.origin, new Paint());
......
......@@ -10,7 +10,7 @@ class PowerBar extends NodeWithSize {
Paint _paintOutline = new Paint()
..color = new Color(0xffffffff)
..strokeWidth = 1.0
..setStyle(sky.PaintingStyle.stroke);
..setStyle(ui.PaintingStyle.stroke);
void paint(PaintingCanvas canvas) {
applyTransformForPivot(canvas);
......
......@@ -4,7 +4,7 @@ class RepeatedImage extends Node {
Sprite _sprt0;
Sprite _sprt1;
RepeatedImage(sky.Image image, [sky.TransferMode mode = null]) {
RepeatedImage(ui.Image image, [ui.TransferMode mode = null]) {
_sprt0 = new Sprite.fromImage(image);
_sprt0.size = new Size(1024.0, 1024.0);
_sprt0.pivot = Point.origin;
......
part of game;
class StarField extends NodeWithSize {
sky.Image _image;
ui.Image _image;
SpriteSheet _spriteSheet;
int _numStars;
bool _autoScroll;
......@@ -15,9 +15,9 @@ class StarField extends NodeWithSize {
Size _paddedSize = Size.zero;
Paint _paint = new Paint()
..filterQuality = sky.FilterQuality.low
..filterQuality = ui.FilterQuality.low
..isAntiAlias = false
..transferMode = sky.TransferMode.plus;
..transferMode = ui.TransferMode.plus;
StarField(this._spriteSheet, this._numStars, [this._autoScroll = false]) : super(Size.zero) {
_image = _spriteSheet.image;
......@@ -48,9 +48,9 @@ class StarField extends NodeWithSize {
void paint(PaintingCanvas canvas) {
// Create a transform for each star
List<sky.RSTransform> transforms = [];
List<ui.RSTransform> transforms = [];
for (int i = 0; i < _numStars; i++) {
sky.RSTransform transform = new sky.RSTransform(
ui.RSTransform transform = new ui.RSTransform(
_starScales[i],
0.0,
_starPositions[i].x - _padding,
......@@ -60,7 +60,7 @@ class StarField extends NodeWithSize {
}
// Draw the stars
canvas.drawAtlas(_image, transforms, _rects, _colors, sky.TransferMode.modulate, null, _paint);
canvas.drawAtlas(_image, transforms, _rects, _colors, ui.TransferMode.modulate, null, _paint);
}
void move(double dx, double dy) {
......
name: asteroids
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
skysprites: any
flutter_sprites: any
box2d: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
skysprites:
flutter_sprites:
path: ../../skysprites
import 'dart:sky';
import 'dart:ui';
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
......@@ -32,7 +32,7 @@ main() async {
runApp(_app);
}
class TestBedApp extends App {
class TestBedApp extends MaterialApp {
Widget build() {
ThemeData theme = new ThemeData(
......
import 'dart:sky';
import 'dart:ui';
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
......@@ -32,7 +32,7 @@ main() async {
String json = await _bundle.loadString('assets/sprites.json');
_spriteSheet = new SpriteSheet(_images['assets/sprites.png'], json);
runApp(new App(
runApp(new MaterialApp(
title: 'Test drawAtlas',
theme: _theme,
routes: {
......
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:math' as math;
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
......@@ -33,11 +33,11 @@ main() async {
String json = await _bundle.loadString('assets/sprites.json');
_spriteSheet = new SpriteSheet(_images['assets/sprites.png'], json);
runApp(new App(
runApp(new MaterialApp(
title: 'Test Sprite Performance',
theme: _theme,
routes: {
'/': (NavigatorState navigator, RouteState route) {
'/': (RouteArguments args) {
return new SpriteWidget(new TestPerformance());
}
}
......@@ -202,7 +202,7 @@ class TestPerformanceAtlas extends PerformanceTest {
double rotation = 0.0;
List<Rect> rects = [];
Paint cachedPaint = new Paint()
..filterQuality = sky.FilterQuality.low
..filterQuality = ui.FilterQuality.low
..isAntiAlias = false;
TestPerformanceAtlas() {
......@@ -216,7 +216,7 @@ class TestPerformanceAtlas extends PerformanceTest {
void paint(PaintingCanvas canvas) {
// Setup transforms
List<sky.RSTransform> transforms = [];
List<ui.RSTransform> transforms = [];
for (int x = 0; x < grid; x++) {
for (int y = 0; y < grid; y++) {
......@@ -238,12 +238,12 @@ class TestPerformanceAtlas extends PerformanceTest {
rotation += 1.0;
}
sky.RSTransform createTransform(double x, double y, double ax, double ay, double rot, double scale) {
ui.RSTransform createTransform(double x, double y, double ax, double ay, double rot, double scale) {
double scos = math.cos(convertDegrees2Radians(rot)) * scale;
double ssin = math.sin(convertDegrees2Radians(rot)) * scale;
double tx = x + -scos * ax + ssin * ay;
double ty = y + -ssin * ax - scos * ay;
return new sky.RSTransform(scos, ssin, tx, ty);
return new ui.RSTransform(scos, ssin, tx, ty);
}
}
......@@ -255,7 +255,7 @@ class TestPerformanceAtlas2 extends PerformanceTest {
double rotation = 0.0;
List<Rect> rects = [];
Paint cachedPaint = new Paint()
..filterQuality = sky.FilterQuality.low
..filterQuality = ui.FilterQuality.low
..isAntiAlias = false;
TestPerformanceAtlas2() {
......@@ -269,7 +269,7 @@ class TestPerformanceAtlas2 extends PerformanceTest {
void paint(PaintingCanvas canvas) {
// Setup transforms
List<sky.RSTransform> transforms = [];
List<ui.RSTransform> transforms = [];
for (int x = 12; x < grid - 12; x++) {
for (int y = 0; y < grid; y++) {
......@@ -291,11 +291,11 @@ class TestPerformanceAtlas2 extends PerformanceTest {
rotation += 1.0;
}
sky.RSTransform createTransform(double x, double y, double ax, double ay, double rot, double scale) {
ui.RSTransform createTransform(double x, double y, double ax, double ay, double rot, double scale) {
double scos = math.cos(convertDegrees2Radians(rot)) * scale;
double ssin = math.sin(convertDegrees2Radians(rot)) * scale;
double tx = x + -scos * ax + ssin * ay;
double ty = y + -ssin * ax - scos * ay;
return new sky.RSTransform(scos, ssin, tx, ty);
return new ui.RSTransform(scos, ssin, tx, ty);
}
}
import 'dart:sky';
import 'dart:ui';
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_sprites/flutter_sprites.dart';
AssetBundle _initBundle() {
if (rootBundle != null)
......@@ -27,7 +27,7 @@ main() async {
String json = await _bundle.loadString('assets/sprites.json');
_spriteSheet = new SpriteSheet(_images['assets/sprites.png'], json);
runApp(new App(
runApp(new MaterialApp(
title: 'Test Physics',
theme: new ThemeData(
brightness: ThemeBrightness.light,
......@@ -45,24 +45,11 @@ main() async {
}
class TestBed extends NodeWithSize {
Sprite _ship;
Sprite _obstacle;
PhysicsNode _physicsNode;
TestBed() : super(new Size(1024.0, 1024.0)) {
PhysicsNode physicsNode = new PhysicsNode(new Offset(0.0, 100.0));
_ship = new Sprite(_spriteSheet["ship.png"]);
_ship.position = new Point(512.0, 512.0);
_ship.size = new Size(64.0, 64.0);
_ship.physicsBody = new PhysicsBody(
new PhysicsShapeGroup([
new PhysicsShapeCircle(Point.origin, 32.0),
new PhysicsShapePolygon([new Point(0.0, 0.0), new Point(50.0, 0.0), new Point(50.0, 50.0), new Point(0.0, 50.0)])
]),
friction: 0.5,
tag: "ship"
);
physicsNode.addChild(_ship);
_physicsNode = new PhysicsNode(new Offset(0.0, 100.0));
_obstacle = new Sprite(_spriteSheet["ship.png"]);
_obstacle.position = new Point(532.0, 800.0);
......@@ -73,23 +60,51 @@ class TestBed extends NodeWithSize {
friction: 0.5,
tag: "obstacle"
);
physicsNode.addChild(_obstacle);
physicsNode.addContactCallback(myCallback, "obstacle", "ship", PhysicsContactType.begin);
_physicsNode.addChild(_obstacle);
_physicsNode.addContactCallback(myCallback, "obstacle", "ship", PhysicsContactType.begin);
addChild(physicsNode);
addChild(_physicsNode);
userInteractionEnabled = true;
}
void myCallback(PhysicsContactType type, PhysicsContact contact) {
print("CONTACT type: $type");
contact.nodeB.removeFromParent();
}
bool handleEvent(SpriteBoxEvent event) {
if (event.type == "pointerdown") {
Point pos = convertPointToNodeSpace(event.boxPosition);
_ship.position = pos;
Sprite shipA;
shipA = new Sprite(_spriteSheet["ship.png"]);
shipA.opacity = 0.3;
shipA.position = new Point(pos.x - 40.0, pos.y);
shipA.size = new Size(64.0, 64.0);
shipA.physicsBody = new PhysicsBody(new PhysicsShapeCircle(Point.origin, 32.0),
friction: 0.5,
restitution: 0.5,
tag: "ship"
);
_physicsNode.addChild(shipA);
shipA.physicsBody.applyLinearImpulse(
new Offset(randomSignedDouble() * 5000.0, randomSignedDouble() * 5000.0),
shipA.position
);
Sprite shipB;
shipB = new Sprite(_spriteSheet["ship.png"]);
shipB.opacity = 0.3;
shipB.position = new Point(pos.x + 40.0, pos.y);
shipB.size = new Size(64.0, 64.0);
shipB.physicsBody = new PhysicsBody(new PhysicsShapePolygon([new Point(-25.0, -25.0), new Point(25.0, -25.0), new Point(25.0, 25.0), new Point(-25.0, 25.0)]),
friction: 0.5,
restitution: 0.5,
tag: "ship"
);
_physicsNode.addChild(shipB);
new PhysicsJointRevolute(shipA.physicsBody, shipB.physicsBody, pos);
}
return true;
}
......
......@@ -2,6 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/widgets.dart';
import 'package:flutter/widgets.dart';
void main() => runApp(new Center(child: new Text('Hello, world!')));
name: hello_world
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:math';
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/rendering.dart';
import 'package:sky/services.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
// Classic minesweeper-inspired game. The mouse controls are standard
// except for left + right combo which is not implemented. For touch,
......@@ -86,7 +85,7 @@ class MineDiggerState extends State<MineDigger> {
}
PointerEventListener _pointerDownHandlerFor(int posX, int posY) {
return (sky.PointerEvent event) {
return (PointerInputEvent event) {
if (event.buttons == 1) {
probe(posX, posY);
} else if (event.buttons == 2) {
......@@ -191,7 +190,7 @@ class MineDiggerState extends State<MineDigger> {
);
}
void handleToolbarPointerDown(sky.PointerEvent event) {
void handleToolbarPointerDown(PointerInputEvent event) {
setState(() {
resetGame();
});
......
name: mine_digger
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
......@@ -2,20 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
void drawText(sky.Canvas canvas, String lh) {
sky.Paint paint = new sky.Paint();
void drawText(ui.Canvas canvas, String lh) {
ui.Paint paint = new ui.Paint();
// offset down
canvas.translate(0.0, 100.0);
// set up the text
sky.Document document = new sky.Document();
sky.Text arabic = document.createText("مرحبا");
sky.Text english = document.createText(" Hello");
sky.Element block = document.createElement('div');
ui.Document document = new ui.Document();
ui.Text arabic = document.createText("مرحبا");
ui.Text english = document.createText(" Hello");
ui.Element block = document.createElement('div');
block.style['display'] = 'paragraph';
block.style['font-family'] = 'monospace';
block.style['font-size'] = '50px';
......@@ -23,21 +23,21 @@ void drawText(sky.Canvas canvas, String lh) {
block.style['color'] = '#0000A0';
block.appendChild(arabic);
block.appendChild(english);
sky.LayoutRoot layoutRoot = new sky.LayoutRoot();
ui.LayoutRoot layoutRoot = new ui.LayoutRoot();
layoutRoot.rootElement = block;
layoutRoot.maxWidth = sky.view.width - 20.0; // you need to set a width for this to paint
layoutRoot.maxWidth = ui.view.width - 20.0; // you need to set a width for this to paint
layoutRoot.layout();
// draw a line at the text's baseline
sky.Path path = new sky.Path();
ui.Path path = new ui.Path();
path.moveTo(0.0, 0.0);
path.lineTo(block.maxContentWidth, 0.0);
path.moveTo(0.0, block.alphabeticBaseline);
path.lineTo(block.maxContentWidth, block.alphabeticBaseline);
path.moveTo(0.0, block.height);
path.lineTo(block.maxContentWidth, block.height);
paint.color = const sky.Color(0xFFFF9000);
paint.setStyle(sky.PaintingStyle.stroke);
paint.color = const ui.Color(0xFFFF9000);
paint.setStyle(ui.PaintingStyle.stroke);
paint.strokeWidth = 3.0;
canvas.drawPath(path, paint);
......@@ -45,14 +45,14 @@ void drawText(sky.Canvas canvas, String lh) {
layoutRoot.paint(canvas);
}
sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Picture paint(ui.Rect paintBounds) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
sky.Paint paint = new sky.Paint();
paint.color = const sky.Color(0xFFFFFFFF);
paint.setStyle(sky.PaintingStyle.fill);
canvas.drawRect(new sky.Rect.fromLTRB(0.0, 0.0, sky.view.width, sky.view.height), paint);
ui.Paint paint = new ui.Paint();
paint.color = const ui.Color(0xFFFFFFFF);
paint.setStyle(ui.PaintingStyle.fill);
canvas.drawRect(new ui.Rect.fromLTRB(0.0, 0.0, ui.view.width, ui.view.height), paint);
canvas.translate(10.0, 0.0);
drawText(canvas, '1.0');
......@@ -61,29 +61,29 @@ sky.Picture paint(sky.Rect paintBounds) {
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
void beginFrame(double timeStamp) {
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
}
void main() {
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
......@@ -2,56 +2,56 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
sky.Color color;
ui.Color color;
sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
sky.Size size = paintBounds.size;
ui.Picture paint(ui.Rect paintBounds) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
ui.Size size = paintBounds.size;
double radius = size.shortestSide * 0.45;
sky.Paint paint = new sky.Paint()
ui.Paint paint = new ui.Paint()
..color = color;
canvas.drawCircle(size.center(sky.Point.origin), radius, paint);
canvas.drawCircle(size.center(ui.Point.origin), radius, paint);
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
void beginFrame(double timeStamp) {
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
}
bool handleEvent(sky.Event event) {
bool handleEvent(ui.Event event) {
if (event.type == 'pointerdown') {
color = new sky.Color.fromARGB(255, 0, 0, 255);
sky.view.scheduleFrame();
color = new ui.Color.fromARGB(255, 0, 0, 255);
ui.view.scheduleFrame();
return true;
}
if (event.type == 'pointerup') {
color = new sky.Color.fromARGB(255, 0, 255, 0);
sky.view.scheduleFrame();
color = new ui.Color.fromARGB(255, 0, 255, 0);
ui.view.scheduleFrame();
return true;
}
......@@ -65,8 +65,8 @@ bool handleEvent(sky.Event event) {
void main() {
print('Hello, world');
color = new sky.Color.fromARGB(255, 0, 255, 0);
sky.view.setFrameCallback(beginFrame);
sky.view.setEventCallback(handleEvent);
sky.view.scheduleFrame();
color = new ui.Color.fromARGB(255, 0, 255, 0);
ui.view.setFrameCallback(beginFrame);
ui.view.setEventCallback(handleEvent);
ui.view.scheduleFrame();
}
......@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
const kMaxIterations = 100;
......@@ -14,9 +14,9 @@ void report(String s) {
// print("$s\n");
}
sky.LayoutRoot layoutRoot = new sky.LayoutRoot();
sky.Document document = new sky.Document();
sky.Element root;
ui.LayoutRoot layoutRoot = new ui.LayoutRoot();
ui.Document document = new ui.Document();
ui.Element root;
math.Random random = new math.Random();
bool pickThis(double odds) {
......@@ -29,19 +29,19 @@ String generateCharacter(int min, int max) {
return result;
}
String colorToCSSString(sky.Color color) {
String colorToCSSString(ui.Color color) {
return 'rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha / 255.0})';
}
void mutate(sky.Canvas canvas) {
void mutate(ui.Canvas canvas) {
// mutate the DOM randomly
int iterationsLeft = kMaxIterations;
sky.Node node = root;
sky.Node other = null;
ui.Node node = root;
ui.Node other = null;
while (node != null && iterationsLeft > 0) {
iterationsLeft -= 1;
if (node is sky.Element && pickThis(0.4)) {
node = (node as sky.Element).firstChild;
if (node is ui.Element && pickThis(0.4)) {
node = (node as ui.Element).firstChild;
} else if (node.nextSibling != null && pickThis(0.5)) {
node = node.nextSibling;
} else if (other == null && node != root && pickThis(0.1)) {
......@@ -57,7 +57,7 @@ void mutate(sky.Canvas canvas) {
} else if (node != root && pickThis(0.001)) {
report("remove()");
node.remove();
} else if (node is sky.Element) {
} else if (node is ui.Element) {
if (pickThis(0.1)) {
report("appending a new text node (ASCII)");
node.appendChild(document.createText(generateCharacter(0x20, 0x7F)));
......@@ -80,7 +80,7 @@ void mutate(sky.Canvas canvas) {
break;
} else if (pickThis(0.1)) {
report("styling: color");
node.style['color'] = colorToCSSString(new sky.Color(random.nextInt(0xFFFFFFFF) | 0xC0808080));
node.style['color'] = colorToCSSString(new ui.Color(random.nextInt(0xFFFFFFFF) | 0xC0808080));
break;
} else if (pickThis(0.1)) {
report("styling: font-size");
......@@ -148,12 +148,12 @@ void mutate(sky.Canvas canvas) {
break;
} else if (pickThis(0.1)) {
report("styling: text-decoration-color");
node.style['text-decoration-color'] = colorToCSSString(new sky.Color(random.nextInt(0xFFFFFFFF)));
node.style['text-decoration-color'] = colorToCSSString(new ui.Color(random.nextInt(0xFFFFFFFF)));
break;
}
} else {
assert(node is sky.Text);
final sky.Text text = node;
assert(node is ui.Text);
final ui.Text text = node;
if (pickThis(0.1)) {
report("appending a new text node (ASCII)");
text.appendData(generateCharacter(0x20, 0x7F));
......@@ -182,8 +182,8 @@ void mutate(sky.Canvas canvas) {
node = root;
int count = 1;
while (node != null) {
if (node is sky.Element && node.firstChild != null) {
node = (node as sky.Element).firstChild;
if (node is ui.Element && node.firstChild != null) {
node = (node as ui.Element).firstChild;
count += 1;
} else {
while (node != null && node.nextSibling == null)
......@@ -202,40 +202,40 @@ void mutate(sky.Canvas canvas) {
// draw the result
report("recording...");
layoutRoot.maxWidth = sky.view.width;
layoutRoot.maxWidth = ui.view.width;
layoutRoot.layout();
layoutRoot.paint(canvas);
report("painting...");
}
sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Picture paint(ui.Rect paintBounds) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
mutate(canvas);
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
void beginFrame(double timeStamp) {
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
sky.view.scheduleFrame();
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
ui.view.scheduleFrame();
}
void main() {
......@@ -243,6 +243,6 @@ void main() {
root.style['display'] = 'paragraph';
root.style['color'] = '#FFFFFF';
layoutRoot.rootElement = root;
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
......@@ -2,34 +2,34 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:math' as math;
import 'dart:typed_data';
sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
sky.Size size = paintBounds.size;
ui.Picture paint(ui.Rect paintBounds) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
ui.Size size = paintBounds.size;
sky.Paint paint = new sky.Paint();
sky.Point mid = size.center(sky.Point.origin);
ui.Paint paint = new ui.Paint();
ui.Point mid = size.center(ui.Point.origin);
double radius = size.shortestSide / 2.0;
canvas.drawPaint(new sky.Paint()..color = const sky.Color(0xFFFFFFFF));
canvas.drawPaint(new ui.Paint()..color = const ui.Color(0xFFFFFFFF));
canvas.save();
canvas.translate(-mid.x/2.0, sky.view.height*2.0);
canvas.translate(-mid.x/2.0, ui.view.height*2.0);
canvas.clipRect(
new sky.Rect.fromLTRB(0.0, -sky.view.height, sky.view.width, radius));
new ui.Rect.fromLTRB(0.0, -ui.view.height, ui.view.width, radius));
canvas.translate(mid.x, mid.y);
paint.color = const sky.Color.fromARGB(128, 255, 0, 255);
paint.color = const ui.Color.fromARGB(128, 255, 0, 255);
canvas.rotate(math.PI/4.0);
sky.Gradient yellowBlue = new sky.Gradient.linear(
[new sky.Point(-radius, -radius), new sky.Point(0.0, 0.0)],
[const sky.Color(0xFFFFFF00), const sky.Color(0xFF0000FF)]);
canvas.drawRect(new sky.Rect.fromLTRB(-radius, -radius, radius, radius),
new sky.Paint()..setShader(yellowBlue));
ui.Gradient yellowBlue = new ui.Gradient.linear(
[new ui.Point(-radius, -radius), new ui.Point(0.0, 0.0)],
[const ui.Color(0xFFFFFF00), const ui.Color(0xFF0000FF)]);
canvas.drawRect(new ui.Rect.fromLTRB(-radius, -radius, radius, radius),
new ui.Paint()..setShader(yellowBlue));
// Scale x and y by 0.5.
var scaleMatrix = new Float64List.fromList([
......@@ -39,70 +39,70 @@ sky.Picture paint(sky.Rect paintBounds) {
0.0, 0.0, 0.0, 1.0,
]);
canvas.concat(scaleMatrix);
paint.color = const sky.Color.fromARGB(128, 0, 255, 0);
canvas.drawCircle(sky.Point.origin, radius, paint);
paint.color = const ui.Color.fromARGB(128, 0, 255, 0);
canvas.drawCircle(ui.Point.origin, radius, paint);
canvas.restore();
canvas.translate(0.0, 50.0);
var builder = new sky.LayerDrawLooperBuilder()
var builder = new ui.LayerDrawLooperBuilder()
..addLayerOnTop(
new sky.DrawLooperLayerInfo()
..setOffset(const sky.Offset(150.0, 0.0))
..setColorMode(sky.TransferMode.src)
..setPaintBits(sky.PaintBits.all),
new sky.Paint()
..color = const sky.Color.fromARGB(128, 255, 255, 0)
..colorFilter = new sky.ColorFilter.mode(
const sky.Color.fromARGB(128, 0, 0, 255), sky.TransferMode.srcIn)
..maskFilter = new sky.MaskFilter.blur(
sky.BlurStyle.normal, 3.0, highQuality: true))
new ui.DrawLooperLayerInfo()
..setOffset(const ui.Offset(150.0, 0.0))
..setColorMode(ui.TransferMode.src)
..setPaintBits(ui.PaintBits.all),
new ui.Paint()
..color = const ui.Color.fromARGB(128, 255, 255, 0)
..colorFilter = new ui.ColorFilter.mode(
const ui.Color.fromARGB(128, 0, 0, 255), ui.TransferMode.srcIn)
..maskFilter = new ui.MaskFilter.blur(
ui.BlurStyle.normal, 3.0, highQuality: true))
..addLayerOnTop(
new sky.DrawLooperLayerInfo()
..setOffset(const sky.Offset(75.0, 75.0))
..setColorMode(sky.TransferMode.src)
..setPaintBits(sky.PaintBits.shader),
new sky.Paint()
..shader = new sky.Gradient.radial(
new sky.Point(0.0, 0.0), radius/3.0,
[const sky.Color(0xFFFFFF00), const sky.Color(0xFFFF0000)],
null, sky.TileMode.mirror)
// Since we're don't set sky.PaintBits.maskFilter, this has no effect.
..maskFilter = new sky.MaskFilter.blur(
sky.BlurStyle.normal, 50.0, highQuality: true))
new ui.DrawLooperLayerInfo()
..setOffset(const ui.Offset(75.0, 75.0))
..setColorMode(ui.TransferMode.src)
..setPaintBits(ui.PaintBits.shader),
new ui.Paint()
..shader = new ui.Gradient.radial(
new ui.Point(0.0, 0.0), radius/3.0,
[const ui.Color(0xFFFFFF00), const ui.Color(0xFFFF0000)],
null, ui.TileMode.mirror)
// Since we're don't set ui.PaintBits.maskFilter, this has no effect.
..maskFilter = new ui.MaskFilter.blur(
ui.BlurStyle.normal, 50.0, highQuality: true))
..addLayerOnTop(
new sky.DrawLooperLayerInfo()..setOffset(const sky.Offset(225.0, 75.0)),
new ui.DrawLooperLayerInfo()..setOffset(const ui.Offset(225.0, 75.0)),
// Since this layer uses a DST color mode, this has no effect.
new sky.Paint()..color = const sky.Color.fromARGB(128, 255, 0, 0));
new ui.Paint()..color = const ui.Color.fromARGB(128, 255, 0, 0));
paint.drawLooper = builder.build();
canvas.drawCircle(sky.Point.origin, radius, paint);
canvas.drawCircle(ui.Point.origin, radius, paint);
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
Float32List deviceTransform = new Float32List(16)
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
void beginFrame(double timeStamp) {
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
}
void main() {
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
name: raw
name: sky_raw_examples
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
......@@ -2,63 +2,63 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Picture paint(ui.Rect paintBounds) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
double size = 100.0;
canvas.translate(size + 10.0, size + 10.0);
sky.Paint paint = new sky.Paint();
paint.color = const sky.Color.fromARGB(255, 0, 255, 0);
var builder = new sky.LayerDrawLooperBuilder()
ui.Paint paint = new ui.Paint();
paint.color = const ui.Color.fromARGB(255, 0, 255, 0);
var builder = new ui.LayerDrawLooperBuilder()
// Shadow layer.
..addLayerOnTop(
new sky.DrawLooperLayerInfo()
..setPaintBits(sky.PaintBits.all)
..setOffset(const sky.Offset(5.0, 5.0))
..setColorMode(sky.TransferMode.src),
new sky.Paint()
..color = const sky.Color.fromARGB(128, 55, 55, 55)
..maskFilter = new sky.MaskFilter.blur(sky.BlurStyle.normal, 5.0)
new ui.DrawLooperLayerInfo()
..setPaintBits(ui.PaintBits.all)
..setOffset(const ui.Offset(5.0, 5.0))
..setColorMode(ui.TransferMode.src),
new ui.Paint()
..color = const ui.Color.fromARGB(128, 55, 55, 55)
..maskFilter = new ui.MaskFilter.blur(ui.BlurStyle.normal, 5.0)
)
// Main layer.
..addLayerOnTop(new sky.DrawLooperLayerInfo(), new sky.Paint());
..addLayerOnTop(new ui.DrawLooperLayerInfo(), new ui.Paint());
paint.drawLooper = builder.build();
canvas.drawPaint(
new sky.Paint()..color = const sky.Color.fromARGB(255, 255, 255, 255));
canvas.drawRect(new sky.Rect.fromLTRB(-size, -size, size, size), paint);
new ui.Paint()..color = const ui.Color.fromARGB(255, 255, 255, 255));
canvas.drawRect(new ui.Rect.fromLTRB(-size, -size, size, size), paint);
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
void beginFrame(double timeStamp) {
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
}
void main() {
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
......@@ -3,20 +3,20 @@
// found in the LICENSE file.
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
double timeBase = null;
sky.LayoutRoot layoutRoot = new sky.LayoutRoot();
ui.LayoutRoot layoutRoot = new ui.LayoutRoot();
sky.Picture paint(sky.Rect paintBounds, double delta) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Picture paint(ui.Rect paintBounds, double delta) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
canvas.translate(sky.view.width / 2.0, sky.view.height / 2.0);
canvas.translate(ui.view.width / 2.0, ui.view.height / 2.0);
canvas.rotate(math.PI * delta / 1800);
canvas.drawRect(new sky.Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
new sky.Paint()..color = const sky.Color.fromARGB(255, 0, 255, 0));
canvas.drawRect(new ui.Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
new ui.Paint()..color = const ui.Color.fromARGB(255, 0, 255, 0));
double sin = math.sin(delta / 200);
layoutRoot.maxWidth = 150.0 + (50 * sin);
......@@ -28,17 +28,17 @@ sky.Picture paint(sky.Rect paintBounds, double delta) {
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
......@@ -47,15 +47,15 @@ void beginFrame(double timeStamp) {
if (timeBase == null)
timeBase = timeStamp;
double delta = timeStamp - timeBase;
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds, delta);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
sky.view.scheduleFrame();
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds, delta);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
ui.view.scheduleFrame();
}
void main() {
var document = new sky.Document();
var document = new ui.Document();
var arabic = document.createText("هذا هو قليلا طويلة من النص الذي يجب التفاف .");
var more = document.createText(" و أكثر قليلا لجعله أطول. ");
var block = document.createElement('p');
......@@ -68,6 +68,6 @@ void main() {
layoutRoot.rootElement = block;
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
......@@ -3,29 +3,29 @@
// found in the LICENSE file.
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
import 'package:sky/services.dart';
import 'package:flutter/services.dart';
double timeBase = null;
sky.Image image = null;
ui.Image image = null;
String url1 = "https://raw.githubusercontent.com/dart-lang/logos/master/logos_and_wordmarks/dart-logo.png";
String url2 = "http://i2.kym-cdn.com/photos/images/facebook/000/581/296/c09.jpg";
sky.Picture paint(sky.Rect paintBounds, double delta) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Picture paint(ui.Rect paintBounds, double delta) {
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
canvas.translate(paintBounds.width / 2.0, paintBounds.height / 2.0);
canvas.rotate(math.PI * delta / 1800);
canvas.scale(0.2, 0.2);
sky.Paint paint = new sky.Paint()..color = const sky.Color.fromARGB(255, 0, 255, 0);
ui.Paint paint = new ui.Paint()..color = const ui.Color.fromARGB(255, 0, 255, 0);
// Draw image
if (image != null)
canvas.drawImage(image, new sky.Point(-image.width / 2.0, -image.height / 2.0), paint);
canvas.drawImage(image, new ui.Point(-image.width / 2.0, -image.height / 2.0), paint);
// Draw cut out of image
canvas.rotate(math.PI * delta / 1800);
......@@ -33,25 +33,25 @@ sky.Picture paint(sky.Rect paintBounds, double delta) {
var w = image.width.toDouble();
var h = image.width.toDouble();
canvas.drawImageRect(image,
new sky.Rect.fromLTRB(w * 0.25, h * 0.25, w * 0.75, h * 0.75),
new sky.Rect.fromLTRB(-w / 4.0, -h / 4.0, w / 4.0, h / 4.0),
new ui.Rect.fromLTRB(w * 0.25, h * 0.25, w * 0.75, h * 0.75),
new ui.Rect.fromLTRB(-w / 4.0, -h / 4.0, w / 4.0, h / 4.0),
paint);
}
return recorder.endRecording();
}
sky.Scene composite(sky.Picture picture, sky.Rect paintBounds) {
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
ui.Scene composite(ui.Picture picture, ui.Rect paintBounds) {
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
return sceneBuilder.build();
}
......@@ -60,11 +60,11 @@ void beginFrame(double timeStamp) {
if (timeBase == null)
timeBase = timeStamp;
double delta = timeStamp - timeBase;
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.Picture picture = paint(paintBounds, delta);
sky.Scene scene = composite(picture, paintBounds);
sky.view.scene = scene;
sky.view.scheduleFrame();
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.Picture picture = paint(paintBounds, delta);
ui.Scene scene = composite(picture, paintBounds);
ui.view.scene = scene;
ui.view.scheduleFrame();
}
......@@ -72,13 +72,13 @@ void handleImageLoad(result) {
if (result != image) {
print("${result.width}x${result.width} image loaded!");
image = result;
sky.view.scheduleFrame();
ui.view.scheduleFrame();
} else {
print("Existing image was loaded again");
}
}
bool handleEvent(sky.Event event) {
bool handleEvent(ui.Event event) {
if (event.type == "pointerdown") {
return true;
}
......@@ -93,6 +93,6 @@ bool handleEvent(sky.Event event) {
void main() {
imageCache.load(url1).first.then(handleImageLoad);
sky.view.setEventCallback(handleEvent);
sky.view.setFrameCallback(beginFrame);
ui.view.setEventCallback(handleEvent);
ui.view.setFrameCallback(beginFrame);
}
......@@ -3,46 +3,46 @@
// found in the LICENSE file.
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:typed_data';
double timeBase = null;
void beginFrame(double timeStamp) {
sky.tracing.begin('beginFrame');
ui.tracing.begin('beginFrame');
if (timeBase == null)
timeBase = timeStamp;
double delta = timeStamp - timeBase;
// paint
sky.Rect paintBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width, sky.view.height);
sky.PictureRecorder recorder = new sky.PictureRecorder();
sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
ui.Rect paintBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width, ui.view.height);
ui.PictureRecorder recorder = new ui.PictureRecorder();
ui.Canvas canvas = new ui.Canvas(recorder, paintBounds);
canvas.translate(paintBounds.width / 2.0, paintBounds.height / 2.0);
canvas.rotate(math.PI * delta / 1800);
canvas.drawRect(new sky.Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
new sky.Paint()..color = const sky.Color.fromARGB(255, 0, 255, 0));
sky.Picture picture = recorder.endRecording();
canvas.drawRect(new ui.Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
new ui.Paint()..color = const ui.Color.fromARGB(255, 0, 255, 0));
ui.Picture picture = recorder.endRecording();
// composite
final double devicePixelRatio = sky.view.devicePixelRatio;
sky.Rect sceneBounds = new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio);
final double devicePixelRatio = ui.view.devicePixelRatio;
ui.Rect sceneBounds = new ui.Rect.fromLTWH(0.0, 0.0, ui.view.width * devicePixelRatio, ui.view.height * devicePixelRatio);
Float64List deviceTransform = new Float64List(16)
..[0] = devicePixelRatio
..[5] = devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
ui.SceneBuilder sceneBuilder = new ui.SceneBuilder(sceneBounds)
..pushTransform(deviceTransform)
..addPicture(sky.Offset.zero, picture, paintBounds)
..addPicture(ui.Offset.zero, picture, paintBounds)
..pop();
sky.view.scene = sceneBuilder.build();
ui.view.scene = sceneBuilder.build();
sky.tracing.end('beginFrame');
sky.view.scheduleFrame();
ui.tracing.end('beginFrame');
ui.view.scheduleFrame();
}
void main() {
sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
ui.view.setFrameCallback(beginFrame);
ui.view.scheduleFrame();
}
# 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("//sky/build/skyx.gni")
skyx("interactive_flex") {
main_dart = "interactive_flex.dart"
}
group("rendering") {
testonly = true
deps = [
":interactive_flex",
]
}
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......
......@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
RenderBox getBox(double lh) {
RenderParagraph paragraph = new RenderParagraph(
......@@ -50,7 +50,7 @@ RenderBox getBox(double lh) {
path.lineTo(w, h);
Paint paint = new Paint();
paint.color = const Color(0xFFFF9000);
paint.setStyle(sky.PaintingStyle.stroke);
paint.setStyle(ui.PaintingStyle.stroke);
paint.strokeWidth = 3.0;
canvas.drawPath(path, paint);
}
......
......@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
void main() {
var root = new RenderFlex(
......@@ -15,7 +15,7 @@ void main() {
additionalConstraints: new BoxConstraints.tightFor(height: 100.0),
child: new RenderDecoratedBox(
decoration: new BoxDecoration(
backgroundColor: new sky.Color(0xFFFFFF00)
backgroundColor: new ui.Color(0xFFFFFF00)
)
)
)
......@@ -27,12 +27,12 @@ void main() {
child: new RenderDecoratedBox(
decoration: new BoxDecoration(
border: new Border(
top: new BorderSide(color: new sky.Color(0xFFF00000), width: 5.0),
right: new BorderSide(color: new sky.Color(0xFFFF9000), width: 10.0),
bottom: new BorderSide(color: new sky.Color(0xFFFFF000), width: 15.0),
left: new BorderSide(color: new sky.Color(0xFF00FF00), width: 20.0)
top: new BorderSide(color: new ui.Color(0xFFF00000), width: 5.0),
right: new BorderSide(color: new ui.Color(0xFFFF9000), width: 10.0),
bottom: new BorderSide(color: new ui.Color(0xFFFFF000), width: 15.0),
left: new BorderSide(color: new ui.Color(0xFF00FF00), width: 20.0)
),
backgroundColor: new sky.Color(0xFFDDDDDD)
backgroundColor: new ui.Color(0xFFDDDDDD)
)
)
)
......@@ -43,7 +43,7 @@ void main() {
additionalConstraints: new BoxConstraints.tightFor(height: 100.0),
child: new RenderDecoratedBox(
decoration: new BoxDecoration(
backgroundColor: new sky.Color(0xFFFFFF00)
backgroundColor: new ui.Color(0xFFFFFF00)
)
)
)
......@@ -54,7 +54,7 @@ void main() {
additionalConstraints: new BoxConstraints.tightFor(height: 100.0),
child: new RenderDecoratedBox(
decoration: new BoxDecoration(
backgroundColor: new sky.Color(0xFFFFFF00)
backgroundColor: new ui.Color(0xFFFFFF00)
)
)
)
......@@ -65,7 +65,7 @@ void main() {
additionalConstraints: new BoxConstraints.tightFor(height: 100.0),
child: new RenderDecoratedBox(
decoration: new BoxDecoration(
backgroundColor: new sky.Color(0xFFFFFF00)
backgroundColor: new ui.Color(0xFFFFFF00)
)
)
)
......
......@@ -2,33 +2,33 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
RenderBox buildFlexExample() {
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
RenderDecoratedBox root = new RenderDecoratedBox(
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFF000000)),
decoration: new BoxDecoration(backgroundColor: const ui.Color(0xFF000000)),
child: flexRoot
);
void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) {
void addFlexChildSolidColor(RenderFlex parent, ui.Color backgroundColor, { int flex: 0 }) {
RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
parent.add(child);
child.parentData.flex = flex;
}
// Yellow bar at top
addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFFFF00), flex: 1);
addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFFFF00), flex: 1);
// Turquoise box
flexRoot.add(new RenderSolidColorBox(const sky.Color(0x7700FFFF), desiredSize: new sky.Size(100.0, 100.0)));
flexRoot.add(new RenderSolidColorBox(const ui.Color(0x7700FFFF), desiredSize: new ui.Size(100.0, 100.0)));
var renderDecoratedBlock = new RenderDecoratedBox(
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFFFFFFFF))
decoration: new BoxDecoration(backgroundColor: const ui.Color(0xFFFFFFFF))
);
flexRoot.add(new RenderPadding(padding: const EdgeDims.all(10.0), child: renderDecoratedBlock));
......@@ -36,11 +36,11 @@ RenderBox buildFlexExample() {
var row = new RenderFlex(direction: FlexDirection.horizontal);
// Purple and blue cells
addFlexChildSolidColor(row, const sky.Color(0x77FF00FF), flex: 1);
addFlexChildSolidColor(row, const sky.Color(0xFF0000FF), flex: 2);
addFlexChildSolidColor(row, const ui.Color(0x77FF00FF), flex: 1);
addFlexChildSolidColor(row, const ui.Color(0xFF0000FF), flex: 2);
var decoratedRow = new RenderDecoratedBox(
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFF333333)),
decoration: new BoxDecoration(backgroundColor: const ui.Color(0xFF333333)),
child: row
);
......
......@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'dart:math' as math;
import 'package:sky/services.dart';
import 'package:sky/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......@@ -19,7 +19,7 @@ class Touch {
class RenderImageGrow extends RenderImage {
final Size _startingSize;
RenderImageGrow(sky.Image image, Size size)
RenderImageGrow(ui.Image image, Size size)
: _startingSize = size, super(image: image, width: size.width, height: size.height);
double _growth = 0.0;
......@@ -35,7 +35,7 @@ RenderImageGrow image;
Map<int, Touch> touches = new Map();
void handleEvent(event) {
if (event is sky.PointerEvent) {
if (event is ui.PointerEvent) {
if (event.type == 'pointermove')
image.growth = math.max(0.0, image.growth + event.x - touches[event.pointer].x);
touches[event.pointer] = new Touch(event.x, event.y);
......@@ -59,7 +59,7 @@ void main() {
// Resizeable image
image = new RenderImageGrow(null, new Size(100.0, null));
imageCache.load("https://www.dartlang.org/logos/dart-logo.png").first.then((sky.Image dartLogo) {
imageCache.load("https://www.dartlang.org/logos/dart-logo.png").first.then((ui.Image dartLogo) {
image.image = dartLogo;
});
......@@ -99,5 +99,5 @@ Pancetta meatball tongue tenderloin rump tail jowl boudin.""";
updateTaskDescription('Interactive Flex', topColor);
new FlutterBinding(root: root);
sky.view.setEventCallback(handleEvent);
ui.view.setEventCallback(handleEvent);
}
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......
This diff is collapsed.
name: rendering
name: flutter_rendering_examples
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
......@@ -4,8 +4,8 @@
import 'dart:math' as math;
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......
This diff is collapsed.
......@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky';
import 'dart:ui';
import 'package:sky/rendering.dart';
import 'package:sky/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/material.dart';
void main() {
var coloredBox = new RenderDecoratedBox(
......
......@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky';
import 'dart:ui';
import 'package:cassowary/cassowary.dart' as al;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
void main() {
RenderDecoratedBox c1 = new RenderDecoratedBox(
......
......@@ -2,9 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/gestures.dart';
class RenderSolidColorBox extends RenderDecoratedBox {
final Size desiredSize;
......@@ -42,7 +41,7 @@ class RenderSolidColorBox extends RenderDecoratedBox {
size = constraints.constrain(desiredSize);
}
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
void handleEvent(InputEvent event, BoxHitTestEntry entry) {
if (event.type == 'pointerdown')
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
else if (event.type == 'pointerup')
......
......@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/animation.dart';
import 'package:sky/rendering.dart';
import 'package:flutter/animation.dart';
import 'package:flutter/rendering.dart';
import 'solid_color_box.dart';
......@@ -15,15 +15,15 @@ RenderTransform transformBox;
void main() {
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) {
void addFlexChildSolidColor(RenderFlex parent, ui.Color backgroundColor, { int flex: 0 }) {
RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
parent.add(child);
child.parentData.flex = flex;
}
addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFF00FF), flex: 1);
addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFFFF00), flex: 2);
addFlexChildSolidColor(flexRoot, const sky.Color(0xFF00FFFF), flex: 1);
addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFF00FF), flex: 1);
addFlexChildSolidColor(flexRoot, const ui.Color(0xFFFFFF00), flex: 2);
addFlexChildSolidColor(flexRoot, const ui.Color(0xFF00FFFF), flex: 1);
transformBox = new RenderTransform(child: flexRoot, transform: new Matrix4.identity());
......
......@@ -2,10 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'package:sky/material.dart';
import 'package:sky/rendering.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/gestures.dart';
// Material design colors. :p
List<Color> kColors = [
......@@ -24,7 +23,7 @@ class Dot {
Dot({ Color color }) : _paint = new Paint()..color = color;
void update(sky.PointerEvent event) {
void update(PointerInputEvent event) {
position = new Point(event.x, event.y);
radius = 5 + (95 * event.pressure);
}
......@@ -39,8 +38,8 @@ class RenderTouchDemo extends RenderBox {
RenderTouchDemo();
void handleEvent(sky.Event event, BoxHitTestEntry entry) {
if (event is sky.PointerEvent) {
void handleEvent(InputEvent event, BoxHitTestEntry entry) {
if (event is PointerInputEvent) {
switch (event.type) {
case 'pointerdown':
Color color = kColors[event.pointer.remainder(kColors.length)];
......
......@@ -2,16 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/rendering.dart';
import 'package:flutter/rendering.dart';
void main() {
RenderDecoratedBox green = new RenderDecoratedBox(
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFF00FF00))
decoration: new BoxDecoration(backgroundColor: const ui.Color(0xFF00FF00))
);
RenderConstrainedBox box = new RenderConstrainedBox(
additionalConstraints: new BoxConstraints.tight(const sky.Size(200.0, 200.0)),
additionalConstraints: new BoxConstraints.tight(const ui.Size(200.0, 200.0)),
child: green
);
......
......@@ -6,12 +6,11 @@ library stocks;
import 'dart:async';
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/gestures.dart';
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'stock_data.dart';
......@@ -88,7 +87,7 @@ class StocksAppState extends State<StocksApp> {
}
Widget build(BuildContext context) {
return new App(
return new MaterialApp(
title: 'Stocks',
theme: theme,
routes: <String, RouteBuilder>{
......
......@@ -25,7 +25,7 @@ class StockArrow extends StatelessComponent {
// TODO(jackson): This should change colors with the theme
Color color = _colorForPercentChange(percentChange);
const double kSize = 40.0;
var arrow = new CustomPaint(callback: (sky.Canvas canvas, Size size) {
var arrow = new CustomPaint(callback: (ui.Canvas canvas, Size size) {
Paint paint = new Paint()..color = color;
paint.strokeWidth = 1.0;
const double padding = 2.0;
......@@ -49,11 +49,11 @@ class StockArrow extends StatelessComponent {
path.lineTo(centerX + w, arrowY + h);
path.lineTo(centerX - w, arrowY + h);
path.close();
paint.setStyle(sky.PaintingStyle.fill);
paint.setStyle(ui.PaintingStyle.fill);
canvas.drawPath(path, paint);
// Draw a circle that circumscribes the arrow.
paint.setStyle(sky.PaintingStyle.stroke);
paint.setStyle(ui.PaintingStyle.stroke);
canvas.drawCircle(new Point(centerX, centerY), r, paint);
});
......
......@@ -10,7 +10,7 @@
import 'dart:convert';
import 'dart:math' as math;
import 'package:sky/services.dart';
import 'package:flutter/services.dart';
final math.Random _rng = new math.Random();
......@@ -57,8 +57,8 @@ const _kChunkCount = 30;
String _urlToFetch(int chunk) {
if (rootBundle == null)
return '../data/stock_data_${chunk}.json';
return 'https://domokit.github.io/examples/stocks/data/stock_data_${chunk}.json';
return '../data/stock_data_$chunk.json';
return 'https://domokit.github.io/examples/stocks/data/stock_data_$chunk.json';
}
class StockDataFetcher {
......@@ -81,9 +81,7 @@ class StockDataFetcher {
return;
}
JsonDecoder decoder = new JsonDecoder();
callback(new StockData(decoder.convert(json)));
if (_nextChunk < _kChunkCount)
_fetchNextChunk();
});
......
......@@ -37,8 +37,10 @@ class StockHomeState extends State<StockHome> {
}
void _handleSearchEnd() {
assert(config.navigator.currentRoute is StateRoute);
assert((config.navigator.currentRoute as StateRoute).owner == this); // TODO(ianh): remove cast once analyzer is cleverer
assert(() {
final StateRoute currentRoute = config.navigator.currentRoute;
assert(currentRoute.owner == this);
});
config.navigator.pop();
setState(() {
_isSearching = false;
......@@ -74,7 +76,7 @@ class StockHomeState extends State<StockHome> {
void _showDrawer() {
showDrawer(
navigator: config.navigator,
child: new Block([
child: new Block(<Widget>[
new DrawerHeader(child: new Text('Stocks')),
new DrawerItem(
icon: 'action/assessment',
......@@ -83,6 +85,29 @@ class StockHomeState extends State<StockHome> {
),
new DrawerItem(
icon: 'action/account_balance',
onPressed: () {
showDialog(config.navigator, (NavigatorState navigator) {
return new Dialog(
title: new Text('Not Implemented'),
content: new Text('This feature has not yet been implemented.'),
actions: <Widget>[
new FlatButton(
child: new Text('USE IT'),
enabled: false,
onPressed: () {
navigator.pop(false);
}
),
new FlatButton(
child: new Text('OH WELL'),
onPressed: () {
navigator.pop(false);
}
),
]
);
});
},
child: new Text('Account Balance')
),
new DrawerItem(
......@@ -94,7 +119,7 @@ class StockHomeState extends State<StockHome> {
new DrawerItem(
icon: 'action/thumb_up',
onPressed: () => _handleStockModeChange(StockMode.optimistic),
child: new Row([
child: new Row(<Widget>[
new Flexible(child: new Text('Optimistic')),
new Radio(value: StockMode.optimistic, groupValue: config.stockMode, onChanged: _handleStockModeChange)
])
......@@ -102,7 +127,7 @@ class StockHomeState extends State<StockHome> {
new DrawerItem(
icon: 'action/thumb_down',
onPressed: () => _handleStockModeChange(StockMode.pessimistic),
child: new Row([
child: new Row(<Widget>[
new Flexible(child: new Text('Pessimistic')),
new Radio(value: StockMode.pessimistic, groupValue: config.stockMode, onChanged: _handleStockModeChange)
])
......@@ -132,7 +157,7 @@ class StockHomeState extends State<StockHome> {
onPressed: _showDrawer
),
center: new Text('Stocks'),
right: [
right: <Widget>[
new IconButton(
icon: "action/search",
onPressed: _handleSearchBegin
......@@ -148,14 +173,14 @@ class StockHomeState extends State<StockHome> {
int selectedTabIndex = 0;
Iterable<Stock> _getStockList(Iterable<String> symbols) {
return symbols.map((symbol) => config.stocks[symbol]);
return symbols.map((String symbol) => config.stocks[symbol]);
}
Iterable<Stock> _filterBySearchQuery(Iterable<Stock> stocks) {
if (_searchQuery == null)
return stocks;
RegExp regexp = new RegExp(_searchQuery, caseSensitive: false);
return stocks.where((stock) => stock.symbol.contains(regexp));
return stocks.where((Stock stock) => stock.symbol.contains(regexp));
}
Widget buildStockList(BuildContext context, Iterable<Stock> stocks) {
......@@ -188,7 +213,7 @@ class StockHomeState extends State<StockHome> {
)
],
selectedIndex: selectedTabIndex,
onChanged: (tabIndex) {
onChanged: (int tabIndex) {
setState(() { selectedTabIndex = tabIndex; } );
}
);
......@@ -201,7 +226,7 @@ class StockHomeState extends State<StockHome> {
return new ToolBar(
left: new IconButton(
icon: "navigation/arrow_back",
color: Theme.of(context).accentColor,
colorFilter: new ui.ColorFilter.mode(Theme.of(context).accentColor, ui.TransferMode.srcATop),
onPressed: _handleSearchEnd
),
center: new Input(
......@@ -222,7 +247,7 @@ class StockHomeState extends State<StockHome> {
navigator: config.navigator,
placeholderKey: _snackBarPlaceholderKey,
content: new Text("Stock purchased!"),
actions: [
actions: <SnackBarAction>[
new SnackBarAction(label: "UNDO", onPressed: _handleUndo)
]
);
......
......@@ -13,7 +13,6 @@ class StockList extends StatelessComponent {
Widget build(BuildContext context) {
return new Material(
type: MaterialType.canvas,
child: new ScrollableList<Stock>(
items: stocks,
itemExtent: StockRow.kHeight,
......
......@@ -12,14 +12,14 @@ Future showStockMenu(NavigatorState navigator, { bool autorefresh, ValueChanged
switch (await showMenu(
navigator: navigator,
position: new MenuPosition(
right: sky.view.paddingRight + _kMenuMargin,
top: sky.view.paddingTop + _kMenuMargin
right: ui.view.paddingRight + _kMenuMargin,
top: ui.view.paddingTop + _kMenuMargin
),
builder: (NavigatorState navigator) {
return <PopupMenuItem>[
new PopupMenuItem(
value: _MenuItems.autorefresh,
child: new Row([
child: new Row(<Widget>[
new Flexible(child: new Text('Autorefresh')),
new Checkbox(
value: autorefresh,
......@@ -59,7 +59,20 @@ Future showStockMenu(NavigatorState navigator, { bool autorefresh, ValueChanged
return new Dialog(
title: new Text('Not Implemented'),
content: new Text('This feature has not yet been implemented.'),
actions: [
actions: <Widget>[
new FlatButton(
child: new Row(<Widget>[
new Icon(
type: 'device/dvr',
size: 18
),
new Container(
width: 8.0
),
new Text('DUMP APP TO CONSOLE'),
]),
onPressed: () { debugDumpApp(); }
),
new FlatButton(
child: new Text('OH WELL'),
onPressed: () {
......
......@@ -10,9 +10,15 @@ class StockRowPartGlobalKey extends GlobalKey {
const StockRowPartGlobalKey(this.stock, this.part) : super.constructor();
final Stock stock;
final StockRowPartKind part;
String toString() => '[StockRowPartGlobalKey ${stock.symbol}:${part.toString().split(".")[1]})]';
bool operator==(other) => other is StockRowPartGlobalKey && identical(other.stock, stock) && identical(other.part, part);
bool operator ==(dynamic other) {
if (other is! StockRowPartGlobalKey)
return false;
final StockRowPartGlobalKey typedOther = other;
return stock == typedOther.stock &&
part == typedOther.part;
}
int get hashCode => 37 * (37 * (373) + identityHashCode(stock)) + identityHashCode(part);
String toString() => '[StockRowPartGlobalKey ${stock.symbol}:${part.toString().split(".")[1]})]';
}
typedef void StockRowActionCallback(Stock stock, GlobalKey row, GlobalKey arrowKey, GlobalKey symbolKey, GlobalKey priceKey);
......@@ -65,14 +71,14 @@ class StockRow extends StatelessComponent {
bottom: new BorderSide(color: Theme.of(context).dividerColor)
)
),
child: new Row([
child: new Row(<Widget>[
new Container(
key: arrowKey,
child: new StockArrow(percentChange: stock.percentChange),
margin: const EdgeDims.only(right: 5.0)
),
new Flexible(
child: new Row([
child: new Row(<Widget>[
new Flexible(
flex: 2,
child: new Text(
......
......@@ -42,7 +42,7 @@ class StockSettingsState extends State<StockSettings> {
onDismiss: () {
navigator.pop(false);
},
actions: [
actions: <Widget>[
new FlatButton(
child: new Text('NO THANKS'),
onPressed: () {
......@@ -84,26 +84,25 @@ class StockSettingsState extends State<StockSettings> {
// TODO(ianh): Once we have the gesture API hooked up, fix https://github.com/domokit/mojo/issues/281
// (whereby tapping the widgets below causes both the widget and the menu item to fire their callbacks)
return new Material(
type: MaterialType.canvas,
child: new ScrollableViewport(
child: new Container(
padding: const EdgeDims.symmetric(vertical: 20.0),
child: new BlockBody([
child: new BlockBody(<Widget>[
new DrawerItem(
icon: 'action/thumb_up',
onPressed: () => _confirmOptimismChange(),
child: new Row([
child: new Row(<Widget>[
new Flexible(child: new Text('Everything is awesome')),
new Checkbox(
value: config.optimism == StockMode.optimistic,
onChanged: (_) => _confirmOptimismChange()
onChanged: (bool value) => _confirmOptimismChange()
),
])
),
new DrawerItem(
icon: 'action/backup',
onPressed: () { _handleBackupChanged(!(config.backup == BackupMode.enabled)); },
child: new Row([
child: new Row(<Widget>[
new Flexible(child: new Text('Back up stock list to the cloud')),
new Switch(
value: config.backup == BackupMode.enabled,
......
......@@ -33,13 +33,12 @@ class StockSymbolViewerState extends State<StockSymbolViewer> {
center: new Text('${config.stock.name} (${config.stock.symbol})')
),
body: new Material(
type: MaterialType.canvas,
child: new Block([
child: new Block(<Widget>[
new Container(
padding: new EdgeDims.all(20.0),
child: new Column([
child: new Column(<Widget>[
new Text('Last Sale', style: headings),
new Text('${lastSale} (${changeInPrice})'),
new Text('$lastSale ($changeInPrice)'),
new Container(
height: 8.0
),
......
name: stocks
dependencies:
sky: any
flutter: ">=0.0.3 <0.1.0"
sky_tools: any
dependency_overrides:
material_design_icons:
path: ../../sky/packages/material_design_icons
sky:
flutter:
path: ../../sky/packages/sky
# 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("//sky/build/skyx.gni")
skyx("sector") {
main_dart = "sector.dart"
}
skyx("piano") {
main_dart = "piano.dart"
}
skyx("cards") {
main_dart = "card_collection.dart"
}
group("widgets") {
testonly = true
deps = [
":cards",
":piano",
":sector",
]
}
Small examples of the Flutter widget framework
==============================================
To run these, open a terminal in this directory and use the following
command:
```bash
pub global activate flutter
flutter start --checked -t foo.dart
```
...where `foo.dart` is the file you want to run.
......@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/material.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
class BigSwitch extends StatefulComponent {
BigSwitch({ this.scale });
......
......@@ -2,18 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:sky' as sky;
import 'dart:ui' as ui;
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
class CardModel {
CardModel(this.value, this.height, this.color);
CardModel(this.value, this.height) {
label = "Item $value";
}
int value;
double height;
Color color;
String get label => "Item $value";
int get color => ((value % 9) + 1) * 100;
String label;
Key get key => new ObjectKey(this);
}
......@@ -36,6 +37,7 @@ class CardCollectionState extends State<CardCollection> {
final TextStyle backgroundTextStyle =
Typography.white.title.copyWith(textAlign: TextAlign.center);
Map<int, Color> _primaryColor = Colors.deepPurple;
List<CardModel> _cardModels;
DismissDirection _dismissDirection = DismissDirection.horizontal;
bool _snapToCenter = false;
......@@ -50,19 +52,13 @@ class CardCollectionState extends State<CardCollection> {
48.0, 63.0, 82.0, 146.0, 60.0, 55.0, 84.0, 96.0, 50.0,
48.0, 63.0, 82.0, 146.0, 60.0, 55.0, 84.0, 96.0, 50.0
];
_cardModels = new List.generate(cardHeights.length, (i) {
Color color = Color.lerp(Colors.red[300], Colors.blue[900], i / cardHeights.length);
return new CardModel(i, cardHeights[i], color);
});
_cardModels = new List.generate(cardHeights.length, (i) => new CardModel(i, cardHeights[i]));
}
void _initFixedSizedCardModels() {
const int cardCount = 27;
const double cardHeight = 100.0;
_cardModels = new List.generate(cardCount, (i) {
Color color = Color.lerp(Colors.red[300], Colors.blue[900], i / cardCount);
return new CardModel(i, cardHeight, color);
});
_cardModels = new List.generate(cardCount, (i) => new CardModel(i, cardHeight));
}
void _initCardModels() {
......@@ -126,9 +122,14 @@ class CardCollectionState extends State<CardCollection> {
buildDrawerCheckbox("Fixed size cards", _fixedSizeCards, _toggleFixedSizeCards),
buildDrawerCheckbox("Let the sun shine", _sunshine, _toggleSunshine),
new DrawerDivider(),
buildDrawerRadioItem(DismissDirection.horizontal, 'action/code'),
buildDrawerRadioItem(DismissDirection.left, 'navigation/arrow_back'),
buildDrawerRadioItem(DismissDirection.right, 'navigation/arrow_forward'),
buildDrawerRadioItem("Deep Purple", Colors.deepPurple, _primaryColor, _selectColor),
buildDrawerRadioItem("Green", Colors.green, _primaryColor, _selectColor),
buildDrawerRadioItem("Amber", Colors.amber, _primaryColor, _selectColor),
buildDrawerRadioItem("Teal", Colors.teal, _primaryColor, _selectColor),
new DrawerDivider(),
buildDrawerRadioItem("Dismiss horizontally", DismissDirection.horizontal, _dismissDirection, _changeDismissDirection, icon: 'action/code'),
buildDrawerRadioItem("Dismiss left", DismissDirection.left, _dismissDirection, _changeDismissDirection, icon: 'navigation/arrow_back'),
buildDrawerRadioItem("Dismiss right", DismissDirection.right, _dismissDirection, _changeDismissDirection, icon: 'navigation/arrow_forward'),
])
)
);
......@@ -158,6 +159,12 @@ class CardCollectionState extends State<CardCollection> {
});
}
void _selectColor(selection) {
setState(() {
_primaryColor = selection;
});
}
void _changeDismissDirection(DismissDirection newDismissDirection) {
setState(() {
_dismissDirection = newDismissDirection;
......@@ -175,16 +182,16 @@ class CardCollectionState extends State<CardCollection> {
);
}
Widget buildDrawerRadioItem(DismissDirection direction, String icon) {
Widget buildDrawerRadioItem(String label, itemValue, currentValue, RadioValueChanged onChanged, { String icon }) {
return new DrawerItem(
icon: icon,
onPressed: () { _changeDismissDirection(direction); },
onPressed: () { onChanged(itemValue); },
child: new Row([
new Flexible(child: new Text(_dismissDirectionText(direction))),
new Flexible(child: new Text(label)),
new Radio(
value: direction,
onChanged: _changeDismissDirection,
groupValue: _dismissDirection
value: itemValue,
groupValue: currentValue,
onChanged: onChanged
)
])
);
......@@ -210,11 +217,22 @@ class CardCollectionState extends State<CardCollection> {
onResized: () { _invalidator([index]); },
onDismissed: () { dismissCard(cardModel); },
child: new Card(
color: cardModel.color,
color: Theme.of(context).primarySwatch[cardModel.color],
child: new Container(
height: cardModel.height,
padding: const EdgeDims.all(8.0),
child: new Center(child: new Text(cardModel.label, style: cardLabelStyle))
child: new Center(
child: new DefaultTextStyle(
style: cardLabelStyle,
child: new Input(
key: new GlobalObjectKey(cardModel),
initialValue: cardModel.label,
onChanged: (String value) {
cardModel.label = value;
}
)
)
)
)
)
);
......@@ -281,7 +299,7 @@ class CardCollectionState extends State<CardCollection> {
});
}
sky.Shader _createShader(Rect bounds) {
ui.Shader _createShader(Rect bounds) {
return new LinearGradient(
begin: Point.origin,
end: new Point(0.0, bounds.height),
......@@ -341,21 +359,21 @@ class CardCollectionState extends State<CardCollection> {
body = new Stack([body, indicator]);
}
return new Scaffold(
toolBar: buildToolBar(),
body: body
return new Theme(
data: new ThemeData(
primarySwatch: _primaryColor
),
child: new Scaffold(
toolBar: buildToolBar(),
body: body
)
);
}
}
void main() {
runApp(new App(
runApp(new MaterialApp(
title: 'Cards',
theme: new ThemeData(
brightness: ThemeBrightness.light,
primarySwatch: Colors.blue,
accentColor: Colors.redAccent[200]
),
routes: {
'/': (RouteArguments args) => new CardCollection(navigator: args.navigator),
}
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
class ContainerApp extends StatelessComponent {
Widget build(BuildContext context) {
......
......@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/widgets.dart';
import 'package:sky/material.dart';
import 'package:flutter/material.dart';
void main() => runApp(new DatePickerDemo());
......
......@@ -2,10 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/material.dart';
import 'package:sky/painting.dart';
import 'package:sky/rendering.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/rendering.dart';
class DragData {
DragData(this.text);
......@@ -130,7 +129,7 @@ class DragAndDropAppState extends State<DragAndDropApp> {
}
void main() {
runApp(new App(
runApp(new MaterialApp(
title: 'Drag and Drop Flutter Demo',
routes: {
'/': (RouteArguments args) => new DragAndDropApp(navigator: args.navigator)
......
......@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/material.dart';
import 'package:sky/widgets.dart';
import 'package:flutter/material.dart';
class CardModel {
CardModel(this.value, this.height, this.color);
......@@ -14,7 +13,7 @@ class CardModel {
Key get key => new ObjectKey(this);
}
class EnsureVisibleApp extends App {
class EnsureVisibleApp extends MaterialApp {
static const TextStyle cardLabelStyle =
const TextStyle(color: Colors.white, fontSize: 18.0, fontWeight: bold);
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:sky/widgets.dart';
import 'package:flutter/widgets.dart';
class Circle extends StatelessComponent {
Circle({ this.margin: EdgeDims.zero });
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
class IndexedStackDemo extends StatefulComponent {
IndexedStackDemo({ this.navigator });
final NavigatorState navigator;
IndexedStackDemoState createState() => new IndexedStackDemoState();
}
class IndexedStackDemoState extends State<IndexedStackDemo> {
int _itemCount = 7;
int _itemIndex = 0;
void _handleTap() {
setState(() {
_itemIndex = (_itemIndex + 1) % _itemCount;
});
}
List <PopupMenuItem> _buildMenu(NavigatorState navigator) {
TextStyle style = const TextStyle(fontSize: 18.0, fontWeight: bold);
String pad = '';
return new List.generate(_itemCount, (int i) {
pad += '-';
return new PopupMenuItem(value: i, child: new Text('$pad Hello World $i $pad', style: style));
});
}
Widget build(BuildContext context) {
List <PopupMenuItem> items = _buildMenu(config.navigator);
IndexedStack indexedStack = new IndexedStack(items, index: _itemIndex, horizontalAlignment: 0.5);
return new Scaffold(
toolBar: new ToolBar(center: new Text('IndexedStackDemo Demo')),
body: new GestureDetector(
onTap: _handleTap,
child: new Container(
decoration: new BoxDecoration(backgroundColor: Theme.of(context).primarySwatch[50]),
child: new Center(
child: new Container(
child: indexedStack,
padding: const EdgeDims.all(8.0),
decoration: new BoxDecoration(border: new Border.all(color: Theme.of(context).accentColor))
)
)
)
)
);
}
}
void main() {
runApp(new MaterialApp(
title: 'IndexedStackDemo',
theme: new ThemeData(
brightness: ThemeBrightness.light,
primarySwatch: Colors.blue,
accentColor: Colors.redAccent[200]
),
routes: {
'/': (RouteArguments args) => new IndexedStackDemo(navigator: args.navigator),
}
));
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment