diff options
Diffstat (limited to 'gm/savelayer.cpp')
-rw-r--r-- | gm/savelayer.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp index 32f95bfc7d..77218206c7 100644 --- a/gm/savelayer.cpp +++ b/gm/savelayer.cpp @@ -238,3 +238,42 @@ DEF_SIMPLE_GM(savelayer_clipmask, canvas, 1200, 1200) { } } } + +DEF_SIMPLE_GM(savelayer_coverage, canvas, 500, 500) { + canvas->saveLayer(nullptr, nullptr); + + SkRect r = { 0, 0, 200, 200 }; + SkPaint layerPaint; + layerPaint.setBlendMode(SkBlendMode::kModulate); + + auto image = GetResourceAsImage("images/mandrill_128.png"); + + auto proc = [layerPaint](SkCanvas* canvas, SkCanvas::SaveLayerRec& rec) { + SkPaint paint; + paint.setColor(SK_ColorRED); + + canvas->saveLayer(rec); + canvas->drawCircle(100, 100, 50, paint); + paint.setColor(0x8800FF00); + canvas->drawRect({10, 90, 190, 110}, paint); + canvas->restore(); + }; + + const int yflags[] = { 0, SkCanvas::kInitWithPrevious_SaveLayerFlag }; + for (int y = 0; y <= 1; ++y) { + const int xflags[] = { 0, SkCanvas::kMaskAgainstCoverage_EXPERIMENTAL_DONT_USE_SaveLayerFlag }; + for (int x = 0; x <= 1; ++x) { + canvas->save(); + canvas->translate(x * 200.f, y * 200.f); + + SkCanvas::SaveLayerRec rec(&r, &layerPaint, yflags[y] | xflags[x]); + canvas->drawImageRect(image, r, nullptr); + proc(canvas, rec); + + canvas->restore(); + } + } + + canvas->restore(); +} + |