android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java | 17 +--- android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java | 6 + android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java | 40 +++++----- android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DisplayPortMetrics.java | 8 ++ android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DynamicTileLayer.java | 12 +++ android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/FixedZoomTileLayer.java | 14 ++- android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java | 4 - 7 files changed, 68 insertions(+), 33 deletions(-)
New commits: commit 857f4950f5eaef17a4ec0cc9f69c215dc5d3c2f2 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Dec 15 21:53:19 2014 +0900 android: clear tiles when adding a new tile, various Change-Id: Ifc6e01a1beb39187a5231019d1bf7ac816052e78 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 3c6fb82..7c41db1 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 @@ -128,10 +128,12 @@ public abstract class ComposedTileLayer extends Layer { float newZoom = viewportMetrics.zoomFactor; if (!currentViewport.equals(newCurrentViewPort) || currentZoom != newZoom) { + if (newZoom == 1.0f) { + Log.i(LOGTAG, "Suspisious zoom 1.0"); + } currentViewport = newCurrentViewPort; currentZoom = newZoom; - clearMarkedTiles(); addNewTiles(viewportMetrics); markTiles(viewportMetrics); } @@ -180,7 +182,7 @@ public abstract class ComposedTileLayer extends Layer { float zoom = getZoom(viewportMetrics); for (SubTile tile : tiles) { if (FloatUtils.fuzzyEquals(tile.id.zoom, zoom)) { - RectF tileRect = new RectF(tile.id.x, tile.id.y, tile.id.x + tileSize.width, tile.id.y + tileSize.height); + RectF tileRect = tile.id.getRect(); if (!RectF.intersects(currentViewport, tileRect)) { tile.markForRemoval(); Log.i(LOGTAG, "Mark for remove - " + currentViewport + " " + tileRect); @@ -198,6 +200,7 @@ public abstract class ComposedTileLayer extends Layer { } public void addTile(SubTile tile) { + clearMarkedTiles(); tile.beginTransaction(); tiles.add(tile); } commit 8daef3639af1d83616d455aa6f9f7757afd64d4f Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Dec 15 21:49:51 2014 +0900 android: skip tiles that are already outside of viewport Change-Id: I65f286797b459f30885560577a4dcb3d1108c0bf diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 99d44cf..7888095 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -27,11 +27,13 @@ public class LOKitThread extends Thread { } private void tileRequest(ComposedTileLayer composedTileLayer, TileIdentifier tileId) { - mLayerClient.beginDrawing(); - CairoImage image = mTileProvider.createTile(tileId.x, tileId.y, tileId.size, tileId.zoom); - SubTile tile = new SubTile(image, tileId); - composedTileLayer.addTile(tile); - mLayerClient.endDrawing(mViewportMetrics); + if (composedTileLayer.isStillValid(tileId)) { + mLayerClient.beginDrawing(); + CairoImage image = mTileProvider.createTile(tileId.x, tileId.y, tileId.size, tileId.zoom); + SubTile tile = new SubTile(image, tileId); + composedTileLayer.addTile(tile); + mLayerClient.endDrawing(mViewportMetrics); + } } /** Handle the geometry change + draw. */ 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 221cd8d..3c6fb82 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 @@ -201,4 +201,8 @@ public abstract class ComposedTileLayer extends Layer { tile.beginTransaction(); tiles.add(tile); } + + public boolean isStillValid(TileIdentifier tileId) { + return RectF.intersects(currentViewport, tileId.getRect()) || currentViewport.contains(tileId.getRect()); + } } \ No newline at end of file commit abc818facad0479a8af05e634b5375aa4abbfd35 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Dec 15 21:46:16 2014 +0900 android: calculate tile position/dimension for FixedZoomTileLayer Change-Id: I54664a9289ef513fb4660b002f6ce652c7a9e6ef diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java index f617b70..fe4071c 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 9594285..221cd8d 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 ec3e39a..82d9928 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 a625868..7b66916 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 6efd62d..faa7d4e 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() { commit a9c45c5e4ddd663ea92a8163188b1603cd1f5c6c Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Dec 15 21:39:47 2014 +0900 android: add to DisplayPortMetrics position and zoom getter Change-Id: I90674f51113c082d3bd88a72f8b9883b44569f87 diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DisplayPortMetrics.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DisplayPortMetrics.java index 3c9c39b..ab9a637 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DisplayPortMetrics.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/DisplayPortMetrics.java @@ -20,6 +20,14 @@ public final class DisplayPortMetrics { private final RectF mPosition; private final float mResolution; + public RectF getPosition() { + return mPosition; + } + + public float getResolution() { + return mResolution; + } + public DisplayPortMetrics() { this(0, 0, 0, 0, 1); } commit 2174ad93b654960840117e5d07a0a766b5bff9bd Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Mon Dec 15 21:37:14 2014 +0900 android: remove creation of background screenshots Change-Id: I23a2bc875229546c72708eefca68a12099c2a7af diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index 2b6c4cd..99d44cf 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -49,11 +49,6 @@ public class LOKitThread extends Thread { /** Invalidate everything + handle the geometry change */ private void refresh() { - Bitmap bitmap = mTileProvider.thumbnail(1000); - if (bitmap != null) { - mApplication.getLayerClient().getView().changeCheckerboardBitmap(bitmap, mTileProvider.getPageWidth(), mTileProvider.getPageHeight()); - } - mLayerClient.clearAndResetlayers(); redraw(); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits