diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkCanvas.cpp | 18 | ||||
-rw-r--r-- | src/core/SkPictureFlat.h | 12 | ||||
-rw-r--r-- | src/core/SkPicturePlayback.cpp | 20 | ||||
-rw-r--r-- | src/core/SkPictureRecord.cpp | 46 | ||||
-rw-r--r-- | src/core/SkRecordDraw.cpp | 2 | ||||
-rw-r--r-- | src/core/SkRecorder.cpp | 3 |
6 files changed, 23 insertions, 78 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 82ceba4fa9..a4acbdc94d 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -114,6 +114,7 @@ bool SkCanvas::Internal_Private_GetTreatSpriteAsBitmap() { // experimental for faster tiled drawing... //#define SK_ENABLE_CLIP_QUICKREJECT + //#define SK_TRACE_SAVERESTORE #ifdef SK_TRACE_SAVERESTORE @@ -480,7 +481,7 @@ public: // Make rawBounds include all paint outsets except for those due to image filters. rawBounds = &apply_paint_to_bounds_sans_imagefilter(*fPaint, *rawBounds, &storage); } - (void)canvas->internalSaveLayer(SkCanvas::SaveLayerRec(rawBounds, &tmp), + (void)canvas->internalSaveLayer(SkCanvas::SaveLayerRec(rawBounds, &tmp, 0), SkCanvas::kFullLayer_SaveLayerStrategy); fTempLayerForImageFilter = true; // we remove the imagefilter/xfermode inside doNext() @@ -1172,8 +1173,7 @@ int SkCanvas::saveLayer(const SaveLayerRec& origRec) { return this->getSaveCount() - 1; } -static void draw_filter_into_device(SkBaseDevice* src, const SkImageFilter* filter, - SkBaseDevice* dst, const SkMatrix& ctm) { +static void draw_filter_into_device(SkBaseDevice* src, SkImageFilter* filter, SkBaseDevice* dst) { SkBitmap srcBM; @@ -1198,12 +1198,9 @@ static void draw_filter_into_device(SkBaseDevice* src, const SkImageFilter* filt SkCanvas c(dst); - SkAutoTUnref<SkImageFilter> localF(filter->newWithLocalMatrix(ctm)); SkPaint p; - p.setImageFilter(localF); - const SkScalar x = SkIntToScalar(src->getOrigin().x()); - const SkScalar y = SkIntToScalar(src->getOrigin().y()); - c.drawBitmap(srcBM, x, y, &p); + p.setImageFilter(filter); + c.drawBitmap(srcBM, 0, 0, &p); } void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy strategy) { @@ -1271,10 +1268,11 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra } device = newDev; } + device->setOrigin(ir.fLeft, ir.fTop); - if (rec.fBackdrop) { - draw_filter_into_device(fMCRec->fTopLayer->fDevice, rec.fBackdrop, device, fMCRec->fMatrix); + if (0) { + draw_filter_into_device(fMCRec->fTopLayer->fDevice, nullptr, device); } DeviceCM* layer = diff --git a/src/core/SkPictureFlat.h b/src/core/SkPictureFlat.h index 4eee04fcda..cbacc8e664 100644 --- a/src/core/SkPictureFlat.h +++ b/src/core/SkPictureFlat.h @@ -75,10 +75,9 @@ enum DrawType { DRAW_IMAGE_NINE, DRAW_IMAGE_RECT, - SAVE_LAYER_SAVELAYERFLAGS_DEPRECATED_JAN_2016, - SAVE_LAYER_SAVELAYERREC, + SAVE_LAYER_SAVELAYERFLAGS, - LAST_DRAWTYPE_ENUM = SAVE_LAYER_SAVELAYERREC, + LAST_DRAWTYPE_ENUM = SAVE_LAYER_SAVELAYERFLAGS, }; // In the 'match' method, this constant will match any flavor of DRAW_BITMAP* @@ -96,13 +95,6 @@ enum DrawAtlasFlags { DRAW_ATLAS_HAS_CULL = 1 << 1, }; -enum SaveLayerRecFlatFlags { - SAVELAYERREC_HAS_BOUNDS = 1 << 0, - SAVELAYERREC_HAS_PAINT = 1 << 1, - SAVELAYERREC_HAS_BACKDROP = 1 << 2, - SAVELAYERREC_HAS_FLAGS = 1 << 3, -}; - /////////////////////////////////////////////////////////////////////////////// // clipparams are packed in 5 bits // doAA:1 | regionOp:4 diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp index 4b028f714e..82b8f0e578 100644 --- a/src/core/SkPicturePlayback.cpp +++ b/src/core/SkPicturePlayback.cpp @@ -483,29 +483,11 @@ void SkPicturePlayback::handleOp(SkReader32* reader, auto flags = SkCanvas::LegacySaveFlagsToSaveLayerFlags(reader->readInt()); canvas->saveLayer(SkCanvas::SaveLayerRec(boundsPtr, paint, flags)); } break; - case SAVE_LAYER_SAVELAYERFLAGS_DEPRECATED_JAN_2016: { + case SAVE_LAYER_SAVELAYERFLAGS: { const SkRect* boundsPtr = get_rect_ptr(reader); const SkPaint* paint = fPictureData->getPaint(reader); canvas->saveLayer(SkCanvas::SaveLayerRec(boundsPtr, paint, reader->readInt())); } break; - case SAVE_LAYER_SAVELAYERREC: { - SkCanvas::SaveLayerRec rec(nullptr, nullptr, nullptr, 0); - const uint32_t flatFlags = reader->readInt(); - if (flatFlags & SAVELAYERREC_HAS_BOUNDS) { - rec.fBounds = &reader->skipT<SkRect>(); - } - if (flatFlags & SAVELAYERREC_HAS_PAINT) { - rec.fPaint = fPictureData->getPaint(reader); - } - if (flatFlags & SAVELAYERREC_HAS_BACKDROP) { - const SkPaint* paint = fPictureData->getPaint(reader); - rec.fBackdrop = paint->getImageFilter(); - } - if (flatFlags & SAVELAYERREC_HAS_FLAGS) { - rec.fSaveLayerFlags = reader->readInt(); - } - canvas->saveLayer(rec); - } break; case SCALE: { SkScalar sx = reader->readScalar(); SkScalar sy = reader->readScalar(); diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp index 2822a1ac16..7907ee0d29 100644 --- a/src/core/SkPictureRecord.cpp +++ b/src/core/SkPictureRecord.cpp @@ -76,44 +76,19 @@ SkCanvas::SaveLayerStrategy SkPictureRecord::getSaveLayerStrategy(const SaveLaye void SkPictureRecord::recordSaveLayer(const SaveLayerRec& rec) { fContentInfo.onSaveLayer(); - // op + flatflags + // op + bool for 'bounds' size_t size = 2 * kUInt32Size; - uint32_t flatFlags = 0; - if (rec.fBounds) { - flatFlags |= SAVELAYERREC_HAS_BOUNDS; - size += sizeof(*rec.fBounds); - } - if (rec.fPaint) { - flatFlags |= SAVELAYERREC_HAS_PAINT; - size += sizeof(uint32_t); // index - } - if (rec.fBackdrop) { - flatFlags |= SAVELAYERREC_HAS_BACKDROP; - size += sizeof(uint32_t); // (paint) index - } - if (rec.fSaveLayerFlags) { - flatFlags |= SAVELAYERREC_HAS_FLAGS; - size += sizeof(uint32_t); + size += sizeof(*rec.fBounds); // + rect } + // + paint index + flags + size += 2 * kUInt32Size; + + size_t initialOffset = this->addDraw(SAVE_LAYER_SAVELAYERFLAGS, &size); + this->addRectPtr(rec.fBounds); + this->addPaintPtr(rec.fPaint); + this->addInt(rec.fSaveLayerFlags); - const size_t initialOffset = this->addDraw(SAVE_LAYER_SAVELAYERREC, &size); - this->addInt(flatFlags); - if (flatFlags & SAVELAYERREC_HAS_BOUNDS) { - this->addRect(*rec.fBounds); - } - if (flatFlags & SAVELAYERREC_HAS_PAINT) { - this->addPaintPtr(rec.fPaint); - } - if (flatFlags & SAVELAYERREC_HAS_BACKDROP) { - // overkill, but we didn't already track single flattenables, so using a paint for that - SkPaint paint; - paint.setImageFilter(const_cast<SkImageFilter*>(rec.fBackdrop)); - this->addPaint(paint); - } - if (flatFlags & SAVELAYERREC_HAS_FLAGS) { - this->addInt(rec.fSaveLayerFlags); - } this->validate(initialOffset, size); } @@ -249,8 +224,7 @@ void SkPictureRecord::fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t uint32_t opSize; DrawType drawOp = peek_op_and_size(&fWriter, -offset, &opSize); SkASSERT(SAVE_LAYER_SAVEFLAGS_DEPRECATED != drawOp); - SkASSERT(SAVE_LAYER_SAVELAYERFLAGS_DEPRECATED_JAN_2016 != drawOp); - SkASSERT(SAVE == drawOp || SAVE_LAYER_SAVELAYERREC == drawOp); + SkASSERT(SAVE == drawOp || SAVE_LAYER_SAVELAYERFLAGS == drawOp); } #endif } diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp index 5ca9517d3f..01846676b6 100644 --- a/src/core/SkRecordDraw.cpp +++ b/src/core/SkRecordDraw.cpp @@ -78,7 +78,7 @@ template <> void Draw::draw(const NoOp&) {} #define DRAW(T, call) template <> void Draw::draw(const T& r) { fCanvas->call; } DRAW(Restore, restore()); DRAW(Save, save()); -DRAW(SaveLayer, saveLayer(SkCanvas::SaveLayerRec(r.bounds, r.paint, r.backdrop, r.saveLayerFlags))); +DRAW(SaveLayer, saveLayer(SkCanvas::SaveLayerRec(r.bounds, r.paint, r.saveLayerFlags))); DRAW(SetMatrix, setMatrix(SkMatrix::Concat(fInitialCTM, r.matrix))); DRAW(Concat, concat(r.matrix)); diff --git a/src/core/SkRecorder.cpp b/src/core/SkRecorder.cpp index 01c28dfc2b..67429a691e 100644 --- a/src/core/SkRecorder.cpp +++ b/src/core/SkRecorder.cpp @@ -337,8 +337,7 @@ void SkRecorder::willSave() { } SkCanvas::SaveLayerStrategy SkRecorder::getSaveLayerStrategy(const SaveLayerRec& rec) { - APPEND(SaveLayer, - this->copy(rec.fBounds), this->copy(rec.fPaint), rec.fBackdrop, rec.fSaveLayerFlags); + APPEND(SaveLayer, this->copy(rec.fBounds), this->copy(rec.fPaint), rec.fSaveLayerFlags); return SkCanvas::kNoLayer_SaveLayerStrategy; } |