From dda253bb29c2b85a29cadddff37e86546dd5745f Mon Sep 17 00:00:00 2001 From: Hixie Date: Thu, 20 Aug 2015 15:28:46 -0700 Subject: [PATCH] Reorder bootstrapping code in rendering/ for slightly cleaner code. --- packages/flutter/lib/rendering/object.dart | 3 ++- packages/flutter/lib/rendering/sky_binding.dart | 5 ++--- packages/flutter/lib/rendering/view.dart | 11 ++++++++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/flutter/lib/rendering/object.dart b/packages/flutter/lib/rendering/object.dart index 7b1cc7450e..6099e29715 100644 --- a/packages/flutter/lib/rendering/object.dart +++ b/packages/flutter/lib/rendering/object.dart @@ -394,6 +394,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { void scheduleInitialLayout() { assert(attached); assert(parent is! RenderObject); + assert(!_debugDoingLayout); assert(_relayoutSubtreeRoot == null); _relayoutSubtreeRoot = this; assert(() { @@ -401,7 +402,6 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { return true; }); _nodesNeedingLayout.add(this); - scheduler.ensureVisualUpdate(); } static void flushLayout() { sky.tracing.begin('RenderObject.flushLayout'); @@ -648,6 +648,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { assert(parent is! RenderObject); assert(!_debugDoingPaint); assert(hasLayer); + assert(_layer == null); _layer = rootLayer; assert(_needsPaint); _nodesNeedingPaint.add(this); diff --git a/packages/flutter/lib/rendering/sky_binding.dart b/packages/flutter/lib/rendering/sky_binding.dart index e950ee6ef5..d993d8db25 100644 --- a/packages/flutter/lib/rendering/sky_binding.dart +++ b/packages/flutter/lib/rendering/sky_binding.dart @@ -40,11 +40,10 @@ class SkyBinding { sky.view.setMetricsChangedCallback(_handleMetricsChanged); scheduler.init(); if (renderViewOverride == null) { - _renderView = new RenderView(child: root); + _renderView = new RenderView(child: root, devicePixelRatio: sky.view.devicePixelRatio); _renderView.attach(); _renderView.rootConstraints = _createConstraints(); - _renderView.scheduleInitialLayout(); - _renderView.initializeLayerTree(); + _renderView.scheduleInitialFrame(); } else { _renderView = renderViewOverride; } diff --git a/packages/flutter/lib/rendering/view.dart b/packages/flutter/lib/rendering/view.dart index 7366896b6b..09ad7ec1a5 100644 --- a/packages/flutter/lib/rendering/view.dart +++ b/packages/flutter/lib/rendering/view.dart @@ -4,6 +4,7 @@ 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'; @@ -21,17 +22,20 @@ class ViewConstraints { class RenderView extends RenderObject with RenderObjectWithChildMixin { RenderView({ RenderBox child, + this.devicePixelRatio, this.timeForRotation: const Duration(microseconds: 83333) }) { this.child = child; } + final double devicePixelRatio; + Duration timeForRotation; + Size _size = Size.zero; Size get size => _size; int _orientation; // 0..3 int get orientation => _orientation; - Duration timeForRotation; ViewConstraints _rootConstraints; ViewConstraints get rootConstraints => _rootConstraints; @@ -42,10 +46,11 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin markNeedsLayout(); } - void initializeLayerTree() { - final double devicePixelRatio = sky.view.devicePixelRatio; + void scheduleInitialFrame() { Matrix4 logicalToDeviceZoom = new Matrix4.diagonal3Values(devicePixelRatio, devicePixelRatio, 1.0); + scheduleInitialLayout(); scheduleInitialPaint(new TransformLayer(transform: logicalToDeviceZoom)); + scheduler.ensureVisualUpdate(); } // We never call layout() on this class, so this should never get