diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-09-26 20:57:56 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-09-26 23:17:21 +0200 |
commit | 40ca1cea9b195b59923954e3466a285b2ae46384 (patch) | |
tree | 37ae46ebb9dc79a4a0ec1416d71967fd5ef1071d | |
parent | fd08f4fc4be60c99e83ea6e0aafc5c617c2c6ac0 (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.java | 32 | ||||
-rw-r--r-- | android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java | 6 |
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; + } } |