| Index: include/pathops/SkPathOps.h
|
| diff --git a/include/pathops/SkPathOps.h b/include/pathops/SkPathOps.h
|
| index ba18f4ba72f50738e4d7f09618db2db3e6c5ba80..61a7076964d429fc8540bbbd066d39fa92549b40 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;
|
| @@ -17,11 +19,11 @@ struct SkRect;
|
| * The logical operations that can be performed when combining two paths.
|
| */
|
| enum SkPathOp {
|
| - kDifference_PathOp, //!< subtract the op path from the first path
|
| - kIntersect_PathOp, //!< intersect the two paths
|
| - kUnion_PathOp, //!< union (inclusive-or) the two paths
|
| - kXOR_PathOp, //!< exclusive-or the two paths
|
| - kReverseDifference_PathOp, //!< subtract the first path from the op path
|
| + kDifference_SkPathOp, //!< subtract the op path from the first path
|
| + kIntersect_SkPathOp, //!< intersect the two paths
|
| + kUnion_SkPathOp, //!< union (inclusive-or) the two paths
|
| + kXOR_SkPathOp, //!< exclusive-or the two paths
|
| + kReverseDifference_SkPathOp, //!< subtract the first path from the op path
|
| };
|
|
|
| /** Set this path to the result of applying the Op to this path and the
|
| @@ -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 _operator The operator to apply to the existing and supplied paths.
|
| + */
|
| + void add(const SkPath& path, SkPathOp _operator);
|
| +
|
| + /** 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
|
|
|