skia2/tests/SubsetPath.h
Mike Klein c0bd9f9fe5 rewrite includes to not need so much -Ifoo
Current strategy: everything from the top

Things to look at first are the manual changes:

   - added tools/rewrite_includes.py
   - removed -Idirectives from BUILD.gn
   - various compile.sh simplifications
   - tweak tools/embed_resources.py
   - update gn/find_headers.py to write paths from the top
   - update gn/gn_to_bp.py SkUserConfig.h layout
     so that #include "include/config/SkUserConfig.h" always
     gets the header we want.

No-Presubmit: true
Change-Id: I73a4b181654e0e38d229bc456c0d0854bae3363e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209706
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
2019-04-24 16:27:11 +00:00

67 lines
1.7 KiB
C++

/*
* 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 "include/core/SkPath.h"
#include "include/private/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