From 3409e728e22609b54de8b33d1e614ca51f6d6a77 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 17 Jul 2012 17:46:03 -0700 Subject: Correctly pre-clip paths when recording display lists Bug #6836448 External bug: http://code.google.com/p/android/issues/detail?id=34946 DO NOT MERGE DisplayListRenderer::drawPath was not invoking quickReject() properly, passing x,y,width,height instead of left,top,right,bottom. A path could thus get rejected when it should be drawn instead. While working on this change I found a similar issue with another drawing command, drawBitmapData(). Change-Id: I8306faf72db14d71b54ecb7de295c9a6957d9494 --- libs/hwui/DisplayListRenderer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index d376e3a9f2c5..0c89014dfd66 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -1541,7 +1541,7 @@ status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) { - const bool reject = quickReject(left, top, left + bitmap->width(), bitmap->height()); + const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); uint32_t* location = addOp(DisplayList::DrawBitmapData, reject); addBitmapData(bitmap); addPoint(left, top); @@ -1643,7 +1643,10 @@ status_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { uint32_t width, height; computePathBounds(path, paint, left, top, offset, width, height); - const bool reject = quickReject(left - offset, top - offset, width, height); + left -= offset; + top -= offset; + + const bool reject = quickReject(left, top, left + width, top + height); uint32_t* location = addOp(DisplayList::DrawPath, reject); addPath(path); addPaint(paint); -- cgit v1.2.3-59-g8ed1b