summaryrefslogtreecommitdiffstats
path: root/Source/WebKit
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-07-12 15:57:49 -0700
committerJohn Reck <jreck@google.com>2012-07-12 15:57:49 -0700
commit62101e8b479a746e73903ea3f2520d5038aaf686 (patch)
tree51f3b431b30b78bc0f6dbcbc7362b8975783602f /Source/WebKit
parent675402ef4358583f64a2476927a548db4841c856 (diff)
downloadexternal_webkit-62101e8b479a746e73903ea3f2520d5038aaf686.zip
external_webkit-62101e8b479a746e73903ea3f2520d5038aaf686.tar.gz
external_webkit-62101e8b479a746e73903ea3f2520d5038aaf686.tar.bz2
Don't attempt to draw clipped-out pictures
Change-Id: Iaf91d46b448ae49fe2359cfd19694995edec95e5
Diffstat (limited to 'Source/WebKit')
-rw-r--r--Source/WebKit/android/jni/PicturePile.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/Source/WebKit/android/jni/PicturePile.cpp b/Source/WebKit/android/jni/PicturePile.cpp
index 0567b62..b69c131 100644
--- a/Source/WebKit/android/jni/PicturePile.cpp
+++ b/Source/WebKit/android/jni/PicturePile.cpp
@@ -58,7 +58,10 @@ static SkIRect toSkIRect(const IntRect& rect) {
static IntRect extractClipBounds(SkCanvas* canvas, const IntSize& size) {
SkRect clip;
- canvas->getClipBounds(&clip);
+ if (!canvas->getClipBounds(&clip)) {
+ ALOGW("Empty clip!");
+ return IntRect();
+ }
clip.intersect(0, 0, size.width(), size.height());
return enclosingIntRect(clip);
}
@@ -93,6 +96,8 @@ void PicturePile::draw(SkCanvas* canvas)
* used for translucent surfaces
*/
IntRect clipBounds = extractClipBounds(canvas, m_size);
+ if (clipBounds.isEmpty())
+ return;
SkRegion clipRegion(toSkIRect(clipBounds));
drawWithClipRecursive(canvas, clipRegion, m_pile.size() - 1);
}
@@ -116,8 +121,8 @@ void PicturePile::drawWithClipRecursive(SkCanvas* canvas, SkRegion& clipRegion,
clipRegion.op(intersection, SkRegion::kDifference_Op);
drawWithClipRecursive(canvas, clipRegion, index - 1);
int saved = canvas->save();
- canvas->clipRect(intersection);
- drawPicture(canvas, pc);
+ if (canvas->clipRect(intersection))
+ drawPicture(canvas, pc);
canvas->restoreToCount(saved);
} else
drawWithClipRecursive(canvas, clipRegion, index - 1);