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.vajng...@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.vajng...@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;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits