Skip to content

Commit

Permalink
Call drawPaint instead of drawPath if there's clip (flutter#5937)
Browse files Browse the repository at this point in the history
If we want to avoid the bleeding edge artifact (flutter/flutter#18057 (comment)) using saveLayer, we have to call drawPaint instead of drawPath as anti-aliased drawPath will always have such artifacts.

This is discovered when I try to add golden tests for such bleeding artifacts using our new Clip enum. Here's the updated golden files: flutter/goldens@cb1fa8a?short_path=57b30ce#diff-57b30cea9b10b7ca689009854e12d70e
  • Loading branch information
liyuqian authored Aug 4, 2018
1 parent 597a508 commit ecbb2b2
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions flow/layers/physical_shape_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,6 @@ void PhysicalShapeLayer::Paint(PaintContext& context) const {
SkColorGetA(color_) != 0xff, device_pixel_ratio_);
}

SkPaint paint;
paint.setColor(color_);
context.canvas.drawPath(path_, paint);

int saveCount = context.canvas.save();
switch (clip_behavior_) {
case Clip::hardEdge:
Expand All @@ -107,6 +103,18 @@ void PhysicalShapeLayer::Paint(PaintContext& context) const {
break;
}

SkPaint paint;
paint.setColor(color_);
if (clip_behavior_ == Clip::none) {
context.canvas.drawPath(path_, paint);
} else {
// If we want to avoid the bleeding edge artifact
// (https://github.com/flutter/flutter/issues/18057#issue-328003931)
// using saveLayer, we have to call drawPaint instead of drawPath as
// anti-aliased drawPath will always have such artifacts.
context.canvas.drawPaint(paint);
}

PaintChildren(context);

context.canvas.restoreToCount(saveCount);
Expand Down

0 comments on commit ecbb2b2

Please sign in to comment.