SkStrokeRec TestStrokeRec(SkRandom* random) { SkStrokeRec::InitStyle style = SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); SkStrokeRec rec(style); randomize_stroke_rec(&rec, random); return rec; }
GrStrokeInfo TestStrokeInfo(SkRandom* random) { SkStrokeRec::InitStyle style = SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); GrStrokeInfo strokeInfo(style); randomize_stroke_rec(&strokeInfo, random); SkPathEffect::DashInfo dashInfo; dashInfo.fCount = random->nextRangeU(1, 50) * 2; SkAutoTDeleteArray<SkScalar> intervals(SkNEW_ARRAY(SkScalar, dashInfo.fCount)); dashInfo.fIntervals = intervals.get(); SkScalar sum = 0; for (int i = 0; i < dashInfo.fCount; i++) { dashInfo.fIntervals[i] = random->nextRangeScalar(SkDoubleToScalar(0.01), SkDoubleToScalar(10.0)); sum += dashInfo.fIntervals[i]; } dashInfo.fPhase = random->nextRangeScalar(0, sum); strokeInfo.setDashInfo(dashInfo); return strokeInfo; }
void TestStyle(SkRandom* random, GrStyle* style) { SkStrokeRec::InitStyle initStyle = SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); SkStrokeRec stroke(initStyle); randomize_stroke_rec(&stroke, random); sk_sp<SkPathEffect> pe; if (random->nextBool()) { int cnt = random->nextRangeU(1, 50) * 2; std::unique_ptr<SkScalar[]> intervals(new SkScalar[cnt]); SkScalar sum = 0; for (int i = 0; i < cnt; i++) { intervals[i] = random->nextRangeScalar(SkDoubleToScalar(0.01), SkDoubleToScalar(10.0)); sum += intervals[i]; } SkScalar phase = random->nextRangeScalar(0, sum); pe = TestDashPathEffect::Make(intervals.get(), cnt, phase); } *style = GrStyle(stroke, std::move(pe)); }