SkPictureData::SkPictureData(const SkPictureRecord& record, const SkPictInfo& info, bool deepCopyOps) : fInfo(info) { this->init(); fOpData = record.opData(deepCopyOps); fContentInfo.set(record.fContentInfo); fBitmaps = record.fBitmaps; fPaints = record.fPaints; fPaths = record.fPaths; this->initForPlayback(); const SkTDArray<const SkPicture* >& pictures = record.getPictureRefs(); fPictureCount = pictures.count(); if (fPictureCount > 0) { fPictureRefs = SkNEW_ARRAY(const SkPicture*, fPictureCount); for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i] = pictures[i]; fPictureRefs[i]->ref(); } }
SkPictureData::SkPictureData(const SkPictureRecord& record, const SkPictInfo& info, bool deepCopyOps) : fInfo(info) { this->init(); fOpData = record.opData(deepCopyOps); fContentInfo.set(record.fContentInfo); fBitmaps = record.fBitmaps; fPaints = record.fPaints; fPaths.reset(record.fPaths.count()); record.fPaths.foreach([this](const SkPath& path, int n) { // These indices are logically 1-based, but we need to serialize them // 0-based to keep the deserializing SkPictureData::getPath() working. fPaths[n-1] = path; }); this->initForPlayback(); const SkTDArray<const SkPicture* >& pictures = record.getPictureRefs(); fPictureCount = pictures.count(); if (fPictureCount > 0) { fPictureRefs = new const SkPicture* [fPictureCount]; for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i] = pictures[i]; fPictureRefs[i]->ref(); } } // templatize to consolidate with similar picture logic? const SkTDArray<const SkTextBlob*>& blobs = record.getTextBlobRefs(); fTextBlobCount = blobs.count(); if (fTextBlobCount > 0) { fTextBlobRefs = new const SkTextBlob* [fTextBlobCount]; for (int i = 0; i < fTextBlobCount; ++i) { fTextBlobRefs[i] = SkRef(blobs[i]); } } const SkTDArray<const SkImage*>& imgs = record.getImageRefs(); fImageCount = imgs.count(); if (fImageCount > 0) { fImageRefs = new const SkImage* [fImageCount]; for (int i = 0; i < fImageCount; ++i) { fImageRefs[i] = SkRef(imgs[i]); } } }
SkPictureData::SkPictureData(const SkPictureRecord& record, const SkPictInfo& info, bool deepCopyOps) : fInfo(info) { this->init(); fOpData = record.opData(deepCopyOps); fContentInfo.set(record.fContentInfo); fBitmaps = record.fBitmaps; fPaints = record.fPaints; fPaths = record.fPaths; this->initForPlayback(); const SkTDArray<const SkPicture* >& pictures = record.getPictureRefs(); fPictureCount = pictures.count(); if (fPictureCount > 0) { fPictureRefs = new const SkPicture* [fPictureCount]; for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i] = pictures[i]; fPictureRefs[i]->ref(); } } // templatize to consolidate with similar picture logic? const SkTDArray<const SkTextBlob*>& blobs = record.getTextBlobRefs(); fTextBlobCount = blobs.count(); if (fTextBlobCount > 0) { fTextBlobRefs = new const SkTextBlob* [fTextBlobCount]; for (int i = 0; i < fTextBlobCount; ++i) { fTextBlobRefs[i] = SkRef(blobs[i]); } } const SkTDArray<const SkImage*>& imgs = record.getImageRefs(); fImageCount = imgs.count(); if (fImageCount > 0) { fImageRefs = new const SkImage* [fImageCount]; for (int i = 0; i < fImageCount; ++i) { fImageRefs[i] = SkRef(imgs[i]); } } }
SkPictureData::SkPictureData(const SkPictureRecord& record, const SkPictInfo& info, bool deepCopyOps) : fInfo(info) { this->init(); fOpData = record.opData(deepCopyOps); fBoundingHierarchy = record.fBoundingHierarchy; fStateTree = record.fStateTree; SkSafeRef(fBoundingHierarchy); SkSafeRef(fStateTree); fContentInfo.set(record.fContentInfo); if (NULL != fBoundingHierarchy) { fBoundingHierarchy->flushDeferredInserts(); } // copy over the refcnt dictionary to our reader record.fFlattenableHeap.setupPlaybacks(); fBitmaps = record.fBitmapHeap->extractBitmaps(); fPaints = record.fPaints.unflattenToArray(); fBitmapHeap.reset(SkSafeRef(record.fBitmapHeap)); fPathHeap.reset(SkSafeRef(record.pathHeap())); this->initForPlayback(); const SkTDArray<const SkPicture* >& pictures = record.getPictureRefs(); fPictureCount = pictures.count(); if (fPictureCount > 0) { fPictureRefs = SkNEW_ARRAY(const SkPicture*, fPictureCount); for (int i = 0; i < fPictureCount; i++) { fPictureRefs[i] = pictures[i]; fPictureRefs[i]->ref(); } }