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 |