mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 707571 (part 4) - Use mininum-scale and maximum-scale from <meta name="viewport"> [r=kats]
This commit is contained in:
parent
a3928422a4
commit
dd1a410b01
@ -677,6 +677,8 @@ abstract public class GeckoApp
|
||||
tab.removeTransientDoorHangers();
|
||||
tab.setAllowZoom(true);
|
||||
tab.setDefaultZoom(0);
|
||||
tab.setMinZoom(0);
|
||||
tab.setMaxZoom(0);
|
||||
tab.setHasTouchListeners(false);
|
||||
tab.setCheckerboardColor(Color.WHITE);
|
||||
|
||||
@ -1010,11 +1012,15 @@ abstract public class GeckoApp
|
||||
return;
|
||||
tab.setAllowZoom(message.getBoolean("allowZoom"));
|
||||
tab.setDefaultZoom((float) message.getDouble("defaultZoom"));
|
||||
tab.setMinZoom((float) message.getDouble("minZoom"));
|
||||
tab.setMaxZoom((float) message.getDouble("maxZoom"));
|
||||
// Sync up the LayerController and the tab if the tab's currently displayed.
|
||||
LayerController controller = getLayerController();
|
||||
if (controller != null && Tabs.getInstance().isSelectedTab(tab)) {
|
||||
controller.setAllowZoom(tab.getAllowZoom());
|
||||
controller.setDefaultZoom(tab.getDefaultZoom());
|
||||
controller.setMinZoom(tab.getMinZoom());
|
||||
controller.setMaxZoom(tab.getMaxZoom());
|
||||
}
|
||||
} else if (event.equals("Tab:HasTouchListener")) {
|
||||
int tabId = message.getInt("tabID");
|
||||
|
@ -88,6 +88,8 @@ public final class Tab {
|
||||
private boolean mHasTouchListeners;
|
||||
private boolean mAllowZoom;
|
||||
private float mDefaultZoom;
|
||||
private float mMinZoom;
|
||||
private float mMaxZoom;
|
||||
private ArrayList<View> mPluginViews;
|
||||
private HashMap<Object, Layer> mPluginLayers;
|
||||
private ContentResolver mContentResolver;
|
||||
@ -302,6 +304,22 @@ public final class Tab {
|
||||
return mDefaultZoom;
|
||||
}
|
||||
|
||||
public void setMinZoom(float aValue) {
|
||||
mMinZoom = aValue;
|
||||
}
|
||||
|
||||
public float getMinZoom() {
|
||||
return mMinZoom;
|
||||
}
|
||||
|
||||
public void setMaxZoom(float aValue) {
|
||||
mMaxZoom = aValue;
|
||||
}
|
||||
|
||||
public float getMaxZoom() {
|
||||
return mMaxZoom;
|
||||
}
|
||||
|
||||
public void setHasTouchListeners(boolean aValue) {
|
||||
mHasTouchListeners = aValue;
|
||||
}
|
||||
|
@ -93,6 +93,8 @@ public class LayerController {
|
||||
|
||||
private boolean mAllowZoom;
|
||||
private float mDefaultZoom;
|
||||
private float mMinZoom;
|
||||
private float mMaxZoom;
|
||||
|
||||
private boolean mForceRedraw;
|
||||
|
||||
@ -369,4 +371,20 @@ public class LayerController {
|
||||
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() {
|
||||
return mMaxZoom;
|
||||
}
|
||||
}
|
||||
|
@ -817,6 +817,11 @@ 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();
|
||||
|
||||
if (!mController.getAllowZoom()) {
|
||||
// If allowZoom is false, clamp to the default zoom level.
|
||||
maxZoomFactor = minZoomFactor = mController.getDefaultZoom();
|
||||
@ -928,13 +933,31 @@ public class PanZoomController
|
||||
|
||||
synchronized (mController) {
|
||||
float newZoomFactor = mController.getZoomFactor() * spanRatio;
|
||||
if (newZoomFactor >= MAX_ZOOM) {
|
||||
// apply resistance when zooming past MAX_ZOOM,
|
||||
// such that it asymptotically reaches MAX_ZOOM + 1.0
|
||||
float minZoomFactor = 0.0f;
|
||||
float maxZoomFactor = MAX_ZOOM;
|
||||
|
||||
if (mController.getMinZoom() > 0)
|
||||
minZoomFactor = mController.getMinZoom();
|
||||
if (mController.getMaxZoom() > 0)
|
||||
maxZoomFactor = mController.getMaxZoom();
|
||||
|
||||
if (newZoomFactor < minZoomFactor) {
|
||||
// apply resistance when zooming past minZoomFactor,
|
||||
// such that it asymptotically reaches minZoomFactor / 2.0
|
||||
// but never exceeds that
|
||||
float excessZoom = newZoomFactor - MAX_ZOOM;
|
||||
final float rate = 0.5f; // controls how quickly we approach the limit
|
||||
float excessZoom = minZoomFactor - newZoomFactor;
|
||||
excessZoom = 1.0f - (float)Math.exp(-excessZoom * rate);
|
||||
newZoomFactor = minZoomFactor * (1.0f - excessZoom / 2.0f);
|
||||
}
|
||||
|
||||
if (newZoomFactor > maxZoomFactor) {
|
||||
// apply resistance when zooming past maxZoomFactor,
|
||||
// such that it asymptotically reaches maxZoomFactor + 1.0
|
||||
// but never exceeds that
|
||||
float excessZoom = newZoomFactor - maxZoomFactor;
|
||||
excessZoom = 1.0f - (float)Math.exp(-excessZoom);
|
||||
newZoomFactor = MAX_ZOOM + excessZoom;
|
||||
newZoomFactor = maxZoomFactor + excessZoom;
|
||||
}
|
||||
|
||||
mController.scrollBy(new PointF(mLastZoomFocus.x - detector.getFocusX(),
|
||||
|
@ -2455,6 +2455,8 @@ Tab.prototype = {
|
||||
type: "Tab:ViewportMetadata",
|
||||
allowZoom: this.metadata.allowZoom,
|
||||
defaultZoom: this.metadata.defaultZoom || 0,
|
||||
minZoom: this.metadata.minZoom || 0,
|
||||
maxZoom: this.metadata.maxZoom || 0,
|
||||
tabID: this.id
|
||||
}});
|
||||
},
|
||||
@ -3696,7 +3698,7 @@ var ViewportHandler = {
|
||||
|
||||
scale = this.clamp(scale, kViewportMinScale, kViewportMaxScale);
|
||||
minScale = this.clamp(minScale, kViewportMinScale, kViewportMaxScale);
|
||||
maxScale = this.clamp(maxScale, kViewportMinScale, kViewportMaxScale);
|
||||
maxScale = this.clamp(maxScale, minScale, kViewportMaxScale);
|
||||
|
||||
// If initial scale is 1.0 and width is not set, assume width=device-width
|
||||
let autoSize = (widthStr == "device-width" ||
|
||||
|
Loading…
Reference in New Issue
Block a user