Index: include/core/SkCanvas.h |
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h |
index ff60c57fa7ec325a7678fbb8e1e28629b83e71a2..5bed56eafffedd7897f19e54a406515c5f153479 100644 |
--- a/include/core/SkCanvas.h |
+++ b/include/core/SkCanvas.h |
@@ -19,6 +19,12 @@ |
#include "SkSurfaceProps.h" |
#include "SkXfermode.h" |
+// Undefine this when we change callers to use SkClipOp or legacyClip (temporarily) |
+//#define SK_SUPPORT_REGION_CLIPOPS |
+ |
+// Undefine this when we have updated all callers to SkClipOp |
+#define SK_SUPPORT_LEGACY_CLIPOPS |
+ |
#ifdef SK_SUPPORT_LEGACY_DRAWTEXT_VIRTUAL |
#define SK_LEGACY_DRAWTEXT_VIRTUAL virtual |
#else |
@@ -42,6 +48,11 @@ class GrRenderTarget; |
class SkCanvasState; |
+enum SkClipOp { |
+ kIntersect_SkClipOp, |
+ kDifference_SkClipOp, |
+}; |
+ |
/** \class SkCanvas |
A Canvas encapsulates all of the state about drawing into a device (bitmap). |
@@ -469,35 +480,68 @@ public: |
*/ |
void resetMatrix(); |
+#ifndef SK_SUPPORT_REGION_CLIPOPS |
+private: |
+#endif |
+ void clipRect(const SkRect&, SkRegion::Op, bool doAntiAlias = false); |
+ void clipRRect(const SkRRect&, SkRegion::Op, bool doAntiAlias = false); |
+ void clipPath(const SkPath&, SkRegion::Op, bool doAntiAlias = false); |
+ void clipRegion(const SkRegion&, SkRegion::Op); |
+#ifndef SK_SUPPORT_REGION_CLIPOPS |
+public: |
+#endif |
+ |
+/* These support SkRegion ops, and are used in the interim until we can remove all |
+ * needs for these ops. When all callers only need Intersect or Difference, we will |
+ * remove these calls. |
+ */ |
+#ifdef SK_SUPPORT_LEGACY_CLIPOPS |
+ void legacyClipRect(const SkRect& rect, SkRegion::Op op, bool doAntiAlias = false) { |
+ this->clipRect(rect, op, doAntiAlias); |
+ } |
+ void legacyClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAntiAlias = false) { |
+ this->clipRRect(rrect, op, doAntiAlias); |
+ } |
+ void legacyClipPath(const SkPath& path, SkRegion::Op op, bool doAntiAlias = false) { |
+ this->clipPath(path, op, doAntiAlias); |
+ } |
+ void legacyClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { |
+ this->clipRegion(deviceRgn, op); |
+ } |
+#endif |
+ |
/** |
* Modify the current clip with the specified rectangle. |
* @param rect The rect to combine with the current clip |
- * @param op The region op to apply to the current clip |
+ * @param op The ClipOp to apply to the current clip |
* @param doAntiAlias true if the clip should be antialiased |
*/ |
- void clipRect(const SkRect& rect, |
- SkRegion::Op op = SkRegion::kIntersect_Op, |
- bool doAntiAlias = false); |
+ void clipRect(const SkRect& rect, SkClipOp op, bool doAntiAlias = false); |
+ void clipRect(const SkRect& rect) { |
+ this->clipRect(rect, kIntersect_SkClipOp, false); |
+ } |
/** |
* Modify the current clip with the specified SkRRect. |
* @param rrect The rrect to combine with the current clip |
- * @param op The region op to apply to the current clip |
+ * @param op The ClipOp to apply to the current clip |
* @param doAntiAlias true if the clip should be antialiased |
*/ |
- void clipRRect(const SkRRect& rrect, |
- SkRegion::Op op = SkRegion::kIntersect_Op, |
- bool doAntiAlias = false); |
+ void clipRRect(const SkRRect& rrect, SkClipOp op, bool doAntiAlias = false); |
+ void clipRRect(const SkRRect& rrect) { |
+ this->clipRRect(rrect, kIntersect_SkClipOp, false); |
+ } |
/** |
* Modify the current clip with the specified path. |
* @param path The path to combine with the current clip |
- * @param op The region op to apply to the current clip |
+ * @param op The ClipOp to apply to the current clip |
* @param doAntiAlias true if the clip should be antialiased |
*/ |
- void clipPath(const SkPath& path, |
- SkRegion::Op op = SkRegion::kIntersect_Op, |
- bool doAntiAlias = false); |
+ void clipPath(const SkPath& path, SkClipOp op, bool doAntiAlias = false); |
+ void clipPath(const SkPath& path) { |
+ this->clipPath(path, kIntersect_SkClipOp, false); |
+ } |
/** EXPERIMENTAL -- only used for testing |
Set to false to force clips to be hard, even if doAntiAlias=true is |
@@ -519,10 +563,9 @@ public: |
matrix, clipRegion() assumes its argument is already in device |
coordinates, and so no transformation is performed. |
@param deviceRgn The region to apply to the current clip |
- @param op The region op to apply to the current clip |
+ @param op The ClipOp to apply to the current clip |
*/ |
- void clipRegion(const SkRegion& deviceRgn, |
- SkRegion::Op op = SkRegion::kIntersect_Op); |
+ void clipRegion(const SkRegion& deviceRgn, SkClipOp op = kIntersect_SkClipOp); |
/** Helper for clipRegion(rgn, kReplace_Op). Sets the current clip to the |
specified region. This does not intersect or in any other way account |
@@ -530,7 +573,7 @@ public: |
@param deviceRgn The region to copy into the current clip. |
*/ |
void setClipRegion(const SkRegion& deviceRgn) { |
- this->clipRegion(deviceRgn, SkRegion::kReplace_Op); |
+ this->legacyClipRegion(deviceRgn, SkRegion::kReplace_Op); |
} |
/** Return true if the specified rectangle, after being transformed by the |