Skip to content

Commit

Permalink
release: v10.4.3
Browse files Browse the repository at this point in the history
Merge pull request #7917 from BeksOmega/rc/v10.4.3
  • Loading branch information
BeksOmega authored Mar 11, 2024
2 parents bdc416f + 6a29acb commit 0e22a79
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 36 deletions.
89 changes: 56 additions & 33 deletions core/connection_previewers/insertion_marker_previewer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import * as eventUtils from '../events/utils.js';
import * as constants from '../constants.js';
import * as renderManagement from '../render_management.js';
import * as registry from '../registry.js';
import {Renderer as ZelosRenderer} from '../renderers/zelos/renderer.js';
import {ConnectionType} from '../connection_type.js';

/**
* An error message to throw if the block created by createMarkerBlock_ is
Expand Down Expand Up @@ -86,52 +88,73 @@ export class InsertionMarkerPreviewer implements IConnectionPreviewer {
eventUtils.disable();
try {
this.hidePreview();
const dragged = draggedConn.getSourceBlock();
const marker = this.createInsertionMarker(dragged);
const markerConn = this.getMatchingConnection(
dragged,
marker,
draggedConn,
);
if (!markerConn) {
throw Error('Could not create insertion marker to preview connection');
}

// Render disconnected from everything else so that we have a valid
// connection location.
marker.queueRender();
renderManagement.triggerQueuedRenders();

// Connect() also renders the insertion marker.
markerConn.connect(staticConn);

const originalOffsetToTarget = {
x: staticConn.x - markerConn.x,
y: staticConn.y - markerConn.y,
};
const originalOffsetInBlock = markerConn.getOffsetInBlock().clone();
renderManagement.finishQueuedRenders().then(() => {
// Position so that the existing block doesn't move.
marker?.positionNearConnection(
markerConn,
originalOffsetToTarget,
originalOffsetInBlock,
);
marker?.getSvgRoot().setAttribute('visibility', 'visible');
});
// TODO(7898): Instead of special casing, we should change the dragger to
// track the change in distance between the dragged connection and the
// static connection, so that it doesn't disconnect unless that
// (+ a bit) has been exceeded.
if (this.shouldUseMarkerPreview(draggedConn, staticConn)) {
this.markerConn = this.previewMarker(draggedConn, staticConn);
}

if (this.workspace.getRenderer().shouldHighlightConnection(staticConn)) {
staticConn.highlight();
}

this.markerConn = markerConn;
this.draggedConn = draggedConn;
this.staticConn = staticConn;
} finally {
eventUtils.enable();
}
}

private shouldUseMarkerPreview(
_draggedConn: RenderedConnection,
staticConn: RenderedConnection,
): boolean {
return (
staticConn.type === ConnectionType.PREVIOUS_STATEMENT ||
staticConn.type === ConnectionType.NEXT_STATEMENT ||
!(this.workspace.getRenderer() instanceof ZelosRenderer)
);
}

private previewMarker(
draggedConn: RenderedConnection,
staticConn: RenderedConnection,
): RenderedConnection {
const dragged = draggedConn.getSourceBlock();
const marker = this.createInsertionMarker(dragged);
const markerConn = this.getMatchingConnection(dragged, marker, draggedConn);
if (!markerConn) {
throw Error('Could not create insertion marker to preview connection');
}

// Render disconnected from everything else so that we have a valid
// connection location.
marker.queueRender();
renderManagement.triggerQueuedRenders();

// Connect() also renders the insertion marker.
markerConn.connect(staticConn);

const originalOffsetToTarget = {
x: staticConn.x - markerConn.x,
y: staticConn.y - markerConn.y,
};
const originalOffsetInBlock = markerConn.getOffsetInBlock().clone();
renderManagement.finishQueuedRenders().then(() => {
// Position so that the existing block doesn't move.
marker?.positionNearConnection(
markerConn,
originalOffsetToTarget,
originalOffsetInBlock,
);
marker?.getSvgRoot().setAttribute('visibility', 'visible');
});
return markerConn;
}

private createInsertionMarker(origBlock: BlockSvg) {
const result = this.workspace.newBlock(origBlock.type);
result.setInsertionMarker(true);
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "blockly",
"version": "10.4.2",
"version": "10.4.3",
"description": "Blockly is a library for building visual programming editors.",
"keywords": [
"blockly"
Expand Down

0 comments on commit 0e22a79

Please sign in to comment.