// Since we are stepping by a float, the do/while loop might go on forever (or nearly so). // Put in a governor to limit crash values from looping too long (and allocating too much ram). #define MAX_REASONABLE_ITERATIONS 100000
class Sk1DPathEffect : public SkPathEffectBase {
public: protected: bool onFilterPath(SkPathBuilder* builder, const SkPath& src, SkStrokeRec*, const SkRect*, const SkMatrix&) const override {
SkPathMeasure meas(src, false); do { int governor = MAX_REASONABLE_ITERATIONS;
SkScalar length = meas.getLength();
SkScalar distance = this->begin(length); while (distance < length && --governor >= 0) {
SkScalar delta = this->next(builder, distance, meas); if (delta <= 0) { break;
}
distance += delta;
} if (governor < 0) { returnfalse;
}
} while (meas.nextContour()); return true;
}
/** Called at the start of each contour, returns the initial offset intothatcontour.
*/
virtual SkScalar begin(SkScalar contourLength) const = 0; /** Called with the current distance along the path, with the current matrix forthepoint/tangentatthespecifieddistance. Returnthedistancetotravelforthenextcall.Ifreturn<=0,thenthat contourisdone.
*/
virtual SkScalar next(SkPathBuilder* dst, SkScalar dist, SkPathMeasure&) const = 0;
private: // For simplicity, assume fast bounds cannot be computed bool computeFastBounds(SkRect*) const override { returnfalse; }
};
// Make the path thread-safe.
fPath.updateBoundsCache();
(void)fPath.getGenerationID();
// cleanup their phase parameter, inverting it so that it becomes an // offset along the path (to match the interpretation in PostScript) if (phase < 0) {
phase = -phase; if (phase > advance) {
phase = SkScalarMod(phase, advance);
}
} else { if (phase > advance) {
phase = SkScalarMod(phase, advance);
}
phase = advance - phase;
} // now catch the edge case where phase == advance (within epsilon) if (phase >= advance) {
phase = 0;
}
SkASSERT(phase >= 0);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.