diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2014-12-15 21:46:16 +0900 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2014-12-15 22:02:01 +0900 |
commit | abc818facad0479a8af05e634b5375aa4abbfd35 (patch) | |
tree | e86544dcf2eaac3eddd67dbb9c1ea3625443bdae /android | |
parent | a9c45c5e4ddd663ea92a8163188b1603cd1f5c6c (diff) |
android: calculate tile position/dimension for FixedZoomTileLayer
Change-Id: I54664a9289ef513fb4660b002f6ce652c7a9e6ef
Diffstat (limited to 'android')
5 files changed, 44 insertions, 21 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java index f617b7082d95..fe4071c6cb68 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java @@ -1,5 +1,7 @@ package org.libreoffice; +import android.graphics.RectF; + import org.mozilla.gecko.gfx.IntSize; public class TileIdentifier { @@ -15,6 +17,10 @@ public class TileIdentifier { this.size = size; } + public RectF getRect() { + return new RectF(x, y, x + size.width, y + size.height); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java index 95942850cf13..221cd8dcbbea 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java @@ -91,7 +91,7 @@ public abstract class ComposedTileLayer extends Layer { } } - private RectF roundToTileSize(RectF input, IntSize tileSize) { + protected RectF roundToTileSize(RectF input, IntSize tileSize) { float minX = ((int) (input.left / tileSize.width)) * tileSize.width; float minY = ((int) (input.top / tileSize.height)) * tileSize.height; float maxX = ((int) (input.right / tileSize.width) + 1) * tileSize.width; @@ -99,7 +99,7 @@ public abstract class ComposedTileLayer extends Layer { return new RectF(minX, minY, maxX, maxY); } - private RectF inflate(RectF rect, IntSize inflateSize) { + protected RectF inflate(RectF rect, IntSize inflateSize) { RectF newRect = new RectF(rect); newRect.left -= inflateSize.width; newRect.left = newRect.left < 0.0f ? 0.0f : newRect.left; @@ -113,35 +113,34 @@ public abstract class ComposedTileLayer extends Layer { return newRect; } - private RectF normalizeRect(RectF rect, float factor) { + protected RectF normalizeRect(RectF rect, float sourceFactor, float targetFactor) { RectF normalizedRect = new RectF( - rect.left / factor, - rect.top / factor, - rect.right / factor, - rect.bottom / factor); + (rect.left / sourceFactor) * targetFactor, + (rect.top / sourceFactor) * targetFactor, + (rect.right / sourceFactor) * targetFactor, + (rect.bottom / sourceFactor) * targetFactor); return normalizedRect; } - public void reevaluateTiles(ImmutableViewportMetrics viewportMetrics) { - RectF newCurrentViewPort = inflate(roundToTileSize(viewportMetrics.getViewport(), tileSize), tileSize); + public void reevaluateTiles(ImmutableViewportMetrics viewportMetrics, DisplayPortMetrics mDisplayPort) { + RectF newCurrentViewPort = getViewPort(viewportMetrics); float newZoom = viewportMetrics.zoomFactor; if (!currentViewport.equals(newCurrentViewPort) || currentZoom != newZoom) { currentViewport = newCurrentViewPort; currentZoom = newZoom; - RectF normalizedRect = normalizeRect(currentViewport, currentZoom); - RectF normalizedPageRect = normalizeRect(viewportMetrics.getPageRect(), currentZoom); - - Log.i(LOGTAG, "reevaluateTiles " + normalizedRect + " " + normalizedPageRect); - clearMarkedTiles(); addNewTiles(viewportMetrics); markTiles(viewportMetrics); } } + protected abstract RectF getViewPort(ImmutableViewportMetrics viewportMetrics); + + protected abstract float getZoom(ImmutableViewportMetrics viewportMetrics); + private void addNewTiles(ImmutableViewportMetrics viewportMetrics) { float zoom = getZoom(viewportMetrics); @@ -166,8 +165,6 @@ public abstract class ComposedTileLayer extends Layer { } } - protected abstract float getZoom(ImmutableViewportMetrics viewportMetrics); - private void clearMarkedTiles() { List<SubTile> tilesToRemove = new ArrayList<SubTile>(); for (SubTile tile : tiles) { diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java index ec3e39aae210..82d9928836c8 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java @@ -1,8 +1,20 @@ package org.mozilla.gecko.gfx; +import android.graphics.RectF; + public class DynamicTileLayer extends ComposedTileLayer { @Override + protected RectF getViewPort(ImmutableViewportMetrics viewportMetrics) { + RectF rect = viewportMetrics.getViewport(); + return inflate(roundToTileSize(rect, tileSize), getInflateFactor()); + } + + @Override protected float getZoom(ImmutableViewportMetrics viewportMetrics) { return viewportMetrics.zoomFactor; } + + protected IntSize getInflateFactor() { + return tileSize; + } } diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java index a62586800c50..7b669167fecb 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java @@ -1,13 +1,21 @@ package org.mozilla.gecko.gfx; +import android.graphics.RectF; + public class FixedZoomTileLayer extends ComposedTileLayer { @Override - protected float getZoom(ImmutableViewportMetrics viewportMetrics) { - return 0.5f; + protected RectF getViewPort(ImmutableViewportMetrics viewportMetrics) { + float zoom = getZoom(viewportMetrics); + RectF rect = normalizeRect(viewportMetrics.getViewport(), viewportMetrics.zoomFactor, zoom); + return inflate(roundToTileSize(rect, tileSize), getInflateFactor()); } @Override - public void addTile(SubTile tile) { + protected float getZoom(ImmutableViewportMetrics viewportMetrics) { + return 1.0f / 32.0f; + } + private IntSize getInflateFactor() { + return tileSize.scale(3); } } diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java index 6efd62df10b8..faa7d4e0f7b4 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java @@ -483,8 +483,8 @@ public class GeckoLayerClient implements PanZoomTarget, LayerView.Listener { /* Root Layer Access */ public void reevaluateTiles() { - mLowResLayer.reevaluateTiles(getViewportMetrics()); - mRootLayer.reevaluateTiles(getViewportMetrics()); + mLowResLayer.reevaluateTiles(mViewportMetrics, mDisplayPort); + mRootLayer.reevaluateTiles(mViewportMetrics, mDisplayPort); } public void clearAndResetlayers() { |