diff options
Diffstat (limited to 'WebCore')
-rw-r--r-- | WebCore/platform/graphics/android/BaseTile.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/WebCore/platform/graphics/android/BaseTile.cpp b/WebCore/platform/graphics/android/BaseTile.cpp index 391e87b..690bc6a 100644 --- a/WebCore/platform/graphics/android/BaseTile.cpp +++ b/WebCore/platform/graphics/android/BaseTile.cpp @@ -312,23 +312,30 @@ void BaseTile::paintBitmap() SkRect dirtyRect; dirtyRect.set(cliperator.rect()); - SkRect tileRect; - tileRect.fLeft = x * tileWidth / scale; - tileRect.fTop = y * tileHeight / scale; - tileRect.fRight = tileRect.fLeft + (tileWidth / scale); - tileRect.fBottom = tileRect.fTop + (tileHeight / scale); + float left = x * tileWidth; + float top = y * tileHeight; - if (!tileRect.intersect(dirtyRect)) { + // compute the rect to corresponds to pixels + SkRect realTileRect; + realTileRect.fLeft = left; + realTileRect.fTop = top; + realTileRect.fRight = left + tileWidth; + realTileRect.fBottom = top + tileHeight; + + // scale the dirtyRect for intersect computation. + SkRect realDirtyRect = SkRect::MakeWH(dirtyRect.width() * scale, + dirtyRect.height() * scale); + realDirtyRect.offset(dirtyRect.fLeft * scale, dirtyRect.fTop * scale); + + if (!realTileRect.intersect(realDirtyRect)) { cliperator.next(); continue; } - // recompute the rect to corresponds to pixels - SkRect realTileRect; - realTileRect.fLeft = floorf(tileRect.fLeft * scale); - realTileRect.fTop = floorf(tileRect.fTop * scale); - realTileRect.fRight = ceilf(tileRect.fRight * scale); - realTileRect.fBottom = ceilf(tileRect.fBottom * scale); + realTileRect.fLeft = floorf(realTileRect.fLeft); + realTileRect.fTop = floorf(realTileRect.fTop); + realTileRect.fRight = ceilf(realTileRect.fRight); + realTileRect.fBottom = ceilf(realTileRect.fBottom); SkIRect finalRealRect; finalRealRect.fLeft = static_cast<int>(realTileRect.fLeft) % static_cast<int>(tileWidth); |