summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-27 12:32:29 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-28 22:32:46 +0200
commit7e8322f251e6d2b3e3951f5a55b1c6b69d6843f7 (patch)
treea776e213d899491d7dd50eda23a49129120bb1dc
parent89d408031bdaec1efb6731d673cd3e9cc52edaf5 (diff)
android: add ZoomConstraints (Fennec import)
Change-Id: I7bb840f74675a2e23fd7ee45aad4d48a705e567e
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java4
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java3
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java46
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerController.java44
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ViewportMetrics.java26
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/PanZoomController.java29
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/SubdocumentScrollHelper.java16
7 files changed, 89 insertions, 79 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
index 429355625329..349de7b4a679 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
@@ -3,6 +3,7 @@ package org.libreoffice;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.util.DisplayMetrics;
import android.util.Log;
import org.mozilla.gecko.gfx.GeckoLayerClient;
@@ -28,7 +29,8 @@ public class LOKitThread extends Thread {
int pageHeight = mTileProvider.getPageHeight();
RectF rect = new RectF(0, 0, pageWidth, pageHeight);
- mViewportMetrics = new ViewportMetrics();
+ DisplayMetrics displayMetrics = LibreOfficeMainActivity.mAppContext.getResources().getDisplayMetrics();
+ mViewportMetrics = new ViewportMetrics(displayMetrics);
mViewportMetrics.setPageRect(rect, rect);
GeckoLayerClient layerClient = mApplication.getLayerClient();
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
index 810ff26046ac..b6b892a5e8f1 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -13,6 +13,7 @@ import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.RelativeLayout;
+import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.gfx.GeckoLayerClient;
import org.mozilla.gecko.gfx.LayerController;
@@ -118,7 +119,7 @@ public class LibreOfficeMainActivity extends Activity {
}
mLayerController = new LayerController(this);
- mLayerController.setAllowZoom(true);
+ mLayerController.setZoomConstraints(new ZoomConstraints(true));
mLayerClient = new GeckoLayerClient(this);
mLayerController.setLayerClient(mLayerClient);
mGeckoLayout.addView(mLayerController.getView(), 0);
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java
new file mode 100644
index 000000000000..40d1817c9301
--- /dev/null
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java
@@ -0,0 +1,46 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public final class ZoomConstraints {
+ private final boolean mAllowZoom;
+ private final float mDefaultZoom;
+ private final float mMinZoom;
+ private final float mMaxZoom;
+
+ public ZoomConstraints(boolean allowZoom) {
+ mAllowZoom = allowZoom;
+ mDefaultZoom = 0.0f;
+ mMinZoom = 0.0f;
+ mMaxZoom = 0.0f;
+ }
+
+ ZoomConstraints(JSONObject message) throws JSONException {
+ mAllowZoom = message.getBoolean("allowZoom");
+ mDefaultZoom = (float)message.getDouble("defaultZoom");
+ mMinZoom = (float)message.getDouble("minZoom");
+ mMaxZoom = (float)message.getDouble("maxZoom");
+ }
+
+ public final boolean getAllowZoom() {
+ return mAllowZoom;
+ }
+
+ public final float getDefaultZoom() {
+ return mDefaultZoom;
+ }
+
+ public final float getMinZoom() {
+ return mMinZoom;
+ }
+
+ public final float getMaxZoom() {
+ return mMaxZoom;
+ }
+}
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerController.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerController.java
index 8a39b82c259f..694b17da0814 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerController.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerController.java
@@ -12,8 +12,10 @@ import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.PointF;
import android.graphics.RectF;
+import android.util.DisplayMetrics;
import android.view.GestureDetector;
+import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.ui.PanZoomController;
import org.mozilla.gecko.ui.SimpleScaleGestureDetector;
@@ -56,21 +58,19 @@ public class LayerController {
private int mCheckerboardColor = Color.WHITE;
private boolean mCheckerboardShouldShowChecks;
- private boolean mAllowZoom;
- private float mDefaultZoom;
- private float mMinZoom;
- private float mMaxZoom;
+ private ZoomConstraints mZoomConstraints;
private boolean mForceRedraw;
public LayerController(Context context) {
mContext = context;
-
mForceRedraw = true;
- mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics());
+ DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
+ mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics(displayMetrics));
mPanZoomController = new PanZoomController(this);
mView = new LayerView(context, this);
mCheckerboardShouldShowChecks = true;
+ mZoomConstraints = new ZoomConstraints(false);
}
public void setRoot(Layer layer) { mRootLayer = layer; }
@@ -307,35 +307,11 @@ public class LayerController {
mView.requestRender();
}
- public void setAllowZoom(final boolean aValue) {
- mAllowZoom = aValue;
- }
-
- public boolean getAllowZoom() {
- return mAllowZoom;
- }
-
- public void setDefaultZoom(float aValue) {
- mDefaultZoom = aValue;
- }
-
- public float getDefaultZoom() {
- return mDefaultZoom;
- }
-
- public void setMinZoom(float aValue) {
- mMinZoom = aValue;
- }
-
- public float getMinZoom() {
- return mMinZoom;
- }
-
- public void setMaxZoom(float aValue) {
- mMaxZoom = aValue;
+ public void setZoomConstraints(ZoomConstraints constraints) {
+ mZoomConstraints = constraints;
}
- public float getMaxZoom() {
- return mMaxZoom;
+ public ZoomConstraints getZoomConstraints() {
+ return mZoomConstraints;
}
}
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ViewportMetrics.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ViewportMetrics.java
index f7b84bfaa28d..789bb0bff0b5 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ViewportMetrics.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ViewportMetrics.java
@@ -11,7 +11,6 @@ import android.util.DisplayMetrics;
import org.json.JSONException;
import org.json.JSONObject;
-import org.libreoffice.LibreOfficeMainActivity;
import org.mozilla.gecko.util.FloatUtils;
/**
@@ -26,10 +25,7 @@ public class ViewportMetrics {
private RectF mViewportRect;
private float mZoomFactor;
- public ViewportMetrics() {
- DisplayMetrics metrics = new DisplayMetrics();
- LibreOfficeMainActivity.mAppContext.getWindowManager().getDefaultDisplay().getMetrics(metrics);
-
+ public ViewportMetrics(DisplayMetrics metrics) {
mPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
mCssPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
mViewportRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
@@ -59,20 +55,19 @@ public class ViewportMetrics {
mZoomFactor = viewport.zoomFactor;
}
-
public ViewportMetrics(JSONObject json) throws JSONException {
float x = (float)json.getDouble("x");
float y = (float)json.getDouble("y");
float width = (float)json.getDouble("width");
float height = (float)json.getDouble("height");
- float pageLeft = 0.0f;
- float pageTop = 0.0f;
- float pageRight = (float)json.getDouble("pageWidth");
- float pageBottom = (float)json.getDouble("pageHeight");
- float cssPageLeft = 0.0f;
- float cssPageTop = 0.0f;
- float cssPageRight = (float)json.getDouble("cssPageWidth");
- float cssPageBottom = (float)json.getDouble("cssPageHeight");
+ float pageLeft = (float)json.getDouble("pageLeft");
+ float pageTop = (float)json.getDouble("pageTop");
+ float pageRight = (float)json.getDouble("pageRight");
+ float pageBottom = (float)json.getDouble("pageBottom");
+ float cssPageLeft = (float)json.getDouble("cssPageLeft");
+ float cssPageTop = (float)json.getDouble("cssPageTop");
+ float cssPageRight = (float)json.getDouble("cssPageRight");
+ float cssPageBottom = (float)json.getDouble("cssPageBottom");
float zoom = (float)json.getDouble("zoom");
mPageRect = new RectF(pageLeft, pageTop, pageRight, pageBottom);
@@ -178,7 +173,7 @@ public class ViewportMetrics {
* page size, the offset, and the zoom factor.
*/
public ViewportMetrics interpolate(ViewportMetrics to, float t) {
- ViewportMetrics result = new ViewportMetrics();
+ ViewportMetrics result = new ViewportMetrics(this);
result.mPageRect = RectUtils.interpolate(mPageRect, to.mPageRect, t);
result.mCssPageRect = RectUtils.interpolate(mCssPageRect, to.mCssPageRect, t);
result.mZoomFactor = FloatUtils.interpolate(mZoomFactor, to.mZoomFactor, t);
@@ -227,4 +222,3 @@ public class ViewportMetrics {
return buff.toString();
}
}
-
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/PanZoomController.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/PanZoomController.java
index 243fa75d2129..7adc1bde6c6b 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/PanZoomController.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/PanZoomController.java
@@ -14,6 +14,7 @@ import android.view.MotionEvent;
import org.libreoffice.LOKitShell;
import org.libreoffice.LibreOfficeMainActivity;
+import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.gfx.ImmutableViewportMetrics;
import org.mozilla.gecko.gfx.LayerController;
import org.mozilla.gecko.gfx.ViewportMetrics;
@@ -111,7 +112,7 @@ public class PanZoomController
public PanZoomController(LayerController controller) {
mController = controller;
- mSubscroller = new SubdocumentScrollHelper(this);
+ mSubscroller = new SubdocumentScrollHelper();
mX = new AxisX(mSubscroller);
mY = new AxisY(mSubscroller);
@@ -705,14 +706,16 @@ public class PanZoomController
float minZoomFactor = 0.0f;
float maxZoomFactor = MAX_ZOOM;
- if (mController.getMinZoom() > 0)
- minZoomFactor = mController.getMinZoom();
- if (mController.getMaxZoom() > 0)
- maxZoomFactor = mController.getMaxZoom();
+ ZoomConstraints constraints = mController.getZoomConstraints();
- if (!mController.getAllowZoom()) {
+ if (constraints.getMinZoom() > 0)
+ minZoomFactor = constraints.getMinZoom();
+ if (constraints.getMaxZoom() > 0)
+ maxZoomFactor = constraints.getMaxZoom();
+
+ if (!constraints.getAllowZoom()) {
// If allowZoom is false, clamp to the default zoom level.
- maxZoomFactor = minZoomFactor = mController.getDefaultZoom();
+ maxZoomFactor = minZoomFactor = constraints.getDefaultZoom();
}
// Ensure minZoomFactor keeps the page at least as big as the viewport.
@@ -782,7 +785,7 @@ public class PanZoomController
if (mState == PanZoomState.ANIMATED_ZOOM)
return false;
- if (!mController.getAllowZoom())
+ if (!mController.getZoomConstraints().getAllowZoom())
return false;
setState(PanZoomState.PINCHING);
@@ -820,10 +823,12 @@ public class PanZoomController
float minZoomFactor = 0.0f;
float maxZoomFactor = MAX_ZOOM;
- if (mController.getMinZoom() > 0)
- minZoomFactor = mController.getMinZoom();
- if (mController.getMaxZoom() > 0)
- maxZoomFactor = mController.getMaxZoom();
+ ZoomConstraints constraints = mController.getZoomConstraints();
+
+ if (constraints.getMinZoom() > 0)
+ minZoomFactor = constraints.getMinZoom();
+ if (constraints.getMaxZoom() > 0)
+ maxZoomFactor = constraints.getMaxZoom();
if (newZoomFactor < minZoomFactor) {
// apply resistance when zooming past minZoomFactor,
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/SubdocumentScrollHelper.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/SubdocumentScrollHelper.java
index 0e74456896ec..86f92d35f19d 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/SubdocumentScrollHelper.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ui/SubdocumentScrollHelper.java
@@ -7,15 +7,10 @@ package org.mozilla.gecko.ui;
import android.graphics.PointF;
import android.os.Handler;
-import android.util.Log;
-
-import org.json.JSONException;
-import org.json.JSONObject;
class SubdocumentScrollHelper {
private static final String LOGTAG = "GeckoSubdocumentScrollHelper";
- private final PanZoomController mPanZoomController;
private final Handler mUiHandler;
/* This is the amount of displacement we have accepted but not yet sent to JS; this is
@@ -38,8 +33,7 @@ class SubdocumentScrollHelper {
* the subdocument; we use this to decide when we have reached the end of the subdocument. */
private boolean mScrollSucceeded;
- SubdocumentScrollHelper(PanZoomController controller) {
- mPanZoomController = controller;
+ SubdocumentScrollHelper() {
// mUiHandler will be bound to the UI thread since that's where this constructor runs
mUiHandler = new Handler();
mPendingDisplacement = new PointF();
@@ -60,14 +54,6 @@ class SubdocumentScrollHelper {
return true;
}
- JSONObject json = new JSONObject();
- try {
- json.put("x", displacement.x);
- json.put("y", displacement.y);
- } catch (JSONException e) {
- Log.e(LOGTAG, "Error forming subwindow scroll message: ", e);
- }
-
mOverrideScrollAck = false;
mOverrideScrollPending = false;
// clear the |mPendingDisplacement| after serializing |displacement| to