aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-09-08 08:49:08 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-08 08:49:09 -0700
commitf53fcc8ccaaa5e3cd24846d9e3ac38ad311f3711 (patch)
tree1585fbeda824b769459db1b83be574d5408cf139
parent2b3c2a3ff9166e92ca1700e695c30ae729a3f10c (diff)
SkLiteDL: drawAsLayer()
This more or less the API you were thinking? BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2315283002 Review-Url: https://codereview.chromium.org/2315283002
-rw-r--r--src/core/SkLiteDL.cpp13
-rw-r--r--src/core/SkLiteDL.h7
2 files changed, 20 insertions, 0 deletions
diff --git a/src/core/SkLiteDL.cpp b/src/core/SkLiteDL.cpp
index 8c8abb1cc3..227c2f30b6 100644
--- a/src/core/SkLiteDL.cpp
+++ b/src/core/SkLiteDL.cpp
@@ -816,3 +816,16 @@ void SkLiteDL::reset(SkRect bounds) {
fUsed = 0;
fBounds = bounds;
}
+
+void SkLiteDL::drawAsLayer(SkCanvas* canvas, const SkMatrix* matrix, const SkPaint* paint) {
+ auto fallback_plan = [&] {
+ SkRect bounds = this->getBounds();
+ canvas->saveLayer(&bounds, paint);
+ this->draw(canvas, matrix);
+ canvas->restore();
+ };
+
+ // TODO: single-draw specializations
+
+ return fallback_plan();
+}
diff --git a/src/core/SkLiteDL.h b/src/core/SkLiteDL.h
index 9dd1568ddf..8edd700e85 100644
--- a/src/core/SkLiteDL.h
+++ b/src/core/SkLiteDL.h
@@ -27,6 +27,13 @@ public:
void setDrawFilter(SkDrawFilter*);
#endif
+ // Draws as if...
+ // SkRect bounds = this->getBounds();
+ // canvas->saveLayer(&bounds, paint);
+ // this->draw(canvas, matrix);
+ // canvas->restore();
+ void drawAsLayer(SkCanvas*, const SkMatrix*, const SkPaint*);
+
void save();
void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, SkCanvas::SaveLayerFlags);
void restore();