[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