OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SampleCode.h" | 8 #include "SampleCode.h" |
9 #include "SkDumpCanvas.h" | 9 #include "SkDumpCanvas.h" |
10 #include "SkView.h" | 10 #include "SkView.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "SkTime.h" | 25 #include "SkTime.h" |
26 #include "SkTypeface.h" | 26 #include "SkTypeface.h" |
27 #include "SkXfermode.h" | 27 #include "SkXfermode.h" |
28 | 28 |
29 #include "SkStream.h" | 29 #include "SkStream.h" |
30 #include "SkSurface.h" | 30 #include "SkSurface.h" |
31 #include "SkXMLParser.h" | 31 #include "SkXMLParser.h" |
32 | 32 |
33 #include "SkGlyphCache.h" | 33 #include "SkGlyphCache.h" |
34 | 34 |
| 35 #include "SkDrawFilter.h" |
| 36 class SkCounterDrawFilter : public SkDrawFilter { |
| 37 public: |
| 38 SkCounterDrawFilter(int count) : fCount(count) {} |
| 39 |
| 40 bool filter(SkPaint*, Type t) override { |
| 41 return --fCount >= 0; |
| 42 } |
| 43 |
| 44 int fCount; |
| 45 }; |
| 46 |
35 class PictFileView : public SampleView { | 47 class PictFileView : public SampleView { |
36 public: | 48 public: |
37 PictFileView(const char name[] = NULL) | 49 PictFileView(const char name[] = NULL) |
38 : fFilename(name) | 50 : fFilename(name) |
39 , fBBox(kNo_BBoxType) | 51 , fBBox(kNo_BBoxType) |
40 , fTileSize(SkSize::Make(0, 0)) { | 52 , fTileSize(SkSize::Make(0, 0)) { |
41 for (int i = 0; i < kBBoxTypeCount; ++i) { | 53 for (int i = 0; i < kBBoxTypeCount; ++i) { |
42 fPictures[i] = NULL; | 54 fPictures[i] = NULL; |
43 } | 55 } |
| 56 fCount = 0; |
44 } | 57 } |
45 | 58 |
46 virtual ~PictFileView() { | 59 virtual ~PictFileView() { |
47 for (int i = 0; i < kBBoxTypeCount; ++i) { | 60 for (int i = 0; i < kBBoxTypeCount; ++i) { |
48 SkSafeUnref(fPictures[i]); | 61 SkSafeUnref(fPictures[i]); |
49 } | 62 } |
50 } | 63 } |
51 | 64 |
52 void onTileSizeChanged(const SkSize &tileSize) override { | 65 void onTileSizeChanged(const SkSize &tileSize) override { |
53 if (tileSize != fTileSize) { | 66 if (tileSize != fTileSize) { |
(...skipping 15 matching lines...) Expand all Loading... |
69 case kRTree_BBoxType: | 82 case kRTree_BBoxType: |
70 name.append(" <bbox: R>"); | 83 name.append(" <bbox: R>"); |
71 break; | 84 break; |
72 default: | 85 default: |
73 SkASSERT(false); | 86 SkASSERT(false); |
74 break; | 87 break; |
75 } | 88 } |
76 SampleCode::TitleR(evt, name.c_str()); | 89 SampleCode::TitleR(evt, name.c_str()); |
77 return true; | 90 return true; |
78 } | 91 } |
| 92 SkUnichar uni; |
| 93 if (SampleCode::CharQ(*evt, &uni)) { |
| 94 switch (uni) { |
| 95 case 'n': fCount += 1; this->inval(nullptr); return true; |
| 96 case 'p': fCount -= 1; this->inval(nullptr); return true; |
| 97 case 's': fCount = 0; this->inval(nullptr); return true; |
| 98 default: break; |
| 99 } |
| 100 } |
79 return this->INHERITED::onQuery(evt); | 101 return this->INHERITED::onQuery(evt); |
80 } | 102 } |
81 | 103 |
82 bool onEvent(const SkEvent& evt) override { | 104 bool onEvent(const SkEvent& evt) override { |
83 if (evt.isType("PictFileView::toggleBBox")) { | 105 if (evt.isType("PictFileView::toggleBBox")) { |
84 fBBox = (BBoxType)((fBBox + 1) % kBBoxTypeCount); | 106 fBBox = (BBoxType)((fBBox + 1) % kBBoxTypeCount); |
85 return true; | 107 return true; |
86 } | 108 } |
87 return this->INHERITED::onEvent(evt); | 109 return this->INHERITED::onEvent(evt); |
88 } | 110 } |
89 | 111 |
90 void onDrawContent(SkCanvas* canvas) override { | 112 void onDrawContent(SkCanvas* canvas) override { |
91 SkASSERT(static_cast<int>(fBBox) < kBBoxTypeCount); | 113 SkASSERT(static_cast<int>(fBBox) < kBBoxTypeCount); |
92 SkPicture** picture = fPictures + fBBox; | 114 SkPicture** picture = fPictures + fBBox; |
93 | 115 |
94 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS | 116 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS |
95 SkGraphics::PurgeFontCache(); | 117 SkGraphics::PurgeFontCache(); |
96 #endif | 118 #endif |
97 | 119 |
98 if (!*picture) { | 120 if (!*picture) { |
99 *picture = LoadPicture(fFilename.c_str(), fBBox); | 121 *picture = LoadPicture(fFilename.c_str(), fBBox); |
100 } | 122 } |
101 if (*picture) { | 123 if (*picture) { |
| 124 SkCounterDrawFilter filter(fCount); |
| 125 if (fCount > 0) { |
| 126 canvas->setDrawFilter(&filter); |
| 127 } |
102 canvas->drawPicture(*picture); | 128 canvas->drawPicture(*picture); |
| 129 canvas->setDrawFilter(NULL); |
103 } | 130 } |
104 | 131 |
105 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS | 132 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS |
106 SkGlyphCache::Dump(); | 133 SkGlyphCache::Dump(); |
107 SkDebugf("\n"); | 134 SkDebugf("\n"); |
108 #endif | 135 #endif |
109 } | 136 } |
110 | 137 |
111 private: | 138 private: |
112 enum BBoxType { | 139 enum BBoxType { |
113 kNo_BBoxType, | 140 kNo_BBoxType, |
114 kRTree_BBoxType, | 141 kRTree_BBoxType, |
115 | 142 |
116 kLast_BBoxType = kRTree_BBoxType, | 143 kLast_BBoxType = kRTree_BBoxType, |
117 }; | 144 }; |
118 static const int kBBoxTypeCount = kLast_BBoxType + 1; | 145 static const int kBBoxTypeCount = kLast_BBoxType + 1; |
119 | 146 |
120 SkString fFilename; | 147 SkString fFilename; |
121 SkPicture* fPictures[kBBoxTypeCount]; | 148 SkPicture* fPictures[kBBoxTypeCount]; |
122 BBoxType fBBox; | 149 BBoxType fBBox; |
123 SkSize fTileSize; | 150 SkSize fTileSize; |
| 151 int fCount; |
124 | 152 |
125 SkPicture* LoadPicture(const char path[], BBoxType bbox) { | 153 SkPicture* LoadPicture(const char path[], BBoxType bbox) { |
126 SkAutoTUnref<SkPicture> pic; | 154 SkAutoTUnref<SkPicture> pic; |
127 | 155 |
128 SkBitmap bm; | 156 SkBitmap bm; |
129 if (SkImageDecoder::DecodeFile(path, &bm)) { | 157 if (SkImageDecoder::DecodeFile(path, &bm)) { |
130 bm.setImmutable(); | 158 bm.setImmutable(); |
131 SkPictureRecorder recorder; | 159 SkPictureRecorder recorder; |
132 SkCanvas* can = recorder.beginRecording(SkIntToScalar(bm.width()), | 160 SkCanvas* can = recorder.beginRecording(SkIntToScalar(bm.width()), |
133 SkIntToScalar(bm.height()), | 161 SkIntToScalar(bm.height()), |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 SampleView* CreateSamplePictFileView(const char filename[]) { | 214 SampleView* CreateSamplePictFileView(const char filename[]) { |
187 return new PictFileView(filename); | 215 return new PictFileView(filename); |
188 } | 216 } |
189 | 217 |
190 ////////////////////////////////////////////////////////////////////////////// | 218 ////////////////////////////////////////////////////////////////////////////// |
191 | 219 |
192 #if 0 | 220 #if 0 |
193 static SkView* MyFactory() { return new PictFileView; } | 221 static SkView* MyFactory() { return new PictFileView; } |
194 static SkViewRegister reg(MyFactory); | 222 static SkViewRegister reg(MyFactory); |
195 #endif | 223 #endif |
OLD | NEW |