summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeng-Hui Zhu <ztenghui@google.com>2011-04-05 18:14:36 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-04-05 18:14:36 -0700
commit373e6b3745743aa183583e0707516ecfb40fb99f (patch)
tree1010e8c9e1d1a6a9423a6e8e030c78bb8475e8d7
parent60b339cd8d85685bb778fdf014922ad64eea9a1f (diff)
parent9e7ef0488677e1ce474fdb32d23fa1cf8910f412 (diff)
downloadexternal_webkit-373e6b3745743aa183583e0707516ecfb40fb99f.zip
external_webkit-373e6b3745743aa183583e0707516ecfb40fb99f.tar.gz
external_webkit-373e6b3745743aa183583e0707516ecfb40fb99f.tar.bz2
am 9e7ef048: am bd064363: Merge "Fix the precision loss issue" into honeycomb-mr1
* commit '9e7ef0488677e1ce474fdb32d23fa1cf8910f412': Fix the precision loss issue
-rw-r--r--WebCore/platform/graphics/android/BaseTile.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/WebCore/platform/graphics/android/BaseTile.cpp b/WebCore/platform/graphics/android/BaseTile.cpp
index be0ccf6..0296d21 100644
--- a/WebCore/platform/graphics/android/BaseTile.cpp
+++ b/WebCore/platform/graphics/android/BaseTile.cpp
@@ -332,23 +332,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);