sk_sp<SkFlattenable> SkPath2DPathEffect::CreateProc(SkReadBuffer& buffer) { SkMatrix matrix; buffer.readMatrix(&matrix); SkPath path; buffer.readPath(&path); return SkPath2DPathEffect::Make(matrix, path); }
sk_sp<SkFlattenable> SkPath1DPathEffect::CreateProc(SkReadBuffer& buffer) { SkScalar advance = buffer.readScalar(); if (advance > 0) { SkPath path; buffer.readPath(&path); SkScalar phase = buffer.readScalar(); Style style = (Style)buffer.readUInt(); return SkPath1DPathEffect::Make(path, advance, phase, style); } return nullptr; }
SkPath1DPathEffect::SkPath1DPathEffect(SkReadBuffer& buffer) { fAdvance = buffer.readScalar(); if (fAdvance > 0) { buffer.readPath(&fPath); fInitialOffset = buffer.readScalar(); fStyle = (Style) buffer.readUInt(); } else { SkDEBUGF(("SkPath1DPathEffect can't use advance <= 0\n")); // Make Coverity happy. fInitialOffset = 0; fStyle = kStyleCount; } }
void FuzzPathDeserialize(SkReadBuffer& buf) { SkPath path; buf.readPath(&path); if (!buf.isValid()) { return; } auto s = SkSurface::MakeRasterN32Premul(128, 128); if (!s) { // May return nullptr in memory-constrained fuzzing environments return; } s->getCanvas()->drawPath(path, SkPaint()); }
SkPathHeap::SkPathHeap(SkReadBuffer& buffer) : fHeap(kPathCount * sizeof(SkPath)) { const int count = buffer.readInt(); fPaths.setCount(count); SkPath** ptr = fPaths.begin(); SkPath* p = (SkPath*)fHeap.allocThrow(count * sizeof(SkPath)); for (int i = 0; i < count; i++) { new (p) SkPath; buffer.readPath(p); *ptr++ = p; // record the pointer p++; // move to the next storage location } }
static void Read(SkReadBuffer& reader, SkPath* path) { reader.readPath(path); }