void SkPicturePlayback::draw(SkCanvas* canvas, SkPicture::AbortCallback* callback, SkReadBuffer* buffer) { AutoResetOpID aroi(this); SkASSERT(0 == fCurOffset); SkReadBuffer reader(fPictureData->opData()->bytes(), fPictureData->opData()->size()); // Record this, so we can concat w/ it if we encounter a setMatrix() SkMatrix initialMatrix = canvas->getTotalMatrix(); SkAutoCanvasRestore acr(canvas, false); while (!reader.eof()) { if (callback && callback->abort()) { return; } fCurOffset = reader.offset(); uint32_t size; DrawType op = ReadOpAndSize(&reader, &size); if (!reader.validate(op > UNUSED && op <= LAST_DRAWTYPE_ENUM)) { return; } this->handleOp(&reader, op, size, canvas, initialMatrix); } // need to propagate invalid state to the parent reader if (buffer) { buffer->validate(reader.isValid()); } }
void SkPicturePlayback::draw(SkCanvas* canvas, SkPicture::AbortCallback* callback, const SkReadBuffer* buffer) { AutoResetOpID aroi(this); SkASSERT(0 == fCurOffset); SkAutoTDelete<SkReadBuffer> reader; if (buffer) { reader.reset(buffer->clone(fPictureData->opData()->bytes(), fPictureData->opData()->size())); } else { reader.reset(new SkReadBuffer(fPictureData->opData()->bytes(), fPictureData->opData()->size())); } // Record this, so we can concat w/ it if we encounter a setMatrix() SkMatrix initialMatrix = canvas->getTotalMatrix(); SkAutoCanvasRestore acr(canvas, false); while (!reader->eof()) { if (callback && callback->abort()) { return; } fCurOffset = reader->offset(); uint32_t size; DrawType op = ReadOpAndSize(reader, &size); this->handleOp(reader, op, size, canvas, initialMatrix); } }
void SkPictureRangePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) { AutoResetOpID aroi(this); SkASSERT(0 == fCurOffset); SkReader32 reader(fPictureData->opData()->bytes(), fPictureData->opData()->size()); if (0 != fStart || 0 != fStop) { reader.setOffset(fStart); uint32_t size; SkDEBUGCODE(DrawType op = ) ReadOpAndSize(&reader, &size); SkASSERT(SAVE_LAYER == op); reader.setOffset(fStart + size); }
void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) { AutoResetOpID aroi(this); SkASSERT(0 == fCurOffset); SkAutoTDelete<const SkPicture::OperationList> activeOpsList(this->getActiveOps(canvas)); SkPictureStateTree::Iterator it; if (!this->initIterator(&it, canvas, activeOpsList.get())) { return; // nothing to draw } SkReader32 reader(fPictureData->opData()->bytes(), fPictureData->opData()->size()); StepIterator(&it, &reader); // Record this, so we can concat w/ it if we encounter a setMatrix() SkMatrix initialMatrix = canvas->getTotalMatrix(); SkAutoCanvasRestore acr(canvas, false); while (!reader.eof()) { if (NULL != callback && callback->abortDrawing()) { return; } fCurOffset = reader.offset(); uint32_t size; DrawType op = ReadOpAndSize(&reader, &size); if (NOOP == op) { // NOOPs are to be ignored - do not propagate them any further SkipIterTo(&it, &reader, fCurOffset + size); continue; } this->handleOp(&reader, op, size, canvas, initialMatrix); StepIterator(&it, &reader); } }
void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) { AutoResetOpID aroi(this); SkASSERT(0 == fCurOffset); SkReader32 reader(fPictureData->opData()->bytes(), fPictureData->opData()->size()); // Record this, so we can concat w/ it if we encounter a setMatrix() SkMatrix initialMatrix = canvas->getTotalMatrix(); SkAutoCanvasRestore acr(canvas, false); while (!reader.eof()) { if (callback && callback->abortDrawing()) { return; } fCurOffset = reader.offset(); uint32_t size; DrawType op = ReadOpAndSize(&reader, &size); this->handleOp(&reader, op, size, canvas, initialMatrix); } }