[Libreoffice-commits] core.git: 5 commits - android/experimental
Tomaž Vajngerl
tomaz.vajngerl at collabora.co.uk
Mon Dec 15 05:02:34 PST 2014
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.vajngerl at 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.vajngerl at 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.vajngerl at 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.vajngerl at 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.vajngerl at 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();
}
More information about the Libreoffice-commits
mailing list