Add zoom support for single-direction-scroll (#4653)

* Add zoom support for single-direction scroll
This commit is contained in:
Monica Kozbial
2021-03-05 14:37:41 -08:00
committed by GitHub
parent 26104d280d
commit f837f1e44e
7 changed files with 60 additions and 31 deletions

View File

@@ -245,32 +245,38 @@ Blockly.bumpTopObjectsIntoBounds_ = function(workspace) {
Blockly.bumpIntoBoundsHandler_ = function(workspace) {
return function(e) {
var metricsManager = workspace.getMetricsManager();
if (!metricsManager.hasFixedEdges() || workspace.isDragging() ||
Blockly.Events.BUMP_EVENTS.indexOf(e.type) === -1) {
if (!metricsManager.hasFixedEdges || workspace.isDragging()) {
return;
}
var scrollMetricsInWsCoords = metricsManager.getScrollMetrics(true);
if (Blockly.Events.BUMP_EVENTS.indexOf(e.type) !== -1) {
var scrollMetricsInWsCoords = metricsManager.getScrollMetrics(true);
// Triggered by move/create event
var object = Blockly.extractObjectFromEvent_(workspace, e);
if (!object) {
return;
}
// Handle undo.
var oldGroup = Blockly.Events.getGroup();
Blockly.Events.setGroup(e.group);
// Triggered by move/create event
var object = Blockly.extractObjectFromEvent_(workspace, e);
if (!object) {
return;
}
// Handle undo.
var oldGroup = Blockly.Events.getGroup();
Blockly.Events.setGroup(e.group);
var wasBumped = Blockly.bumpObjectIntoBounds_(
workspace, scrollMetricsInWsCoords,
/** @type {!Blockly.IBoundedElement} */ (object));
var wasBumped = Blockly.bumpObjectIntoBounds_(
workspace, scrollMetricsInWsCoords,
/** @type {!Blockly.IBoundedElement} */ (object));
if (wasBumped && !e.group) {
console.warn('Moved object in bounds but there was no' +
' event group. This may break undo.');
}
if (oldGroup !== null) {
Blockly.Events.setGroup(oldGroup);
if (wasBumped && !e.group) {
console.warn('Moved object in bounds but there was no' +
' event group. This may break undo.');
}
if (oldGroup !== null) {
Blockly.Events.setGroup(oldGroup);
}
} else if (e.type === Blockly.Events.VIEWPORT_CHANGE) {
var viewportEvent = /** @type {!Blockly.Events.ViewportChange} */ (e);
if (viewportEvent.scale > viewportEvent.oldScale) {
Blockly.bumpTopObjectsIntoBounds_(workspace);
}
}
};
};