blob: 070af593c95753961b646a1eb60a86d7a9a8d056 [file] [log] [blame]
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
}
}