| Index: samplecode/SamplePictFile.cpp
|
| diff --git a/samplecode/SamplePictFile.cpp b/samplecode/SamplePictFile.cpp
|
| index a0bab7da4ebd016f45097dd645a729bc4f1325ec..c0973a5042697e2a40ae88e16bd251eb7fc117e3 100644
|
| --- a/samplecode/SamplePictFile.cpp
|
| +++ b/samplecode/SamplePictFile.cpp
|
| @@ -32,6 +32,18 @@
|
|
|
| #include "SkGlyphCache.h"
|
|
|
| +#include "SkDrawFilter.h"
|
| +class SkCounterDrawFilter : public SkDrawFilter {
|
| +public:
|
| + SkCounterDrawFilter(int count) : fCount(count) {}
|
| +
|
| + bool filter(SkPaint*, Type t) override {
|
| + return --fCount >= 0;
|
| + }
|
| +
|
| + int fCount;
|
| +};
|
| +
|
| class PictFileView : public SampleView {
|
| public:
|
| PictFileView(const char name[] = NULL)
|
| @@ -41,6 +53,7 @@ public:
|
| for (int i = 0; i < kBBoxTypeCount; ++i) {
|
| fPictures[i] = NULL;
|
| }
|
| + fCount = 0;
|
| }
|
|
|
| virtual ~PictFileView() {
|
| @@ -76,6 +89,15 @@ protected:
|
| SampleCode::TitleR(evt, name.c_str());
|
| return true;
|
| }
|
| + SkUnichar uni;
|
| + if (SampleCode::CharQ(*evt, &uni)) {
|
| + switch (uni) {
|
| + case 'n': fCount += 1; this->inval(nullptr); return true;
|
| + case 'p': fCount -= 1; this->inval(nullptr); return true;
|
| + case 's': fCount = 0; this->inval(nullptr); return true;
|
| + default: break;
|
| + }
|
| + }
|
| return this->INHERITED::onQuery(evt);
|
| }
|
|
|
| @@ -99,7 +121,12 @@ protected:
|
| *picture = LoadPicture(fFilename.c_str(), fBBox);
|
| }
|
| if (*picture) {
|
| + SkCounterDrawFilter filter(fCount);
|
| + if (fCount > 0) {
|
| + canvas->setDrawFilter(&filter);
|
| + }
|
| canvas->drawPicture(*picture);
|
| + canvas->setDrawFilter(NULL);
|
| }
|
|
|
| #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS
|
| @@ -121,6 +148,7 @@ private:
|
| SkPicture* fPictures[kBBoxTypeCount];
|
| BBoxType fBBox;
|
| SkSize fTileSize;
|
| + int fCount;
|
|
|
| SkPicture* LoadPicture(const char path[], BBoxType bbox) {
|
| SkAutoTUnref<SkPicture> pic;
|
|
|