SkPathRef::Editor::Editor(SkAutoTUnref<SkPathRef>* pathRef, int incReserveVerbs, int incReservePoints) { if ((*pathRef)->unique()) { (*pathRef)->incReserve(incReserveVerbs, incReservePoints); } else { SkPathRef* copy = SkNEW(SkPathRef); copy->copy(**pathRef, incReserveVerbs, incReservePoints); pathRef->reset(copy); } fPathRef = *pathRef; fPathRef->fGenerationID = 0; SkDEBUGCODE(sk_atomic_inc(&fPathRef->fEditorsAttached);) }
SkPathRef::Editor::Editor(sk_sp<SkPathRef>* pathRef, int incReserveVerbs, int incReservePoints) { if ((*pathRef)->unique()) { (*pathRef)->incReserve(incReserveVerbs, incReservePoints); } else { SkPathRef* copy = new SkPathRef; copy->copy(**pathRef, incReserveVerbs, incReservePoints); pathRef->reset(copy); } fPathRef = pathRef->get(); fPathRef->callGenIDChangeListeners(); fPathRef->fGenerationID = 0; SkDEBUGCODE(sk_atomic_inc(&fPathRef->fEditorsAttached);) }
SkPathRef::Editor::Editor(sk_sp<SkPathRef>* pathRef, int incReserveVerbs, int incReservePoints) { SkASSERT(incReserveVerbs >= 0); SkASSERT(incReservePoints >= 0); if ((*pathRef)->unique()) { (*pathRef)->incReserve(incReserveVerbs, incReservePoints); } else { SkPathRef* copy = new SkPathRef; copy->copy(**pathRef, incReserveVerbs, incReservePoints); pathRef->reset(copy); } fPathRef = pathRef->get(); fPathRef->callGenIDChangeListeners(); fPathRef->fGenerationID = 0; fPathRef->fBoundsIsDirty = true; SkDEBUGCODE(fPathRef->fEditorsAttached++;) }
// As a template argument, this must have external linkage. SkPathRef* sk_create_empty_pathref() { SkPathRef* empty = SkNEW(SkPathRef); empty->computeBounds(); // Avoids races later to be the first to do this. return empty; }