• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 Google LLC.
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 
8 #ifndef SkPathTypes_DEFINED
9 #define SkPathTypes_DEFINED
10 
11 #include "include/core/SkTypes.h"
12 
13 enum class SkPathFillType {
14     /** Specifies that "inside" is computed by a non-zero sum of signed edge crossings */
15     kWinding,
16     /** Specifies that "inside" is computed by an odd number of edge crossings */
17     kEvenOdd,
18     /** Same as Winding, but draws outside of the path, rather than inside */
19     kInverseWinding,
20     /** Same as EvenOdd, but draws outside of the path, rather than inside */
21     kInverseEvenOdd
22 };
23 
SkPathFillType_IsEvenOdd(SkPathFillType ft)24 static inline bool SkPathFillType_IsEvenOdd(SkPathFillType ft) {
25     return (static_cast<int>(ft) & 1) != 0;
26 }
27 
SkPathFillType_IsInverse(SkPathFillType ft)28 static inline bool SkPathFillType_IsInverse(SkPathFillType ft) {
29     return (static_cast<int>(ft) & 2) != 0;
30 }
31 
SkPathFillType_ConvertToNonInverse(SkPathFillType ft)32 static inline SkPathFillType SkPathFillType_ConvertToNonInverse(SkPathFillType ft) {
33     return static_cast<SkPathFillType>(static_cast<int>(ft) & 1);
34 }
35 
36 enum class SkPathConvexityType {
37     kUnknown,
38     kConvex,
39     kConcave
40 };
41 
42 enum class SkPathDirection {
43     /** clockwise direction for adding closed contours */
44     kCW,
45     /** counter-clockwise direction for adding closed contours */
46     kCCW,
47 };
48 
49 enum SkPathSegmentMask {
50     kLine_SkPathSegmentMask   = 1 << 0,
51     kQuad_SkPathSegmentMask   = 1 << 1,
52     kConic_SkPathSegmentMask  = 1 << 2,
53     kCubic_SkPathSegmentMask  = 1 << 3,
54 };
55 
56 enum class SkPathVerb {
57     kMove,   //!< iter.next returns 1 point
58     kLine,   //!< iter.next returns 2 points
59     kQuad,   //!< iter.next returns 3 points
60     kConic,  //!< iter.next returns 3 points + iter.conicWeight()
61     kCubic,  //!< iter.next returns 4 points
62     kClose,  //!< iter.next returns 1 point (contour's moveTo pt)
63     kDone,   //!< iter.next returns 0 points
64 };
65 
66 #endif
67