Merge pull request #1028 from sethladd/sethladd-patch-1
Slightly clarify contribution workflow
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7fec2b7..55f9ae5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -73,6 +73,8 @@
Running the examples
--------------------
+* Before running the examples, you'll need to set up your path to include the Dart SDK directory, like so (starting in the src directory of your code tree):
+ - ``$ export PATH=$PATH:`pwd`/third_party/dark-sdk/dart-sdk/bin``
* You can find example code in subdirectories of the `examples` directory, for example `examples/stocks`.
* Once you have a local build, run `pub get` from the example folder of your choice to make sure that you have all of the Dart dependencies.
* Then, to run the current example locally, you can run:
diff --git a/examples/game/lib/game_demo.dart b/examples/game/lib/game_demo.dart
index 88ac116..c325613 100644
--- a/examples/game/lib/game_demo.dart
+++ b/examples/game/lib/game_demo.dart
@@ -4,9 +4,9 @@
import 'dart:math' as math;
import 'dart:sky' as sky;
-import 'package:sky/rendering/object.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/framework.dart';
import 'package:skysprites/skysprites.dart';
import 'package:vector_math/vector_math.dart';
diff --git a/examples/game/lib/game_demo_node.dart b/examples/game/lib/game_demo_node.dart
index aa405d3..8ad670c 100644
--- a/examples/game/lib/game_demo_node.dart
+++ b/examples/game/lib/game_demo_node.dart
@@ -4,7 +4,7 @@
double _gameSizeHeight = 320.0;
final double _chunkSpacing = 640.0;
-final int _chunksPerLevel = 6;
+final int _chunksPerLevel = 9;
final bool _drawDebug = false;
@@ -80,7 +80,6 @@
PlayerState _playerState;
// Game properties
- double _scrollSpeed = 2.0;
double _scroll = 0.0;
int _framesToFire = 0;
@@ -95,11 +94,11 @@
void update(double dt) {
// Scroll the level
- _scroll = _level.scroll(_scrollSpeed);
- _starField.move(0.0, _scrollSpeed);
+ _scroll = _level.scroll(_playerState.scrollSpeed);
+ _starField.move(0.0, _playerState.scrollSpeed);
- _background.move(_scrollSpeed * 0.1);
- _nebula.move(_scrollSpeed);
+ _background.move(_playerState.scrollSpeed * 0.1);
+ _nebula.move(_playerState.scrollSpeed);
// Add objects
addObjects();
@@ -198,33 +197,41 @@
lbl.position = new Point(0.0, yPos + _chunkSpacing / 2.0 - 150.0);
_level.addChild(lbl);
} else if (part == 1) {
- _objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
+ _objectFactory.addAsteroids(10 + level * 2, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
} else if (part == 2) {
_objectFactory.addEnemyScoutSwarm(4 + level * 2, yPos);
} else if (part == 3) {
- _objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
+ _objectFactory.addAsteroids(10 + level * 2, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
} else if (part == 4) {
_objectFactory.addEnemyDestroyerSwarm(2 + level, yPos);
} else if (part == 5) {
- _objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
+ _objectFactory.addAsteroids(10 + level * 2, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
+ } else if (part == 6) {
+ _objectFactory.addEnemyScoutSwarm(4 + level * 2, yPos);
+ } else if (part == 7) {
+ _objectFactory.addAsteroids(10 + level * 2, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
+ } else if (part == 8) {
+ _objectFactory.addBossFight(level, yPos);
}
}
void fire() {
- Laser shot0 = new Laser(_objectFactory, -90.0);
+ int laserLevel = _objectFactory.playerState.laserLevel;
+
+ Laser shot0 = new Laser(_objectFactory, laserLevel, -90.0);
shot0.position = _level.ship.position + new Offset(17.0, -10.0);
_level.addChild(shot0);
- Laser shot1 = new Laser(_objectFactory, -90.0);
+ Laser shot1 = new Laser(_objectFactory, laserLevel, -90.0);
shot1.position = _level.ship.position + new Offset(-17.0, -10.0);
_level.addChild(shot1);
if (_playerState.sideLaserActive) {
- Laser shot2 = new Laser(_objectFactory, 0.0);
+ Laser shot2 = new Laser(_objectFactory, laserLevel, -45.0);
shot2.position = _level.ship.position + new Offset(17.0, -10.0);
_level.addChild(shot2);
- Laser shot3 = new Laser(_objectFactory, 180.0);
+ Laser shot3 = new Laser(_objectFactory, laserLevel, -135.0);
shot3.position = _level.ship.position + new Offset(-17.0, -10.0);
_level.addChild(shot3);
}
diff --git a/examples/game/lib/game_object_factory.dart b/examples/game/lib/game_object_factory.dart
index db790a0..b4508c0 100644
--- a/examples/game/lib/game_object_factory.dart
+++ b/examples/game/lib/game_object_factory.dart
@@ -61,4 +61,13 @@
level.addChild(obj);
}
+
+ void addBossFight(int l, double yPos) {
+ EnemyBoss boss = new EnemyBoss(this);
+ boss.position = new Point(0.0, yPos + _chunkSpacing / 2.0);
+ boss.setupActions();
+
+ level.addChild(boss);
+ playerState.boss = boss;
+ }
}
diff --git a/examples/game/lib/game_objects.dart b/examples/game/lib/game_objects.dart
index 185e548..dbe8657 100644
--- a/examples/game/lib/game_objects.dart
+++ b/examples/game/lib/game_objects.dart
@@ -92,7 +92,7 @@
canBeDamaged = false;
Label lbl = new Label(
- "LEVEL $level",
+ "L E V E L $level",
new TextStyle(
textAlign: TextAlign.center,
color:new Color(0xffffffff),
@@ -156,27 +156,54 @@
}
class Laser extends GameObject {
- double impact = 1.0;
+ double impact = 0.0;
- Laser(GameObjectFactory f, double r) : super(f) {
- // Add sprite
- _sprt = new Sprite(f.sheet["explosion_particle.png"]);
- _sprt.scale = 0.5;
- _sprt.colorOverlay = new Color(0xff95f4fb);
- _sprt.transferMode = sky.TransferMode.plus;
- _sprt.rotation = r + 90.0;
- addChild(_sprt);
+ final List<Color> laserColors = [
+ new Color(0xff95f4fb),
+ new Color(0xff5bff35),
+ new Color(0xffff886c),
+ new Color(0xffffd012),
+ new Color(0xfffd7fff)
+ ];
+
+ Laser(GameObjectFactory f, int level, double r) : super(f) {
+ // Game object properties
radius = 10.0;
removeLimit = 640.0;
-
-
canDamageShip = false;
canBeDamaged = false;
+ impact = 1.0 + level * 0.5;
+ // Offset for movement
_offset = new Offset(math.cos(radians(r)) * 10.0, math.sin(radians(r)) * 10.0);
+
+ // Drawing properties
+ rotation = r + 90.0;
+ int numLasers = level % 3 + 1;
+ Color laserColor = laserColors[(level ~/ 3) % laserColors.length];
+
+ // Add sprites
+ List<Sprite> sprites = [];
+ for (int i = 0; i < numLasers; i++) {
+ Sprite sprt = new Sprite(f.sheet["explosion_particle.png"]);
+ sprt.scale = 0.5;
+ sprt.colorOverlay = laserColor;
+ sprt.transferMode = sky.TransferMode.plus;
+ addChild(sprt);
+ sprites.add(sprt);
+ }
+
+ // Position the individual sprites
+ if (numLasers == 2) {
+ sprites[0].position = new Point(-3.0, 0.0);
+ sprites[1].position = new Point(3.0, 0.0);
+ } else if (numLasers == 3) {
+ sprites[0].position = new Point(-4.0, 0.0);
+ sprites[1].position = new Point(4.0, 0.0);
+ sprites[2].position = new Point(0.0, -2.0);
+ }
}
- Sprite _sprt;
Offset _offset;
void move() {
@@ -350,8 +377,6 @@
void update(double dt) {
_countDown -= 1;
if (_countDown <= 0) {
- print("SHOOT!!");
-
// Shoot at player
EnemyLaser laser = new EnemyLaser(f, rotation, 5.0, new Color(0xffffe38e));
laser.position = position;
@@ -382,8 +407,6 @@
double rad = radians(rotation);
_movement = new Offset(math.cos(rad) * speed, math.sin(rad) * speed);
-
- print("LASER!!");
}
Sprite _sprt;
@@ -394,6 +417,39 @@
}
}
+class EnemyBoss extends Obstacle {
+ EnemyBoss(GameObjectFactory f) : super(f) {
+ radius = 48.0;
+ _sprt = new Sprite(f.sheet["enemy_destroyer_1.png"]);
+ _sprt.scale = 0.64;
+ addChild(_sprt);
+ maxDamage = 40.0;
+
+ constraints = [new ConstraintRotationToNode(f.level.ship, dampening: 0.05)];
+ }
+
+ Sprite _sprt;
+
+ int _countDown = randomInt(120) + 240;
+
+ void update(double dt) {
+ _countDown -= 1;
+ if (_countDown <= 0) {
+ // Shoot at player
+ EnemyLaser laser = new EnemyLaser(f, rotation, 5.0, new Color(0xffffe38e));
+ laser.position = position;
+ f.level.addChild(laser);
+
+ _countDown = 60 + randomInt(120);
+ }
+ }
+
+ void destroy() {
+ f.playerState.boss = null;
+ super.destroy();
+ }
+}
+
class Collectable extends GameObject {
Collectable(GameObjectFactory f) : super(f) {
canDamageShip = false;
@@ -435,6 +491,7 @@
shield,
speedLaser,
sideLaser,
+ speedBoost,
}
List<PowerUpType> _powerUpTypes = new List.from(PowerUpType.values);
diff --git a/examples/game/lib/main.dart b/examples/game/lib/main.dart
index 6570eb0..6ba4765 100644
--- a/examples/game/lib/main.dart
+++ b/examples/game/lib/main.dart
@@ -5,15 +5,15 @@
import 'dart:async';
import 'package:sky/mojo/asset_bundle.dart';
-import 'package:sky/theme/colors.dart' as colors;
-import 'package:sky/rendering/object.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/button_base.dart';
-import 'package:sky/widgets/navigator.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/title.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/button_base.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/navigator.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/title.dart';
+import 'package:sky/theme/colors.dart' as colors;
import 'package:skysprites/skysprites.dart';
import 'game_demo.dart';
diff --git a/examples/game/lib/player_state.dart b/examples/game/lib/player_state.dart
index 607f60d..70f4370 100644
--- a/examples/game/lib/player_state.dart
+++ b/examples/game/lib/player_state.dart
@@ -28,6 +28,16 @@
final SpriteSheet _sheetUI;
final SpriteSheet _sheetGame;
+ int laserLevel = 0;
+
+ static const double normalScrollSpeed = 2.0;
+
+ double scrollSpeed = normalScrollSpeed;
+
+ double _scrollSpeedTarget = normalScrollSpeed;
+
+ EnemyBoss boss;
+
Sprite _sprtBgScore;
ScoreDisplay _scoreDisplay;
Sprite _sprtBgCoins;
@@ -78,12 +88,15 @@
_sideLaserFrames += 300;
} else if (type == PowerUpType.speedLaser) {
_speedLaserFrames += 300;
+ } else if (type == PowerUpType.speedBoost) {
+ _speedBoostFrames += 150;
}
}
int _shieldFrames = 0;
- bool get shieldActive => _shieldFrames > 0;
- bool get shieldDeactivating => _shieldFrames > 0 && _shieldFrames < 60;
+ bool get shieldActive => _shieldFrames > 0 || _speedBoostFrames > 0;
+ bool get shieldDeactivating =>
+ math.max(_shieldFrames, _speedBoostFrames) > 0 && math.max(_shieldFrames, _speedBoostFrames) < 60;
int _sideLaserFrames = 0;
bool get sideLaserActive => _sideLaserFrames > 0;
@@ -91,6 +104,9 @@
int _speedLaserFrames = 0;
bool get speedLaserActive => _speedLaserFrames > 0;
+ int _speedBoostFrames = 0;
+ bool get speedBoostActive => _speedBoostFrames > 0;
+
void flashBgSprite(Sprite sprt) {
sprt.actions.stopAll();
ActionTween flash = new ActionTween(
@@ -105,6 +121,23 @@
if (_shieldFrames > 0) _shieldFrames--;
if (_sideLaserFrames > 0) _sideLaserFrames--;
if (_speedLaserFrames > 0) _speedLaserFrames--;
+ if (_speedBoostFrames > 0) _speedBoostFrames--;
+
+ // Update speed
+ if (boss != null) {
+ Point globalBossPos = boss.convertPointToBoxSpace(Point.origin);
+ if (globalBossPos.y > (_gameSizeHeight - 400.0))
+ _scrollSpeedTarget = 0.0;
+ else
+ _scrollSpeedTarget = normalScrollSpeed;
+ } else {
+ if (speedBoostActive)
+ _scrollSpeedTarget = normalScrollSpeed * 6.0;
+ else
+ _scrollSpeedTarget = normalScrollSpeed;
+ }
+
+ scrollSpeed = GameMath.filter(scrollSpeed, _scrollSpeedTarget, 0.1);
}
}
diff --git a/examples/game/test_drawatlas.dart b/examples/game/test_drawatlas.dart
index 56b70d0..c6c80619 100644
--- a/examples/game/test_drawatlas.dart
+++ b/examples/game/test_drawatlas.dart
@@ -1,9 +1,8 @@
import 'dart:sky';
import 'package:sky/mojo/asset_bundle.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/rendering.dart';
import 'package:sky/theme/colors.dart' as colors;
-import 'package:sky/widgets/basic.dart';
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
diff --git a/examples/game/test_performance.dart b/examples/game/test_performance.dart
index c65e08d..d7f79cd 100644
--- a/examples/game/test_performance.dart
+++ b/examples/game/test_performance.dart
@@ -2,7 +2,7 @@
import 'dart:math' as math;
import 'package:sky/mojo/asset_bundle.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/rendering.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/widgets.dart';
import 'package:skysprites/skysprites.dart';
diff --git a/examples/raw/baseline.dart b/examples/raw/baseline.dart
index 0e1e866..8e0eb10 100644
--- a/examples/raw/baseline.dart
+++ b/examples/raw/baseline.dart
@@ -3,6 +3,7 @@
// found in the LICENSE file.
import 'dart:sky' as sky;
+import 'dart:typed_data';
void drawText(sky.Canvas canvas, String lh) {
sky.Paint paint = new sky.Paint();
@@ -44,14 +45,10 @@
layoutRoot.paint(canvas);
}
-void main() {
- // prepare the rendering
+sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
- final double devicePixelRatio = sky.view.devicePixelRatio;
- sky.Canvas canvas = new sky.Canvas(recorder, new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
+ sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
- // background
sky.Paint paint = new sky.Paint();
paint.color = const sky.Color(0xFFFFFFFF);
paint.setStyle(sky.PaintingStyle.fill);
@@ -61,7 +58,30 @@
drawText(canvas, '1.0');
drawText(canvas, 'lh');
- // put it on the screen
- sky.view.picture = recorder.endRecording();
+ 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)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.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;
+}
+
+void main() {
+ sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
}
diff --git a/examples/raw/hello_world.dart b/examples/raw/hello_world.dart
index ee4669c..87810f8 100644
--- a/examples/raw/hello_world.dart
+++ b/examples/raw/hello_world.dart
@@ -2,37 +2,59 @@
// 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:sky' as sky;
+import 'dart:typed_data';
-Picture draw(int a, int r, int g, int b) {
- Size size = new Size(view.width, view.height);
+sky.Color color;
- PictureRecorder recorder = new PictureRecorder();
- final double devicePixelRatio = view.devicePixelRatio;
- Canvas canvas = new Canvas(recorder, Point.origin & (size * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
+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;
+
double radius = size.shortestSide * 0.45;
+ sky.Paint paint = new sky.Paint()
+ ..color = color;
+ canvas.drawCircle(size.center(sky.Point.origin), radius, paint);
- Paint paint = new Paint()..color = new Color.fromARGB(a, r, g, b);
- canvas.drawCircle(size.center(Point.origin), radius, paint);
return recorder.endRecording();
}
-bool handleEvent(Event event) {
- if (event.type == "pointerdown") {
- view.picture = draw(255, 0, 0, 255);
- view.scheduleFrame();
+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)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.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;
+}
+
+bool handleEvent(sky.Event event) {
+ if (event.type == 'pointerdown') {
+ color = new sky.Color.fromARGB(255, 0, 0, 255);
+ sky.view.scheduleFrame();
return true;
}
- if (event.type == "pointerup") {
- view.picture = draw(255, 0, 255, 0);
- view.scheduleFrame();
+ if (event.type == 'pointerup') {
+ color = new sky.Color.fromARGB(255, 0, 255, 0);
+ sky.view.scheduleFrame();
return true;
}
- if (event.type == "back") {
- print("Pressed back button.");
+ if (event.type == 'back') {
+ print('Pressed back button.');
return true;
}
@@ -40,9 +62,9 @@
}
void main() {
- print("Hello, world");
- view.picture = draw(255, 0, 255, 0);
- view.scheduleFrame();
-
- view.setEventCallback(handleEvent);
+ print('Hello, world');
+ color = new sky.Color.fromARGB(255, 0, 255, 0);
+ sky.view.setFrameCallback(beginFrame);
+ sky.view.setEventCallback(handleEvent);
+ sky.view.scheduleFrame();
}
diff --git a/examples/raw/mutating-dom.dart b/examples/raw/mutating-dom.dart
index 8ec6ec8..18fe4c6 100644
--- a/examples/raw/mutating-dom.dart
+++ b/examples/raw/mutating-dom.dart
@@ -2,8 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import "dart:math" as math;
+import 'dart:math' as math;
import 'dart:sky' as sky;
+import 'dart:typed_data';
const kMaxIterations = 100;
int peakCount = 1000; // this is the number that must be reached for us to start reporting the peak number of nodes in the tree each frame
@@ -32,7 +33,7 @@
return 'rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha / 255.0})';
}
-void doFrame(double timeStamp) {
+void mutate(sky.Canvas canvas) {
// mutate the DOM randomly
int iterationsLeft = kMaxIterations;
sky.Node node = root;
@@ -201,16 +202,37 @@
// draw the result
report("recording...");
- sky.PictureRecorder recorder = new sky.PictureRecorder();
- final double devicePixelRatio = sky.view.devicePixelRatio;
- sky.Canvas canvas = new sky.Canvas(recorder, new sky.Rect.fromLTWH(0.0, 0.0, sky.view.width * devicePixelRatio, sky.view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
layoutRoot.maxWidth = sky.view.width;
layoutRoot.layout();
layoutRoot.paint(canvas);
report("painting...");
- sky.view.picture = recorder.endRecording();
- sky.view.scheduleFrame();
+}
+
+sky.Picture paint(sky.Rect paintBounds) {
+ sky.PictureRecorder recorder = new sky.PictureRecorder();
+ sky.Canvas canvas = new sky.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);
+ Float32List deviceTransform = new Float32List(16)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.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;
}
void main() {
@@ -218,6 +240,6 @@
root.style['display'] = 'paragraph';
root.style['color'] = '#FFFFFF';
layoutRoot.rootElement = root;
- sky.view.setFrameCallback(doFrame);
+ sky.view.setFrameCallback(beginFrame);
sky.view.scheduleFrame();
}
diff --git a/examples/raw/painting.dart b/examples/raw/painting.dart
index 55963b1..7ffa87e 100644
--- a/examples/raw/painting.dart
+++ b/examples/raw/painting.dart
@@ -6,21 +6,17 @@
import 'dart:math' as math;
import 'dart:typed_data';
-void beginFrame(double timeStamp) {
- sky.Size size = new sky.Size(sky.view.width, sky.view.height);
+sky.Picture paint(sky.Rect paintBounds) {
sky.PictureRecorder recorder = new sky.PictureRecorder();
- final double devicePixelRatio = sky.view.devicePixelRatio;
- sky.Canvas canvas = new sky.Canvas(recorder, sky.Point.origin & (size * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
+ sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
+ sky.Size size = paintBounds.size;
sky.Paint paint = new sky.Paint();
sky.Point mid = size.center(sky.Point.origin);
double radius = size.shortestSide / 2.0;
-
canvas.drawPaint(new sky.Paint()..color = const sky.Color(0xFFFFFFFF));
canvas.save();
-
canvas.translate(-mid.x/2.0, sky.view.height*2.0);
canvas.clipRect(
new sky.Rect.fromLTRB(0.0, -sky.view.height, sky.view.width, radius));
@@ -39,7 +35,7 @@
var scaleMatrix = new Float32List.fromList([
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
- 0.0, 0.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0,
]);
canvas.concat(scaleMatrix);
@@ -81,7 +77,27 @@
paint.setDrawLooper(builder.build());
canvas.drawCircle(sky.Point.origin, radius, paint);
- sky.view.picture = recorder.endRecording();
+ 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)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.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;
}
void main() {
diff --git a/examples/raw/shadow.dart b/examples/raw/shadow.dart
index c301beb..9da0b15 100644
--- a/examples/raw/shadow.dart
+++ b/examples/raw/shadow.dart
@@ -2,41 +2,62 @@
// 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:sky' as sky;
+import 'dart:typed_data';
-void beginFrame(double timeStamp) {
+sky.Picture paint(sky.Rect paintBounds) {
+ sky.PictureRecorder recorder = new sky.PictureRecorder();
+ sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
+
double size = 100.0;
- PictureRecorder recorder = new PictureRecorder();
- final double devicePixelRatio = view.devicePixelRatio;
- Canvas canvas = new Canvas(recorder, new Rect.fromLTWH(0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
canvas.translate(size + 10.0, size + 10.0);
- Paint paint = new Paint();
- paint.color = const Color.fromARGB(255, 0, 255, 0);
- var builder = new LayerDrawLooperBuilder()
+ sky.Paint paint = new sky.Paint();
+ paint.color = const sky.Color.fromARGB(255, 0, 255, 0);
+ var builder = new sky.LayerDrawLooperBuilder()
// Shadow layer.
..addLayerOnTop(
- new DrawLooperLayerInfo()
- ..setPaintBits(PaintBits.all)
- ..setOffset(const Offset(5.0, 5.0))
- ..setColorMode(TransferMode.src),
- new Paint()
- ..color = const Color.fromARGB(128, 55, 55, 55)
+ 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)
..setMaskFilter(
- new MaskFilter.blur(BlurStyle.normal, 5.0, highQuality: true))
+ new sky.MaskFilter.blur(sky.BlurStyle.normal, 5.0))
)
// Main layer.
- ..addLayerOnTop(new DrawLooperLayerInfo(), new Paint());
+ ..addLayerOnTop(new sky.DrawLooperLayerInfo(), new sky.Paint());
paint.setDrawLooper(builder.build());
canvas.drawPaint(
- new Paint()..color = const Color.fromARGB(255, 255, 255, 255));
- canvas.drawRect(new Rect.fromLTRB(-size, -size, size, size), paint);
- view.picture = recorder.endRecording();
+ new sky.Paint()..color = const sky.Color.fromARGB(255, 255, 255, 255));
+ canvas.drawRect(new sky.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);
+ Float32List deviceTransform = new Float32List(16)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.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;
}
void main() {
- view.setFrameCallback(beginFrame);
- view.scheduleFrame();
+ sky.view.setFrameCallback(beginFrame);
+ sky.view.scheduleFrame();
}
diff --git a/examples/raw/spinning_arabic.dart b/examples/raw/spinning_arabic.dart
index 5fef68d..66562b2 100644
--- a/examples/raw/spinning_arabic.dart
+++ b/examples/raw/spinning_arabic.dart
@@ -2,24 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import "dart:math" as math;
-import 'dart:sky';
+import 'dart:math' as math;
+import 'dart:sky' as sky;
+import 'dart:typed_data';
double timeBase = null;
-LayoutRoot layoutRoot = new LayoutRoot();
+sky.LayoutRoot layoutRoot = new sky.LayoutRoot();
-void beginFrame(double timeStamp) {
- if (timeBase == null)
- timeBase = timeStamp;
- double delta = timeStamp - timeBase;
- PictureRecorder recorder = new PictureRecorder();
- final double devicePixelRatio = view.devicePixelRatio;
- Canvas canvas = new Canvas(recorder, new Rect.fromLTWH(0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
- canvas.translate(view.width / 2.0, view.height / 2.0);
+sky.Picture paint(sky.Rect paintBounds, double delta) {
+ sky.PictureRecorder recorder = new sky.PictureRecorder();
+ sky.Canvas canvas = new sky.Canvas(recorder, paintBounds);
+
+ canvas.translate(sky.view.width / 2.0, sky.view.height / 2.0);
canvas.rotate(math.PI * delta / 1800);
- canvas.drawRect(new Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
- new Paint()..color = const Color.fromARGB(255, 0, 255, 0));
+ 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));
double sin = math.sin(delta / 200);
layoutRoot.maxWidth = 150.0 + (50 * sin);
@@ -28,12 +25,34 @@
canvas.translate(layoutRoot.maxWidth / -2.0, (layoutRoot.maxWidth / 2.0) - 125);
layoutRoot.paint(canvas);
- view.picture = recorder.endRecording();
- view.scheduleFrame();
+ 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)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.Offset.zero, picture, paintBounds)
+ ..pop();
+ return sceneBuilder.build();
+}
+
+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;
}
void main() {
- var document = new Document();
+ var document = new sky.Document();
var arabic = document.createText("هذا هو قليلا طويلة من النص الذي يجب التفاف .");
var more = document.createText(" و أكثر قليلا لجعله أطول. ");
var block = document.createElement('p');
@@ -45,6 +64,6 @@
layoutRoot.rootElement = block;
- view.setFrameCallback(beginFrame);
- view.scheduleFrame();
+ sky.view.setFrameCallback(beginFrame);
+ sky.view.scheduleFrame();
}
diff --git a/examples/raw/spinning_image.dart b/examples/raw/spinning_image.dart
index d4a2239..0c3a6fa 100644
--- a/examples/raw/spinning_image.dart
+++ b/examples/raw/spinning_image.dart
@@ -3,32 +3,29 @@
// found in the LICENSE file.
import 'dart:math' as math;
-import 'dart:sky';
+import 'dart:sky' as sky;
+import 'dart:typed_data';
import 'package:sky/mojo/net/image_cache.dart' as image_cache;
double timeBase = null;
-Image image = null;
+sky.Image image = null;
String url1 = "https://www.dartlang.org/logos/dart-logo.png";
String url2 = "http://i2.kym-cdn.com/photos/images/facebook/000/581/296/c09.jpg";
-void beginFrame(double timeStamp) {
- if (timeBase == null)
- timeBase = timeStamp;
- double delta = timeStamp - timeBase;
- PictureRecorder recorder = new PictureRecorder();
- final double devicePixelRatio = view.devicePixelRatio;
- Canvas canvas = new Canvas(recorder, Point.origin & new Size(view.width * devicePixelRatio, view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
- canvas.translate(view.width / 2.0, view.height / 2.0);
+sky.Picture paint(sky.Rect paintBounds, double delta) {
+ sky.PictureRecorder recorder = new sky.PictureRecorder();
+ sky.Canvas canvas = new sky.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);
- Paint paint = new Paint()..color = const Color.fromARGB(255, 0, 255, 0);
+ sky.Paint paint = new sky.Paint()..color = const sky.Color.fromARGB(255, 0, 255, 0);
// Draw image
if (image != null)
- canvas.drawImage(image, new Point(-image.width / 2.0, -image.height / 2.0), paint);
+ canvas.drawImage(image, new sky.Point(-image.width / 2.0, -image.height / 2.0), paint);
// Draw cut out of image
canvas.rotate(math.PI * delta / 1800);
@@ -36,26 +33,49 @@
var w = image.width.toDouble();
var h = image.width.toDouble();
canvas.drawImageRect(image,
- new Rect.fromLTRB(w * 0.25, h * 0.25, w * 0.75, h * 0.75),
- new Rect.fromLTRB(-w / 4.0, -h / 4.0, w / 4.0, h / 4.0),
+ 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),
paint);
}
- view.picture = recorder.endRecording();
- view.scheduleFrame();
+ 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)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.Offset.zero, picture, paintBounds)
+ ..pop();
+ return sceneBuilder.build();
+}
+
+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;
+}
+
+
void handleImageLoad(result) {
if (result != image) {
print("${result.width}x${result.width} image loaded!");
image = result;
- view.scheduleFrame();
+ sky.view.scheduleFrame();
} else {
print("Existing image was loaded again");
}
}
-bool handleEvent(Event event) {
+bool handleEvent(sky.Event event) {
if (event.type == "pointerdown") {
return true;
}
@@ -70,6 +90,6 @@
void main() {
image_cache.load(url1).first.then(handleImageLoad);
- view.setEventCallback(handleEvent);
- view.setFrameCallback(beginFrame);
+ sky.view.setEventCallback(handleEvent);
+ sky.view.setFrameCallback(beginFrame);
}
diff --git a/examples/raw/spinning_square.dart b/examples/raw/spinning_square.dart
index 9119f3a..cc6d168 100644
--- a/examples/raw/spinning_square.dart
+++ b/examples/raw/spinning_square.dart
@@ -2,30 +2,44 @@
// 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:math' as math;
+import 'dart:sky' as sky;
+import 'dart:typed_data';
double timeBase = null;
void beginFrame(double timeStamp) {
- tracing.begin('beginFrame');
+ sky.tracing.begin('beginFrame');
if (timeBase == null)
timeBase = timeStamp;
double delta = timeStamp - timeBase;
- PictureRecorder recorder = new PictureRecorder();
- final double devicePixelRatio = view.devicePixelRatio;
- Canvas canvas = new Canvas(recorder, new Rect.fromLTWH(0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio));
- canvas.scale(devicePixelRatio, devicePixelRatio);
- canvas.translate(view.width / 2.0, view.height / 2.0);
+
+ // 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);
+ canvas.translate(paintBounds.width / 2.0, paintBounds.height / 2.0);
canvas.rotate(math.PI * delta / 1800);
- canvas.drawRect(new Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0),
- new Paint()..color = const Color.fromARGB(255, 0, 255, 0));
- view.picture = recorder.endRecording();
- view.scheduleFrame();
- tracing.end('beginFrame');
+ 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();
+
+ // 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);
+ Float32List deviceTransform = new Float32List(16)
+ ..[0] = devicePixelRatio
+ ..[5] = devicePixelRatio;
+ sky.SceneBuilder sceneBuilder = new sky.SceneBuilder(sceneBounds)
+ ..pushTransform(deviceTransform)
+ ..addPicture(sky.Offset.zero, picture, paintBounds)
+ ..pop();
+ sky.view.scene = sceneBuilder.build();
+
+ sky.tracing.end('beginFrame');
}
void main() {
- view.setFrameCallback(beginFrame);
- view.scheduleFrame();
+ sky.view.setFrameCallback(beginFrame);
+ sky.view.scheduleFrame();
}
diff --git a/examples/widgets/pageable_list.dart b/examples/widgets/pageable_list.dart
index eac188c..3f2085e 100644
--- a/examples/widgets/pageable_list.dart
+++ b/examples/widgets/pageable_list.dart
@@ -23,6 +23,7 @@
List<CardModel> cardModels;
Size pageSize = new Size(200.0, 200.0);
ScrollDirection scrollDirection = ScrollDirection.horizontal;
+ bool itemsWrap = false;
void initState() {
List<Size> cardSizes = [
@@ -67,13 +68,18 @@
);
}
- EventDisposition switchScrollDirection() {
+ void switchScrollDirection() {
setState(() {
scrollDirection = (scrollDirection == ScrollDirection.vertical)
? ScrollDirection.horizontal
: ScrollDirection.vertical;
});
- return EventDisposition.processed;
+ }
+
+ void toggleItemsWrap() {
+ setState(() {
+ itemsWrap = !itemsWrap;
+ });
}
bool _drawerShowing = false;
@@ -113,6 +119,13 @@
selected: scrollDirection == ScrollDirection.vertical,
child: new Text('Vertical Layout'),
onPressed: switchScrollDirection
+ ),
+ new DrawerItem(
+ onPressed: toggleItemsWrap,
+ child: new Row([
+ new Flexible(child: new Text('Scrolling wraps around')),
+ new Checkbox(value: itemsWrap)
+ ])
)
]
);
@@ -132,7 +145,7 @@
Widget buildBody() {
Widget list = new PageableList<CardModel>(
items: cardModels,
- itemsWrap: true,
+ itemsWrap: itemsWrap,
itemBuilder: buildCard,
scrollDirection: scrollDirection,
itemExtent: (scrollDirection == ScrollDirection.vertical)
diff --git a/services/sky/compositor/BUILD.gn b/services/sky/compositor/BUILD.gn
index eb8793f..7bba856 100644
--- a/services/sky/compositor/BUILD.gn
+++ b/services/sky/compositor/BUILD.gn
@@ -4,8 +4,6 @@
source_set("compositor") {
sources = [
- "layer.cc",
- "layer.h",
"layer_client.cc",
"layer_client.h",
"layer_host.cc",
@@ -28,6 +26,8 @@
"surface_holder.h",
"texture_cache.cc",
"texture_cache.h",
+ "texture_layer.cc",
+ "texture_layer.h",
]
deps = [
diff --git a/services/sky/compositor/layer_host.cc b/services/sky/compositor/layer_host.cc
index 9760555..f8bfb11 100644
--- a/services/sky/compositor/layer_host.cc
+++ b/services/sky/compositor/layer_host.cc
@@ -10,7 +10,7 @@
#include "mojo/gpu/gl_context.h"
#include "mojo/services/surfaces/public/cpp/surfaces_utils.h"
#include "mojo/skia/ganesh_context.h"
-#include "services/sky/compositor/layer.h"
+#include "services/sky/compositor/texture_layer.h"
namespace sky {
@@ -36,7 +36,7 @@
BeginFrameSoon();
}
-void LayerHost::SetRootLayer(scoped_refptr<Layer> layer) {
+void LayerHost::SetRootLayer(scoped_refptr<TextureLayer> layer) {
DCHECK(!root_layer_.get());
root_layer_ = layer;
}
@@ -86,7 +86,7 @@
Upload(root_layer_.get());
}
-void LayerHost::Upload(Layer* layer) {
+void LayerHost::Upload(TextureLayer* layer) {
TRACE_EVENT0("sky", "LayerHost::Upload");
gfx::Size size = layer->size();
diff --git a/services/sky/compositor/layer_host.h b/services/sky/compositor/layer_host.h
index 377eb45..8527fb3 100644
--- a/services/sky/compositor/layer_host.h
+++ b/services/sky/compositor/layer_host.h
@@ -16,7 +16,7 @@
namespace sky {
class ResourceManager;
-class Layer;
+class TextureLayer;
class LayerHostClient;
class LayerHost : public SurfaceHolder::Client {
@@ -39,7 +39,7 @@
}
void SetNeedsAnimate();
- void SetRootLayer(scoped_refptr<Layer> layer);
+ void SetRootLayer(scoped_refptr<TextureLayer> layer);
private:
enum State {
@@ -55,7 +55,7 @@
void BeginFrameSoon();
void BeginFrame();
- void Upload(Layer* layer);
+ void Upload(TextureLayer* layer);
void DidCompleteFrame();
LayerHostClient* client_;
@@ -65,7 +65,7 @@
mojo::GLContextOwner gl_context_owner_;
mojo::GaneshContext ganesh_context_;
ResourceManager resource_manager_;
- scoped_refptr<Layer> root_layer_;
+ scoped_refptr<TextureLayer> root_layer_;
base::WeakPtrFactory<LayerHost> weak_factory_;
diff --git a/services/sky/compositor/resource_manager.cc b/services/sky/compositor/resource_manager.cc
index 9fe69b2..4223f52 100644
--- a/services/sky/compositor/resource_manager.cc
+++ b/services/sky/compositor/resource_manager.cc
@@ -15,7 +15,7 @@
#include "mojo/converters/geometry/geometry_type_converters.h"
#include "mojo/gpu/gl_context.h"
#include "mojo/gpu/gl_texture.h"
-#include "services/sky/compositor/layer.h"
+#include "services/sky/compositor/texture_layer.h"
namespace sky {
@@ -39,7 +39,7 @@
}
mojo::TransferableResourcePtr ResourceManager::CreateTransferableResource(
- Layer* layer) {
+ TextureLayer* layer) {
scoped_ptr<mojo::GLTexture> texture = layer->GetTexture();
mojo::Size size = texture->size();
diff --git a/services/sky/compositor/resource_manager.h b/services/sky/compositor/resource_manager.h
index 0f7bcb2..ad709dd 100644
--- a/services/sky/compositor/resource_manager.h
+++ b/services/sky/compositor/resource_manager.h
@@ -22,8 +22,8 @@
}
namespace sky {
-class Layer;
class LayerHost;
+class TextureLayer;
class ResourceManager {
public:
@@ -32,7 +32,7 @@
scoped_ptr<mojo::GLTexture> CreateTexture(const gfx::Size& size);
- mojo::TransferableResourcePtr CreateTransferableResource(Layer* layer);
+ mojo::TransferableResourcePtr CreateTransferableResource(TextureLayer* layer);
void ReturnResources(mojo::Array<mojo::ReturnedResourcePtr> resources);
private:
diff --git a/services/sky/compositor/layer.cc b/services/sky/compositor/texture_layer.cc
similarity index 78%
rename from services/sky/compositor/layer.cc
rename to services/sky/compositor/texture_layer.cc
index 0523b23..ead0c3d 100644
--- a/services/sky/compositor/layer.cc
+++ b/services/sky/compositor/texture_layer.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "services/sky/compositor/layer.h"
+#include "services/sky/compositor/texture_layer.h"
#include "base/trace_event/trace_event.h"
#include "services/sky/compositor/layer_host.h"
@@ -15,17 +15,17 @@
namespace sky {
-Layer::Layer(LayerClient* client) : client_(client) {
+TextureLayer::TextureLayer(LayerClient* client) : client_(client) {
}
-Layer::~Layer() {
+TextureLayer::~TextureLayer() {
}
-void Layer::SetSize(const gfx::Size& size) {
+void TextureLayer::SetSize(const gfx::Size& size) {
size_ = size;
}
-void Layer::Display() {
+void TextureLayer::Display() {
TRACE_EVENT0("sky", "Layer::Display");
DCHECK(rasterizer_);
RefPtr<SkPicture> picture = RecordPicture();
@@ -38,7 +38,7 @@
texture_ = rasterizer_->Rasterize(picture.get());
}
-PassRefPtr<SkPicture> Layer::RecordPicture() {
+PassRefPtr<SkPicture> TextureLayer::RecordPicture() {
TRACE_EVENT0("sky", "Layer::RecordPicture");
SkRTreeFactory factory;
@@ -52,7 +52,7 @@
return adoptRef(recorder.endRecordingAsPicture());
}
-scoped_ptr<mojo::GLTexture> Layer::GetTexture() {
+scoped_ptr<mojo::GLTexture> TextureLayer::GetTexture() {
return texture_.Pass();
}
diff --git a/services/sky/compositor/layer.h b/services/sky/compositor/texture_layer.h
similarity index 72%
rename from services/sky/compositor/layer.h
rename to services/sky/compositor/texture_layer.h
index 3bf540c..0bee97c 100644
--- a/services/sky/compositor/layer.h
+++ b/services/sky/compositor/texture_layer.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef SKY_VIEWER_COMPOSITOR_LAYER_H_
-#define SKY_VIEWER_COMPOSITOR_LAYER_H_
+#ifndef SKY_VIEWER_COMPOSITOR_TEXTURE_LAYER_H_
+#define SKY_VIEWER_COMPOSITOR_TEXTURE_LAYER_H_
#include "base/memory/ref_counted.h"
#include "mojo/gpu/gl_texture.h"
@@ -17,9 +17,9 @@
class LayerHost;
-class Layer : public base::RefCounted<Layer> {
+class TextureLayer : public base::RefCounted<TextureLayer> {
public:
- explicit Layer(LayerClient* client);
+ explicit TextureLayer(LayerClient* client);
void SetSize(const gfx::Size& size);
void Display();
@@ -33,8 +33,8 @@
}
private:
- friend class base::RefCounted<Layer>;
- ~Layer();
+ friend class base::RefCounted<TextureLayer>;
+ ~TextureLayer();
PassRefPtr<SkPicture> RecordPicture();
@@ -43,9 +43,9 @@
scoped_ptr<mojo::GLTexture> texture_;
scoped_ptr<Rasterizer> rasterizer_;
- DISALLOW_COPY_AND_ASSIGN(Layer);
+ DISALLOW_COPY_AND_ASSIGN(TextureLayer);
};
} // namespace sky
-#endif // SKY_VIEWER_COMPOSITOR_LAYER_H_
+#endif // SKY_VIEWER_COMPOSITOR_TEXTURE_LAYER_H_
diff --git a/services/sky/document_view.cc b/services/sky/document_view.cc
index 15787e7..8ce55d3 100644
--- a/services/sky/document_view.cc
+++ b/services/sky/document_view.cc
@@ -19,10 +19,10 @@
#include "mojo/services/view_manager/public/cpp/view_manager.h"
#include "mojo/services/view_manager/public/interfaces/view_manager.mojom.h"
#include "services/asset_bundle/asset_unpacker_job.h"
-#include "services/sky/compositor/layer.h"
#include "services/sky/compositor/layer_host.h"
#include "services/sky/compositor/rasterizer_bitmap.h"
#include "services/sky/compositor/rasterizer_ganesh.h"
+#include "services/sky/compositor/texture_layer.h"
#include "services/sky/converters/input_event_types.h"
#include "services/sky/dart_library_provider_impl.h"
#include "services/sky/internals.h"
@@ -149,7 +149,7 @@
void DocumentView::Load(mojo::URLResponsePtr response) {
sky_view_ = blink::SkyView::Create(this);
layer_host_.reset(new LayerHost(this));
- root_layer_ = make_scoped_refptr(new Layer(this));
+ root_layer_ = make_scoped_refptr(new TextureLayer(this));
root_layer_->set_rasterizer(CreateRasterizer());
layer_host_->SetRootLayer(root_layer_);
diff --git a/services/sky/document_view.h b/services/sky/document_view.h
index c6c89a1..e67faa9 100644
--- a/services/sky/document_view.h
+++ b/services/sky/document_view.h
@@ -33,11 +33,11 @@
}
namespace sky {
+class DartLibraryProviderImpl;
+class LayerHost;
class Rasterizer;
class RasterizerBitmap;
-class Layer;
-class LayerHost;
-class DartLibraryProviderImpl;
+class TextureLayer;
class DocumentView : public blink::ServiceProvider,
public blink::SkyViewClient,
@@ -127,7 +127,7 @@
mojo::ViewManagerClientFactory view_manager_client_factory_;
scoped_ptr<DartLibraryProviderImpl> library_provider_;
scoped_ptr<LayerHost> layer_host_;
- scoped_refptr<Layer> root_layer_;
+ scoped_refptr<TextureLayer> root_layer_;
RasterizerBitmap* bitmap_rasterizer_; // Used for pixel tests.
mojo::ServiceRegistryPtr service_registry_;
scoped_ptr<mojo::StrongBinding<mojo::ServiceProvider>>
diff --git a/sky/compositor/BUILD.gn b/sky/compositor/BUILD.gn
new file mode 100644
index 0000000..ffce6c0
--- /dev/null
+++ b/sky/compositor/BUILD.gn
@@ -0,0 +1,16 @@
+# 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.
+
+source_set("compositor") {
+ sources = [
+ "layer.cc",
+ "layer.h",
+ ]
+
+ deps = [
+ "//base",
+ "//skia",
+ "//sky/engine/wtf",
+ ]
+}
diff --git a/sky/compositor/layer.cc b/sky/compositor/layer.cc
new file mode 100644
index 0000000..d43bbcd
--- /dev/null
+++ b/sky/compositor/layer.cc
@@ -0,0 +1,130 @@
+// 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.
+
+#include "sky/compositor/layer.h"
+
+#include "third_party/skia/include/core/SkColorFilter.h"
+
+namespace sky {
+
+Layer::Layer() {
+}
+
+Layer::~Layer() {
+}
+
+PictureLayer::PictureLayer() {
+}
+
+PictureLayer::~PictureLayer() {
+}
+
+void PictureLayer::Paint(SkCanvas* canvas) {
+ canvas->save();
+ canvas->translate(offset_.x(), offset_.y());
+ canvas->drawPicture(picture_.get());
+ canvas->restore();
+}
+
+ContainerLayer::ContainerLayer() {
+}
+
+ContainerLayer::~ContainerLayer() {
+}
+
+void ContainerLayer::Add(std::unique_ptr<Layer> layer) {
+ layer->set_parent(this);
+ layers_.push_back(std::move(layer));
+}
+
+void ContainerLayer::PaintChildren(SkCanvas* canvas) {
+ for (auto& layer : layers_)
+ layer->Paint(canvas);
+}
+
+TransformLayer::TransformLayer() {
+}
+
+TransformLayer::~TransformLayer() {
+}
+
+void TransformLayer::Paint(SkCanvas* canvas) {
+ canvas->save();
+ canvas->concat(transform_);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+ClipRectLayer::ClipRectLayer() {
+}
+
+ClipRectLayer::~ClipRectLayer() {
+}
+
+void ClipRectLayer::Paint(SkCanvas* canvas) {
+ canvas->save();
+ canvas->clipRect(clip_rect_);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+ClipRRectLayer::ClipRRectLayer() {
+}
+
+ClipRRectLayer::~ClipRRectLayer() {
+}
+
+void ClipRRectLayer::Paint(SkCanvas* canvas) {
+ canvas->saveLayer(&clip_rrect_.getBounds(), nullptr);
+ canvas->clipRRect(clip_rrect_);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+ClipPathLayer::ClipPathLayer() {
+}
+
+ClipPathLayer::~ClipPathLayer() {
+}
+
+void ClipPathLayer::Paint(SkCanvas* canvas) {
+ canvas->saveLayer(&clip_path_.getBounds(), nullptr);
+ canvas->clipPath(clip_path_);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+OpacityLayer::OpacityLayer() {
+}
+
+OpacityLayer::~OpacityLayer() {
+}
+
+void OpacityLayer::Paint(SkCanvas* canvas) {
+ SkColor color = SkColorSetARGB(alpha_, 0, 0, 0);
+ RefPtr<SkColorFilter> colorFilter = adoptRef(SkColorFilter::CreateModeFilter(color, SkXfermode::kSrcOver_Mode));
+ SkPaint paint;
+ paint.setColorFilter(colorFilter.get());
+ canvas->saveLayer(&paint_bounds(), &paint);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+ColorFilterLayer::ColorFilterLayer() {
+}
+
+ColorFilterLayer::~ColorFilterLayer() {
+}
+
+void ColorFilterLayer::Paint(SkCanvas* canvas) {
+ RefPtr<SkColorFilter> color_filter =
+ adoptRef(SkColorFilter::CreateModeFilter(color_, transfer_mode_));
+ SkPaint paint;
+ paint.setColorFilter(color_filter.get());
+ canvas->saveLayer(&paint_bounds(), &paint);
+ PaintChildren(canvas);
+ canvas->restore();
+}
+
+} // namespace sky
diff --git a/sky/compositor/layer.h b/sky/compositor/layer.h
new file mode 100644
index 0000000..6dcd36e
--- /dev/null
+++ b/sky/compositor/layer.h
@@ -0,0 +1,173 @@
+// 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.
+
+#ifndef SKY_COMPOSITOR_H_
+#define SKY_COMPOSITOR_H_
+
+#include <memory>
+#include <vector>
+
+#include "base/macros.h"
+#include "sky/engine/wtf/PassRefPtr.h"
+#include "sky/engine/wtf/RefPtr.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "third_party/skia/include/core/SkColorFilter.h"
+#include "third_party/skia/include/core/SkMatrix.h"
+#include "third_party/skia/include/core/SkPath.h"
+#include "third_party/skia/include/core/SkPicture.h"
+#include "third_party/skia/include/core/SkRect.h"
+#include "third_party/skia/include/core/SkRRect.h"
+#include "third_party/skia/include/core/SkXfermode.h"
+
+namespace sky {
+class ContainerLayer;
+
+class Layer {
+ public:
+ Layer();
+ virtual ~Layer();
+
+ virtual void Paint(SkCanvas* canvas) = 0;
+
+ ContainerLayer* parent() const { return parent_; }
+ void set_parent(ContainerLayer* parent) { parent_ = parent; }
+
+ const SkRect& paint_bounds() const { return paint_bounds_; }
+ void set_paint_bounds(const SkRect& paint_bounds) { paint_bounds_ = paint_bounds; }
+
+ private:
+ ContainerLayer* parent_;
+ SkRect paint_bounds_;
+
+ DISALLOW_COPY_AND_ASSIGN(Layer);
+};
+
+class PictureLayer : public Layer {
+ public:
+ PictureLayer();
+ ~PictureLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_offset(const SkPoint& offset) { offset_ = offset; }
+ void set_picture(PassRefPtr<SkPicture> picture) { picture_ = picture; }
+
+ private:
+ SkPoint offset_;
+ RefPtr<SkPicture> picture_;
+
+ DISALLOW_COPY_AND_ASSIGN(PictureLayer);
+};
+
+class ContainerLayer : public Layer {
+ public:
+ ContainerLayer();
+ ~ContainerLayer() override;
+
+ void Add(std::unique_ptr<Layer> layer);
+
+ void PaintChildren(SkCanvas* canvas);
+
+ private:
+ std::vector<std::unique_ptr<Layer>> layers_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContainerLayer);
+};
+
+class TransformLayer : public ContainerLayer {
+ public:
+ TransformLayer();
+ ~TransformLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_transform(const SkMatrix& transform) { transform_ = transform; }
+
+ private:
+ SkMatrix transform_;
+
+ DISALLOW_COPY_AND_ASSIGN(TransformLayer);
+};
+
+class ClipRectLayer : public ContainerLayer {
+ public:
+ ClipRectLayer();
+ ~ClipRectLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_clip_rect(const SkRect& clip_rect) { clip_rect_ = clip_rect; }
+
+ private:
+ SkRect clip_rect_;
+
+ DISALLOW_COPY_AND_ASSIGN(ClipRectLayer);
+};
+
+class ClipRRectLayer : public ContainerLayer {
+ public:
+ ClipRRectLayer();
+ ~ClipRRectLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_clip_rrect(const SkRRect& clip_rrect) { clip_rrect_ = clip_rrect; }
+
+ private:
+ SkRRect clip_rrect_;
+
+ DISALLOW_COPY_AND_ASSIGN(ClipRRectLayer);
+};
+
+class ClipPathLayer : public ContainerLayer {
+ public:
+ ClipPathLayer();
+ ~ClipPathLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_clip_path(const SkPath& clip_path) { clip_path_ = clip_path; }
+
+ private:
+ SkPath clip_path_;
+
+ DISALLOW_COPY_AND_ASSIGN(ClipPathLayer);
+};
+
+class OpacityLayer : public ContainerLayer {
+ public:
+ OpacityLayer();
+ ~OpacityLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_alpha(int alpha) { alpha_ = alpha; }
+
+ private:
+ int alpha_;
+
+ DISALLOW_COPY_AND_ASSIGN(OpacityLayer);
+};
+
+class ColorFilterLayer : public ContainerLayer {
+ public:
+ ColorFilterLayer();
+ ~ColorFilterLayer() override;
+
+ void Paint(SkCanvas* canvas) override;
+
+ void set_color(SkColor color) { color_ = color; }
+ void set_transfer_mode(SkXfermode::Mode transfer_mode) { transfer_mode_ = transfer_mode; }
+
+ private:
+ SkColor color_;
+ SkXfermode::Mode transfer_mode_;
+
+ DISALLOW_COPY_AND_ASSIGN(ColorFilterLayer);
+};
+
+} // namespace sky
+
+#endif // SKY_COMPOSITOR_H_
diff --git a/sky/engine/core/BUILD.gn b/sky/engine/core/BUILD.gn
index 45103f2..7922cb1 100644
--- a/sky/engine/core/BUILD.gn
+++ b/sky/engine/core/BUILD.gn
@@ -21,6 +21,7 @@
"//mojo/public/cpp/utility",
"//mojo/public/interfaces/application",
"//skia",
+ "//sky/compositor",
"//sky/engine/tonic:tonic",
"//sky/engine/wtf",
"//third_party/iccjpeg",
diff --git a/sky/engine/core/compositing/Scene.cpp b/sky/engine/core/compositing/Scene.cpp
index 0845867..d58883f 100644
--- a/sky/engine/core/compositing/Scene.cpp
+++ b/sky/engine/core/compositing/Scene.cpp
@@ -4,16 +4,19 @@
#include "sky/engine/core/compositing/Scene.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkPictureRecorder.h"
+
namespace blink {
-PassRefPtr<Scene> Scene::create(PassRefPtr<SkPicture> picture)
+PassRefPtr<Scene> Scene::create(std::unique_ptr<sky::Layer> rootLayer)
{
- ASSERT(picture);
- return adoptRef(new Scene(picture));
+ ASSERT(rootLayer);
+ return adoptRef(new Scene(std::move(rootLayer)));
}
-Scene::Scene(PassRefPtr<SkPicture> picture)
- : m_picture(picture)
+Scene::Scene(std::unique_ptr<sky::Layer> rootLayer)
+ : m_rootLayer(std::move(rootLayer))
{
}
@@ -21,4 +24,14 @@
{
}
+PassRefPtr<SkPicture> Scene::createPicture() const
+{
+ SkRTreeFactory rtreeFactory;
+ SkPictureRecorder pictureRecorder;
+ SkCanvas* canvas = pictureRecorder.beginRecording(m_rootLayer->paint_bounds(),
+ &rtreeFactory, SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
+ m_rootLayer->Paint(canvas);
+ return adoptRef(pictureRecorder.endRecording());
+}
+
} // namespace blink
diff --git a/sky/engine/core/compositing/Scene.h b/sky/engine/core/compositing/Scene.h
index 8d3a5ac..af2347f 100644
--- a/sky/engine/core/compositing/Scene.h
+++ b/sky/engine/core/compositing/Scene.h
@@ -5,6 +5,9 @@
#ifndef SKY_ENGINE_CORE_COMPOSITING_SCENE_H_
#define SKY_ENGINE_CORE_COMPOSITING_SCENE_H_
+#include <memory>
+
+#include "sky/compositor/layer.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
@@ -16,16 +19,16 @@
DEFINE_WRAPPERTYPEINFO();
public:
~Scene() override;
- static PassRefPtr<Scene> create(PassRefPtr<SkPicture> skPicture);
-
- SkPicture* toSkia() const { return m_picture.get(); }
-
-private:
- explicit Scene(PassRefPtr<SkPicture> skPicture);
+ static PassRefPtr<Scene> create(std::unique_ptr<sky::Layer> rootLayer);
// While bootstraping the compositing system, we use an SkPicture instead
// of a layer tree to back the scene.
- RefPtr<SkPicture> m_picture;
+ PassRefPtr<SkPicture> createPicture() const;
+
+private:
+ explicit Scene(std::unique_ptr<sky::Layer> rootLayer);
+
+ std::unique_ptr<sky::Layer> m_rootLayer;
};
} // namespace blink
diff --git a/sky/engine/core/compositing/SceneBuilder.cpp b/sky/engine/core/compositing/SceneBuilder.cpp
index 7e10ca3..82def61 100644
--- a/sky/engine/core/compositing/SceneBuilder.cpp
+++ b/sky/engine/core/compositing/SceneBuilder.cpp
@@ -10,9 +10,9 @@
namespace blink {
SceneBuilder::SceneBuilder(const Rect& bounds)
+ : m_rootPaintBounds(bounds.sk_rect)
+ , m_currentLayer(nullptr)
{
- m_canvas = m_pictureRecorder.beginRecording(bounds.sk_rect,
- &m_rtreeFactory, SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
}
SceneBuilder::~SceneBuilder()
@@ -24,77 +24,88 @@
SkMatrix sk_matrix = toSkMatrix(matrix4, es);
if (es.had_exception())
return;
- m_canvas->save();
- m_canvas->concat(sk_matrix);
+ std::unique_ptr<sky::TransformLayer> layer(new sky::TransformLayer());
+ layer->set_transform(sk_matrix);
+ addLayer(std::move(layer));
}
void SceneBuilder::pushClipRect(const Rect& rect)
{
- if (!m_canvas)
- return;
- m_canvas->save();
- m_canvas->clipRect(rect.sk_rect);
+ std::unique_ptr<sky::ClipRectLayer> layer(new sky::ClipRectLayer());
+ layer->set_clip_rect(rect.sk_rect);
+ addLayer(std::move(layer));
}
void SceneBuilder::pushClipRRect(const RRect* rrect, const Rect& bounds)
{
- if (!m_canvas)
- return;
- m_canvas->saveLayer(&bounds.sk_rect, nullptr);
- m_canvas->clipRRect(rrect->rrect());
+ std::unique_ptr<sky::ClipRRectLayer> layer(new sky::ClipRRectLayer());
+ layer->set_clip_rrect(rrect->rrect());
+ addLayer(std::move(layer));
}
void SceneBuilder::pushClipPath(const CanvasPath* path, const Rect& bounds)
{
- if (!m_canvas)
- return;
- m_canvas->saveLayer(&bounds.sk_rect, nullptr);
- m_canvas->clipPath(path->path());
+ std::unique_ptr<sky::ClipPathLayer> layer(new sky::ClipPathLayer());
+ layer->set_clip_path(path->path());
+ addLayer(std::move(layer));
}
void SceneBuilder::pushOpacity(int alpha, const Rect& bounds)
{
- if (!m_canvas)
- return;
- SkColor color = SkColorSetARGB(alpha, 0, 0, 0);
- RefPtr<SkColorFilter> colorFilter = adoptRef(SkColorFilter::CreateModeFilter(color, SkXfermode::kSrcOver_Mode));
- SkPaint paint;
- paint.setColorFilter(colorFilter.get());
- m_canvas->saveLayer(&bounds.sk_rect, &paint);
+ std::unique_ptr<sky::OpacityLayer> layer(new sky::OpacityLayer());
+ layer->set_paint_bounds(bounds.sk_rect);
+ layer->set_alpha(alpha);
+ addLayer(std::move(layer));
}
void SceneBuilder::pushColorFilter(SkColor color, SkXfermode::Mode transferMode, const Rect& bounds)
{
- if (!m_canvas)
+ std::unique_ptr<sky::ColorFilterLayer> layer(new sky::ColorFilterLayer());
+ layer->set_paint_bounds(bounds.sk_rect);
+ layer->set_color(color);
+ layer->set_transfer_mode(transferMode);
+ addLayer(std::move(layer));
+}
+
+void SceneBuilder::addLayer(std::unique_ptr<sky::ContainerLayer> layer)
+{
+ DCHECK(layer);
+ if (!m_rootLayer) {
+ DCHECK(!m_currentLayer);
+ m_rootLayer = std::move(layer);
+ m_rootLayer->set_paint_bounds(m_rootPaintBounds);
+ m_currentLayer = m_rootLayer.get();
return;
- RefPtr<SkColorFilter> colorFilter = adoptRef(SkColorFilter::CreateModeFilter(color, transferMode));
- SkPaint paint;
- paint.setColorFilter(colorFilter.get());
- m_canvas->saveLayer(&bounds.sk_rect, &paint);
+ }
+ if (!m_currentLayer)
+ return;
+ sky::ContainerLayer* newLayer = layer.get();
+ m_currentLayer->Add(std::move(layer));
+ m_currentLayer = newLayer;
}
void SceneBuilder::pop()
{
- if (!m_canvas)
+ if (!m_currentLayer)
return;
- m_canvas->restore();
+ m_currentLayer = m_currentLayer->parent();
}
void SceneBuilder::addPicture(const Offset& offset, Picture* picture, const Rect& paintBounds)
{
- if (!m_canvas)
+ if (!m_currentLayer)
return;
- m_canvas->save();
- m_canvas->translate(offset.sk_size.width(), offset.sk_size.height());
- m_canvas->drawPicture(picture->toSkia());
- m_canvas->restore();
+ std::unique_ptr<sky::PictureLayer> layer(new sky::PictureLayer());
+ layer->set_offset(SkPoint::Make(offset.sk_size.width(), offset.sk_size.height()));
+ layer->set_picture(picture->toSkia());
+ layer->set_paint_bounds(paintBounds.sk_rect);
+ m_currentLayer->Add(std::move(layer));
}
PassRefPtr<Scene> SceneBuilder::build()
{
- RefPtr<Scene> scene = Scene::create(adoptRef(m_pictureRecorder.endRecording()));
- m_canvas = nullptr;
- return scene.release();
+ m_currentLayer = nullptr;
+ return Scene::create(std::move(m_rootLayer));
}
} // namespace blink
diff --git a/sky/engine/core/compositing/SceneBuilder.h b/sky/engine/core/compositing/SceneBuilder.h
index d8facf6..099d1f5 100644
--- a/sky/engine/core/compositing/SceneBuilder.h
+++ b/sky/engine/core/compositing/SceneBuilder.h
@@ -5,6 +5,9 @@
#ifndef SKY_ENGINE_CORE_COMPOSITING_SCENEBUILDER_H_
#define SKY_ENGINE_CORE_COMPOSITING_SCENEBUILDER_H_
+#include <memory>
+
+#include "sky/compositor/layer.h"
#include "sky/engine/bindings/exception_state.h"
#include "sky/engine/core/compositing/Scene.h"
#include "sky/engine/core/painting/CanvasPath.h"
@@ -19,8 +22,6 @@
#include "sky/engine/tonic/float32_list.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkPictureRecorder.h"
namespace blink {
@@ -47,9 +48,11 @@
private:
explicit SceneBuilder(const Rect& bounds);
- SkRTreeFactory m_rtreeFactory;
- SkPictureRecorder m_pictureRecorder;
- SkCanvas* m_canvas;
+ void addLayer(std::unique_ptr<sky::ContainerLayer> layer);
+
+ SkRect m_rootPaintBounds;
+ std::unique_ptr<sky::ContainerLayer> m_rootLayer;
+ sky::ContainerLayer* m_currentLayer;
};
} // namespace blink
diff --git a/sky/engine/public/sky/sky_view.cc b/sky/engine/public/sky/sky_view.cc
index 3122ce4..de5cc2d 100644
--- a/sky/engine/public/sky/sky_view.cc
+++ b/sky/engine/public/sky/sky_view.cc
@@ -72,7 +72,7 @@
PassRefPtr<SkPicture> SkyView::Paint() {
if (Scene* scene = view_->scene())
- return scene->toSkia();
+ return scene->createPicture();
if (Picture* picture = view_->picture())
return picture->toSkia();
return nullptr;
diff --git a/sky/packages/sky/README.md b/sky/packages/sky/README.md
index 5deef2d..f28ac8a 100644
--- a/sky/packages/sky/README.md
+++ b/sky/packages/sky/README.md
@@ -4,7 +4,7 @@
Sky apps are written in Dart. To get started, we need to set up Dart SDK:
- Install the [Dart SDK](https://www.dartlang.org/downloads/):
- - Mac: `brew tap dart-lang/dart && brew install dart`
+ - Mac: `brew tap dart-lang/dart && brew install dart --devel`
- Linux: See [https://www.dartlang.org/downloads/linux.html](https://www.dartlang.org/downloads/linux.html)
- Ensure that `$DART_SDK` is set to the path of your Dart SDK and that the
`dart` and `pub` executables are on your `$PATH`.
@@ -57,6 +57,8 @@
- Install the `adb` tool from the [Android SDK](https://developer.android.com/sdk/installing/index.html?pkg=tools):
- Mac: `brew install android-platform-tools`
- Linux: `sudo apt-get install android-tools-adb`
+ - If the version of `adb` provided by your Linux distribution is too old,
+ you might need to [install the Android SDK manually](https://developer.android.com/sdk/installing/index.html?pkg=tools]).
- Enable developer mode on your device by visiting `Settings > About phone`
and tapping the `Build number` field five times.
diff --git a/sky/packages/sky/lib/editing/editable_text.dart b/sky/packages/sky/lib/editing/editable_text.dart
index 2fb6dee..3a2da19 100644
--- a/sky/packages/sky/lib/editing/editable_text.dart
+++ b/sky/packages/sky/lib/editing/editable_text.dart
@@ -7,9 +7,9 @@
import 'package:sky/editing/editable_string.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
const _kCursorBlinkPeriod = 500; // milliseconds
const _kCursorGap = 1.0;
diff --git a/sky/packages/sky/lib/editing/input.dart b/sky/packages/sky/lib/editing/input.dart
index 632e467..a253c1a 100644
--- a/sky/packages/sky/lib/editing/input.dart
+++ b/sky/packages/sky/lib/editing/input.dart
@@ -6,10 +6,10 @@
import 'package:sky/editing/editable_text.dart';
import 'package:sky/mojo/keyboard.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/focus.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/focus.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/theme.dart';
export 'package:sky/mojo/keyboard.dart' show KeyboardType_TEXT, KeyboardType_NUMBER, KeyboardType_PHONE, KeyboardType_DATETIME;
diff --git a/sky/packages/sky/lib/mojo/activity.dart b/sky/packages/sky/lib/mojo/activity.dart
index f193638..1e591d0 100644
--- a/sky/packages/sky/lib/mojo/activity.dart
+++ b/sky/packages/sky/lib/mojo/activity.dart
@@ -50,7 +50,7 @@
TaskDescription description = new TaskDescription()
..label = label
- ..primaryColor = (color != null ? color.value : null);
+ ..primaryColor = color?.value;
_activityProxy.ptr.setTaskDescription(description);
}
diff --git a/sky/packages/sky/lib/rendering.dart b/sky/packages/sky/lib/rendering.dart
index 4755544..52db6c6 100644
--- a/sky/packages/sky/lib/rendering.dart
+++ b/sky/packages/sky/lib/rendering.dart
@@ -7,21 +7,21 @@
/// The Sky render tree
library rendering;
-export 'package:sky/rendering/auto_layout.dart';
-export 'package:sky/rendering/block.dart';
-export 'package:sky/rendering/box.dart';
-export 'package:sky/rendering/flex.dart';
-export 'package:sky/rendering/grid.dart';
-export 'package:sky/rendering/image.dart';
-export 'package:sky/rendering/layer.dart';
-export 'package:sky/rendering/object.dart';
-export 'package:sky/rendering/paragraph.dart';
-export 'package:sky/rendering/proxy_box.dart';
-export 'package:sky/rendering/shifted_box.dart';
-export 'package:sky/rendering/sky_binding.dart';
-export 'package:sky/rendering/stack.dart';
-export 'package:sky/rendering/toggleable.dart';
-export 'package:sky/rendering/view.dart';
-export 'package:sky/rendering/viewport.dart';
+export 'package:sky/src/rendering/auto_layout.dart';
+export 'package:sky/src/rendering/block.dart';
+export 'package:sky/src/rendering/box.dart';
+export 'package:sky/src/rendering/flex.dart';
+export 'package:sky/src/rendering/grid.dart';
+export 'package:sky/src/rendering/image.dart';
+export 'package:sky/src/rendering/layer.dart';
+export 'package:sky/src/rendering/object.dart';
+export 'package:sky/src/rendering/paragraph.dart';
+export 'package:sky/src/rendering/proxy_box.dart';
+export 'package:sky/src/rendering/shifted_box.dart';
+export 'package:sky/src/rendering/sky_binding.dart';
+export 'package:sky/src/rendering/stack.dart';
+export 'package:sky/src/rendering/toggleable.dart';
+export 'package:sky/src/rendering/view.dart';
+export 'package:sky/src/rendering/viewport.dart';
export 'package:vector_math/vector_math.dart' show Matrix4;
diff --git a/sky/packages/sky/lib/sky_tool b/sky/packages/sky/lib/sky_tool
index 1e78345..54c7d4e 100755
--- a/sky/packages/sky/lib/sky_tool
+++ b/sky/packages/sky/lib/sky_tool
@@ -9,6 +9,7 @@
import hashlib
import json
import logging
+import multiprocessing
import os
import platform
import random
@@ -146,6 +147,46 @@
return 'http://localhost:%s/%s' % (port, relative_path)
+class SkyLogs(object):
+ def add_subparser(self, subparsers):
+ logs_parser = subparsers.add_parser('logs',
+ help='Show logs for running Sky apps')
+ logs_parser.set_defaults(func=self.run)
+
+ def run(self, args, pids):
+ android_log_reader = None
+ ios_dev_log_reader = None
+ ios_sim_log_reader = None
+
+ android = AndroidDevice()
+ if android.is_connected():
+ android_log_reader = android.logs()
+
+ if IOSDevice.is_connected():
+ ios_dev_log_reader = IOSDevice.logs()
+
+ if IOSSimulator.is_connected():
+ ios_sim_log_reader = IOSSimulator.logs()
+
+ if android_log_reader is not None:
+ try:
+ android_log_reader.join()
+ except KeyboardInterrupt:
+ pass
+
+ if ios_dev_log_reader is not None:
+ try:
+ ios_dev_log_reader.join()
+ except KeyboardInterrupt:
+ pass
+
+ if ios_sim_log_reader is not None:
+ try:
+ ios_sim_log_reader.join()
+ except KeyboardInterrupt:
+ pass
+
+
class InstallSky(object):
def add_subparser(self, subparsers):
install_parser = subparsers.add_parser('install',
@@ -447,6 +488,27 @@
logging.info(' '.join(cmd))
subprocess.check_output(cmd)
+ def logs(self):
+ def do_logs():
+ cmd = [
+ self.adb_path,
+ 'logcat',
+ '-s',
+ 'sky',
+ 'chromium',
+ ]
+ logging.info(' '.join(cmd))
+ log_process = subprocess.Popen(cmd, bufsize=1, stdout=subprocess.PIPE)
+ while True:
+ try:
+ sys.stdout.write('ANDROID: ' + log_process.stdout.readline())
+ sys.stdout.flush()
+ except KeyboardInterrupt:
+ break
+ log_reader = multiprocessing.Process(target=do_logs)
+ log_reader.daemon = True
+ log_reader.start()
+ return log_reader
class IOSDevice(object):
@@ -540,6 +602,38 @@
except subprocess.CalledProcessError:
pass
+ @classmethod
+ def logs(cls):
+ try:
+ cmd = [
+ 'which',
+ 'idevicesyslog'
+ ]
+ logging.info(' '.join(cmd))
+ subprocess.check_call(cmd)
+ except subprocess.CalledProcessError:
+ logging.error('"log" command only works with iOS devices if you have installed idevicesyslog. Run "brew install libimobiledevice" to install it with homebrew.')
+ return None
+
+ def do_logs():
+ cmd = [
+ 'idevicesyslog',
+ ]
+ logging.info(' '.join(cmd))
+ log_process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ while True:
+ try:
+ log_line = log_process.stdout.readline()
+ if re.match(r'.*SkyShell.*', log_line) is not None:
+ sys.stdout.write('IOS DEV: ' + log_line)
+ sys.stdout.flush()
+ except KeyboardInterrupt:
+ break
+ log_reader = multiprocessing.Process(target=do_logs)
+ log_reader.daemon = True
+ log_reader.start()
+ return log_reader
+
class IOSSimulator(object):
@classmethod
@@ -548,6 +642,10 @@
return False
return cls.get_simulator_device_id() is not None
+ @classmethod
+ def is_connected(cls):
+ return cls.is_booted()
+
_device_id = None
@classmethod
def get_simulator_device_id(cls):
@@ -636,6 +734,29 @@
return cls.is_booted()
@classmethod
+ def logs(cls):
+ def do_logs():
+ cmd = [
+ 'tail',
+ '-f',
+ os.path.expanduser('~/Library/Logs/CoreSimulator/' + cls.get_simulator_device_id() + '/system.log'),
+ ]
+ logging.info(' '.join(cmd))
+ log_process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ while True:
+ try:
+ log_line = log_process.stdout.readline()
+ if re.match(r'.*SkyShell.*', log_line) is not None:
+ sys.stdout.write('IOS SIM: ' + log_line)
+ sys.stdout.flush()
+ except KeyboardInterrupt:
+ break
+ log_reader = multiprocessing.Process(target=do_logs)
+ log_reader.daemon = True
+ log_reader.start()
+ return log_reader
+
+ @classmethod
def fork_install_app(cls, ios_app_path):
cmd = [
os.path.abspath(__file__),
@@ -1045,7 +1166,7 @@
subparsers = parser.add_subparsers(help='sub-command help')
- for command in [InstallSky(), StartSky(), StopSky(), StartListening(), StartTracing(), StopTracing(), IOSSimulator()]:
+ for command in [SkyLogs(), InstallSky(), StartSky(), StopSky(), StartListening(), StartTracing(), StopTracing(), IOSSimulator()]:
command.add_subparser(subparsers)
args = parser.parse_args()
diff --git a/sky/packages/sky/lib/rendering/README.md b/sky/packages/sky/lib/src/rendering/README.md
similarity index 99%
rename from sky/packages/sky/lib/rendering/README.md
rename to sky/packages/sky/lib/src/rendering/README.md
index d14a48a..91ba8a2 100644
--- a/sky/packages/sky/lib/rendering/README.md
+++ b/sky/packages/sky/lib/src/rendering/README.md
@@ -372,7 +372,7 @@
working with the render tree.
```dart
-import 'package:sky/rendering/sky_binding.dart';
+import 'package:sky/src/rendering/sky_binding.dart';
import 'package:sky/base/scheduler.dart' as scheduler;
scheduler.addPersistentFrameCallback((_) {
diff --git a/sky/packages/sky/lib/rendering/auto_layout.dart b/sky/packages/sky/lib/src/rendering/auto_layout.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/auto_layout.dart
rename to sky/packages/sky/lib/src/rendering/auto_layout.dart
index 82ea255..150f7f4 100644
--- a/sky/packages/sky/lib/rendering/auto_layout.dart
+++ b/sky/packages/sky/lib/src/rendering/auto_layout.dart
@@ -3,8 +3,8 @@
// found in the LICENSE file.
import 'package:cassowary/cassowary.dart' as al;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
/// Hosts the edge parameters and vends useful methods to construct expressions
/// for constraints. Also sets up and manages implicit constraints and edit
diff --git a/sky/packages/sky/lib/rendering/block.dart b/sky/packages/sky/lib/src/rendering/block.dart
similarity index 99%
rename from sky/packages/sky/lib/rendering/block.dart
rename to sky/packages/sky/lib/src/rendering/block.dart
index bb113f6..994c81d 100644
--- a/sky/packages/sky/lib/rendering/block.dart
+++ b/sky/packages/sky/lib/src/rendering/block.dart
@@ -4,8 +4,8 @@
import 'dart:math' as math;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
import 'package:vector_math/vector_math.dart';
class BlockParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> { }
diff --git a/sky/packages/sky/lib/rendering/box.dart b/sky/packages/sky/lib/src/rendering/box.dart
similarity index 99%
rename from sky/packages/sky/lib/rendering/box.dart
rename to sky/packages/sky/lib/src/rendering/box.dart
index 713dd7f..2af20e1 100644
--- a/sky/packages/sky/lib/rendering/box.dart
+++ b/sky/packages/sky/lib/src/rendering/box.dart
@@ -8,7 +8,7 @@
import 'package:sky/base/debug.dart';
import 'package:sky/painting/box_painter.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/object.dart';
import 'package:vector_math/vector_math.dart';
export 'package:sky/painting/text_style.dart' show TextBaseline;
diff --git a/sky/packages/sky/lib/rendering/flex.dart b/sky/packages/sky/lib/src/rendering/flex.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/flex.dart
rename to sky/packages/sky/lib/src/rendering/flex.dart
index a6236e4..fa3fa34 100644
--- a/sky/packages/sky/lib/rendering/flex.dart
+++ b/sky/packages/sky/lib/src/rendering/flex.dart
@@ -4,10 +4,10 @@
import 'dart:math' as math;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
-export 'package:sky/rendering/object.dart' show EventDisposition;
+export 'package:sky/src/rendering/object.dart' show EventDisposition;
class FlexParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> {
int flex;
diff --git a/sky/packages/sky/lib/rendering/grid.dart b/sky/packages/sky/lib/src/rendering/grid.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/grid.dart
rename to sky/packages/sky/lib/src/rendering/grid.dart
index 37186d9..4431e0f 100644
--- a/sky/packages/sky/lib/rendering/grid.dart
+++ b/sky/packages/sky/lib/src/rendering/grid.dart
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
class GridParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> {}
diff --git a/sky/packages/sky/lib/rendering/image.dart b/sky/packages/sky/lib/src/rendering/image.dart
similarity index 97%
rename from sky/packages/sky/lib/rendering/image.dart
rename to sky/packages/sky/lib/src/rendering/image.dart
index 0d1f518..e3eb3a1 100644
--- a/sky/packages/sky/lib/rendering/image.dart
+++ b/sky/packages/sky/lib/src/rendering/image.dart
@@ -5,8 +5,8 @@
import 'dart:sky' as sky;
import 'package:sky/painting/box_painter.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
class RenderImage extends RenderBox {
RenderImage({
diff --git a/sky/packages/sky/lib/rendering/layer.dart b/sky/packages/sky/lib/src/rendering/layer.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/layer.dart
rename to sky/packages/sky/lib/src/rendering/layer.dart
index adcbe8c..ea4a755 100644
--- a/sky/packages/sky/lib/rendering/layer.dart
+++ b/sky/packages/sky/lib/src/rendering/layer.dart
@@ -242,7 +242,7 @@
int alpha;
void addToScene(sky.SceneBuilder builder, Offset layerOffset) {
- builder.pushOpacity(alpha, bounds == null ? null : bounds.shift(layerOffset));
+ builder.pushOpacity(alpha, bounds?.shift(layerOffset));
addChildrenToScene(builder, offset + layerOffset);
builder.pop();
}
diff --git a/sky/packages/sky/lib/rendering/object.dart b/sky/packages/sky/lib/src/rendering/object.dart
similarity index 99%
rename from sky/packages/sky/lib/rendering/object.dart
rename to sky/packages/sky/lib/src/rendering/object.dart
index 6b5d797..0977c1f 100644
--- a/sky/packages/sky/lib/rendering/object.dart
+++ b/sky/packages/sky/lib/src/rendering/object.dart
@@ -10,7 +10,7 @@
import 'package:sky/base/hit_test.dart';
import 'package:sky/base/node.dart';
import 'package:sky/base/scheduler.dart' as scheduler;
-import 'package:sky/rendering/layer.dart';
+import 'package:sky/src/rendering/layer.dart';
import 'package:vector_math/vector_math.dart';
export 'dart:sky' show Point, Offset, Size, Rect, Color, Paint, Path;
diff --git a/sky/packages/sky/lib/rendering/paragraph.dart b/sky/packages/sky/lib/src/rendering/paragraph.dart
similarity index 97%
rename from sky/packages/sky/lib/rendering/paragraph.dart
rename to sky/packages/sky/lib/src/rendering/paragraph.dart
index 1f7f124..dd00721 100644
--- a/sky/packages/sky/lib/rendering/paragraph.dart
+++ b/sky/packages/sky/lib/src/rendering/paragraph.dart
@@ -3,8 +3,8 @@
// found in the LICENSE file.
import 'package:sky/painting/text_painter.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
export 'package:sky/painting/text_painter.dart';
diff --git a/sky/packages/sky/lib/rendering/proxy_box.dart b/sky/packages/sky/lib/src/rendering/proxy_box.dart
similarity index 99%
rename from sky/packages/sky/lib/rendering/proxy_box.dart
rename to sky/packages/sky/lib/src/rendering/proxy_box.dart
index 6dec1df..1632250 100644
--- a/sky/packages/sky/lib/rendering/proxy_box.dart
+++ b/sky/packages/sky/lib/src/rendering/proxy_box.dart
@@ -6,8 +6,8 @@
import 'package:sky/painting/box_painter.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
import 'package:vector_math/vector_math.dart';
export 'package:sky/painting/box_painter.dart';
diff --git a/sky/packages/sky/lib/rendering/shifted_box.dart b/sky/packages/sky/lib/src/rendering/shifted_box.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/shifted_box.dart
rename to sky/packages/sky/lib/src/rendering/shifted_box.dart
index 22d8f4b..a7c32f6 100644
--- a/sky/packages/sky/lib/rendering/shifted_box.dart
+++ b/sky/packages/sky/lib/src/rendering/shifted_box.dart
@@ -4,8 +4,8 @@
import 'package:sky/painting/box_painter.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
diff --git a/sky/packages/sky/lib/rendering/sky_binding.dart b/sky/packages/sky/lib/src/rendering/sky_binding.dart
similarity index 97%
rename from sky/packages/sky/lib/rendering/sky_binding.dart
rename to sky/packages/sky/lib/src/rendering/sky_binding.dart
index 59f761c..4afacd3 100644
--- a/sky/packages/sky/lib/rendering/sky_binding.dart
+++ b/sky/packages/sky/lib/src/rendering/sky_binding.dart
@@ -8,9 +8,9 @@
import 'package:sky/base/hit_test.dart';
import 'package:sky/base/scheduler.dart' as scheduler;
import 'package:sky/gestures/arena.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/view.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/view.dart';
int _hammingWeight(int value) {
if (value == 0)
diff --git a/sky/packages/sky/lib/rendering/stack.dart b/sky/packages/sky/lib/src/rendering/stack.dart
similarity index 98%
rename from sky/packages/sky/lib/rendering/stack.dart
rename to sky/packages/sky/lib/src/rendering/stack.dart
index 0d850a6..4ee6eb5 100644
--- a/sky/packages/sky/lib/rendering/stack.dart
+++ b/sky/packages/sky/lib/src/rendering/stack.dart
@@ -4,8 +4,8 @@
import 'dart:math' as math;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
class StackParentData extends BoxParentData with ContainerParentDataMixin<RenderBox> {
double top;
diff --git a/sky/packages/sky/lib/rendering/toggleable.dart b/sky/packages/sky/lib/src/rendering/toggleable.dart
similarity index 93%
rename from sky/packages/sky/lib/rendering/toggleable.dart
rename to sky/packages/sky/lib/src/rendering/toggleable.dart
index 796f49c..c42d1d8 100644
--- a/sky/packages/sky/lib/rendering/toggleable.dart
+++ b/sky/packages/sky/lib/src/rendering/toggleable.dart
@@ -7,9 +7,9 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/proxy_box.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/proxy_box.dart';
typedef void ValueChanged(bool value);
diff --git a/sky/packages/sky/lib/rendering/view.dart b/sky/packages/sky/lib/src/rendering/view.dart
similarity index 95%
rename from sky/packages/sky/lib/rendering/view.dart
rename to sky/packages/sky/lib/src/rendering/view.dart
index e835ce3..f5c4637 100644
--- a/sky/packages/sky/lib/rendering/view.dart
+++ b/sky/packages/sky/lib/src/rendering/view.dart
@@ -5,9 +5,9 @@
import 'dart:sky' as sky;
import 'package:sky/base/scheduler.dart' as scheduler;
-import 'package:sky/rendering/layer.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/box.dart';
+import 'package:sky/src/rendering/layer.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
import 'package:vector_math/vector_math.dart';
class ViewConstraints {
diff --git a/sky/packages/sky/lib/rendering/viewport.dart b/sky/packages/sky/lib/src/rendering/viewport.dart
similarity index 97%
rename from sky/packages/sky/lib/rendering/viewport.dart
rename to sky/packages/sky/lib/src/rendering/viewport.dart
index 7b76645..96cc073 100644
--- a/sky/packages/sky/lib/rendering/viewport.dart
+++ b/sky/packages/sky/lib/src/rendering/viewport.dart
@@ -4,8 +4,8 @@
import 'dart:sky' as sky;
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
import 'package:vector_math/vector_math.dart';
enum ScrollDirection { horizontal, vertical, both }
diff --git a/sky/packages/sky/lib/widgets/README.md b/sky/packages/sky/lib/src/widgets/README.md
similarity index 100%
rename from sky/packages/sky/lib/widgets/README.md
rename to sky/packages/sky/lib/src/widgets/README.md
diff --git a/sky/packages/sky/lib/widgets/animated_component.dart b/sky/packages/sky/lib/src/widgets/animated_component.dart
similarity index 96%
rename from sky/packages/sky/lib/widgets/animated_component.dart
rename to sky/packages/sky/lib/src/widgets/animated_component.dart
index 7913410..2088a4d 100644
--- a/sky/packages/sky/lib/widgets/animated_component.dart
+++ b/sky/packages/sky/lib/src/widgets/animated_component.dart
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'package:sky/animation/animation_performance.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
abstract class AnimatedComponent extends StatefulComponent {
diff --git a/sky/packages/sky/lib/widgets/animated_container.dart b/sky/packages/sky/lib/src/widgets/animated_container.dart
similarity index 97%
rename from sky/packages/sky/lib/widgets/animated_container.dart
rename to sky/packages/sky/lib/src/widgets/animated_container.dart
index 4e53beb..0eb19b1 100644
--- a/sky/packages/sky/lib/widgets/animated_container.dart
+++ b/sky/packages/sky/lib/src/widgets/animated_container.dart
@@ -9,9 +9,9 @@
import 'package:sky/animation/curves.dart';
import 'package:sky/base/lerp.dart';
import 'package:sky/painting/box_painter.dart';
-import 'package:sky/widgets/animated_component.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/animated_component.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
class AnimatedBoxConstraintsValue extends AnimatedValue<BoxConstraints> {
AnimatedBoxConstraintsValue(BoxConstraints begin, { BoxConstraints end, Curve curve: linear })
diff --git a/sky/packages/sky/lib/widgets/basic.dart b/sky/packages/sky/lib/src/widgets/basic.dart
similarity index 93%
rename from sky/packages/sky/lib/widgets/basic.dart
rename to sky/packages/sky/lib/src/widgets/basic.dart
index e297864..af66756 100644
--- a/sky/packages/sky/lib/widgets/basic.dart
+++ b/sky/packages/sky/lib/src/widgets/basic.dart
@@ -11,29 +11,29 @@
import 'package:sky/mojo/net/image_cache.dart' as image_cache;
import 'package:sky/painting/text_painter.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/block.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/flex.dart';
-import 'package:sky/rendering/grid.dart';
-import 'package:sky/rendering/image.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/paragraph.dart';
-import 'package:sky/rendering/proxy_box.dart';
-import 'package:sky/rendering/shifted_box.dart';
-import 'package:sky/rendering/stack.dart';
-import 'package:sky/rendering/viewport.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/block.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/flex.dart';
+import 'package:sky/src/rendering/grid.dart';
+import 'package:sky/src/rendering/image.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/paragraph.dart';
+import 'package:sky/src/rendering/proxy_box.dart';
+import 'package:sky/src/rendering/shifted_box.dart';
+import 'package:sky/src/rendering/stack.dart';
+import 'package:sky/src/rendering/viewport.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
export 'package:sky/base/hit_test.dart' show EventDisposition, combineEventDispositions;
export 'package:sky/painting/text_style.dart';
-export 'package:sky/rendering/block.dart' show BlockDirection;
-export 'package:sky/rendering/box.dart' show BoxConstraints;
-export 'package:sky/rendering/flex.dart' show FlexJustifyContent, FlexAlignItems, FlexDirection;
-export 'package:sky/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
-export 'package:sky/rendering/proxy_box.dart' show BackgroundImage, BoxDecoration, BoxDecorationPosition, BoxShadow, Border, BorderSide, EdgeDims, Shape;
-export 'package:sky/rendering/toggleable.dart' show ValueChanged;
-export 'package:sky/rendering/viewport.dart' show ScrollDirection;
+export 'package:sky/src/rendering/block.dart' show BlockDirection;
+export 'package:sky/src/rendering/box.dart' show BoxConstraints;
+export 'package:sky/src/rendering/flex.dart' show FlexJustifyContent, FlexAlignItems, FlexDirection;
+export 'package:sky/src/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
+export 'package:sky/src/rendering/proxy_box.dart' show BackgroundImage, BoxDecoration, BoxDecorationPosition, BoxShadow, Border, BorderSide, EdgeDims, Shape;
+export 'package:sky/src/rendering/toggleable.dart' show ValueChanged;
+export 'package:sky/src/rendering/viewport.dart' show ScrollDirection;
// PAINTING NODES
@@ -487,10 +487,7 @@
RenderStack get renderObject => super.renderObject;
void updateParentData(RenderObject child, Positioned positioned) {
- if (positioned == null)
- _updateParentDataWithValues(child, null, null, null, null);
- else
- _updateParentDataWithValues(child, positioned.top, positioned.right, positioned.bottom, positioned.left);
+ _updateParentDataWithValues(child, positioned?.top, positioned?.right, positioned?.bottom, positioned?.left);
}
void _updateParentDataWithValues(RenderObject child, double top, double right, double bottom, double left) {
@@ -592,7 +589,7 @@
}
void updateParentData(RenderObject child, Flexible flexible) {
- _updateParentDataWithValues(child, flexible == null ? null : flexible.flex);
+ _updateParentDataWithValues(child, flexible?.flex);
}
void _updateParentDataWithValues(RenderObject child, int flex) {
diff --git a/sky/packages/sky/lib/widgets/button_base.dart b/sky/packages/sky/lib/src/widgets/button_base.dart
similarity index 95%
rename from sky/packages/sky/lib/widgets/button_base.dart
rename to sky/packages/sky/lib/src/widgets/button_base.dart
index bf0829f..7fd9b93 100644
--- a/sky/packages/sky/lib/widgets/button_base.dart
+++ b/sky/packages/sky/lib/src/widgets/button_base.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/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
abstract class ButtonBase extends StatefulComponent {
diff --git a/sky/packages/sky/lib/widgets/card.dart b/sky/packages/sky/lib/src/widgets/card.dart
similarity index 82%
rename from sky/packages/sky/lib/widgets/card.dart
rename to sky/packages/sky/lib/src/widgets/card.dart
index 3f86a78..db059fb 100644
--- a/sky/packages/sky/lib/widgets/card.dart
+++ b/sky/packages/sky/lib/src/widgets/card.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 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/material.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/material.dart';
const EdgeDims _kCardMargins = const EdgeDims.all(4.0);
diff --git a/sky/packages/sky/lib/widgets/checkbox.dart b/sky/packages/sky/lib/src/widgets/checkbox.dart
similarity index 94%
rename from sky/packages/sky/lib/widgets/checkbox.dart
rename to sky/packages/sky/lib/src/widgets/checkbox.dart
index 6e615d0..f4dc443 100644
--- a/sky/packages/sky/lib/widgets/checkbox.dart
+++ b/sky/packages/sky/lib/src/widgets/checkbox.dart
@@ -4,13 +4,13 @@
import 'dart:sky' as sky;
-import 'package:sky/rendering/object.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/rendering/toggleable.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/rendering/toggleable.dart';
-export 'package:sky/rendering/toggleable.dart' show ValueChanged;
+export 'package:sky/src/rendering/toggleable.dart' show ValueChanged;
const double _kMidpoint = 0.5;
const sky.Color _kLightUncheckedColor = const sky.Color(0x8A000000);
diff --git a/sky/packages/sky/lib/widgets/date_picker.dart b/sky/packages/sky/lib/src/widgets/date_picker.dart
similarity index 97%
rename from sky/packages/sky/lib/widgets/date_picker.dart
rename to sky/packages/sky/lib/src/widgets/date_picker.dart
index b6747be..101a809 100644
--- a/sky/packages/sky/lib/widgets/date_picker.dart
+++ b/sky/packages/sky/lib/src/widgets/date_picker.dart
@@ -9,12 +9,12 @@
import 'package:sky/mojo/activity.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/theme/typography.dart' as typography;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/scrollable.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/scrollable.dart';
+import 'package:sky/src/widgets/theme.dart';
typedef void DatePickerValueChanged(DateTime dateTime);
diff --git a/sky/packages/sky/lib/widgets/default_text_style.dart b/sky/packages/sky/lib/src/widgets/default_text_style.dart
similarity index 82%
rename from sky/packages/sky/lib/widgets/default_text_style.dart
rename to sky/packages/sky/lib/src/widgets/default_text_style.dart
index c4a763d..6339904 100644
--- a/sky/packages/sky/lib/widgets/default_text_style.dart
+++ b/sky/packages/sky/lib/src/widgets/default_text_style.dart
@@ -3,8 +3,8 @@
// found in the LICENSE file.
import 'package:sky/painting/text_style.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
class DefaultTextStyle extends Inherited {
@@ -21,7 +21,7 @@
static TextStyle of(Widget widget) {
DefaultTextStyle result = widget.inheritedOfType(DefaultTextStyle);
- return result == null ? null : result.style;
+ return result?.style;
}
bool syncShouldNotify(DefaultTextStyle old) => style != old.style;
diff --git a/sky/packages/sky/lib/widgets/dialog.dart b/sky/packages/sky/lib/src/widgets/dialog.dart
similarity index 90%
rename from sky/packages/sky/lib/widgets/dialog.dart
rename to sky/packages/sky/lib/src/widgets/dialog.dart
index 979b777..7ab5b32 100644
--- a/sky/packages/sky/lib/widgets/dialog.dart
+++ b/sky/packages/sky/lib/src/widgets/dialog.dart
@@ -7,16 +7,16 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/curves.dart';
import 'package:sky/theme/colors.dart' as colors;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/focus.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/material.dart';
-import 'package:sky/widgets/navigator.dart';
-import 'package:sky/widgets/scrollable.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/focus.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/material.dart';
+import 'package:sky/src/widgets/navigator.dart';
+import 'package:sky/src/widgets/scrollable.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/transitions.dart';
typedef Widget DialogBuilder(Navigator navigator);
diff --git a/sky/packages/sky/lib/widgets/dismissable.dart b/sky/packages/sky/lib/src/widgets/dismissable.dart
similarity index 96%
rename from sky/packages/sky/lib/widgets/dismissable.dart
rename to sky/packages/sky/lib/src/widgets/dismissable.dart
index c33b24e..321fc1c 100644
--- a/sky/packages/sky/lib/widgets/dismissable.dart
+++ b/sky/packages/sky/lib/src/widgets/dismissable.dart
@@ -7,10 +7,10 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/transitions.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/transitions.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
const Duration _kCardDismissFadeout = const Duration(milliseconds: 200);
const Duration _kCardDismissResize = const Duration(milliseconds: 300);
diff --git a/sky/packages/sky/lib/widgets/drag_target.dart b/sky/packages/sky/lib/src/widgets/drag_target.dart
similarity index 93%
rename from sky/packages/sky/lib/widgets/drag_target.dart
rename to sky/packages/sky/lib/src/widgets/drag_target.dart
index 63e8c1e..3b9b2d5 100644
--- a/sky/packages/sky/lib/widgets/drag_target.dart
+++ b/sky/packages/sky/lib/src/widgets/drag_target.dart
@@ -5,10 +5,10 @@
import 'dart:collection';
import 'package:sky/base/hit_test.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/sky_binding.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
typedef bool DragTargetWillAccept<T>(T data);
typedef void DragTargetAccept<T>(T data);
diff --git a/sky/packages/sky/lib/widgets/drawer.dart b/sky/packages/sky/lib/src/widgets/drawer.dart
similarity index 92%
rename from sky/packages/sky/lib/widgets/drawer.dart
rename to sky/packages/sky/lib/src/widgets/drawer.dart
index 1822e39..feb2a02 100644
--- a/sky/packages/sky/lib/widgets/drawer.dart
+++ b/sky/packages/sky/lib/src/widgets/drawer.dart
@@ -10,14 +10,14 @@
import 'package:sky/animation/forces.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/theme/shadows.dart';
-import 'package:sky/widgets/animated_container.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/navigator.dart';
-import 'package:sky/widgets/scrollable.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/animated_container.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/navigator.dart';
+import 'package:sky/src/widgets/scrollable.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/transitions.dart';
export 'package:sky/animation/animation_performance.dart' show AnimationStatus;
diff --git a/sky/packages/sky/lib/widgets/drawer_divider.dart b/sky/packages/sky/lib/src/widgets/drawer_divider.dart
similarity index 80%
rename from sky/packages/sky/lib/widgets/drawer_divider.dart
rename to sky/packages/sky/lib/src/widgets/drawer_divider.dart
index e29dd95..a73fbde 100644
--- a/sky/packages/sky/lib/widgets/drawer_divider.dart
+++ b/sky/packages/sky/lib/src/widgets/drawer_divider.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 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/theme.dart';
class DrawerDivider extends Component {
DrawerDivider({ Key key }) : super(key: key);
diff --git a/sky/packages/sky/lib/widgets/drawer_header.dart b/sky/packages/sky/lib/src/widgets/drawer_header.dart
similarity index 85%
rename from sky/packages/sky/lib/widgets/drawer_header.dart
rename to sky/packages/sky/lib/src/widgets/drawer_header.dart
index f2c7caf..64c393e 100644
--- a/sky/packages/sky/lib/widgets/drawer_header.dart
+++ b/sky/packages/sky/lib/src/widgets/drawer_header.dart
@@ -3,10 +3,10 @@
// found in the LICENSE file.
import 'package:sky/theme/view_configuration.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/theme.dart';
// TODO(jackson): This class should usually render the user's
// preferred banner image rather than a solid background
diff --git a/sky/packages/sky/lib/widgets/drawer_item.dart b/sky/packages/sky/lib/src/widgets/drawer_item.dart
similarity index 84%
rename from sky/packages/sky/lib/widgets/drawer_item.dart
rename to sky/packages/sky/lib/src/widgets/drawer_item.dart
index 84b8787..b81edf1 100644
--- a/sky/packages/sky/lib/widgets/drawer_item.dart
+++ b/sky/packages/sky/lib/src/widgets/drawer_item.dart
@@ -6,16 +6,16 @@
import 'package:sky/painting/text_style.dart';
import 'package:sky/theme/colors.dart' as colors;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/button_base.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/icon.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/button_base.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/icon.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/theme.dart';
-typedef EventDisposition OnPressedFunction();
+typedef void OnPressedFunction();
class DrawerItem extends ButtonBase {
DrawerItem({ Key key, this.icon, this.child, this.onPressed, this.selected: false })
diff --git a/sky/packages/sky/lib/widgets/flat_button.dart b/sky/packages/sky/lib/src/widgets/flat_button.dart
similarity index 82%
rename from sky/packages/sky/lib/widgets/flat_button.dart
rename to sky/packages/sky/lib/src/widgets/flat_button.dart
index f61e95d..d7bfe26 100644
--- a/sky/packages/sky/lib/widgets/flat_button.dart
+++ b/sky/packages/sky/lib/src/widgets/flat_button.dart
@@ -3,9 +3,9 @@
// found in the LICENSE file.
import 'package:sky/theme/colors.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/material_button.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/material_button.dart';
+import 'package:sky/src/widgets/theme.dart';
class FlatButton extends MaterialButton {
FlatButton({
diff --git a/sky/packages/sky/lib/widgets/floating_action_button.dart b/sky/packages/sky/lib/src/widgets/floating_action_button.dart
similarity index 82%
rename from sky/packages/sky/lib/widgets/floating_action_button.dart
rename to sky/packages/sky/lib/src/widgets/floating_action_button.dart
index e6efe33..ddc2eb0 100644
--- a/sky/packages/sky/lib/widgets/floating_action_button.dart
+++ b/sky/packages/sky/lib/src/widgets/floating_action_button.dart
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/button_base.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/icon.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/material.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/button_base.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/icon.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/material.dart';
+import 'package:sky/src/widgets/theme.dart';
// TODO(eseidel): This needs to change based on device size?
// http://www.google.com/design/spec/layout/metrics-keylines.html#metrics-keylines-keylines-spacing
diff --git a/sky/packages/sky/lib/widgets/focus.dart b/sky/packages/sky/lib/src/widgets/focus.dart
similarity index 99%
rename from sky/packages/sky/lib/widgets/focus.dart
rename to sky/packages/sky/lib/src/widgets/focus.dart
index 44f8aaa..139a8cb 100644
--- a/sky/packages/sky/lib/widgets/focus.dart
+++ b/sky/packages/sky/lib/src/widgets/focus.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/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
typedef void FocusChanged(GlobalKey key);
diff --git a/sky/packages/sky/lib/widgets/framework.dart b/sky/packages/sky/lib/src/widgets/framework.dart
similarity index 98%
rename from sky/packages/sky/lib/widgets/framework.dart
rename to sky/packages/sky/lib/src/widgets/framework.dart
index b29384b..bbd1253 100644
--- a/sky/packages/sky/lib/widgets/framework.dart
+++ b/sky/packages/sky/lib/src/widgets/framework.dart
@@ -9,14 +9,14 @@
import 'package:sky/base/hit_test.dart';
import 'package:sky/base/scheduler.dart' as scheduler;
import 'package:sky/mojo/activity.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/sky_binding.dart';
-import 'package:sky/rendering/view.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/rendering/view.dart';
export 'package:sky/base/hit_test.dart' show EventDisposition, combineEventDispositions;
-export 'package:sky/rendering/box.dart' show BoxConstraints, BoxDecoration, Border, BorderSide, EdgeDims;
-export 'package:sky/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
+export 'package:sky/src/rendering/box.dart' show BoxConstraints, BoxDecoration, Border, BorderSide, EdgeDims;
+export 'package:sky/src/rendering/object.dart' show Point, Offset, Size, Rect, Color, Paint, Path;
final bool _shouldLogRenderDuration = false; // see also 'enableProfilingLoop' argument to runApp()
@@ -498,7 +498,7 @@
}
void _sync(Widget old, dynamic slot) {
- Widget oldChild = old == null ? null : (old as TagNode).child;
+ Widget oldChild = (old as TagNode)?.child;
child = syncChild(child, oldChild, slot);
if (child != null) {
assert(child.parent == this);
@@ -1259,7 +1259,7 @@
void syncRenderObject(RenderObjectWrapper old) {
super.syncRenderObject(old);
- Widget oldChild = old == null ? null : (old as OneChildRenderObjectWrapper).child;
+ Widget oldChild = (old as OneChildRenderObjectWrapper)?.child;
Widget newChild = child;
_child = syncChild(newChild, oldChild, null);
assert((newChild == null && child == null) || (newChild != null && child.parent == this));
@@ -1304,7 +1304,7 @@
void insertChildRenderObject(RenderObjectWrapper child, Widget slot) {
final renderObject = this.renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
- RenderObject nextSibling = slot != null ? slot.renderObject : null;
+ RenderObject nextSibling = slot?.renderObject;
assert(nextSibling == null || nextSibling is RenderObject);
assert(renderObject is ContainerRenderObjectMixin);
renderObject.add(child.renderObject, before: nextSibling);
diff --git a/sky/packages/sky/lib/widgets/gesture_detector.dart b/sky/packages/sky/lib/src/widgets/gesture_detector.dart
similarity index 92%
rename from sky/packages/sky/lib/widgets/gesture_detector.dart
rename to sky/packages/sky/lib/src/widgets/gesture_detector.dart
index 768dad3..847e0b2 100644
--- a/sky/packages/sky/lib/widgets/gesture_detector.dart
+++ b/sky/packages/sky/lib/src/widgets/gesture_detector.dart
@@ -9,8 +9,8 @@
import 'package:sky/gestures/scroll.dart';
import 'package:sky/gestures/show_press.dart';
import 'package:sky/gestures/tap.dart';
-import 'package:sky/rendering/sky_binding.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/widgets/framework.dart';
class GestureDetector extends StatefulComponent {
GestureDetector({
@@ -52,12 +52,12 @@
onTap = source.onTap;
onShowPress = source.onShowPress;
onLongPress = source.onLongPress;
- onVerticalScrollStart = onVerticalScrollStart;
- onVerticalScrollUpdate = onVerticalScrollUpdate;
- onVerticalScrollEnd = onVerticalScrollEnd;
- onHorizontalScrollStart = onHorizontalScrollStart;
- onHorizontalScrollUpdate = onHorizontalScrollUpdate;
- onHorizontalScrollEnd = onHorizontalScrollEnd;
+ onVerticalScrollStart = source.onVerticalScrollStart;
+ onVerticalScrollUpdate = source.onVerticalScrollUpdate;
+ onVerticalScrollEnd = source.onVerticalScrollEnd;
+ onHorizontalScrollStart = source.onHorizontalScrollStart;
+ onHorizontalScrollUpdate = source.onHorizontalScrollUpdate;
+ onHorizontalScrollEnd = source.onHorizontalScrollEnd;
onPanStart = source.onPanStart;
onPanUpdate = source.onPanUpdate;
onPanEnd = source.onPanEnd;
diff --git a/sky/packages/sky/lib/widgets/homogeneous_viewport.dart b/sky/packages/sky/lib/src/widgets/homogeneous_viewport.dart
similarity index 93%
rename from sky/packages/sky/lib/widgets/homogeneous_viewport.dart
rename to sky/packages/sky/lib/src/widgets/homogeneous_viewport.dart
index e613112..c6c95e8 100644
--- a/sky/packages/sky/lib/widgets/homogeneous_viewport.dart
+++ b/sky/packages/sky/lib/src/widgets/homogeneous_viewport.dart
@@ -4,11 +4,11 @@
import 'dart:math' as math;
-import 'package:sky/rendering/block.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/basic.dart';
+import 'package:sky/src/rendering/block.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
typedef List<Widget> ListBuilder(int startIndex, int count);
@@ -65,7 +65,7 @@
}
void insertChildRenderObject(RenderObjectWrapper child, Widget slot) {
- RenderObject nextSibling = slot != null ? slot.renderObject : null;
+ RenderObject nextSibling = slot?.renderObject;
renderObject.add(child.renderObject, before: nextSibling);
}
@@ -83,6 +83,10 @@
_layoutDirty = true;
itemCount = newNode.itemCount;
}
+ if (itemsWrap != newNode.itemsWrap) {
+ _layoutDirty = true;
+ itemsWrap = newNode.itemsWrap;
+ }
if (itemExtent != newNode.itemExtent) {
_layoutDirty = true;
itemExtent = newNode.itemExtent;
diff --git a/sky/packages/sky/lib/widgets/icon.dart b/sky/packages/sky/lib/src/widgets/icon.dart
similarity index 93%
rename from sky/packages/sky/lib/widgets/icon.dart
rename to sky/packages/sky/lib/src/widgets/icon.dart
index 768cfc2..7aafe22 100644
--- a/sky/packages/sky/lib/widgets/icon.dart
+++ b/sky/packages/sky/lib/src/widgets/icon.dart
@@ -5,9 +5,9 @@
import 'dart:sky' as sky;
import 'package:sky/mojo/asset_bundle.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
enum IconThemeColor { white, black }
@@ -31,7 +31,7 @@
static IconThemeData of(Component component) {
IconTheme result = component.inheritedOfType(IconTheme);
- return result == null ? null : result.data;
+ return result?.data;
}
bool syncShouldNotify(IconTheme old) => data != old.data;
diff --git a/sky/packages/sky/lib/widgets/icon_button.dart b/sky/packages/sky/lib/src/widgets/icon_button.dart
similarity index 79%
rename from sky/packages/sky/lib/widgets/icon_button.dart
rename to sky/packages/sky/lib/src/widgets/icon_button.dart
index af32206..714f1ae 100644
--- a/sky/packages/sky/lib/widgets/icon_button.dart
+++ b/sky/packages/sky/lib/src/widgets/icon_button.dart
@@ -4,10 +4,10 @@
import 'dart:sky' as sky;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/icon.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/icon.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
class IconButton extends Component {
diff --git a/sky/packages/sky/lib/widgets/ink_well.dart b/sky/packages/sky/lib/src/widgets/ink_well.dart
similarity index 94%
rename from sky/packages/sky/lib/widgets/ink_well.dart
rename to sky/packages/sky/lib/src/widgets/ink_well.dart
index 6e2e22e..5844912 100644
--- a/sky/packages/sky/lib/widgets/ink_well.dart
+++ b/sky/packages/sky/lib/src/widgets/ink_well.dart
@@ -8,11 +8,11 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/proxy_box.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/proxy_box.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
const int _kSplashInitialOpacity = 0x30;
const double _kSplashCancelledVelocity = 0.7;
diff --git a/sky/packages/sky/lib/widgets/material.dart b/sky/packages/sky/lib/src/widgets/material.dart
similarity index 87%
rename from sky/packages/sky/lib/widgets/material.dart
rename to sky/packages/sky/lib/src/widgets/material.dart
index 5a03e6b..129f39d 100644
--- a/sky/packages/sky/lib/widgets/material.dart
+++ b/sky/packages/sky/lib/src/widgets/material.dart
@@ -4,11 +4,11 @@
import 'package:sky/painting/box_painter.dart';
import 'package:sky/theme/shadows.dart';
-import 'package:sky/widgets/animated_container.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/animated_container.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/theme.dart';
enum MaterialType { canvas, card, circle, button }
diff --git a/sky/packages/sky/lib/widgets/material_button.dart b/sky/packages/sky/lib/src/widgets/material_button.dart
similarity index 82%
rename from sky/packages/sky/lib/widgets/material_button.dart
rename to sky/packages/sky/lib/src/widgets/material_button.dart
index ca13b90..747c218 100644
--- a/sky/packages/sky/lib/widgets/material_button.dart
+++ b/sky/packages/sky/lib/src/widgets/material_button.dart
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/button_base.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/material.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/button_base.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/material.dart';
// Rather than using this class directly, please use FlatButton or RaisedButton.
abstract class MaterialButton extends ButtonBase {
diff --git a/sky/packages/sky/lib/widgets/mimic.dart b/sky/packages/sky/lib/src/widgets/mimic.dart
similarity index 97%
rename from sky/packages/sky/lib/widgets/mimic.dart
rename to sky/packages/sky/lib/src/widgets/mimic.dart
index b87028b..6d5f29a 100644
--- a/sky/packages/sky/lib/widgets/mimic.dart
+++ b/sky/packages/sky/lib/src/widgets/mimic.dart
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
abstract class GlobalKeyWatcher extends StatefulComponent {
GlobalKeyWatcher({
diff --git a/sky/packages/sky/lib/widgets/mimic_overlay.dart b/sky/packages/sky/lib/src/widgets/mimic_overlay.dart
similarity index 94%
rename from sky/packages/sky/lib/widgets/mimic_overlay.dart
rename to sky/packages/sky/lib/src/widgets/mimic_overlay.dart
index ef09885..f4958d6 100644
--- a/sky/packages/sky/lib/widgets/mimic_overlay.dart
+++ b/sky/packages/sky/lib/src/widgets/mimic_overlay.dart
@@ -5,10 +5,10 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/widgets/animated_component.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/mimic.dart';
+import 'package:sky/src/widgets/animated_component.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/mimic.dart';
class MimicOverlay extends AnimatedComponent {
MimicOverlay({
diff --git a/sky/packages/sky/lib/widgets/mixed_viewport.dart b/sky/packages/sky/lib/src/widgets/mixed_viewport.dart
similarity index 98%
rename from sky/packages/sky/lib/widgets/mixed_viewport.dart
rename to sky/packages/sky/lib/src/widgets/mixed_viewport.dart
index 5bd9dcf..dd2b420 100644
--- a/sky/packages/sky/lib/widgets/mixed_viewport.dart
+++ b/sky/packages/sky/lib/src/widgets/mixed_viewport.dart
@@ -4,11 +4,11 @@
import 'dart:collection';
-import 'package:sky/rendering/block.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/basic.dart';
+import 'package:sky/src/rendering/block.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/basic.dart';
// return null if index is greater than index of last entry
typedef Widget IndexedBuilder(int index);
diff --git a/sky/packages/sky/lib/widgets/modal_overlay.dart b/sky/packages/sky/lib/src/widgets/modal_overlay.dart
similarity index 75%
rename from sky/packages/sky/lib/widgets/modal_overlay.dart
rename to sky/packages/sky/lib/src/widgets/modal_overlay.dart
index 35595a8..16ed10f 100644
--- a/sky/packages/sky/lib/widgets/modal_overlay.dart
+++ b/sky/packages/sky/lib/src/widgets/modal_overlay.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 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
class ModalOverlay extends Component {
diff --git a/sky/packages/sky/lib/widgets/navigator.dart b/sky/packages/sky/lib/src/widgets/navigator.dart
similarity index 96%
rename from sky/packages/sky/lib/widgets/navigator.dart
rename to sky/packages/sky/lib/src/widgets/navigator.dart
index b848a97..8fa3a11 100644
--- a/sky/packages/sky/lib/widgets/navigator.dart
+++ b/sky/packages/sky/lib/src/widgets/navigator.dart
@@ -5,10 +5,10 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/focus.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/focus.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/transitions.dart';
typedef Widget RouteBuilder(Navigator navigator, RouteBase route);
diff --git a/sky/packages/sky/lib/widgets/popup_menu.dart b/sky/packages/sky/lib/src/widgets/popup_menu.dart
similarity index 94%
rename from sky/packages/sky/lib/widgets/popup_menu.dart
rename to sky/packages/sky/lib/src/widgets/popup_menu.dart
index 89a9248..f08d7b7 100644
--- a/sky/packages/sky/lib/widgets/popup_menu.dart
+++ b/sky/packages/sky/lib/src/widgets/popup_menu.dart
@@ -9,12 +9,12 @@
import 'package:sky/painting/box_painter.dart';
import 'package:sky/theme/colors.dart';
import 'package:sky/theme/shadows.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/navigator.dart';
-import 'package:sky/widgets/popup_menu_item.dart';
-import 'package:sky/widgets/scrollable.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/navigator.dart';
+import 'package:sky/src/widgets/popup_menu_item.dart';
+import 'package:sky/src/widgets/scrollable.dart';
+import 'package:sky/src/widgets/transitions.dart';
export 'package:sky/animation/animation_performance.dart' show AnimationStatus;
diff --git a/sky/packages/sky/lib/widgets/popup_menu_item.dart b/sky/packages/sky/lib/src/widgets/popup_menu_item.dart
similarity index 76%
rename from sky/packages/sky/lib/widgets/popup_menu_item.dart
rename to sky/packages/sky/lib/src/widgets/popup_menu_item.dart
index 1de7169..01cefe0 100644
--- a/sky/packages/sky/lib/widgets/popup_menu_item.dart
+++ b/sky/packages/sky/lib/src/widgets/popup_menu_item.dart
@@ -3,12 +3,12 @@
// found in the LICENSE file.
import 'package:sky/painting/text_style.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/theme.dart';
const double _kMenuItemHeight = 48.0;
const double _kBaselineOffsetFromBottom = 20.0;
diff --git a/sky/packages/sky/lib/widgets/progress_indicator.dart b/sky/packages/sky/lib/src/widgets/progress_indicator.dart
similarity index 95%
rename from sky/packages/sky/lib/widgets/progress_indicator.dart
rename to sky/packages/sky/lib/src/widgets/progress_indicator.dart
index 0aa56df..3688e43 100644
--- a/sky/packages/sky/lib/widgets/progress_indicator.dart
+++ b/sky/packages/sky/lib/src/widgets/progress_indicator.dart
@@ -8,10 +8,10 @@
import 'package:sky/animation/animation_performance.dart';
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/curves.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/transitions.dart';
const double _kLinearProgressIndicatorHeight = 6.0;
const double _kMinCircularProgressIndicatorSize = 15.0;
diff --git a/sky/packages/sky/lib/widgets/radio.dart b/sky/packages/sky/lib/src/widgets/radio.dart
similarity index 87%
rename from sky/packages/sky/lib/widgets/radio.dart
rename to sky/packages/sky/lib/src/widgets/radio.dart
index 034a0cb..6592ee9 100644
--- a/sky/packages/sky/lib/widgets/radio.dart
+++ b/sky/packages/sky/lib/src/widgets/radio.dart
@@ -4,12 +4,12 @@
import 'dart:sky' as sky;
-import 'package:sky/rendering/object.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/button_base.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/button_base.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/theme.dart';
const sky.Color _kLightOffColor = const sky.Color(0x8A000000);
const sky.Color _kDarkOffColor = const sky.Color(0xB2FFFFFF);
diff --git a/sky/packages/sky/lib/widgets/raised_button.dart b/sky/packages/sky/lib/src/widgets/raised_button.dart
similarity index 84%
rename from sky/packages/sky/lib/widgets/raised_button.dart
rename to sky/packages/sky/lib/src/widgets/raised_button.dart
index dffc878..23a8e25 100644
--- a/sky/packages/sky/lib/widgets/raised_button.dart
+++ b/sky/packages/sky/lib/src/widgets/raised_button.dart
@@ -3,10 +3,10 @@
// found in the LICENSE file.
import 'package:sky/theme/colors.dart' as colors;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/material_button.dart';
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/material_button.dart';
+import 'package:sky/src/widgets/theme.dart';
class RaisedButton extends MaterialButton {
diff --git a/sky/packages/sky/lib/widgets/scaffold.dart b/sky/packages/sky/lib/src/widgets/scaffold.dart
similarity index 97%
rename from sky/packages/sky/lib/widgets/scaffold.dart
rename to sky/packages/sky/lib/src/widgets/scaffold.dart
index c87c79c..ed3c29c 100644
--- a/sky/packages/sky/lib/widgets/scaffold.dart
+++ b/sky/packages/sky/lib/src/widgets/scaffold.dart
@@ -4,10 +4,10 @@
import 'dart:sky' as sky;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
import 'package:sky/theme/view_configuration.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
// Slots are painted in this order and hit tested in reverse of this order
enum ScaffoldSlots {
@@ -208,7 +208,7 @@
}
void insertChildRenderObject(RenderObjectWrapper child, ScaffoldSlots slot) {
- renderObject[slot] = child != null ? child.renderObject : null;
+ renderObject[slot] = child?.renderObject;
}
void detachChildRenderObject(RenderObjectWrapper child) {
diff --git a/sky/packages/sky/lib/widgets/scrollable.dart b/sky/packages/sky/lib/src/widgets/scrollable.dart
similarity index 97%
rename from sky/packages/sky/lib/widgets/scrollable.dart
rename to sky/packages/sky/lib/src/widgets/scrollable.dart
index bdd8b80..253ab48 100644
--- a/sky/packages/sky/lib/widgets/scrollable.dart
+++ b/sky/packages/sky/lib/src/widgets/scrollable.dart
@@ -13,15 +13,15 @@
import 'package:sky/animation/curves.dart';
import 'package:sky/animation/scroll_behavior.dart';
import 'package:sky/gestures/constants.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/viewport.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/homogeneous_viewport.dart';
-import 'package:sky/widgets/mixed_viewport.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/viewport.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/homogeneous_viewport.dart';
+import 'package:sky/src/widgets/mixed_viewport.dart';
-export 'package:sky/widgets/mixed_viewport.dart' show MixedViewportLayoutState;
+export 'package:sky/src/widgets/mixed_viewport.dart' show MixedViewportLayoutState;
// The GestureEvent velocity properties are pixels/second, config min,max limits are pixels/ms
const double _kMillisecondsPerSecond = 1000.0;
@@ -371,7 +371,13 @@
itemExtent != source.itemExtent ||
scrollDirection != source.scrollDirection;
+ if (itemsWrap != source.itemsWrap) {
+ _scrollBehavior = null;
+ scrollBehaviorUpdateNeeded = true;
+ }
+
padding = source.padding;
+ itemsWrap = source.itemsWrap;
itemExtent = source.itemExtent;
super.syncConstructorArguments(source); // update scrollDirection
@@ -492,7 +498,6 @@
void syncConstructorArguments(ScrollableList<T> source) {
items = source.items;
itemBuilder = source.itemBuilder;
- itemsWrap = source.itemsWrap;
super.syncConstructorArguments(source);
}
@@ -558,10 +563,6 @@
.clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset);
}
- EventDisposition _handlePointerDown(_) {
- return EventDisposition.ignored;
- }
-
EventDisposition _handleFlingStart(sky.GestureEvent event) {
double velocity = _eventVelocity(event);
double newScrollOffset = _snapScrollOffset(scrollOffset + velocity.sign * itemExtent)
diff --git a/sky/packages/sky/lib/widgets/sizing.md b/sky/packages/sky/lib/src/widgets/sizing.md
similarity index 100%
rename from sky/packages/sky/lib/widgets/sizing.md
rename to sky/packages/sky/lib/src/widgets/sizing.md
diff --git a/sky/packages/sky/lib/widgets/snack_bar.dart b/sky/packages/sky/lib/src/widgets/snack_bar.dart
similarity index 87%
rename from sky/packages/sky/lib/widgets/snack_bar.dart
rename to sky/packages/sky/lib/src/widgets/snack_bar.dart
index 4603fc8..2e5a521 100644
--- a/sky/packages/sky/lib/widgets/snack_bar.dart
+++ b/sky/packages/sky/lib/src/widgets/snack_bar.dart
@@ -8,13 +8,13 @@
import 'package:sky/animation/curves.dart';
import 'package:sky/painting/text_style.dart';
import 'package:sky/theme/typography.dart' as typography;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/material.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/material.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/transitions.dart';
export 'package:sky/animation/animation_performance.dart' show AnimationStatus;
diff --git a/sky/packages/sky/lib/widgets/switch.dart b/sky/packages/sky/lib/src/widgets/switch.dart
similarity index 92%
rename from sky/packages/sky/lib/widgets/switch.dart
rename to sky/packages/sky/lib/src/widgets/switch.dart
index 573716d..50614dd 100644
--- a/sky/packages/sky/lib/widgets/switch.dart
+++ b/sky/packages/sky/lib/src/widgets/switch.dart
@@ -7,15 +7,15 @@
import 'package:sky/painting/radial_reaction.dart';
import 'package:sky/painting/shadows.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
import 'package:sky/theme/shadows.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/rendering/toggleable.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/rendering/toggleable.dart';
-export 'package:sky/rendering/toggleable.dart' show ValueChanged;
+export 'package:sky/src/rendering/toggleable.dart' show ValueChanged;
const sky.Color _kThumbOffColor = const sky.Color(0xFFFAFAFA);
const sky.Color _kTrackOffColor = const sky.Color(0x42000000);
diff --git a/sky/packages/sky/lib/widgets/tabs.dart b/sky/packages/sky/lib/src/widgets/tabs.dart
similarity index 96%
rename from sky/packages/sky/lib/widgets/tabs.dart
rename to sky/packages/sky/lib/src/widgets/tabs.dart
index 0b78f85..804efe3 100644
--- a/sky/packages/sky/lib/widgets/tabs.dart
+++ b/sky/packages/sky/lib/src/widgets/tabs.dart
@@ -11,20 +11,20 @@
import 'package:sky/animation/curves.dart';
import 'package:sky/animation/scroll_behavior.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
-import 'package:sky/rendering/viewport.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/rendering/viewport.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/theme/typography.dart' as typography;
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/gesture_detector.dart';
-import 'package:sky/widgets/icon.dart';
-import 'package:sky/widgets/ink_well.dart';
-import 'package:sky/widgets/scrollable.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/transitions.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/gesture_detector.dart';
+import 'package:sky/src/widgets/icon.dart';
+import 'package:sky/src/widgets/ink_well.dart';
+import 'package:sky/src/widgets/scrollable.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/transitions.dart';
typedef void SelectedIndexChanged(int selectedIndex);
typedef void LayoutChanged(Size size, List<double> widths);
diff --git a/sky/packages/sky/lib/widgets/theme.dart b/sky/packages/sky/lib/src/widgets/theme.dart
similarity index 93%
rename from sky/packages/sky/lib/widgets/theme.dart
rename to sky/packages/sky/lib/src/widgets/theme.dart
index eb568f9..36a1ac7 100644
--- a/sky/packages/sky/lib/widgets/theme.dart
+++ b/sky/packages/sky/lib/src/widgets/theme.dart
@@ -3,7 +3,7 @@
// found in the LICENSE file.
import 'package:sky/theme/theme_data.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
export 'package:sky/theme/theme_data.dart' show ThemeData, ThemeBrightness;
diff --git a/sky/packages/sky/lib/widgets/title.dart b/sky/packages/sky/lib/src/widgets/title.dart
similarity index 81%
rename from sky/packages/sky/lib/widgets/title.dart
rename to sky/packages/sky/lib/src/widgets/title.dart
index f775529..be99b68 100644
--- a/sky/packages/sky/lib/widgets/title.dart
+++ b/sky/packages/sky/lib/src/widgets/title.dart
@@ -3,8 +3,8 @@
// found in the LICENSE file.
import 'package:sky/mojo/activity.dart';
-import 'package:sky/widgets/theme.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/theme.dart';
+import 'package:sky/src/widgets/framework.dart';
class Title extends Component {
diff --git a/sky/packages/sky/lib/widgets/tool_bar.dart b/sky/packages/sky/lib/src/widgets/tool_bar.dart
similarity index 89%
rename from sky/packages/sky/lib/widgets/tool_bar.dart
rename to sky/packages/sky/lib/src/widgets/tool_bar.dart
index 9ac4821..8eff10e 100644
--- a/sky/packages/sky/lib/widgets/tool_bar.dart
+++ b/sky/packages/sky/lib/src/widgets/tool_bar.dart
@@ -2,17 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/widgets/theme.dart';
+import 'package:sky/src/widgets/theme.dart';
import 'package:sky/painting/text_style.dart';
-import 'package:sky/rendering/flex.dart';
+import 'package:sky/src/rendering/flex.dart';
import 'package:sky/theme/shadows.dart';
import 'package:sky/theme/typography.dart' as typography;
import 'package:sky/theme/view_configuration.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/default_text_style.dart';
-import 'package:sky/widgets/framework.dart';
-import 'package:sky/widgets/icon.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/default_text_style.dart';
+import 'package:sky/src/widgets/framework.dart';
+import 'package:sky/src/widgets/icon.dart';
class ToolBar extends Component {
diff --git a/sky/packages/sky/lib/widgets/transitions.dart b/sky/packages/sky/lib/src/widgets/transitions.dart
similarity index 96%
rename from sky/packages/sky/lib/widgets/transitions.dart
rename to sky/packages/sky/lib/src/widgets/transitions.dart
index 8144f83..d94a6b7 100644
--- a/sky/packages/sky/lib/widgets/transitions.dart
+++ b/sky/packages/sky/lib/src/widgets/transitions.dart
@@ -4,15 +4,13 @@
import 'package:sky/animation/animated_value.dart';
import 'package:sky/animation/animation_performance.dart';
-import 'package:sky/widgets/animated_component.dart';
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/animated_component.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/framework.dart';
import 'package:vector_math/vector_math.dart';
export 'package:sky/animation/direction.dart' show Direction;
-dynamic _maybe(AnimatedValue x) => x != null ? x.value : null;
-
// A helper class to anchor widgets to one another. Pass an instance of this to
// a Transition, then use the build() method to create a child with the same
// transition applied.
@@ -270,7 +268,7 @@
performance.updateVariable(width);
if (height != null)
performance.updateVariable(height);
- return new SizedBox(width: _maybe(width), height: _maybe(height), child: child);
+ return new SizedBox(width: width?.value, height: height?.value, child: child);
}
}
diff --git a/sky/packages/sky/lib/widgets/widgets.md b/sky/packages/sky/lib/src/widgets/widgets.md
similarity index 100%
rename from sky/packages/sky/lib/widgets/widgets.md
rename to sky/packages/sky/lib/src/widgets/widgets.md
diff --git a/sky/packages/sky/lib/widgets.dart b/sky/packages/sky/lib/widgets.dart
index f38b6f9..44f290e 100644
--- a/sky/packages/sky/lib/widgets.dart
+++ b/sky/packages/sky/lib/widgets.dart
@@ -7,50 +7,50 @@
/// The Sky widget framework
library widgets;
-export 'package:sky/widgets/animated_component.dart';
-export 'package:sky/widgets/animated_container.dart';
-export 'package:sky/widgets/basic.dart';
-export 'package:sky/widgets/button_base.dart';
-export 'package:sky/widgets/card.dart';
-export 'package:sky/widgets/checkbox.dart';
-export 'package:sky/widgets/date_picker.dart';
-export 'package:sky/widgets/default_text_style.dart';
-export 'package:sky/widgets/dialog.dart';
-export 'package:sky/widgets/dismissable.dart';
-export 'package:sky/widgets/drag_target.dart';
-export 'package:sky/widgets/drawer.dart';
-export 'package:sky/widgets/drawer_divider.dart';
-export 'package:sky/widgets/drawer_header.dart';
-export 'package:sky/widgets/drawer_item.dart';
-export 'package:sky/widgets/flat_button.dart';
-export 'package:sky/widgets/floating_action_button.dart';
-export 'package:sky/widgets/focus.dart';
-export 'package:sky/widgets/framework.dart';
-export 'package:sky/widgets/gesture_detector.dart';
-export 'package:sky/widgets/homogeneous_viewport.dart';
-export 'package:sky/widgets/icon.dart';
-export 'package:sky/widgets/icon_button.dart';
-export 'package:sky/widgets/ink_well.dart';
-export 'package:sky/widgets/material.dart';
-export 'package:sky/widgets/material_button.dart';
-export 'package:sky/widgets/mimic.dart';
-export 'package:sky/widgets/mimic_overlay.dart';
-export 'package:sky/widgets/mixed_viewport.dart';
-export 'package:sky/widgets/modal_overlay.dart';
-export 'package:sky/widgets/navigator.dart';
-export 'package:sky/widgets/popup_menu.dart';
-export 'package:sky/widgets/popup_menu_item.dart';
-export 'package:sky/widgets/progress_indicator.dart';
-export 'package:sky/widgets/radio.dart';
-export 'package:sky/widgets/raised_button.dart';
-export 'package:sky/widgets/scaffold.dart';
-export 'package:sky/widgets/scrollable.dart';
-export 'package:sky/widgets/snack_bar.dart';
-export 'package:sky/widgets/switch.dart';
-export 'package:sky/widgets/tabs.dart';
-export 'package:sky/widgets/theme.dart';
-export 'package:sky/widgets/title.dart';
-export 'package:sky/widgets/tool_bar.dart';
-export 'package:sky/widgets/transitions.dart';
+export 'package:sky/src/widgets/animated_component.dart';
+export 'package:sky/src/widgets/animated_container.dart';
+export 'package:sky/src/widgets/basic.dart';
+export 'package:sky/src/widgets/button_base.dart';
+export 'package:sky/src/widgets/card.dart';
+export 'package:sky/src/widgets/checkbox.dart';
+export 'package:sky/src/widgets/date_picker.dart';
+export 'package:sky/src/widgets/default_text_style.dart';
+export 'package:sky/src/widgets/dialog.dart';
+export 'package:sky/src/widgets/dismissable.dart';
+export 'package:sky/src/widgets/drag_target.dart';
+export 'package:sky/src/widgets/drawer.dart';
+export 'package:sky/src/widgets/drawer_divider.dart';
+export 'package:sky/src/widgets/drawer_header.dart';
+export 'package:sky/src/widgets/drawer_item.dart';
+export 'package:sky/src/widgets/flat_button.dart';
+export 'package:sky/src/widgets/floating_action_button.dart';
+export 'package:sky/src/widgets/focus.dart';
+export 'package:sky/src/widgets/framework.dart';
+export 'package:sky/src/widgets/gesture_detector.dart';
+export 'package:sky/src/widgets/homogeneous_viewport.dart';
+export 'package:sky/src/widgets/icon.dart';
+export 'package:sky/src/widgets/icon_button.dart';
+export 'package:sky/src/widgets/ink_well.dart';
+export 'package:sky/src/widgets/material.dart';
+export 'package:sky/src/widgets/material_button.dart';
+export 'package:sky/src/widgets/mimic.dart';
+export 'package:sky/src/widgets/mimic_overlay.dart';
+export 'package:sky/src/widgets/mixed_viewport.dart';
+export 'package:sky/src/widgets/modal_overlay.dart';
+export 'package:sky/src/widgets/navigator.dart';
+export 'package:sky/src/widgets/popup_menu.dart';
+export 'package:sky/src/widgets/popup_menu_item.dart';
+export 'package:sky/src/widgets/progress_indicator.dart';
+export 'package:sky/src/widgets/radio.dart';
+export 'package:sky/src/widgets/raised_button.dart';
+export 'package:sky/src/widgets/scaffold.dart';
+export 'package:sky/src/widgets/scrollable.dart';
+export 'package:sky/src/widgets/snack_bar.dart';
+export 'package:sky/src/widgets/switch.dart';
+export 'package:sky/src/widgets/tabs.dart';
+export 'package:sky/src/widgets/theme.dart';
+export 'package:sky/src/widgets/title.dart';
+export 'package:sky/src/widgets/tool_bar.dart';
+export 'package:sky/src/widgets/transitions.dart';
export 'package:vector_math/vector_math.dart' show Matrix4;
diff --git a/sky/packages/sky/pubspec.yaml b/sky/packages/sky/pubspec.yaml
index 9dcd96d..cc50dc4 100644
--- a/sky/packages/sky/pubspec.yaml
+++ b/sky/packages/sky/pubspec.yaml
@@ -5,7 +5,7 @@
homepage: https://github.com/domokit/sky_engine/tree/master/sky/packages/sky
dependencies:
cassowary: ^0.1.7
- material_design_icons: ^0.0.2
+ material_design_icons: ^0.0.3
mojo_services: 0.0.23
mojo: 0.0.23
newton: ^0.1.2
@@ -15,4 +15,4 @@
vector_math: ^1.4.3
intl: ^0.12.4+2
environment:
- sdk: '>=1.8.0 <2.0.0'
+ sdk: '>=1.12.0 <2.0.0'
diff --git a/sky/shell/ios/sky_surface.h b/sky/shell/ios/sky_surface.h
index fea4f12..abed8ea 100644
--- a/sky/shell/ios/sky_surface.h
+++ b/sky/shell/ios/sky_surface.h
@@ -10,3 +10,7 @@
-(instancetype) initWithShellView:(sky::shell::ShellView *) shellView;
@end
+
+extern "C" {
+void SaveFrameToSkPicture();
+}
diff --git a/sky/shell/ios/sky_surface.mm b/sky/shell/ios/sky_surface.mm
index dc7d1ed..a0c78d6 100644
--- a/sky/shell/ios/sky_surface.mm
+++ b/sky/shell/ios/sky_surface.mm
@@ -385,3 +385,27 @@
}
@end
+
+void SaveFrameToSkPicture() {
+ @autoreleasepool {
+ NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
+ NSUserDomainMask, YES);
+ NSString* basePath = paths.firstObject;
+
+ if (basePath.length == 0) {
+ return;
+ }
+
+ NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
+ [formatter setDateFormat:@"HH_mm_ss"];
+ NSString* dateString = [formatter stringFromDate:[NSDate date]];
+ [formatter release];
+
+ NSString* path =
+ [NSString stringWithFormat:@"%@/%@.trace.skp", basePath, dateString];
+
+ base::FilePath filePath(path.UTF8String);
+ sky::shell::Shell::Shared().tracing_controller().SaveFrameToSkPicture(
+ filePath);
+ }
+}
diff --git a/sky/shell/shell_view.cc b/sky/shell/shell_view.cc
index 1a8e1b3..09942f2 100644
--- a/sky/shell/shell_view.cc
+++ b/sky/shell/shell_view.cc
@@ -63,5 +63,11 @@
base::Passed(&producer)));
}
+void ShellView::SaveFrameToSkPicture(base::FilePath& destination) {
+ shell_.ui_task_runner()->PostTask(
+ FROM_HERE, base::Bind(&Engine::SaveFrameToSkPicture,
+ engine_->GetWeakPtr(), destination));
+}
+
} // namespace shell
} // namespace sky
diff --git a/sky/shell/shell_view.h b/sky/shell/shell_view.h
index e924971..ac3472f 100644
--- a/sky/shell/shell_view.h
+++ b/sky/shell/shell_view.h
@@ -5,6 +5,7 @@
#ifndef SKY_SHELL_SHELL_VIEW_H_
#define SKY_SHELL_SHELL_VIEW_H_
+#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "mojo/public/cpp/system/data_pipe.h"
@@ -26,6 +27,8 @@
void StartDartTracing();
void StopDartTracing(mojo::ScopedDataPipeProducerHandle producer);
+ void SaveFrameToSkPicture(base::FilePath& destination);
+
private:
void CreateEngine();
void CreatePlatformView();
diff --git a/sky/shell/tracing_controller.cc b/sky/shell/tracing_controller.cc
index b0696b3..84bcf16 100644
--- a/sky/shell/tracing_controller.cc
+++ b/sky/shell/tracing_controller.cc
@@ -108,6 +108,12 @@
}
}
+void TracingController::SaveFrameToSkPicture(base::FilePath& destination) {
+ if (view_ != nullptr) {
+ view_->SaveFrameToSkPicture(destination);
+ }
+}
+
void TracingController::RegisterShellView(ShellView* view) {
view_ = view;
}
diff --git a/sky/shell/tracing_controller.h b/sky/shell/tracing_controller.h
index 4514cc8..e0a591d 100644
--- a/sky/shell/tracing_controller.h
+++ b/sky/shell/tracing_controller.h
@@ -35,6 +35,8 @@
// be merged before viewing in the trace viewer
void StopTracing(const base::FilePath& path);
+ void SaveFrameToSkPicture(base::FilePath& destination);
+
private:
std::unique_ptr<mojo::common::DataPipeDrainer> drainer_;
std::unique_ptr<base::File> trace_file_;
diff --git a/sky/shell/ui/engine.cc b/sky/shell/ui/engine.cc
index b3a4fa8..b9a3efd 100644
--- a/sky/shell/ui/engine.cc
+++ b/sky/shell/ui/engine.cc
@@ -12,6 +12,7 @@
#include "mojo/data_pipe_utils/data_pipe_utils.h"
#include "mojo/public/cpp/application/connect.h"
#include "services/asset_bundle/asset_unpacker_job.h"
+#include "sky/shell/gpu/picture_serializer.h"
#include "sky/engine/public/platform/WebInputEvent.h"
#include "sky/engine/public/platform/sky_display_metrics.h"
#include "sky/engine/public/platform/sky_display_metrics.h"
@@ -270,5 +271,10 @@
sky_view_->StopDartTracing(producer.Pass());
}
+void Engine::SaveFrameToSkPicture(const base::FilePath& destination) {
+ PassRefPtr<SkPicture> picture = Paint();
+ SerializePicture(destination.AsUTF8Unsafe().c_str(), picture.get());
+}
+
} // namespace shell
} // namespace sky
diff --git a/sky/shell/ui/engine.h b/sky/shell/ui/engine.h
index 765a6e7..8b68230 100644
--- a/sky/shell/ui/engine.h
+++ b/sky/shell/ui/engine.h
@@ -5,6 +5,7 @@
#ifndef SKY_SHELL_UI_ENGINE_H_
#define SKY_SHELL_UI_ENGINE_H_
+#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
@@ -61,6 +62,8 @@
void StartDartTracing();
void StopDartTracing(mojo::ScopedDataPipeProducerHandle producer);
+ void SaveFrameToSkPicture(const base::FilePath& destination);
+
private:
// UIDelegate implementation:
void ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request) override;
diff --git a/sky/tests/examples/card_collection.dart b/sky/tests/examples/card_collection.dart
index 5e00d0f..fdb4481 100644
--- a/sky/tests/examples/card_collection.dart
+++ b/sky/tests/examples/card_collection.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/widgets/card_collection.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/examples/overlay_geometry.dart b/sky/tests/examples/overlay_geometry.dart
index f88b11b..f0025e7 100644
--- a/sky/tests/examples/overlay_geometry.dart
+++ b/sky/tests/examples/overlay_geometry.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/widgets/overlay_geometry.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/examples/sector.dart b/sky/tests/examples/sector.dart
index 1c7af60..caabef1 100644
--- a/sky/tests/examples/sector.dart
+++ b/sky/tests/examples/sector.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/widgets/sector.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/examples/stocks.dart b/sky/tests/examples/stocks.dart
index 1e83a02..8af52f4 100644
--- a/sky/tests/examples/stocks.dart
+++ b/sky/tests/examples/stocks.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/stocks/lib/main.dart';
import '../../../examples/stocks/lib/stock_data.dart';
diff --git a/sky/tests/examples/styled_text.dart b/sky/tests/examples/styled_text.dart
index c0b0a3e..8d9f744 100644
--- a/sky/tests/examples/styled_text.dart
+++ b/sky/tests/examples/styled_text.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/widgets/styled_text.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/examples/tabs.dart b/sky/tests/examples/tabs.dart
index cdd1220..464bb06 100644
--- a/sky/tests/examples/tabs.dart
+++ b/sky/tests/examples/tabs.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/widgets/framework.dart';
import '../../../examples/widgets/tabs.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/raw/render_flex.dart b/sky/tests/raw/render_flex.dart
index 41091f2..c6c7dc3 100644
--- a/sky/tests/raw/render_flex.dart
+++ b/sky/tests/raw/render_flex.dart
@@ -4,7 +4,7 @@
import 'dart:sky' as sky;
-import 'package:sky/rendering/box.dart';
+import 'package:sky/rendering.dart';
import '../../../examples/rendering/flex.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/widgets/buttons.dart b/sky/tests/widgets/buttons.dart
index 767d6c1..7dde6d3 100644
--- a/sky/tests/widgets/buttons.dart
+++ b/sky/tests/widgets/buttons.dart
@@ -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 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/flat_button.dart';
-import 'package:sky/widgets/floating_action_button.dart';
-import 'package:sky/widgets/raised_button.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/flat_button.dart';
+import 'package:sky/src/widgets/floating_action_button.dart';
+import 'package:sky/src/widgets/raised_button.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/widgets/dialog.dart b/sky/tests/widgets/dialog.dart
index 38f4dca..8291b85 100644
--- a/sky/tests/widgets/dialog.dart
+++ b/sky/tests/widgets/dialog.dart
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:sky/widgets/basic.dart';
-import 'package:sky/widgets/dialog.dart';
+import 'package:sky/src/widgets/basic.dart';
+import 'package:sky/src/widgets/dialog.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/widgets/rounded_border.dart b/sky/tests/widgets/rounded_border.dart
index c091d13..6261291 100644
--- a/sky/tests/widgets/rounded_border.dart
+++ b/sky/tests/widgets/rounded_border.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/widgets/basic.dart';
+import 'package:sky/src/widgets/basic.dart';
import '../resources/display_list.dart';
diff --git a/sky/tests/widgets/stack_relayout_from_parent_data.dart b/sky/tests/widgets/stack_relayout_from_parent_data.dart
index f680cdd..eb72d43 100644
--- a/sky/tests/widgets/stack_relayout_from_parent_data.dart
+++ b/sky/tests/widgets/stack_relayout_from_parent_data.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/widgets/basic.dart';
+import 'package:sky/src/widgets/basic.dart';
import '../resources/display_list.dart';
diff --git a/sky/tools/skyx/bin/skyx.dart b/sky/tools/skyx/bin/skyx.dart
index 897e11c..9239a27 100644
--- a/sky/tools/skyx/bin/skyx.dart
+++ b/sky/tools/skyx/bin/skyx.dart
@@ -61,7 +61,7 @@
currentAssetDescriptor['density'] = density;
for (String theme in generateValues(assetDescriptor, 'theme', kThemes)) {
currentAssetDescriptor['theme'] = theme;
- for (String size in generateValues(assetDescriptor, 'size', kSizes)) {
+ for (int size in generateValues(assetDescriptor, 'size', kSizes)) {
currentAssetDescriptor['size'] = size;
yield new MaterialAsset(currentAssetDescriptor);
}
diff --git a/sky/tools/skyx/pubspec.yaml b/sky/tools/skyx/pubspec.yaml
index 2475627..ea305a0 100644
--- a/sky/tools/skyx/pubspec.yaml
+++ b/sky/tools/skyx/pubspec.yaml
@@ -4,6 +4,6 @@
args: '>=0.13.0 <1.0.0'
yaml: '>=2.1.3 <3.0.0'
description: Developer tool for packaging Sky applications
-homepage: https://github.com/domokit/mojo/tree/master/sky/tools/skyx
+homepage: https://github.com/domokit/sky_engine/tree/master/sky/tools/skyx
name: skyx
-version: 0.0.2
+version: 0.0.3
diff --git a/sky/unit/test/widget/pageable_list_test.dart b/sky/unit/test/widget/pageable_list_test.dart
index deeeafd..1886245 100644
--- a/sky/unit/test/widget/pageable_list_test.dart
+++ b/sky/unit/test/widget/pageable_list_test.dart
@@ -7,6 +7,7 @@
const Size pageSize = const Size(800.0, 600.0);
const List<int> pages = const <int>[0, 1, 2, 3, 4, 5];
int currentPage = null;
+bool itemsWrap = false;
Widget buildPage(int page) {
return new Container(
@@ -17,7 +18,7 @@
);
}
-Widget buildFrame({ bool itemsWrap: false }) {
+Widget buildFrame() {
// The test framework forces the frame (and so the PageableList)
// to be 800x600. The pageSize constant reflects as much.
return new PageableList<int>(
@@ -55,6 +56,7 @@
test('Scroll left from page 0 to page 1', () {
WidgetTester tester = new WidgetTester();
currentPage = null;
+ itemsWrap = false;
tester.pumpFrame(buildFrame);
expect(currentPage, isNull);
pageLeft(tester);
@@ -64,6 +66,7 @@
test('Underscroll (scroll right), return to page 0', () {
WidgetTester tester = new WidgetTester();
currentPage = null;
+ itemsWrap = false;
tester.pumpFrame(buildFrame);
expect(currentPage, isNull);
pageRight(tester);
@@ -72,10 +75,13 @@
// PageableList with itemsWrap: true
+ itemsWrap = true;
+
test('Scroll left page 0 to page 1, itemsWrap: true', () {
WidgetTester tester = new WidgetTester();
currentPage = null;
- tester.pumpFrame(() { return buildFrame(itemsWrap: true); });
+ itemsWrap = true;
+ tester.pumpFrame(buildFrame);
expect(currentPage, isNull);
pageLeft(tester);
expect(currentPage, equals(1));
@@ -84,7 +90,8 @@
test('Scroll right from page 0 to page 5, itemsWrap: true', () {
WidgetTester tester = new WidgetTester();
currentPage = null;
- tester.pumpFrame(() { return buildFrame(itemsWrap: true); });
+ itemsWrap = true;
+ tester.pumpFrame(buildFrame);
expect(currentPage, isNull);
pageRight(tester);
expect(currentPage, equals(5));
diff --git a/skysprites/lib/skysprites.dart b/skysprites/lib/skysprites.dart
index e079cda..3bb57b1 100644
--- a/skysprites/lib/skysprites.dart
+++ b/skysprites/lib/skysprites.dart
@@ -15,10 +15,10 @@
import 'package:sky/base/scheduler.dart' as scheduler;
import 'package:sky/mojo/asset_bundle.dart';
import 'package:sky/mojo/shell.dart' as shell;
-import 'package:sky/rendering/box.dart';
-import 'package:sky/rendering/object.dart';
import 'package:sky/painting/text_painter.dart';
-import 'package:sky/widgets/framework.dart';
+import 'package:sky/src/rendering/box.dart';
+import 'package:sky/src/rendering/object.dart';
+import 'package:sky/src/widgets/framework.dart';
import 'package:sky_services/media/media.mojom.dart';
import 'package:vector_math/vector_math.dart';