зеркало из https://github.com/mozilla/gecko-dev.git
Bug 892246 - Allow subdocument scrolling to reveal margins. r=kats
This adds a notification callback to PanZoomTarget that the PanZoomController can call to notify GeckoLayerClient that a subdocument is being scrolled. This allows GeckoLayerClient to call LayerMarginsAnimator and alter the margins accordingly, stopping a page from trapping the toolbar on/off the screen with a screen-covering subframe.
This commit is contained in:
Родитель
6d53b0b827
Коммит
4a19924c66
|
@ -854,6 +854,21 @@ public class GeckoLayerClient implements LayerView.Listener, PanZoomTarget
|
|||
viewportMetricsChanged(true);
|
||||
}
|
||||
|
||||
/** Implementation of PanZoomTarget
|
||||
* Notification that a subdocument has been scrolled by a certain amount.
|
||||
* This is used here to make sure that the margins are still accessible
|
||||
* during subdocument scrolling.
|
||||
*
|
||||
* You must hold the monitor while calling this.
|
||||
*/
|
||||
@Override
|
||||
public void onSubdocumentScrollBy(float dx, float dy) {
|
||||
ImmutableViewportMetrics newMarginsMetrics =
|
||||
mMarginsAnimator.scrollBy(mViewportMetrics, dx, dy);
|
||||
mViewportMetrics = mViewportMetrics.setMarginsFrom(newMarginsMetrics);
|
||||
viewportMetricsChanged(true);
|
||||
}
|
||||
|
||||
/** Implementation of PanZoomTarget */
|
||||
@Override
|
||||
public void panZoomStopped() {
|
||||
|
|
|
@ -806,7 +806,11 @@ class JavaPanZoomController
|
|||
if (FloatUtils.fuzzyEquals(displacement.x, 0.0f) && FloatUtils.fuzzyEquals(displacement.y, 0.0f)) {
|
||||
return;
|
||||
}
|
||||
if (! mSubscroller.scrollBy(displacement)) {
|
||||
if (mSubscroller.scrollBy(displacement)) {
|
||||
synchronized (mTarget.getLock()) {
|
||||
mTarget.onSubdocumentScrollBy(displacement.x, displacement.y);
|
||||
}
|
||||
} else {
|
||||
synchronized (mTarget.getLock()) {
|
||||
scrollBy(displacement.x, displacement.y);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ public interface PanZoomTarget {
|
|||
public void setAnimationTarget(ImmutableViewportMetrics viewport);
|
||||
public void setViewportMetrics(ImmutableViewportMetrics viewport);
|
||||
public void scrollBy(float dx, float dy);
|
||||
public void onSubdocumentScrollBy(float dx, float dy);
|
||||
public void panZoomStopped();
|
||||
/** This triggers an (asynchronous) viewport update/redraw. */
|
||||
public void forceRedraw(DisplayPortMetrics displayPort);
|
||||
|
|
Загрузка…
Ссылка в новой задаче