Chromium Code Reviews| Index: include/gpu/GrTestUtils.h |
| diff --git a/include/gpu/GrTestUtils.h b/include/gpu/GrTestUtils.h |
| index 475e38a6a11d50034aebaf1145973dbfd16726df..eb595db96f4679229f20818521112c2a48eded8b 100644 |
| --- a/include/gpu/GrTestUtils.h |
| +++ b/include/gpu/GrTestUtils.h |
| @@ -13,10 +13,13 @@ |
| #ifdef GR_TEST_UTILS |
| #include "GrColor.h" |
| +#include "SkDashPathPriv.h" |
| +#include "SkPathEffect.h" |
| #include "SkRandom.h" |
| #include "SkStrokeRec.h" |
| +#include "SkTemplates.h" |
| -class GrStrokeInfo; |
| +class GrStyle; |
| class SkMatrix; |
| class SkPath; |
| class SkRRect; |
| @@ -24,7 +27,7 @@ struct SkRect; |
| namespace GrTest { |
| /** |
| - * A helper for use in Test functions. |
| + * Helpers for use in Test functions. |
| */ |
| const SkMatrix& TestMatrix(SkRandom*); |
| const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*); |
| @@ -36,9 +39,55 @@ const SkRRect& TestRRectSimple(SkRandom*); |
| const SkPath& TestPath(SkRandom*); |
| const SkPath& TestPathConvex(SkRandom*); |
| SkStrokeRec TestStrokeRec(SkRandom*); |
| -GrStrokeInfo TestStrokeInfo(SkRandom*); |
| +/** Creates styles with dash path effects and null path effects */ |
| +void TestStyle(SkRandom*, GrStyle*); |
|
robertphillips
2016/05/09 20:05:28
Can this class go in the .cpp file ?
bsalomon
2016/05/09 20:38:55
It's also used by GrDashingEffect's test function.
|
| -} |
| +// We have a simplified dash path effect here to avoid relying on SkDashPathEffect which |
| +// is in the optional build target effects. |
| +class TestDashPathEffect : public SkPathEffect { |
| +public: |
| + static sk_sp<SkPathEffect> Make(const SkScalar* intervals, int count, SkScalar phase) { |
| + return sk_sp<SkPathEffect>(new TestDashPathEffect(intervals, count, phase)); |
| + } |
| + |
| + bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec* rec, |
| + const SkRect* cullRect) const override { |
| + return SkDashPath::InternalFilter(dst, src, rec, cullRect, fIntervals.get(), fCount, |
| + fInitialDashLength, fInitialDashIndex, fIntervalLength); |
| + } |
| + |
| + DashType asADash(DashInfo* info) const override { |
| + if (info) { |
| + if (info->fCount >= fCount && info->fIntervals) { |
| + memcpy(info->fIntervals, fIntervals.get(), fCount * sizeof(SkScalar)); |
| + } |
| + info->fCount = fCount; |
| + info->fPhase = fPhase; |
| + } |
| + return kDash_DashType; |
| + } |
| + |
| + Factory getFactory() const override { return nullptr; } |
| + void toString(SkString*) const override {} |
| + |
| +private: |
| + TestDashPathEffect(const SkScalar* intervals, int count, SkScalar phase) { |
| + fCount = count; |
| + fIntervals.reset(count); |
| + memcpy(fIntervals.get(), intervals, count * sizeof(SkScalar)); |
| + SkDashPath::CalcDashParameters(phase, intervals, count, &fInitialDashLength, |
| + &fInitialDashIndex, &fIntervalLength, &fPhase); |
| + } |
| + |
| + int fCount; |
| + SkAutoTArray<SkScalar> fIntervals; |
| + SkScalar fPhase; |
| + SkScalar fInitialDashLength; |
| + int fInitialDashIndex; |
| + SkScalar fIntervalLength; |
| +}; |
| + |
| +} // namespace GrTest |
| static inline GrColor GrRandomColor(SkRandom* random) { |
| // There are only a few cases of random colors which interest us |