diff options
Diffstat (limited to 'tests/SubsetPath.h')
-rw-r--r-- | tests/SubsetPath.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/SubsetPath.h b/tests/SubsetPath.h new file mode 100644 index 0000000000..65067d1b0b --- /dev/null +++ b/tests/SubsetPath.h @@ -0,0 +1,66 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef SubsetPath_DEFINED +#define SubsetPath_DEFINED + +#include "SkPath.h" +#include "SkTDArray.h" + +/* Given a path, generate a the desired minimal subset of the original. + + This does a binary divide-and-conquer on the path, first splitting by + contours, and then by verbs. The caller passes whether the previous subset + behaved the same as the original. If not, the subset() call restores the + prior state before returning a new subset. + + If a path fails a local test, this reduces the data to the + minimal set that fails using a pattern like: + + bool testFailed = true; + SkPath minimal; + SubsetContours subsetContours(testPath); + while (subsetContours.subset(testFailed, &minimal)) { + testFailed = myPathTest(minimal); + } + testFailed = true; + SubsetVerbs subsetVerbs(testPath); + while (subsetVerbs.subset(testFailed, &minimal)) { + testFailed = myPathTest(minimal); + } +*/ + +class SubsetPath { +public: + SubsetPath(const SkPath& path); + virtual ~SubsetPath() {} + bool subset(bool testFailed, SkPath* sub); +protected: + int range(int* end) const; + virtual SkPath getSubsetPath() const = 0; + + const SkPath& fPath; + SkTDArray<bool> fSelected; + int fSubset; + int fTries; + +}; + +class SubsetContours : public SubsetPath { +public: + SubsetContours(const SkPath& path); +protected: + SkPath getSubsetPath() const override; +}; + +class SubsetVerbs : public SubsetPath { +public: + SubsetVerbs(const SkPath& path); +protected: + SkPath getSubsetPath() const override; +}; + +#endif |