summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeng-Hui Zhu <ztenghui@google.com>2011-04-05 18:05:09 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-04-05 18:05:09 -0700
commitbd064363b650efb80cde0685b2260a854311a3bb (patch)
tree0546a5bd9f16d4b2eb8f24495ce570bc630c2f1a
parenta33d490302a04453e2c671114d30a4ee93cb08f1 (diff)
parentbc235f4153cd55951a65bfcda6dc4b6c655d8cad (diff)
downloadexternal_webkit-bd064363b650efb80cde0685b2260a854311a3bb.zip
external_webkit-bd064363b650efb80cde0685b2260a854311a3bb.tar.gz
external_webkit-bd064363b650efb80cde0685b2260a854311a3bb.tar.bz2
Merge "Fix the precision loss issue" into honeycomb-mr1
-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 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);