aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkAAClip.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2014-08-07 09:20:12 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-08-07 09:20:12 -0700
commit592cb8d552556b1e922887d506d00b64bc5d0547 (patch)
tree339dec7609c69661b75dae70c8d4c928fc324c20 /src/core/SkAAClip.cpp
parentbb204f4917aff10fcb65d29a2d96e53a9611c559 (diff)
add isRect() check to AAClip, to detect if a soft-clip is really just an irect
BUG=skia: R=bsalomon@google.com, humper@google.com Author: reed@google.com Review URL: https://codereview.chromium.org/445233006
Diffstat (limited to 'src/core/SkAAClip.cpp')
-rw-r--r--src/core/SkAAClip.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/core/SkAAClip.cpp b/src/core/SkAAClip.cpp
index 14152f8317..54a6dcd795 100644
--- a/src/core/SkAAClip.cpp
+++ b/src/core/SkAAClip.cpp
@@ -684,6 +684,35 @@ bool SkAAClip::setRect(const SkIRect& bounds) {
#endif
}
+bool SkAAClip::isRect() const {
+ if (this->isEmpty()) {
+ return false;
+ }
+
+ const RunHead* head = fRunHead;
+ if (head->fRowCount != 1) {
+ return false;
+ }
+ const YOffset* yoff = head->yoffsets();
+ if (yoff->fY != fBounds.fBottom - 1) {
+ return false;
+ }
+ SkASSERT(0 == yoff->fOffset);
+
+ const uint8_t* row = head->data();
+ int width = fBounds.width();
+ do {
+ if (row[1] != 0xFF) {
+ return false;
+ }
+ int n = row[0];
+ SkASSERT(n <= width);
+ width -= n;
+ row += 2;
+ } while (width > 0);
+ return true;
+}
+
bool SkAAClip::setRect(const SkRect& r, bool doAA) {
if (r.isEmpty()) {
return this->setEmpty();