diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2011-04-05 18:05:09 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-04-05 18:05:09 -0700 |
commit | bd064363b650efb80cde0685b2260a854311a3bb (patch) | |
tree | 0546a5bd9f16d4b2eb8f24495ce570bc630c2f1a /WebCore/platform/graphics | |
parent | a33d490302a04453e2c671114d30a4ee93cb08f1 (diff) | |
parent | bc235f4153cd55951a65bfcda6dc4b6c655d8cad (diff) | |
download | external_webkit-bd064363b650efb80cde0685b2260a854311a3bb.zip external_webkit-bd064363b650efb80cde0685b2260a854311a3bb.tar.gz external_webkit-bd064363b650efb80cde0685b2260a854311a3bb.tar.bz2 |
Merge "Fix the precision loss issue" into honeycomb-mr1
Diffstat (limited to 'WebCore/platform/graphics')
-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); |