зеркало из https://github.com/mozilla/gecko-dev.git
Bug 856039 - Default to keeping the fixed layer margins in setViewportMetrics. r=Cwiiis
This commit is contained in:
Родитель
38664365cb
Коммит
477e87d8ab
|
@ -408,7 +408,7 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||||
newMetrics.pageRectTop - oldMetrics.fixedLayerMarginTop);
|
newMetrics.pageRectTop - oldMetrics.fixedLayerMarginTop);
|
||||||
}
|
}
|
||||||
|
|
||||||
setViewportMetrics(newMetrics, type == ViewportMessageType.UPDATE, true);
|
setViewportMetrics(newMetrics, type == ViewportMessageType.UPDATE);
|
||||||
mDisplayPort = DisplayPortCalculator.calculate(getViewportMetrics(), null);
|
mDisplayPort = DisplayPortCalculator.calculate(getViewportMetrics(), null);
|
||||||
}
|
}
|
||||||
return mDisplayPort;
|
return mDisplayPort;
|
||||||
|
@ -434,7 +434,7 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||||
* Sets margins on fixed-position layers, to be used when compositing.
|
* Sets margins on fixed-position layers, to be used when compositing.
|
||||||
* Must be called on the UI thread!
|
* Must be called on the UI thread!
|
||||||
*/
|
*/
|
||||||
public void setFixedLayerMargins(float left, float top, float right, float bottom) {
|
public synchronized void setFixedLayerMargins(float left, float top, float right, float bottom) {
|
||||||
ImmutableViewportMetrics oldMetrics = getViewportMetrics();
|
ImmutableViewportMetrics oldMetrics = getViewportMetrics();
|
||||||
ImmutableViewportMetrics newMetrics = oldMetrics.setFixedLayerMargins(left, top, right, bottom);
|
ImmutableViewportMetrics newMetrics = oldMetrics.setFixedLayerMargins(left, top, right, bottom);
|
||||||
|
|
||||||
|
@ -473,7 +473,9 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setViewportMetrics(newMetrics, false, false);
|
mViewportMetrics = newMetrics;
|
||||||
|
mView.requestRender();
|
||||||
|
setShadowVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setClampOnFixedLayerMarginsChange(boolean aClamp) {
|
public void setClampOnFixedLayerMarginsChange(boolean aClamp) {
|
||||||
|
@ -805,21 +807,22 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setViewportMetrics(ImmutableViewportMetrics metrics) {
|
public void setViewportMetrics(ImmutableViewportMetrics metrics) {
|
||||||
setViewportMetrics(metrics, true, true);
|
setViewportMetrics(metrics, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setViewportMetrics(ImmutableViewportMetrics metrics, boolean notifyGecko, boolean keepFixedMargins) {
|
/*
|
||||||
// This class owns the viewport size; don't let other pieces of code clobber our notion
|
* You must hold the monitor while calling this.
|
||||||
// of the viewport size. The only place the viewport size should ever be updated is in
|
*/
|
||||||
// the GeckoLayerClient.setViewportSize function, and there mViewportMetrics is updated
|
private void setViewportMetrics(ImmutableViewportMetrics metrics, boolean notifyGecko) {
|
||||||
// directly.
|
// This class owns the viewport size and the fixed layer margins; don't let other pieces
|
||||||
|
// of code clobber either of them. The only place the viewport size should ever be
|
||||||
|
// updated is in GeckoLayerClient.setViewportSize, and the only place the margins should
|
||||||
|
// ever be updated is in GeckoLayerClient.setFixedLayerMargins; both of these assign to
|
||||||
|
// mViewportMetrics directly.
|
||||||
metrics = metrics.setViewportSize(mViewportMetrics.getWidth(), mViewportMetrics.getHeight());
|
metrics = metrics.setViewportSize(mViewportMetrics.getWidth(), mViewportMetrics.getHeight());
|
||||||
|
metrics = metrics.setFixedLayerMarginsFrom(mViewportMetrics);
|
||||||
|
mViewportMetrics = metrics;
|
||||||
|
|
||||||
if (keepFixedMargins) {
|
|
||||||
mViewportMetrics = metrics.setFixedLayerMarginsFrom(mViewportMetrics);
|
|
||||||
} else {
|
|
||||||
mViewportMetrics = metrics;
|
|
||||||
}
|
|
||||||
mView.requestRender();
|
mView.requestRender();
|
||||||
if (notifyGecko && mGeckoIsReady) {
|
if (notifyGecko && mGeckoIsReady) {
|
||||||
geometryChanged();
|
geometryChanged();
|
||||||
|
|
|
@ -209,6 +209,13 @@ public class ImmutableViewportMetrics {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableViewportMetrics setFixedLayerMargins(float left, float top, float right, float bottom) {
|
public ImmutableViewportMetrics setFixedLayerMargins(float left, float top, float right, float bottom) {
|
||||||
|
if (FloatUtils.fuzzyEquals(left, fixedLayerMarginLeft)
|
||||||
|
&& FloatUtils.fuzzyEquals(top, fixedLayerMarginTop)
|
||||||
|
&& FloatUtils.fuzzyEquals(right, fixedLayerMarginRight)
|
||||||
|
&& FloatUtils.fuzzyEquals(bottom, fixedLayerMarginBottom)) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
return new ImmutableViewportMetrics(
|
return new ImmutableViewportMetrics(
|
||||||
pageRectLeft, pageRectTop, pageRectRight, pageRectBottom,
|
pageRectLeft, pageRectTop, pageRectRight, pageRectBottom,
|
||||||
cssPageRectLeft, cssPageRectTop, cssPageRectRight, cssPageRectBottom,
|
cssPageRectLeft, cssPageRectTop, cssPageRectRight, cssPageRectBottom,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче