| import 'package:flutter/rendering.dart'; |
| |
| const Size _kTestViewSize = const Size(800.0, 600.0); |
| |
| class TestRenderView extends RenderView { |
| TestRenderView() { |
| attach(); |
| rootConstraints = new ViewConstraints(size: _kTestViewSize); |
| scheduleInitialLayout(); |
| scheduleInitialPaint(new TransformLayer(transform: new Matrix4.identity())); |
| } |
| } |
| |
| enum EnginePhase { |
| layout, |
| paint, |
| composite |
| } |
| |
| RenderView _renderView; |
| RenderView get renderView => _renderView; |
| |
| void layout(RenderBox box, { BoxConstraints constraints, EnginePhase phase: EnginePhase.layout }) { |
| assert(box != null); // if you want to just repump the last box, call pumpFrame(). |
| |
| if (renderView == null) |
| _renderView = new TestRenderView(); |
| |
| if (renderView.child != null) |
| renderView.child = null; |
| |
| if (constraints != null) { |
| box = new RenderPositionedBox( |
| child: new RenderConstrainedBox( |
| additionalConstraints: constraints, |
| child: box |
| ) |
| ); |
| } |
| |
| renderView.child = box; |
| |
| pumpFrame(phase: phase); |
| } |
| |
| void pumpFrame({ EnginePhase phase: EnginePhase.layout }) { |
| RenderObject.flushLayout(); |
| if (phase == EnginePhase.layout) |
| return; |
| renderView.updateCompositingBits(); |
| RenderObject.flushPaint(); |
| if (phase == EnginePhase.paint) |
| return; |
| renderView.compositeFrame(); |
| } |