diff options
Diffstat (limited to 'record/SkRecording.cpp')
-rw-r--r-- | record/SkRecording.cpp | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/record/SkRecording.cpp b/record/SkRecording.cpp index 6af19593..57743622 100644 --- a/record/SkRecording.cpp +++ b/record/SkRecording.cpp @@ -16,38 +16,29 @@ namespace EXPERIMENTAL { SkPlayback::SkPlayback(const SkRecord* record) : fRecord(record) {} -SkPlayback::~SkPlayback() { - SkDELETE(fRecord); -} +SkPlayback::~SkPlayback() {} void SkPlayback::draw(SkCanvas* canvas) const { - SkASSERT(fRecord != NULL); + SkASSERT(fRecord.get() != NULL); SkRecordDraw(*fRecord, canvas); } -/*static*/ SkRecording* SkRecording::Create(int width, int height) { - return SkNEW_ARGS(SkRecording, (width, height)); -} +SkRecording::SkRecording(int width, int height) + : fRecord(SkNEW(SkRecord)) + , fRecorder(SkNEW_ARGS(SkRecorder, (SkRecorder::kReadWrite_Mode, fRecord.get(), width, height))) + {} -SkRecording::SkRecording(int width, int height) { - SkRecord* record = SkNEW(SkRecord); - fRecorder = SkNEW_ARGS(SkRecorder, (SkRecorder::kReadWrite_Mode, record, width, height)); - fRecord = record; +SkPlayback* SkRecording::releasePlayback() { + SkASSERT(fRecorder->unique()); + fRecorder->forgetRecord(); + SkRecordOptimize(fRecord.get()); + return SkNEW_ARGS(SkPlayback, (fRecord.detach())); } -/*static*/ const SkPlayback* SkRecording::Delete(SkRecording* recording) { - SkRecord* record = recording->fRecord; - SkRecordOptimize(record); - SkDELETE(recording); - return SkNEW_ARGS(SkPlayback, (record)); -} - -SkRecording::~SkRecording() { - SkDELETE(fRecorder); -} +SkRecording::~SkRecording() {} SkCanvas* SkRecording::canvas() { - return fRecorder; + return fRecord.get() ? fRecorder.get() : NULL; } } // namespace EXPERIMENTAL |