[Libreoffice-commits] core.git: 2 commits - android/experimental

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Thu Dec 25 01:13:51 PST 2014


 android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java                 |   12 ++
 android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java           |    5 +
 android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java            |    5 +
 android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java                |    2 
 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java      |   11 +-
 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java |   43 ++++------
 6 files changed, 50 insertions(+), 28 deletions(-)

New commits:
commit f69f3bfd9d8019365023eace8c1f1abdf31e1ef9
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Thu Dec 25 18:03:20 2014 +0900

    android: Tweak initial zoom of documents in different situations
    
    - In case of Writer document always show document by full width.
    - Otherwise show the whole document on the screen even when the
     orientation is portrait or landscape.
    
    Change-Id: Ia6704432c850a5487aee1693ed12e039ae6ef0cb

diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
index 8099c73..8fc75b2 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
@@ -2,6 +2,7 @@ package org.libreoffice;
 
 import android.graphics.Bitmap;
 import android.graphics.PointF;
+import android.graphics.RectF;
 import android.util.Log;
 
 import org.mozilla.gecko.gfx.CairoImage;
@@ -45,7 +46,16 @@ public class LOKitThread extends Thread {
         mLayerClient.setPageRect(0, 0, mTileProvider.getPageWidth(), mTileProvider.getPageHeight());
         mViewportMetrics = mLayerClient.getViewportMetrics();
         mLayerClient.setViewportMetrics(mViewportMetrics);
-        mLayerClient.zoomToPageWidth(mTileProvider.getPageWidth());
+
+        if (mTileProvider.isTextDocument()) {
+            float centerY = mViewportMetrics.getCssViewport().centerY();
+            mLayerClient.zoomTo(new RectF (0, centerY, mTileProvider.getPageWidth(), centerY));
+        } else if (mViewportMetrics.getViewport().width() < mViewportMetrics.getViewport().height()) {
+            mLayerClient.zoomTo(mTileProvider.getPageWidth(), 0);
+        } else {
+            mLayerClient.zoomTo(0, mTileProvider.getPageHeight());
+        }
+
         mLayerClient.forceRedraw();
     }
 
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
index bda810d..513d13d 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
@@ -247,6 +247,11 @@ public class LOKitTileProvider implements TileProvider {
     }
 
     @Override
+    public boolean isTextDocument() {
+        return mDocument.getDocumentType() == Document.DOCTYPE_TEXT;
+    }
+
+    @Override
     protected void finalize() throws Throwable {
         close();
         super.finalize();
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
index b8d7a3c..79fef43 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java
@@ -74,6 +74,11 @@ public class MockTileProvider implements TileProvider {
     }
 
     @Override
+    public boolean isTextDocument() {
+        return true;
+    }
+
+    @Override
     public void changePart(int partIndex) {
     }
 
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
index 7142bc31..988e53a 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java
@@ -22,4 +22,6 @@ public interface TileProvider {
     Bitmap thumbnail(int size);
 
     void close();
+
+    boolean isTextDocument();
 }
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 934d19a..09120ec 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
@@ -460,12 +460,17 @@ public class GeckoLayerClient implements PanZoomTarget, LayerView.Listener {
         return mContext;
     }
 
-    public void zoomToPageWidth(int pageWidth) {
-        if (mPanZoomController instanceof  JavaPanZoomController) {
-            ((JavaPanZoomController) mPanZoomController).animatedZoomTo(new RectF(0, 0, pageWidth, 0));
+
+    public void zoomTo(RectF rect) {
+        if (mPanZoomController instanceof JavaPanZoomController) {
+            ((JavaPanZoomController) mPanZoomController).animatedZoomTo(rect);
         }
     }
 
+    public void zoomTo(float pageWidth, float pageHeight) {
+        zoomTo(new RectF(0, 0, pageWidth, pageHeight));
+    }
+
     private class AdjustRunnable implements Runnable {
         public void run() {
             mPendingViewportAdjust = false;
commit 6d6da4c94b7ca434deb5ee569c18fa3e3dfe6070
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Thu Dec 25 17:48:36 2014 +0900

    android: Put document into center when it's smaller than viewport
    
    Change-Id: I0d0cd421e366bf34b71d9d82dd21476ecfa90b18

diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
index afab17d..3b3d33e 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
@@ -705,20 +705,6 @@ public class JavaPanZoomController
             maxZoomFactor = minZoomFactor = constraints.getDefaultZoom();
         }
 
-        // Ensure minZoomFactor keeps the page at least as big as the viewport.
-        if (pageRect.width() > 0) {
-            float scaleFactor = viewport.width() / pageRect.width();
-            minZoomFactor = Math.max(minZoomFactor, zoomFactor * scaleFactor);
-            if (viewport.width() > pageRect.width())
-                focusX = 0.0f;
-        }
-        /*if (pageRect.height() > 0) {
-            float scaleFactor = viewport.height() / pageRect.height();
-            minZoomFactor = Math.max(minZoomFactor, zoomFactor * scaleFactor);
-            if (viewport.height() > pageRect.height())
-                focusY = 0.0f;
-        }*/
-
         maxZoomFactor = Math.max(maxZoomFactor, minZoomFactor);
 
         if (zoomFactor < minZoomFactor) {
@@ -737,6 +723,25 @@ public class JavaPanZoomController
         /* Now we pan to the right origin. */
         viewportMetrics = viewportMetrics.clamp();
 
+        viewportMetrics = pushPageToCenterOfViewport(viewportMetrics);
+
+        return viewportMetrics;
+    }
+
+    private ImmutableViewportMetrics pushPageToCenterOfViewport(ImmutableViewportMetrics viewportMetrics) {
+        RectF pageRect = viewportMetrics.getPageRect();
+        RectF viewportRect = viewportMetrics.getViewport();
+
+        if (pageRect.width() < viewportRect.width()) {
+            float originX = (viewportRect.width() - pageRect.width()) / 2.0f;
+            viewportMetrics = viewportMetrics.setViewportOrigin(-originX, viewportMetrics.getOrigin().y);
+        }
+
+        if (pageRect.height() < viewportRect.height()) {
+            float originY = (viewportRect.height() - pageRect.height()) / 2.0f;
+            viewportMetrics = viewportMetrics.setViewportOrigin(viewportMetrics.getOrigin().x, -originY);
+        }
+
         return viewportMetrics;
     }
 
@@ -795,16 +800,6 @@ public class JavaPanZoomController
 
         float spanRatio = detector.getCurrentSpan() / prevSpan;
 
-        /*
-         * Apply edge resistance if we're zoomed out smaller than the page size by scaling the zoom
-         * factor toward 1.0.
-         */
-        float resistance = Math.min(mX.getEdgeResistance(true), mY.getEdgeResistance(true));
-        if (spanRatio > 1.0f)
-            spanRatio = 1.0f + (spanRatio - 1.0f) * resistance;
-        else
-            spanRatio = 1.0f - (1.0f - spanRatio) * resistance;
-
         synchronized (mTarget.getLock()) {
             float newZoomFactor = getMetrics().zoomFactor * spanRatio;
             float minZoomFactor = 0.0f;


More information about the Libreoffice-commits mailing list