aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-02-24 21:21:51 +0000
committerGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-02-24 21:21:51 +0000
commit3cc0d8a6f0feb66a60d3edac12c5a12a0e92ae93 (patch)
tree1336d617b93b5d4da007fe700befbd893cf522cb
parent42bbef71c7ccba831caec84a9ab0e3ab15842de7 (diff)
reverting r3259 because of gm/test failure.
git-svn-id: http://skia.googlecode.com/svn/trunk@3260 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--include/core/SkCanvas.h8
-rw-r--r--src/core/SkCanvas.cpp24
2 files changed, 25 insertions, 7 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index aa400d6ad4..058979d0f7 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -429,13 +429,7 @@ public:
@return true if the horizontal band is completely clipped out (i.e. does
not intersect the current clip)
*/
- bool quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const {
- SkASSERT(SkScalarToCompareType(top) >= SkScalarToCompareType(bottom));
-
- const SkRectCompareType& clipR = this->getLocalClipBoundsCompareType(et);
- return SkScalarToCompareType(top) >= clipR.fBottom ||
- SkScalarToCompareType(bottom) <= clipR.fTop;
- }
+ bool quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const;
/** Return the bounds of the current clip (in local coordinates) in the
bounds parameter, and return true if it is non-empty. This can be useful
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 984549aea7..6e061c2005 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1184,6 +1184,30 @@ bool SkCanvas::quickReject(const SkPath& path, EdgeType et) const {
return path.isEmpty() || this->quickReject(path.getBounds(), et);
}
+bool SkCanvas::quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const {
+ /* current impl ignores edgetype, and relies on
+ getLocalClipBoundsCompareType(), which always returns a value assuming
+ antialiasing (worst case)
+ */
+
+ if (fMCRec->fRasterClip->isEmpty()) {
+ return true;
+ }
+
+ SkScalarCompareType userT = SkScalarToCompareType(top);
+ SkScalarCompareType userB = SkScalarToCompareType(bottom);
+
+ // check for invalid user Y coordinates (i.e. empty)
+ // reed: why do we need to do this check, since it slows us down?
+ if (userT >= userB) {
+ return true;
+ }
+
+ // check if we are above or below the local clip bounds
+ const SkRectCompareType& clipR = this->getLocalClipBoundsCompareType();
+ return userT >= clipR.fBottom || userB <= clipR.fTop;
+}
+
static inline int pinIntForScalar(int x) {
#ifdef SK_SCALAR_IS_FIXED
if (x < SK_MinS16) {