Index: src/core/SkPathPriv.h |
diff --git a/src/core/SkPathPriv.h b/src/core/SkPathPriv.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..98e50e302589e788d2fb48d1c00c72606ce640ca |
--- /dev/null |
+++ b/src/core/SkPathPriv.h |
@@ -0,0 +1,60 @@ |
+/* |
+ * 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 SkPathPriv_DEFINED |
+#define SkPathPriv_DEFINED |
+ |
+#include "SkPath.h" |
+ |
+class SkPathPriv { |
+public: |
+ enum FirstDirection { |
+ kCW_FirstDirection, // == SkPath::kCW_Direction |
bsalomon
2015/06/11 01:37:08
why not just uncomment this? or static assert?
robertphillips
2015/06/15 15:22:35
I second the static asserts
|
+ kCCW_FirstDirection, // == SkPath::kCCW_Direction |
+ kUnknown_FirstDirection, |
+ }; |
+ |
+ static FirstDirection AsFirstDirection(SkPath::Direction dir) { |
+ // since we agree numerically for the values in Direction, we can just cast. |
+ return (FirstDirection)dir; |
+ } |
+ |
+ /** |
+ * Return the opposite of the specified direction. kUnknown is its own |
+ * opposite. |
+ */ |
+ static FirstDirection OppositeFirstDirection(FirstDirection dir) { |
+ static const FirstDirection gOppositeDir[] = { |
+ kCCW_FirstDirection, kCW_FirstDirection, kUnknown_FirstDirection, |
+ }; |
+ return gOppositeDir[dir]; |
+ } |
+ |
+ /** |
+ * Tries to quickly compute the direction of the first non-degenerate |
+ * contour. If it can be computed, return true and set dir to that |
+ * direction. If it cannot be (quickly) determined, return false and ignore |
+ * the dir parameter. If the direction was determined, it is cached to make |
+ * subsequent calls return quickly. |
+ */ |
+ static bool CheapComputeFirstDirection(const SkPath&, FirstDirection* dir); |
+ |
+ /** |
+ * Returns true if the path's direction can be computed via |
+ * cheapComputDirection() and if that computed direction matches the |
+ * specified direction. If dir is kUnknown, returns true if the direction |
+ * cannot be computed. |
+ */ |
+ static bool CheapIsFirstDirection(const SkPath& path, FirstDirection dir) { |
+ FirstDirection computedDir = kUnknown_FirstDirection; |
+ (void)CheapComputeFirstDirection(path, &computedDir); |
+ return computedDir == dir; |
+ } |
+ |
+}; |
+ |
+#endif |