| Index: src/core/SkPictureRecorder.cpp
|
| diff --git a/src/core/SkPictureRecorder.cpp b/src/core/SkPictureRecorder.cpp
|
| index 863dbcda90b9af2a0a4e19661e1f8ac03a92d76f..3abd08e1b027cbc789b8f145fecd427c1d20b5a2 100644
|
| --- a/src/core/SkPictureRecorder.cpp
|
| +++ b/src/core/SkPictureRecorder.cpp
|
| @@ -18,20 +18,19 @@ SkPictureRecorder::~SkPictureRecorder() {
|
| SkCanvas* SkPictureRecorder::beginRecording(int width, int height,
|
| SkBBHFactory* bbhFactory /* = NULL */,
|
| uint32_t recordFlags /* = 0 */) {
|
| - SkSafeSetNull(fCanvas);
|
| - fPicture.reset(SkNEW(SkPicture));
|
| + SkSafeSetNull(fCanvas); // terminate any prior recording(s)
|
|
|
| - fPicture->fWidth = width;
|
| - fPicture->fHeight = height;
|
| + fWidth = width;
|
| + fHeight = height;
|
|
|
| const SkISize size = SkISize::Make(width, height);
|
|
|
| if (NULL != bbhFactory) {
|
| SkAutoTUnref<SkBBoxHierarchy> tree((*bbhFactory)(width, height));
|
| SkASSERT(NULL != tree);
|
| - fCanvas = SkNEW_ARGS(SkBBoxHierarchyRecord, (fPicture, size, recordFlags, tree.get()));
|
| + fCanvas = SkNEW_ARGS(SkBBoxHierarchyRecord, (size, recordFlags, tree.get()));
|
| } else {
|
| - fCanvas = SkNEW_ARGS(SkPictureRecord, (fPicture, size, recordFlags));
|
| + fCanvas = SkNEW_ARGS(SkPictureRecord, (size, recordFlags));
|
| }
|
|
|
| fCanvas->beginRecording();
|
| @@ -44,23 +43,18 @@ SkCanvas* SkPictureRecorder::getRecordingCanvas() {
|
| }
|
|
|
| SkPicture* SkPictureRecorder::endRecording() {
|
| - if (NULL == fPicture.get()) {
|
| + if (NULL == fCanvas) {
|
| return NULL;
|
| }
|
|
|
| - SkASSERT(NULL == fPicture->fPlayback);
|
| - SkASSERT(NULL != fCanvas);
|
| -
|
| fCanvas->endRecording();
|
|
|
| - SkPictInfo info;
|
| - fPicture->createHeader(&info);
|
| const bool deepCopyOps = false;
|
| - fPicture->fPlayback = SkNEW_ARGS(SkPicturePlayback, (fPicture, *fCanvas, info, deepCopyOps));
|
| -
|
| + SkAutoTUnref<SkPicture> picture(SkNEW_ARGS(SkPicture, (fWidth, fHeight,
|
| + *fCanvas, deepCopyOps)));
|
| SkSafeSetNull(fCanvas);
|
|
|
| - return fPicture.detach();
|
| + return picture.detach();
|
| }
|
|
|
| void SkPictureRecorder::internalOnly_EnableOpts(bool enableOpts) {
|
| @@ -70,14 +64,13 @@ void SkPictureRecorder::internalOnly_EnableOpts(bool enableOpts) {
|
| }
|
|
|
| void SkPictureRecorder::partialReplay(SkCanvas* canvas) const {
|
| - if (NULL == fPicture.get() || NULL == canvas) {
|
| + if (NULL == fCanvas || NULL == canvas) {
|
| // Not recording or nothing to replay into
|
| return;
|
| }
|
|
|
| - SkASSERT(NULL != fCanvas);
|
| -
|
| - SkAutoTDelete<SkPicturePlayback> playback(SkPicture::FakeEndRecording(fPicture.get(),
|
| - *fCanvas));
|
| - playback->draw(*canvas, NULL);
|
| + const bool deepCopyOps = true;
|
| + SkAutoTUnref<SkPicture> picture(SkNEW_ARGS(SkPicture, (fWidth, fHeight,
|
| + *fCanvas, deepCopyOps)));
|
| + picture->draw(canvas);
|
| }
|
|
|