SkRemote: saveLayer
https://gold.skia.org/search2?issue=1432593002&unt=true&query=source_type%3Dgm&master=false&include=true
BUG=skia:
Review URL: https://codereview.chromium.org/1432593002
diff --git a/src/core/SkRemote.cpp b/src/core/SkRemote.cpp
index dd0b25d..236a1a8 100644
--- a/src/core/SkRemote.cpp
+++ b/src/core/SkRemote.cpp
@@ -165,7 +165,15 @@
SaveLayerStrategy willSaveLayer(const SkRect* bounds,
const SkPaint* paint,
SaveFlags flags) override {
- // TODO
+ SkPath path;
+ if (bounds) {
+ path.addRect(*bounds);
+ }
+ const SkPaint defaultPaint;
+ if (!paint) {
+ paint = &defaultPaint;
+ }
+ fEncoder->saveLayer(this->id(path), this->commonIDs(*paint), flags);
return kNoLayer_SaveLayerStrategy;
}
@@ -473,6 +481,12 @@
void save() override { fCanvas->save(); }
void restore() override { fCanvas->restore(); }
+ void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveFlags flags) override {
+ SkPaint paint;
+ this->applyCommon(common, &paint);
+ SkRect rect;
+ fCanvas->saveLayer(fPath.find(bounds).isRect(&rect) ? &rect : nullptr, &paint, flags);
+ }
void setMatrix(ID matrix) override { fCanvas->setMatrix(fMatrix.find(matrix)); }
@@ -636,6 +650,9 @@
void save() override { fWrapped-> save(); }
void restore() override { fWrapped->restore(); }
+ void saveLayer(ID bounds, CommonIDs common, SkCanvas::SaveFlags flags) override {
+ fWrapped->saveLayer(bounds, common, flags);
+ }
void setMatrix(ID matrix) override { fWrapped->setMatrix(matrix); }
diff --git a/src/core/SkRemote.h b/src/core/SkRemote.h
index 5fb2024..b333094 100644
--- a/src/core/SkRemote.h
+++ b/src/core/SkRemote.h
@@ -81,17 +81,18 @@
virtual void undefine(ID) = 0;
- virtual void save() = 0;
- virtual void restore() = 0;
-
- virtual void setMatrix(ID matrix) = 0;
-
// TODO: do these all belong here in CommonIDs?
struct CommonIDs {
ID misc, patheffect, shader, xfermode, maskfilter,
colorfilter, rasterizer, looper, imagefilter, annotation;
};
+ virtual void save() = 0;
+ virtual void restore() = 0;
+ virtual void saveLayer(ID bounds, CommonIDs, SkCanvas::SaveFlags) = 0;
+
+ virtual void setMatrix(ID matrix) = 0;
+
virtual void clipPath(ID path, SkRegion::Op, bool aa) = 0;
virtual void fillPath(ID path, CommonIDs) = 0;
virtual void strokePath(ID path, CommonIDs, ID stroke) = 0;