diff options
author | caryclark <caryclark@google.com> | 2015-03-24 07:28:17 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-24 07:28:17 -0700 |
commit | ccec0f958ffc71a9986d236bc2eb335cb2111119 (patch) | |
tree | f864209e3594293256ac391715d50222ff22d96b /include/pathops | |
parent | 62a320c8d444cd04e4f2952c269ea4cbd58dee64 (diff) |
pathops version two
R=reed@google.com
marked 'no commit' to attempt to get trybots to run
TBR=reed@google.com
Review URL: https://codereview.chromium.org/1002693002
Diffstat (limited to 'include/pathops')
-rw-r--r-- | include/pathops/SkPathOps.h | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/include/pathops/SkPathOps.h b/include/pathops/SkPathOps.h index ba18f4ba72..3ec9351606 100644 --- a/include/pathops/SkPathOps.h +++ b/include/pathops/SkPathOps.h @@ -8,6 +8,8 @@ #define SkPathOps_DEFINED #include "SkPreConfig.h" +#include "SkTArray.h" +#include "SkTDArray.h" class SkPath; struct SkRect; @@ -35,9 +37,10 @@ enum SkPathOp { @param one The first operand (for difference, the minuend) @param two The second operand (for difference, the subtrahend) + @param op The operator to apply. @param result The product of the operands. The result may be one of the inputs. - @return True if operation succeeded. + @return True if the operation succeeded. */ bool SK_API Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result); @@ -63,4 +66,31 @@ bool SK_API Simplify(const SkPath& path, SkPath* result); */ bool SK_API TightBounds(const SkPath& path, SkRect* result); +/** Perform a series of path operations, optimized for unioning many paths together. + */ +class SK_API SkOpBuilder { +public: + /** Add one or more paths and their operand. The builder is empty before the first + path is added, so the result of a single add is (emptyPath OP path). + + @param path The second operand. + @param op The operator to apply to the existing and supplied paths. + */ + void add(const SkPath& path, SkPathOp op); + + /** Computes the sum of all paths and operands, and resets the builder to its + initial state. + + @param result The product of the operands. + @return True if the operation succeeded. + */ + bool resolve(SkPath* result); + +private: + SkTArray<SkPath> fPathRefs; + SkTDArray<SkPathOp> fOps; + + void reset(); +}; + #endif |