View / apply constraints when an interaction starts

Previously, an interaction could begin while target values
(center/resolution) were out of the allowed range, causing a
glitch where the view zoom/position would jump suddenly.
This commit is contained in:
Olivier Guyot
2019-04-05 10:26:23 +02:00
parent dfa8506549
commit 0f73f16cfa
4 changed files with 52 additions and 0 deletions

View File

@@ -1325,10 +1325,14 @@ class View extends BaseObject {
/**
* Notify the View that an interaction has started.
* The view state will be resolved to a stable one if needed
* (depending on its constraints).
* @api
*/
beginInteraction() {
this.setHint(ViewHint.INTERACTING, 1);
this.resolveConstraints(0);
}
/**

View File

@@ -114,6 +114,7 @@ class Zoom extends Control {
// upon it
return;
}
view.resolveConstraints(0);
const currentZoom = view.getZoom();
if (currentZoom !== undefined) {
const newZoom = view.getConstrainedZoom(currentZoom + delta);

View File

@@ -135,6 +135,7 @@ export function zoomByDelta(view, delta, opt_anchor, opt_duration) {
const newZoom = view.getConstrainedZoom(currentZoom + delta);
const newResolution = view.getResolutionForZoom(newZoom);
view.resolveConstraints(0);
if (view.getAnimating()) {
view.cancelAnimations();
}