mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
146 lines
3.7 KiB
Dart
146 lines
3.7 KiB
Dart
|
|
import 'package:sky/framework/rendering/node.dart';
|
|
import 'package:sky/framework/rendering/box.dart';
|
|
import 'dart:sky' as sky;
|
|
|
|
typedef void Logger (String s);
|
|
|
|
class TestDisplayList extends RenderNodeDisplayList {
|
|
TestDisplayList(double width, double height, this.logger, { this.indent: '' }) :
|
|
this.width = width,
|
|
this.height = height,
|
|
super(width, height) {
|
|
log("TestDisplayList() constructor: $width x $height");
|
|
}
|
|
|
|
final String indent;
|
|
final double width;
|
|
final double height;
|
|
|
|
Logger logger;
|
|
void log(String s) {
|
|
logger("${indent} ${s}");
|
|
}
|
|
|
|
String explainPaint(sky.Paint paint) {
|
|
return "Paint(0x${paint.color.value.toRadixString(16).padLeft(8, '0')})";
|
|
}
|
|
|
|
void save() {
|
|
log("save");
|
|
}
|
|
|
|
void saveLayer(sky.Rect bounds, sky.Paint paint) {
|
|
log("saveLayer(${bounds.top}:${bounds.left}:${bounds.bottom}:${bounds.right}, ${explainPaint(paint)})");
|
|
}
|
|
|
|
void restore() {
|
|
log("restore");
|
|
}
|
|
|
|
void translate(double dx, double dy) {
|
|
log("translate($dx, $dy)");
|
|
}
|
|
|
|
void scale(double sx, double sy) {
|
|
log("scale($sx, $sy)");
|
|
}
|
|
|
|
void rotateDegrees(double degrees) {
|
|
log("rotateDegrees($degrees)");
|
|
}
|
|
|
|
void skew(double sx, double sy) {
|
|
log("skew($sx, $sy)");
|
|
}
|
|
|
|
void concat(List<double> matrix9) {
|
|
log("concat($matrix9)");
|
|
}
|
|
|
|
void clipRect(sky.Rect rect) {
|
|
log("clipRect(${rect.top}:${rect.left}:${rect.bottom}:${rect.right})");
|
|
}
|
|
|
|
void drawPicture(sky.Picture picture) {
|
|
log("drawPicture()");
|
|
}
|
|
|
|
void drawPaint(sky.Paint paint) {
|
|
log("drawPaint(${explainPaint(paint)})");
|
|
}
|
|
|
|
void drawRect(sky.Rect rect, sky.Paint paint) {
|
|
log("drawRect(${rect.top}:${rect.left}:${rect.bottom}:${rect.right}, ${explainPaint(paint)})");
|
|
}
|
|
|
|
void drawOval(sky.Rect rect, sky.Paint paint) {
|
|
log("drawOval(${rect.top}:${rect.left}:${rect.bottom}:${rect.right}, ${explainPaint(paint)})");
|
|
}
|
|
|
|
void drawCircle(double x, double y, double radius, sky.Paint paint) {
|
|
log("drawCircle($x, $y, $radius, ${explainPaint(paint)})");
|
|
}
|
|
|
|
void drawPath(sky.Path path, sky.Paint paint) {
|
|
log("drawPath(Path, ${explainPaint(paint)})");
|
|
}
|
|
|
|
void paintChild(RenderNode child, sky.Point position) {
|
|
log("paintChild at ${position.x},${position.y}");
|
|
child.paint(new TestDisplayList(width, height, logger, indent: "$indent |"));
|
|
}
|
|
}
|
|
|
|
class TestView extends RenderView {
|
|
|
|
TestView({
|
|
RenderBox child,
|
|
Duration timeForRotation
|
|
}) : super(child: child, timeForRotation: timeForRotation) {
|
|
print("TestView enabled");
|
|
}
|
|
|
|
int frame = 0;
|
|
|
|
String lastPaint = '';
|
|
void log(String s) {
|
|
lastPaint += "\n$s";
|
|
}
|
|
|
|
void paintFrame() {
|
|
RenderNode.debugDoingPaint = true;
|
|
frame += 1;
|
|
log("PAINT FOR FRAME #${frame} ----------------------------------------------");
|
|
var canvas = new TestDisplayList(sky.view.width, sky.view.height, log, indent: "${frame} |");
|
|
paint(canvas);
|
|
log("------------------------------------------------------------------------");
|
|
RenderNode.debugDoingPaint = false;
|
|
}
|
|
|
|
}
|
|
|
|
class TestApp {
|
|
|
|
TestApp(RenderBox root) {
|
|
_renderView = new TestView(child: root);
|
|
_renderView.attach();
|
|
_renderView.layout(new ViewConstraints(width: sky.view.width, height: sky.view.height));
|
|
_renderView.paintFrame();
|
|
print(_renderView.lastPaint); // TODO(ianh): figure out how to make this fit the unit testing framework better
|
|
}
|
|
|
|
RenderView _renderView;
|
|
|
|
RenderBox get root => _renderView.child;
|
|
void set root(RenderBox value) {
|
|
_renderView.child = value;
|
|
}
|
|
void _beginFrame(double timeStamp) {
|
|
RenderNode.flushLayout();
|
|
_renderView.paintFrame();
|
|
print(_renderView.lastPaint); // TODO(ianh): figure out how to make this fit the unit testing framework better
|
|
}
|
|
|
|
}
|