bool SkGradientShaderBase::DescriptorScope::unflatten(SkReadBuffer& buffer) { fCount = buffer.getArrayCount(); if (fCount > kStorageCount) { size_t allocSize = (sizeof(SkColor) + sizeof(SkScalar)) * fCount; fDynamicStorage.reset(allocSize); fColors = (SkColor*)fDynamicStorage.get(); fPos = (SkScalar*)(fColors + fCount); } else { fColors = fColorStorage; fPos = fPosStorage; } if (!buffer.readColorArray(const_cast<SkColor*>(fColors), fCount)) { return false; } if (buffer.readBool()) { if (!buffer.readScalarArray(const_cast<SkScalar*>(fPos), fCount)) { return false; } } else { fPos = nullptr; } fTileMode = (SkShader::TileMode)buffer.read32(); fGradFlags = buffer.read32(); if (buffer.readBool()) { fLocalMatrix = &fLocalMatrixStorage; buffer.readMatrix(&fLocalMatrixStorage); } else { fLocalMatrix = nullptr; } return buffer.isValid(); }
sk_sp<SkFlattenable> SkPath2DPathEffect::CreateProc(SkReadBuffer& buffer) { SkMatrix matrix; buffer.readMatrix(&matrix); SkPath path; buffer.readPath(&path); return SkPath2DPathEffect::Make(matrix, path); }
SkShader::SkShader(SkReadBuffer& buffer) : INHERITED(buffer) { inc_shader_counter(); if (buffer.readBool()) { buffer.readMatrix(&fLocalMatrix); } else { fLocalMatrix.reset(); } }
sk_sp<SkFlattenable> SkNormalMapSourceImpl::CreateProc(SkReadBuffer& buf) { sk_sp<SkShader> mapShader = buf.readFlattenable<SkShader>(); SkMatrix invCTM; buf.readMatrix(&invCTM); return sk_make_sp<SkNormalMapSourceImpl>(std::move(mapShader), invCTM); }
sk_sp<SkFlattenable> SkLocalMatrixShader::CreateProc(SkReadBuffer& buffer) { SkMatrix lm; buffer.readMatrix(&lm); auto baseShader(buffer.readShader()); if (!baseShader) { return nullptr; } return baseShader->makeWithLocalMatrix(lm); }
SkLocalMatrixShader::SkLocalMatrixShader(SkReadBuffer& buffer) : INHERITED(buffer) { if (buffer.isVersionLT(SkReadBuffer::kSimplifyLocalMatrix_Version)) { buffer.readMatrix(&(INHERITED::fLocalMatrix)); } fProxyShader.reset(buffer.readShader()); if (NULL == fProxyShader.get()) { sk_throw(); } }
SkShader::SkShader(SkReadBuffer& buffer) : INHERITED(buffer) { if (buffer.readBool()) { buffer.readMatrix(&fLocalMatrix); } else { fLocalMatrix.reset(); } SkDEBUGCODE(fInSetContext = false;) }
sk_sp<SkFlattenable> SkImageShader::CreateProc(SkReadBuffer& buffer) { const TileMode tx = (TileMode)buffer.readUInt(); const TileMode ty = (TileMode)buffer.readUInt(); SkMatrix matrix; buffer.readMatrix(&matrix); SkAutoTUnref<SkImage> img(buffer.readImage()); if (!img) { return nullptr; } return SkImageShader::Make(img, tx, ty, &matrix); }
sk_sp<SkFlattenable> SkImageShader::CreateProc(SkReadBuffer& buffer) { const TileMode tx = (TileMode)buffer.readUInt(); const TileMode ty = (TileMode)buffer.readUInt(); SkMatrix localMatrix; buffer.readMatrix(&localMatrix); sk_sp<SkImage> img = buffer.readImage(); if (!img) { return nullptr; } return SkImageShader::Make(std::move(img), tx, ty, &localMatrix); }
sk_sp<SkFlattenable> SkBitmapProcShader::CreateProc(SkReadBuffer& buffer) { SkMatrix lm; buffer.readMatrix(&lm); SkBitmap bm; if (!buffer.readBitmap(&bm)) { return nullptr; } bm.setImmutable(); TileMode mx = (TileMode)buffer.readUInt(); TileMode my = (TileMode)buffer.readUInt(); return SkShader::MakeBitmapShader(bm, mx, my, &lm); }
SkGradientShaderBase::SkGradientShaderBase(SkReadBuffer& buffer) : INHERITED(buffer) { if (buffer.isVersionLT(SkReadBuffer::kNoUnitMappers_Version)) { // skip the old SkUnitMapper slot buffer.skipFlattenable(); } int colorCount = fColorCount = buffer.getArrayCount(); if (colorCount > kColorStorageCount) { size_t allocSize = (sizeof(SkColor) + sizeof(SkScalar) + sizeof(Rec)) * colorCount; if (buffer.validateAvailable(allocSize)) { fOrigColors = reinterpret_cast<SkColor*>(sk_malloc_throw(allocSize)); } else { fOrigColors = NULL; colorCount = fColorCount = 0; } } else { fOrigColors = fStorage; } buffer.readColorArray(fOrigColors, colorCount); fOrigPos = (SkScalar*)(fOrigColors + colorCount); { uint32_t packed = buffer.readUInt(); fGradFlags = SkToU8(unpack_flags(packed)); fTileMode = unpack_mode(packed); } fTileProc = gTileProcs[fTileMode]; fRecs = (Rec*)(fOrigPos + colorCount); if (colorCount > 2) { Rec* recs = fRecs; recs[0].fPos = 0; fOrigPos[0] = 0; for (int i = 1; i < colorCount; i++) { recs[i].fPos = buffer.readInt(); recs[i].fScale = buffer.readUInt(); fOrigPos[i] = SkFixedToScalar(recs[i].fPos); } } else { fOrigPos = NULL; } buffer.readMatrix(&fPtsToUnit); this->initCommon(); }
static void Read(SkReadBuffer& reader, SkMatrix* matrix) { reader.readMatrix(matrix); }
sk_sp<SkFlattenable> SkLocalMatrixImageFilter::CreateProc(SkReadBuffer& buffer) { SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); SkMatrix lm; buffer.readMatrix(&lm); return SkLocalMatrixImageFilter::Make(lm, common.getInput(0)); }
SkMatrixImageFilter::SkMatrixImageFilter(SkReadBuffer& buffer) : INHERITED(1, buffer) { buffer.readMatrix(&fTransform); fFilterLevel = static_cast<SkPaint::FilterLevel>(buffer.readInt()); }
sk_sp<SkFlattenable> SkLine2DPathEffect::CreateProc(SkReadBuffer& buffer) { SkMatrix matrix; buffer.readMatrix(&matrix); SkScalar width = buffer.readScalar(); return SkLine2DPathEffect::Make(width, matrix); }
sk_sp<SkFlattenable> SkMatrixPE::CreateProc(SkReadBuffer& buffer) { SkMatrix mx; buffer.readMatrix(&mx); return buffer.isValid() ? SkMatrixPathEffect::Make(mx) : nullptr; }