summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-26 20:57:56 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-26 23:17:21 +0200
commit40ca1cea9b195b59923954e3466a285b2ae46384 (patch)
tree37ae46ebb9dc79a4a0ec1416d71967fd5ef1071d
parentfd08f4fc4be60c99e83ea6e0aafc5c617c2c6ac0 (diff)
android: remove tiles delayed by one redraw call
Change-Id: I5ab5e4a0ba9cdf3f3115c4913b4cf04e7f062755
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/MultiTileLayer.java32
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java6
2 files changed, 28 insertions, 10 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/MultiTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/MultiTileLayer.java
index eafbf32b28b6..8647ce6ae857 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/MultiTileLayer.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/MultiTileLayer.java
@@ -45,6 +45,7 @@ import android.graphics.Region;
import android.util.Log;
import org.libreoffice.TileProvider;
+import org.mozilla.gecko.util.FloatUtils;
import java.util.ArrayList;
import java.util.List;
@@ -230,7 +231,6 @@ public class MultiTileLayer extends Layer {
public void reevaluateTiles(ImmutableViewportMetrics viewportMetrics) {
if (currentZoomFactor != viewportMetrics.zoomFactor) {
currentZoomFactor = viewportMetrics.zoomFactor;
- mTiles.clear();
}
RectF newTileViewPort = inflate(roundToTileSize(viewportMetrics.getViewport(), TILE_SIZE), TILE_SIZE);
@@ -239,11 +239,23 @@ public class MultiTileLayer extends Layer {
if (tileViewPort != newTileViewPort) {
tileViewPort = newTileViewPort;
- clearTiles();
+ cleanTiles();
addNewTiles();
+ markTiles();
}
}
+ private void cleanTiles() {
+ List<SubTile> tilesToRemove = new ArrayList<SubTile>();
+ for(SubTile tile : mTiles) {
+ if (tile.markedForRemoval) {
+ tile.destroy();
+ tilesToRemove.add(tile);
+ }
+ }
+ mTiles.removeAll(tilesToRemove);
+ }
+
private void addNewTiles() {
for (float y = tileViewPort.top; y < tileViewPort.bottom; y += TILE_SIZE) {
if (y > currentPageSize.height) {
@@ -269,17 +281,17 @@ public class MultiTileLayer extends Layer {
}
}
- private void clearTiles() {
- ArrayList<SubTile> removeTiles = new ArrayList<SubTile>();
+ private void markTiles() {
for (SubTile tile : mTiles) {
- RectF tileRect = new RectF(tile.x, tile.y, tile.x + TILE_SIZE, tile.y + TILE_SIZE);
- if (!RectF.intersects(tileViewPort, tileRect)) {
- tile.destroy();
- removeTiles.add(tile);
+ if (FloatUtils.fuzzyEquals(tile.zoom, currentZoomFactor)) {
+ RectF tileRect = new RectF(tile.x, tile.y, tile.x + TILE_SIZE, tile.y + TILE_SIZE);
+ if (!RectF.intersects(tileViewPort, tileRect)) {
+ tile.markForRemoval();
+ }
+ } else {
+ tile.markForRemoval();
}
}
-
- mTiles.removeAll(removeTiles);
}
}
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
index 9ec98ec4bdda..5ab4f0dc3ab3 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
@@ -10,10 +10,16 @@ public class SubTile extends SingleTileLayer {
public int y;
public float zoom;
+ public boolean markedForRemoval = false;
+
public SubTile(CairoImage mImage, int x, int y, float zoom) {
super(mImage);
this.x = x;
this.y = y;
this.zoom = zoom;
}
+
+ public void markForRemoval() {
+ markedForRemoval = true;
+ }
}