mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 716403 - Use setContentDocumentFixedPositionMargins in Android's browser.js. r=kats
This uses the aforementioned method on nsIDOMWindowUtils to make sure layout's idea of the fixed position margins matches those used in the compositor.
This commit is contained in:
parent
bc3cb980a1
commit
866dd7b942
@ -552,6 +552,10 @@ public class GeckoEvent {
|
||||
sb.append("{ \"x\" : ").append(metrics.viewportRectLeft)
|
||||
.append(", \"y\" : ").append(metrics.viewportRectTop)
|
||||
.append(", \"zoom\" : ").append(metrics.zoomFactor)
|
||||
.append(", \"fixedMarginLeft\" : ").append(metrics.fixedLayerMarginLeft)
|
||||
.append(", \"fixedMarginTop\" : ").append(metrics.fixedLayerMarginTop)
|
||||
.append(", \"fixedMarginRight\" : ").append(metrics.fixedLayerMarginRight)
|
||||
.append(", \"fixedMarginBottom\" : ").append(metrics.fixedLayerMarginBottom)
|
||||
.append(", \"displayPort\" :").append(displayPort.toJSON())
|
||||
.append('}');
|
||||
event.mCharactersExtra = sb.toString();
|
||||
|
@ -261,6 +261,20 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||
ImmutableViewportMetrics metrics = getViewportMetrics();
|
||||
ImmutableViewportMetrics clampedMetrics = metrics.clamp();
|
||||
|
||||
// See if we need to alter the fixed margins - Fixed margins would
|
||||
// otherwise be set even when the document is in overscroll and they're
|
||||
// unnecessary.
|
||||
if ((metrics.fixedLayerMarginLeft > 0 && metrics.viewportRectLeft < metrics.pageRectLeft) ||
|
||||
(metrics.fixedLayerMarginTop > 0 && metrics.viewportRectTop < metrics.pageRectTop) ||
|
||||
(metrics.fixedLayerMarginRight > 0 && metrics.viewportRectRight > metrics.pageRectRight) ||
|
||||
(metrics.fixedLayerMarginBottom > 0 && metrics.viewportRectBottom > metrics.pageRectBottom)) {
|
||||
clampedMetrics = clampedMetrics.setFixedLayerMargins(
|
||||
Math.max(0, metrics.fixedLayerMarginLeft + Math.min(0, metrics.viewportRectLeft - metrics.pageRectLeft)),
|
||||
Math.max(0, metrics.fixedLayerMarginTop + Math.min(0, metrics.viewportRectTop - metrics.pageRectTop)),
|
||||
Math.max(0, metrics.fixedLayerMarginRight + Math.min(0, (metrics.pageRectRight - metrics.viewportRectRight))),
|
||||
Math.max(0, metrics.fixedLayerMarginBottom + Math.min(0, (metrics.pageRectBottom - metrics.viewportRectBottom))));
|
||||
}
|
||||
|
||||
if (displayPort == null) {
|
||||
displayPort = DisplayPortCalculator.calculate(metrics, mPanZoomController.getVelocityVector());
|
||||
}
|
||||
@ -363,7 +377,8 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||
newMetrics = newMetrics.clampWithMargins();
|
||||
}
|
||||
|
||||
setViewportMetrics(newMetrics, false);
|
||||
mForceRedraw = true;
|
||||
setViewportMetrics(newMetrics, true);
|
||||
|
||||
mView.requestRender();
|
||||
}
|
||||
|
@ -2803,6 +2803,10 @@ function Tab(aURL, aParams) {
|
||||
this.showProgress = true;
|
||||
this._zoom = 1.0;
|
||||
this._drawZoom = 1.0;
|
||||
this._fixedMarginLeft = 0;
|
||||
this._fixedMarginTop = 0;
|
||||
this._fixedMarginRight = 0;
|
||||
this._fixedMarginBottom = 0;
|
||||
this.userScrollPos = { x: 0, y: 0 };
|
||||
this.viewportExcludesHorizontalMargins = true;
|
||||
this.viewportExcludesVerticalMargins = true;
|
||||
@ -3339,6 +3343,19 @@ Tab.prototype = {
|
||||
if (aViewport.displayPort)
|
||||
this.setDisplayPort(aViewport.displayPort);
|
||||
|
||||
// Store fixed margins for later retrieval in getViewport.
|
||||
this._fixedMarginLeft = aViewport.fixedMarginLeft;
|
||||
this._fixedMarginTop = aViewport.fixedMarginTop;
|
||||
this._fixedMarginRight = aViewport.fixedMarginRight;
|
||||
this._fixedMarginBottom = aViewport.fixedMarginBottom;
|
||||
|
||||
let dwi = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
|
||||
dwi.setContentDocumentFixedPositionMargins(
|
||||
aViewport.fixedMarginTop / aViewport.zoom,
|
||||
aViewport.fixedMarginRight / aViewport.zoom,
|
||||
aViewport.fixedMarginBottom / aViewport.zoom,
|
||||
aViewport.fixedMarginLeft / aViewport.zoom);
|
||||
|
||||
Services.obs.notifyObservers(null, "after-viewport-change", "");
|
||||
},
|
||||
|
||||
@ -3379,6 +3396,10 @@ Tab.prototype = {
|
||||
cssPageTop: 0,
|
||||
cssPageRight: screenW / this._zoom,
|
||||
cssPageBottom: screenH / this._zoom,
|
||||
fixedMarginLeft: this._fixedMarginLeft,
|
||||
fixedMarginTop: this._fixedMarginTop,
|
||||
fixedMarginRight: this._fixedMarginRight,
|
||||
fixedMarginBottom: this._fixedMarginBottom,
|
||||
zoom: this._zoom,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user