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
This commit is contained in:
@@ -1541,7 +1541,7 @@ status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float
|
|||||||
|
|
||||||
status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
|
status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
|
||||||
SkPaint* paint) {
|
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);
|
uint32_t* location = addOp(DisplayList::DrawBitmapData, reject);
|
||||||
addBitmapData(bitmap);
|
addBitmapData(bitmap);
|
||||||
addPoint(left, top);
|
addPoint(left, top);
|
||||||
@@ -1643,7 +1643,10 @@ status_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
|
|||||||
uint32_t width, height;
|
uint32_t width, height;
|
||||||
computePathBounds(path, paint, left, top, offset, 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);
|
uint32_t* location = addOp(DisplayList::DrawPath, reject);
|
||||||
addPath(path);
|
addPath(path);
|
||||||
addPaint(paint);
|
addPaint(paint);
|
||||||
|
|||||||
Reference in New Issue
Block a user