diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2011-04-05 18:10:24 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-04-05 18:10:24 -0700 |
commit | 9e7ef0488677e1ce474fdb32d23fa1cf8910f412 (patch) | |
tree | 0546a5bd9f16d4b2eb8f24495ce570bc630c2f1a | |
parent | f5b8d538f8fb1cf9a6fe7eac2bd58e3b550f5505 (diff) | |
parent | bd064363b650efb80cde0685b2260a854311a3bb (diff) | |
download | external_webkit-9e7ef0488677e1ce474fdb32d23fa1cf8910f412.zip external_webkit-9e7ef0488677e1ce474fdb32d23fa1cf8910f412.tar.gz external_webkit-9e7ef0488677e1ce474fdb32d23fa1cf8910f412.tar.bz2 |
am bd064363: Merge "Fix the precision loss issue" into honeycomb-mr1
* commit 'bd064363b650efb80cde0685b2260a854311a3bb':
Fix the precision loss issue
-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); |