aboutsummaryrefslogtreecommitdiff
path: root/samplecode/SamplePictFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'samplecode/SamplePictFile.cpp')
-rw-r--r--samplecode/SamplePictFile.cpp46
1 files changed, 20 insertions, 26 deletions
diff --git a/samplecode/SamplePictFile.cpp b/samplecode/SamplePictFile.cpp
index ea15524476..ab45555e91 100644
--- a/samplecode/SamplePictFile.cpp
+++ b/samplecode/SamplePictFile.cpp
@@ -122,19 +122,19 @@ private:
SkSize fTileSize;
SkPicture* LoadPicture(const char path[], BBoxType bbox) {
- SkPicture* pic = NULL;
+ SkAutoTUnref<SkPicture> pic;
SkBitmap bm;
if (SkImageDecoder::DecodeFile(path, &bm)) {
bm.setImmutable();
- pic = SkNEW(SkPicture);
- SkCanvas* can = pic->beginRecording(bm.width(), bm.height());
+ SkPictureRecorder recorder;
+ SkCanvas* can = recorder.beginRecording(bm.width(), bm.height());
can->drawBitmap(bm, 0, 0, NULL);
- pic->endRecording();
+ pic.reset(recorder.endRecording());
} else {
SkFILEStream stream(path);
if (stream.isValid()) {
- pic = SkPicture::CreateFromStream(&stream);
+ pic.reset(SkPicture::CreateFromStream(&stream));
} else {
SkDebugf("coun't load picture at \"path\"\n", path);
}
@@ -145,32 +145,30 @@ private:
surf->unref();
}
if (false) { // re-record
- SkPicture p2;
- pic->draw(p2.beginRecording(pic->width(), pic->height()));
- p2.endRecording();
+ SkPictureRecorder recorder;
+ pic->draw(recorder.beginRecording(pic->width(), pic->height()));
+ SkAutoTUnref<SkPicture> p2(recorder.endRecording());
SkString path2(path);
path2.append(".new.skp");
SkFILEWStream writer(path2.c_str());
- p2.serialize(&writer);
+ p2->serialize(&writer);
}
}
- if (!pic) {
+ if (NULL == pic) {
return NULL;
}
- SkPicture* bboxPicture = NULL;
+ SkAutoTUnref<SkPictureFactory> factory;
switch (bbox) {
case kNo_BBoxType:
// no bbox playback necessary
- break;
+ return pic.detach();
case kRTree_BBoxType:
- bboxPicture = SkNEW(SkPicture);
break;
case kQuadTree_BBoxType:
- bboxPicture = SkNEW_ARGS(SkQuadTreePicture,
- (SkIRect::MakeWH(pic->width(), pic->height())));
+ factory.reset(SkNEW(SkQuadTreePictureFactory));
break;
case kTileGrid_BBoxType: {
SkASSERT(!fTileSize.isEmpty());
@@ -178,21 +176,17 @@ private:
gridInfo.fMargin = SkISize::Make(0, 0);
gridInfo.fOffset = SkIPoint::Make(0, 0);
gridInfo.fTileInterval = fTileSize.toRound();
- bboxPicture = SkNEW_ARGS(SkTileGridPicture, (pic->width(), pic->height(), gridInfo));
- } break;
+ factory.reset(SkNEW_ARGS(SkTileGridPictureFactory, (gridInfo)));
+ break;
+ }
default:
SkASSERT(false);
}
- if (bboxPicture) {
- pic->draw(bboxPicture->beginRecording(pic->width(), pic->height(),
- SkPicture::kOptimizeForClippedPlayback_RecordingFlag));
- bboxPicture->endRecording();
- SkDELETE(pic);
- return bboxPicture;
- }
-
- return pic;
+ SkPictureRecorder recorder(factory);
+ pic->draw(recorder.beginRecording(pic->width(), pic->height(),
+ SkPicture::kOptimizeForClippedPlayback_RecordingFlag));
+ return recorder.endRecording();
}
typedef SampleView INHERITED;