Index: sky/sdk/lib/rendering/box.dart |
diff --git a/sky/sdk/lib/rendering/box.dart b/sky/sdk/lib/rendering/box.dart |
index 118e78b84223e5e39c5ce78e5d5fbd42bf7a236e..91ce47d20c51fc98b39ba86279e8887734fc8fb2 100644 |
--- a/sky/sdk/lib/rendering/box.dart |
+++ b/sky/sdk/lib/rendering/box.dart |
@@ -429,9 +429,9 @@ class RenderProxyBox extends RenderBox with RenderObjectWithChildMixin<RenderBox |
super.hitTestChildren(result, position: position); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
} |
} |
@@ -550,7 +550,7 @@ class RenderOpacity extends RenderProxyBox { |
markNeedsPaint(); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) { |
int a = (_opacity * 255).round(); |
@@ -558,7 +558,7 @@ class RenderOpacity extends RenderProxyBox { |
return; |
if (a == 255) { |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
return; |
} |
@@ -566,7 +566,7 @@ class RenderOpacity extends RenderProxyBox { |
..color = new Color.fromARGB(a, 0, 0, 0) |
..setTransferMode(sky.TransferMode.srcOver); |
canvas.saveLayer(null, paint); |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
canvas.restore(); |
} |
} |
@@ -597,12 +597,12 @@ class RenderColorFilter extends RenderProxyBox { |
markNeedsPaint(); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) { |
Paint paint = new Paint() |
..setColorFilter(new sky.ColorFilter.mode(_color, _transferMode)); |
canvas.saveLayer(null, paint); |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
canvas.restore(); |
} |
} |
@@ -611,11 +611,11 @@ class RenderColorFilter extends RenderProxyBox { |
class RenderClipRect extends RenderProxyBox { |
RenderClipRect({ RenderBox child }) : super(child); |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) { |
canvas.save(); |
- canvas.clipRect(new Rect.fromSize(size)); |
- child.paint(canvas); |
+ canvas.clipRect(offset + size); |
+ child.paint(canvas, offset); |
canvas.restore(); |
} |
} |
@@ -648,13 +648,13 @@ class RenderClipRRect extends RenderProxyBox { |
markNeedsPaint(); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) { |
- Rect rect = new Rect.fromSize(size); |
+ Rect rect = offset + size; |
abarth-chromium
2015/06/27 00:39:37
This looks really slick, but I wonder if it's goin
|
canvas.saveLayer(rect, new Paint()); |
sky.RRect rrect = new sky.RRect()..setRectXY(rect, xRadius, yRadius); |
canvas.clipRRect(rrect); |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
canvas.restore(); |
} |
} |
@@ -663,14 +663,14 @@ class RenderClipRRect extends RenderProxyBox { |
class RenderClipOval extends RenderProxyBox { |
RenderClipOval({ RenderBox child }) : super(child); |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) { |
- Rect rect = new Rect.fromSize(size); |
+ Rect rect = offset + size; |
canvas.saveLayer(rect, new Paint()); |
Path path = new Path(); |
path.addOval(rect); |
canvas.clipPath(path); |
- child.paint(canvas); |
+ child.paint(canvas, offset); |
canvas.restore(); |
} |
} |
@@ -684,9 +684,9 @@ abstract class RenderShiftedBox extends RenderBox with RenderObjectWithChildMixi |
this.child = child; |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) |
- canvas.paintChild(child, child.parentData.position); |
+ canvas.paintChild(child, child.parentData.position + offset); |
} |
double getDistanceToActualBaseline(TextBaseline baseline) { |
@@ -934,17 +934,20 @@ class RenderImage extends RenderBox { |
size = _sizeForConstraints(constraints); |
} |
- void paint(RenderCanvas canvas) { |
- if (_image == null) return; |
+ void paint(RenderCanvas canvas, Offset offset) { |
+ if (_image == null) |
+ return; |
bool needsScale = size.width != _image.width || size.height != _image.height; |
if (needsScale) { |
double widthScale = size.width / _image.width; |
double heightScale = size.height / _image.height; |
canvas.save(); |
+ canvas.translate(offset.dx, offset.dy); |
canvas.scale(widthScale, heightScale); |
+ offset = Offset.zero; |
} |
Paint paint = new Paint(); |
- canvas.drawImage(_image, Point.origin, paint); |
+ canvas.drawImage(_image, offset.toPoint(), paint); |
if (needsScale) |
canvas.restore(); |
} |
@@ -969,11 +972,11 @@ class RenderDecoratedBox extends RenderProxyBox { |
markNeedsPaint(); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
assert(size.width != null); |
assert(size.height != null); |
- _painter.paint(canvas, new Rect.fromSize(size)); |
- super.paint(canvas); |
+ _painter.paint(canvas, offset + size); |
+ super.paint(canvas, offset); |
} |
String debugDescribeSettings(String prefix) => '${super.debugDescribeSettings(prefix)}${prefix}decoration:\n${_painter.decoration.toString(prefix + " ")}\n'; |
@@ -1039,10 +1042,11 @@ class RenderTransform extends RenderProxyBox { |
super.hitTestChildren(result, position: transformed); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
canvas.save(); |
+ canvas.translate(offset.dx, offset.dy); |
canvas.concat(_transform.storage); |
- super.paint(canvas); |
+ super.paint(canvas, Offset.zero); |
canvas.restore(); |
} |
@@ -1101,10 +1105,12 @@ class RenderCustomPaint extends RenderProxyBox { |
super.attach(); |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
assert(_callback != null); |
+ canvas.translate(offset.dx, offset.dy); |
_callback(canvas, size); |
- super.paint(canvas); |
+ super.paint(canvas, Offset.zero); |
+ canvas.translate(-offset.dx, -offset.dy); |
abarth-chromium
2015/06/27 00:39:37
It's a shame that custom paint callbacks need to p
|
} |
} |
@@ -1175,9 +1181,9 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox> |
return true; |
} |
- void paint(RenderCanvas canvas) { |
+ void paint(RenderCanvas canvas, Offset offset) { |
if (child != null) |
- canvas.paintChild(child, Point.origin); |
+ canvas.paintChild(child, offset.toPoint()); |
} |
void paintFrame() { |
@@ -1186,7 +1192,7 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin<RenderBox> |
try { |
sky.PictureRecorder recorder = new sky.PictureRecorder(); |
RenderCanvas canvas = new RenderCanvas(recorder, _size); |
- paint(canvas); |
+ paint(canvas, Offset.zero); |
sky.view.picture = recorder.endRecording(); |
} finally { |
RenderObject.debugDoingPaint = false; |
@@ -1249,11 +1255,11 @@ abstract class RenderBoxContainerDefaultsMixin<ChildType extends RenderBox, Pare |
} |
} |
- void defaultPaint(RenderCanvas canvas) { |
+ void defaultPaint(RenderCanvas canvas, Offset offset) { |
RenderBox child = firstChild; |
while (child != null) { |
assert(child.parentData is ParentDataType); |
- canvas.paintChild(child, child.parentData.position); |
+ canvas.paintChild(child, child.parentData.position + offset); |
child = child.parentData.nextSibling; |
} |
} |