Kaydet (Commit) 7e8322f2 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

android: add ZoomConstraints (Fennec import)

Change-Id: I7bb840f74675a2e23fd7ee45aad4d48a705e567e
üst 89d40803
...@@ -3,6 +3,7 @@ package org.libreoffice; ...@@ -3,6 +3,7 @@ package org.libreoffice;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.RectF; import android.graphics.RectF;
import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.GeckoLayerClient;
...@@ -28,7 +29,8 @@ public class LOKitThread extends Thread { ...@@ -28,7 +29,8 @@ public class LOKitThread extends Thread {
int pageHeight = mTileProvider.getPageHeight(); int pageHeight = mTileProvider.getPageHeight();
RectF rect = new RectF(0, 0, pageWidth, pageHeight); 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); mViewportMetrics.setPageRect(rect, rect);
GeckoLayerClient layerClient = mApplication.getLayerClient(); GeckoLayerClient layerClient = mApplication.getLayerClient();
......
...@@ -13,6 +13,7 @@ import android.widget.AdapterView; ...@@ -13,6 +13,7 @@ import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.GeckoLayerClient;
import org.mozilla.gecko.gfx.LayerController; import org.mozilla.gecko.gfx.LayerController;
...@@ -118,7 +119,7 @@ public class LibreOfficeMainActivity extends Activity { ...@@ -118,7 +119,7 @@ public class LibreOfficeMainActivity extends Activity {
} }
mLayerController = new LayerController(this); mLayerController = new LayerController(this);
mLayerController.setAllowZoom(true); mLayerController.setZoomConstraints(new ZoomConstraints(true));
mLayerClient = new GeckoLayerClient(this); mLayerClient = new GeckoLayerClient(this);
mLayerController.setLayerClient(mLayerClient); mLayerController.setLayerClient(mLayerClient);
mGeckoLayout.addView(mLayerController.getView(), 0); mGeckoLayout.addView(mLayerController.getView(), 0);
......
/* -*- 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;
}
}
...@@ -12,8 +12,10 @@ import android.graphics.BitmapFactory; ...@@ -12,8 +12,10 @@ import android.graphics.BitmapFactory;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.RectF; import android.graphics.RectF;
import android.util.DisplayMetrics;
import android.view.GestureDetector; import android.view.GestureDetector;
import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.ui.PanZoomController; import org.mozilla.gecko.ui.PanZoomController;
import org.mozilla.gecko.ui.SimpleScaleGestureDetector; import org.mozilla.gecko.ui.SimpleScaleGestureDetector;
...@@ -56,21 +58,19 @@ public class LayerController { ...@@ -56,21 +58,19 @@ public class LayerController {
private int mCheckerboardColor = Color.WHITE; private int mCheckerboardColor = Color.WHITE;
private boolean mCheckerboardShouldShowChecks; private boolean mCheckerboardShouldShowChecks;
private boolean mAllowZoom; private ZoomConstraints mZoomConstraints;
private float mDefaultZoom;
private float mMinZoom;
private float mMaxZoom;
private boolean mForceRedraw; private boolean mForceRedraw;
public LayerController(Context context) { public LayerController(Context context) {
mContext = context; mContext = context;
mForceRedraw = true; mForceRedraw = true;
mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics()); DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics(displayMetrics));
mPanZoomController = new PanZoomController(this); mPanZoomController = new PanZoomController(this);
mView = new LayerView(context, this); mView = new LayerView(context, this);
mCheckerboardShouldShowChecks = true; mCheckerboardShouldShowChecks = true;
mZoomConstraints = new ZoomConstraints(false);
} }
public void setRoot(Layer layer) { mRootLayer = layer; } public void setRoot(Layer layer) { mRootLayer = layer; }
...@@ -307,35 +307,11 @@ public class LayerController { ...@@ -307,35 +307,11 @@ public class LayerController {
mView.requestRender(); mView.requestRender();
} }
public void setAllowZoom(final boolean aValue) { public void setZoomConstraints(ZoomConstraints constraints) {
mAllowZoom = aValue; mZoomConstraints = constraints;
}
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 float getMaxZoom() { public ZoomConstraints getZoomConstraints() {
return mMaxZoom; return mZoomConstraints;
} }
} }
...@@ -11,7 +11,6 @@ import android.util.DisplayMetrics; ...@@ -11,7 +11,6 @@ import android.util.DisplayMetrics;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.libreoffice.LibreOfficeMainActivity;
import org.mozilla.gecko.util.FloatUtils; import org.mozilla.gecko.util.FloatUtils;
/** /**
...@@ -26,10 +25,7 @@ public class ViewportMetrics { ...@@ -26,10 +25,7 @@ public class ViewportMetrics {
private RectF mViewportRect; private RectF mViewportRect;
private float mZoomFactor; private float mZoomFactor;
public ViewportMetrics() { public ViewportMetrics(DisplayMetrics metrics) {
DisplayMetrics metrics = new DisplayMetrics();
LibreOfficeMainActivity.mAppContext.getWindowManager().getDefaultDisplay().getMetrics(metrics);
mPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels); mPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
mCssPageRect = 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); mViewportRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
...@@ -59,20 +55,19 @@ public class ViewportMetrics { ...@@ -59,20 +55,19 @@ public class ViewportMetrics {
mZoomFactor = viewport.zoomFactor; mZoomFactor = viewport.zoomFactor;
} }
public ViewportMetrics(JSONObject json) throws JSONException { public ViewportMetrics(JSONObject json) throws JSONException {
float x = (float)json.getDouble("x"); float x = (float)json.getDouble("x");
float y = (float)json.getDouble("y"); float y = (float)json.getDouble("y");
float width = (float)json.getDouble("width"); float width = (float)json.getDouble("width");
float height = (float)json.getDouble("height"); float height = (float)json.getDouble("height");
float pageLeft = 0.0f; float pageLeft = (float)json.getDouble("pageLeft");
float pageTop = 0.0f; float pageTop = (float)json.getDouble("pageTop");
float pageRight = (float)json.getDouble("pageWidth"); float pageRight = (float)json.getDouble("pageRight");
float pageBottom = (float)json.getDouble("pageHeight"); float pageBottom = (float)json.getDouble("pageBottom");
float cssPageLeft = 0.0f; float cssPageLeft = (float)json.getDouble("cssPageLeft");
float cssPageTop = 0.0f; float cssPageTop = (float)json.getDouble("cssPageTop");
float cssPageRight = (float)json.getDouble("cssPageWidth"); float cssPageRight = (float)json.getDouble("cssPageRight");
float cssPageBottom = (float)json.getDouble("cssPageHeight"); float cssPageBottom = (float)json.getDouble("cssPageBottom");
float zoom = (float)json.getDouble("zoom"); float zoom = (float)json.getDouble("zoom");
mPageRect = new RectF(pageLeft, pageTop, pageRight, pageBottom); mPageRect = new RectF(pageLeft, pageTop, pageRight, pageBottom);
...@@ -178,7 +173,7 @@ public class ViewportMetrics { ...@@ -178,7 +173,7 @@ public class ViewportMetrics {
* page size, the offset, and the zoom factor. * page size, the offset, and the zoom factor.
*/ */
public ViewportMetrics interpolate(ViewportMetrics to, float t) { 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.mPageRect = RectUtils.interpolate(mPageRect, to.mPageRect, t);
result.mCssPageRect = RectUtils.interpolate(mCssPageRect, to.mCssPageRect, t); result.mCssPageRect = RectUtils.interpolate(mCssPageRect, to.mCssPageRect, t);
result.mZoomFactor = FloatUtils.interpolate(mZoomFactor, to.mZoomFactor, t); result.mZoomFactor = FloatUtils.interpolate(mZoomFactor, to.mZoomFactor, t);
...@@ -227,4 +222,3 @@ public class ViewportMetrics { ...@@ -227,4 +222,3 @@ public class ViewportMetrics {
return buff.toString(); return buff.toString();
} }
} }
...@@ -14,6 +14,7 @@ import android.view.MotionEvent; ...@@ -14,6 +14,7 @@ import android.view.MotionEvent;
import org.libreoffice.LOKitShell; import org.libreoffice.LOKitShell;
import org.libreoffice.LibreOfficeMainActivity; import org.libreoffice.LibreOfficeMainActivity;
import org.mozilla.gecko.ZoomConstraints;
import org.mozilla.gecko.gfx.ImmutableViewportMetrics; import org.mozilla.gecko.gfx.ImmutableViewportMetrics;
import org.mozilla.gecko.gfx.LayerController; import org.mozilla.gecko.gfx.LayerController;
import org.mozilla.gecko.gfx.ViewportMetrics; import org.mozilla.gecko.gfx.ViewportMetrics;
...@@ -111,7 +112,7 @@ public class PanZoomController ...@@ -111,7 +112,7 @@ public class PanZoomController
public PanZoomController(LayerController controller) { public PanZoomController(LayerController controller) {
mController = controller; mController = controller;
mSubscroller = new SubdocumentScrollHelper(this); mSubscroller = new SubdocumentScrollHelper();
mX = new AxisX(mSubscroller); mX = new AxisX(mSubscroller);
mY = new AxisY(mSubscroller); mY = new AxisY(mSubscroller);
...@@ -705,14 +706,16 @@ public class PanZoomController ...@@ -705,14 +706,16 @@ public class PanZoomController
float minZoomFactor = 0.0f; float minZoomFactor = 0.0f;
float maxZoomFactor = MAX_ZOOM; float maxZoomFactor = MAX_ZOOM;
if (mController.getMinZoom() > 0) ZoomConstraints constraints = mController.getZoomConstraints();
minZoomFactor = mController.getMinZoom();
if (mController.getMaxZoom() > 0)
maxZoomFactor = mController.getMaxZoom();
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. // 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. // Ensure minZoomFactor keeps the page at least as big as the viewport.
...@@ -782,7 +785,7 @@ public class PanZoomController ...@@ -782,7 +785,7 @@ public class PanZoomController
if (mState == PanZoomState.ANIMATED_ZOOM) if (mState == PanZoomState.ANIMATED_ZOOM)
return false; return false;
if (!mController.getAllowZoom()) if (!mController.getZoomConstraints().getAllowZoom())
return false; return false;
setState(PanZoomState.PINCHING); setState(PanZoomState.PINCHING);
...@@ -820,10 +823,12 @@ public class PanZoomController ...@@ -820,10 +823,12 @@ public class PanZoomController
float minZoomFactor = 0.0f; float minZoomFactor = 0.0f;
float maxZoomFactor = MAX_ZOOM; float maxZoomFactor = MAX_ZOOM;
if (mController.getMinZoom() > 0) ZoomConstraints constraints = mController.getZoomConstraints();
minZoomFactor = mController.getMinZoom();
if (mController.getMaxZoom() > 0) if (constraints.getMinZoom() > 0)
maxZoomFactor = mController.getMaxZoom(); minZoomFactor = constraints.getMinZoom();
if (constraints.getMaxZoom() > 0)
maxZoomFactor = constraints.getMaxZoom();
if (newZoomFactor < minZoomFactor) { if (newZoomFactor < minZoomFactor) {
// apply resistance when zooming past minZoomFactor, // apply resistance when zooming past minZoomFactor,
......
...@@ -7,15 +7,10 @@ package org.mozilla.gecko.ui; ...@@ -7,15 +7,10 @@ package org.mozilla.gecko.ui;
import android.graphics.PointF; import android.graphics.PointF;
import android.os.Handler; import android.os.Handler;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
class SubdocumentScrollHelper { class SubdocumentScrollHelper {
private static final String LOGTAG = "GeckoSubdocumentScrollHelper"; private static final String LOGTAG = "GeckoSubdocumentScrollHelper";
private final PanZoomController mPanZoomController;
private final Handler mUiHandler; private final Handler mUiHandler;
/* This is the amount of displacement we have accepted but not yet sent to JS; this is /* This is the amount of displacement we have accepted but not yet sent to JS; this is
...@@ -38,8 +33,7 @@ class SubdocumentScrollHelper { ...@@ -38,8 +33,7 @@ class SubdocumentScrollHelper {
* the subdocument; we use this to decide when we have reached the end of the subdocument. */ * the subdocument; we use this to decide when we have reached the end of the subdocument. */
private boolean mScrollSucceeded; private boolean mScrollSucceeded;
SubdocumentScrollHelper(PanZoomController controller) { SubdocumentScrollHelper() {
mPanZoomController = controller;
// mUiHandler will be bound to the UI thread since that's where this constructor runs // mUiHandler will be bound to the UI thread since that's where this constructor runs
mUiHandler = new Handler(); mUiHandler = new Handler();
mPendingDisplacement = new PointF(); mPendingDisplacement = new PointF();
...@@ -60,14 +54,6 @@ class SubdocumentScrollHelper { ...@@ -60,14 +54,6 @@ class SubdocumentScrollHelper {
return true; 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; mOverrideScrollAck = false;
mOverrideScrollPending = false; mOverrideScrollPending = false;
// clear the |mPendingDisplacement| after serializing |displacement| to // clear the |mPendingDisplacement| after serializing |displacement| to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment