Index: include/core/SkCanvas.h |
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h |
index d28d0f18982292a0c4294cd032db3590ad4cad50..acb52c9e2eecea5f222d84be2563c73fe5cdcae1 100644 |
--- a/include/core/SkCanvas.h |
+++ b/include/core/SkCanvas.h |
@@ -10,6 +10,7 @@ |
#include "SkTypes.h" |
#include "SkBitmap.h" |
+#include "SkClipOp.h" |
#include "SkDeque.h" |
#include "SkImage.h" |
#include "SkPaint.h" |
@@ -41,6 +42,8 @@ class SkSurface; |
class SkSurface_Base; |
class SkTextBlob; |
+//#define SK_SUPPORT_LEGACY_CLIP_REGIONOPS |
+ |
/** \class SkCanvas |
A Canvas encapsulates all of the state about drawing into a device (bitmap). |
@@ -60,8 +63,27 @@ class SK_API SkCanvas : public SkRefCnt { |
enum PrivateSaveLayerFlags { |
kDontClipToLayer_PrivateSaveLayerFlag = 1U << 31, |
}; |
- |
+ |
public: |
+#ifdef SK_SUPPORT_LEGACY_CLIP_REGIONOPS |
+ typedef SkRegion::Op ClipOp; |
+ |
+ static const ClipOp kDifference_Op = SkRegion::kDifference_Op; |
+ static const ClipOp kIntersect_Op = SkRegion::kIntersect_Op; |
+ static const ClipOp kUnion_Op = SkRegion::kUnion_Op; |
+ static const ClipOp kXOR_Op = SkRegion::kXOR_Op; |
+ static const ClipOp kReverseDifference_Op = SkRegion::kReverseDifference_Op; |
+ static const ClipOp kReplace_Op = SkRegion::kReplace_Op; |
+#else |
+ typedef SkClipOp ClipOp; |
+ |
+ static const ClipOp kDifference_Op = kDifference_SkClipOp; |
+ static const ClipOp kIntersect_Op = kIntersect_SkClipOp; |
+ static const ClipOp kUnion_Op = kUnion_SkClipOp; |
+ static const ClipOp kXOR_Op = kXOR_SkClipOp; |
+ static const ClipOp kReverseDifference_Op = kReverseDifference_SkClipOp; |
+ static const ClipOp kReplace_Op = kReplace_SkClipOp; |
+#endif |
/** |
* Attempt to allocate raster canvas, matching the ImageInfo, that will draw directly into the |
* specified pixels. To access the pixels after drawing to them, the caller should call |
@@ -477,9 +499,7 @@ public: |
* @param op The region op 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, ClipOp op = kIntersect_Op, bool doAntiAlias = false); |
/** |
* Modify the current clip with the specified SkRRect. |
@@ -487,9 +507,7 @@ public: |
* @param op The region op 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, ClipOp op = kIntersect_Op, bool doAntiAlias = false); |
/** |
* Modify the current clip with the specified path. |
@@ -497,9 +515,7 @@ public: |
* @param op The region op 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, ClipOp op = kIntersect_Op, bool doAntiAlias = false); |
/** EXPERIMENTAL -- only used for testing |
Set to false to force clips to be hard, even if doAntiAlias=true is |
@@ -523,17 +539,7 @@ public: |
@param deviceRgn The region to apply to the current clip |
@param op The region op to apply to the current clip |
*/ |
- void clipRegion(const SkRegion& deviceRgn, |
- SkRegion::Op op = SkRegion::kIntersect_Op); |
- |
- /** Helper for clipRegion(rgn, kReplace_Op). Sets the current clip to the |
- specified region. This does not intersect or in any other way account |
- for the existing clip region. |
- @param deviceRgn The region to copy into the current clip. |
- */ |
- void setClipRegion(const SkRegion& deviceRgn) { |
- this->clipRegion(deviceRgn, SkRegion::kReplace_Op); |
- } |
+ void clipRegion(const SkRegion& deviceRgn, ClipOp op = kIntersect_Op); |
/** Return true if the specified rectangle, after being transformed by the |
current matrix, would lie completely outside of the current clip. Call |
@@ -1466,10 +1472,10 @@ protected: |
kSoft_ClipEdgeStyle |
}; |
- virtual void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle); |
- virtual void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle); |
- virtual void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle); |
- virtual void onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op); |
+ virtual void onClipRect(const SkRect& rect, ClipOp, ClipEdgeStyle); |
+ virtual void onClipRRect(const SkRRect& rrect, ClipOp, ClipEdgeStyle); |
+ virtual void onClipPath(const SkPath& path, ClipOp, ClipEdgeStyle); |
+ virtual void onClipRegion(const SkRegion& deviceRgn, ClipOp); |
virtual void onDiscard(); |
@@ -1732,9 +1738,9 @@ private: |
class SkCanvasClipVisitor { |
public: |
virtual ~SkCanvasClipVisitor(); |
- virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; |
- virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; |
- virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; |
+ virtual void clipRect(const SkRect&, SkCanvas::ClipOp, bool antialias) = 0; |
+ virtual void clipRRect(const SkRRect&, SkCanvas::ClipOp, bool antialias) = 0; |
+ virtual void clipPath(const SkPath&, SkCanvas::ClipOp, bool antialias) = 0; |
}; |
#endif |