blob: ba18f4ba72f50738e4d7f09618db2db3e6c5ba80 [file] [log] [blame]
caryclark@google.com07393ca2013-04-08 11:47:37 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7#ifndef SkPathOps_DEFINED
8#define SkPathOps_DEFINED
9
commit-bot@chromium.org13b3aa12013-07-09 19:43:35 +000010#include "SkPreConfig.h"
11
caryclark@google.com07393ca2013-04-08 11:47:37 +000012class SkPath;
caryclarka8d2ffb2014-06-24 07:55:11 -070013struct SkRect;
caryclark@google.com07393ca2013-04-08 11:47:37 +000014
caryclark@google.com7dfbb072013-04-22 14:37:05 +000015// FIXME: move everything below into the SkPath class
16/**
17 * The logical operations that can be performed when combining two paths.
18 */
caryclark@google.com07393ca2013-04-08 11:47:37 +000019enum SkPathOp {
caryclark@google.com7dfbb072013-04-22 14:37:05 +000020 kDifference_PathOp, //!< subtract the op path from the first path
21 kIntersect_PathOp, //!< intersect the two paths
22 kUnion_PathOp, //!< union (inclusive-or) the two paths
23 kXOR_PathOp, //!< exclusive-or the two paths
24 kReverseDifference_PathOp, //!< subtract the first path from the op path
caryclark@google.com07393ca2013-04-08 11:47:37 +000025};
26
caryclark@google.com66560ca2013-04-26 19:51:16 +000027/** Set this path to the result of applying the Op to this path and the
28 specified path: this = (this op operand).
29 The resulting path will be constructed from non-overlapping contours.
skia.committer@gmail.com214c8702013-04-27 07:02:53 +000030 The curve order is reduced where possible so that cubics may be turned
caryclark@google.com66560ca2013-04-26 19:51:16 +000031 into quadratics, and quadratics maybe turned into lines.
caryclark@google.com07393ca2013-04-08 11:47:37 +000032
skia.committer@gmail.com214c8702013-04-27 07:02:53 +000033 Returns true if operation was able to produce a result;
caryclark@google.com66560ca2013-04-26 19:51:16 +000034 otherwise, result is unmodified.
35
36 @param one The first operand (for difference, the minuend)
37 @param two The second operand (for difference, the subtrahend)
38 @param result The product of the operands. The result may be one of the
39 inputs.
40 @return True if operation succeeded.
caryclark@google.com07393ca2013-04-08 11:47:37 +000041 */
commit-bot@chromium.org13b3aa12013-07-09 19:43:35 +000042bool SK_API Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result);
caryclark@google.com66560ca2013-04-26 19:51:16 +000043
44/** Set this path to a set of non-overlapping contours that describe the
skia.committer@gmail.com214c8702013-04-27 07:02:53 +000045 same area as the original path.
caryclark@google.com66560ca2013-04-26 19:51:16 +000046 The curve order is reduced where possible so that cubics may
47 be turned into quadratics, and quadratics maybe turned into lines.
48
skia.committer@gmail.com214c8702013-04-27 07:02:53 +000049 Returns true if operation was able to produce a result;
caryclark@google.com66560ca2013-04-26 19:51:16 +000050 otherwise, result is unmodified.
51
52 @param path The path to simplify.
53 @param result The simplified path. The result may be the input.
54 @return True if simplification succeeded.
55 */
commit-bot@chromium.org13b3aa12013-07-09 19:43:35 +000056bool SK_API Simplify(const SkPath& path, SkPath* result);
caryclark@google.com07393ca2013-04-08 11:47:37 +000057
caryclarka8d2ffb2014-06-24 07:55:11 -070058/** Set the resulting rectangle to the tight bounds of the path.
59
60 @param path The path measured.
61 @param result The tight bounds of the path.
62 @return True if the bounds could be computed.
63 */
64bool SK_API TightBounds(const SkPath& path, SkRect* result);
65
caryclark@google.com07393ca2013-04-08 11:47:37 +000066#endif