Index: src/gpu/GrClip.cpp |
diff --git a/src/gpu/GrClip.cpp b/src/gpu/GrClip.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0f8aac874953237dfd03323c516d2879b2edfc38 |
--- /dev/null |
+++ b/src/gpu/GrClip.cpp |
@@ -0,0 +1,50 @@ |
+/* |
+ * Copyright 2010 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "GrClip.h" |
+ |
+#include "GrSurface.h" |
+#include "SkRect.h" |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+/** |
+ * getConservativeBounds returns the conservative bounding box of the clip |
+ * in device (as opposed to canvas) coordinates. If the bounding box is |
+ * the result of purely intersections of rects (with an initial replace) |
+ * isIntersectionOfRects will be set to true. |
+ */ |
+void GrClip::getConservativeBounds(int width, int height, SkIRect* devResult, |
+ bool* isIntersectionOfRects) const { |
+ switch (fClipType) { |
+ default: |
+ SkFAIL("incomplete switch\n"); |
+ case kWideOpen_ClipType: { |
+ devResult->setLTRB(0, 0, width, height); |
+ if (isIntersectionOfRects) { |
+ *isIntersectionOfRects = true; |
+ } |
+ } break; |
+ case kIRect_ClipType: { |
+ *devResult = this->irect(); |
+ if (isIntersectionOfRects) { |
+ *isIntersectionOfRects = true; |
+ } |
+ } break; |
+ case kClipStack_ClipType: { |
+ SkRect devBounds; |
+ this->clipStack()->getConservativeBounds(-this->origin().fX, |
+ -this->origin().fY, |
+ width, |
+ height, |
+ &devBounds, |
+ isIntersectionOfRects); |
+ devBounds.roundOut(devResult); |
+ } break; |
+ |
+ } |
+} |