SkTCopyOnFirstWrite-based SkPaintFilterCanvas API
I find this version preferable because
1) it consolidates the in/out paint args without compromising
efficiency or flexibility
2) relieves overriders from having to set the SkTLazy explicitly
BUG=skia:4782
R=mtklein@google.com,reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1576183002
Review URL: https://codereview.chromium.org/1576183002
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index ce2cfb2..a3a81d8 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -475,27 +475,25 @@
}
protected:
- bool onFilter(const SkPaint* paint, Type t, SkTLazy<SkPaint>* filteredPaint) const override {
- if (!paint) {
+ bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type t) const override {
+ if (!*paint) {
return true;
}
- filteredPaint->set(*paint);
if (kText_Type == t && SkOSMenu::kMixedState != fLCDState) {
- filteredPaint->get()->setLCDRenderText(SkOSMenu::kOnState == fLCDState);
+ paint->writable()->setLCDRenderText(SkOSMenu::kOnState == fLCDState);
}
if (SkOSMenu::kMixedState != fAAState) {
- filteredPaint->get()->setAntiAlias(SkOSMenu::kOnState == fAAState);
+ paint->writable()->setAntiAlias(SkOSMenu::kOnState == fAAState);
}
if (0 != fFilterQualityIndex) {
- filteredPaint->get()->setFilterQuality(
- gFilterQualityStates[fFilterQualityIndex].fQuality);
+ paint->writable()->setFilterQuality(gFilterQualityStates[fFilterQualityIndex].fQuality);
}
if (SkOSMenu::kMixedState != fSubpixelState) {
- filteredPaint->get()->setSubpixelText(SkOSMenu::kOnState == fSubpixelState);
+ paint->writable()->setSubpixelText(SkOSMenu::kOnState == fSubpixelState);
}
if (0 != fHintingState && fHintingState < (int)SK_ARRAY_COUNT(gHintingStates)) {
- filteredPaint->get()->setHinting(gHintingStates[fHintingState].hinting);
+ paint->writable()->setHinting(gHintingStates[fHintingState].hinting);
}
return true;
}