Skip to content

Commit 25470db

Browse files
fix: put highlight on shadow block when a colour field is selected (#79)
1 parent c2a03fc commit 25470db

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

src/line_cursor.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* @author aschmiedt@google.com (Abby Schmiedt)
1414
*/
1515

16+
import { FieldColour } from '@blockly/field-colour';
1617
import * as Blockly from 'blockly/core';
1718
import {ASTNode, Marker} from 'blockly/core';
1819

@@ -424,15 +425,44 @@ export class LineCursor extends Marker {
424425
const oldNode = (this as any).curNode;
425426
(this as any).curNode = newNode;
426427
const drawer = (this as any).drawer;
428+
if (!drawer) {
429+
console.error('could not find a drawer');
430+
return;
431+
}
432+
433+
const newNodeIsFieldColour = newNode?.getType() == ASTNode.types.FIELD &&
434+
(newNode.getLocation() as Blockly.Field) instanceof FieldColour;
435+
const oldNodeIsFieldColour = oldNode?.getType() == ASTNode.types.FIELD &&
436+
(oldNode.getLocation() as Blockly.Field) instanceof FieldColour
437+
438+
427439
if (newNode?.getType() == ASTNode.types.BLOCK) {
428-
if (drawer) {
429-
drawer.hide();
430-
}
440+
drawer.hide();
431441
const block = newNode.getLocation() as Blockly.BlockSvg;
432442
Blockly.common.setSelected(block);
433-
} else if (drawer) {
443+
}
444+
else if (newNodeIsFieldColour) {
445+
drawer.hide();
446+
447+
if (oldNode?.getType() == ASTNode.types.BLOCK) {
448+
Blockly.common.setSelected(null);
449+
} else if (oldNodeIsFieldColour) {
450+
const field = oldNode.getLocation() as FieldColour;
451+
const block = field.getSourceBlock() as Blockly.BlockSvg;
452+
block.removeSelect();
453+
}
454+
455+
const field = newNode.getLocation() as FieldColour;
456+
const block = field.getSourceBlock() as Blockly.BlockSvg;
457+
block.addSelect();
458+
}
459+
else {
434460
if (oldNode?.getType() == ASTNode.types.BLOCK) {
435461
Blockly.common.setSelected(null);
462+
} else if (oldNodeIsFieldColour) {
463+
const field = oldNode.getLocation() as FieldColour;
464+
const block = field.getSourceBlock() as Blockly.BlockSvg;
465+
block.removeSelect();
436466
}
437467

438468
drawer.draw(oldNode, newNode);

0 commit comments

Comments
 (0)