Could you change the way the write block works? I've seen the code through the "SpriteMorph" class but I would like to change something, generally. The old code was:
SpriteMorph.prototype.write = function (text, size) {
// thanks to Michael Ball for contributing this code!
if (typeof text !== 'string' && typeof text !== 'number') {
throw new Error(
'LABEL can only draw text or numbers, not a ' +
typeof text
);
}
var stage = this.parentThatIsA(StageMorph),
context = stage.penTrails().getContext('2d'),
rotation = radians(this.direction() - 90),
trans = new Point(
this.rotationCenter().x - stage.left(),
this.rotationCenter().y - stage.top()
),
len,
pos;
context.save();
context.font = size + 'px monospace';
context.textAlign = 'left';
context.textBaseline = 'alphabetic';
context.fillStyle = this.color.toString();
len = context.measureText(text).width;
trans = trans.multiplyBy(1 / stage.scale);
context.translate(trans.x, trans.y);
context.rotate(rotation);
context.fillText(text, 0, 0);
context.translate(-trans.x, -trans.y);
context.restore();
pos = new Point(
len * Math.sin(radians(this.direction())),
len * Math.cos(radians(this.direction()))
);
pos = pos.add(new Point(this.xPosition(), this.yPosition()));
this.gotoXY(pos.x, pos.y, false);
this.changed();
stage.changed();
};
My tiny change is
SpriteMorph.prototype.write = function (text, size, alignment) {
// thanks to Michael Ball for contributing this code!
if (typeof text !== 'string' && typeof text !== 'number') {
throw new Error(
'LABEL can only draw text or numbers, not a ' +
typeof text
);
}
var stage = this.parentThatIsA(StageMorph),
context = stage.penTrails().getContext('2d'),
rotation = radians(this.direction() - 90),
trans = new Point(
this.rotationCenter().x - stage.left(),
this.rotationCenter().y - stage.top()
),
len,
pos;
context.save();
context.font = size + 'px monospace';
context.textAlign = alignment || 'left';
context.textBaseline = 'alphabetic';
context.fillStyle = this.color.toString();
len = context.measureText(text).width;
trans = trans.multiplyBy(1 / stage.scale);
context.translate(trans.x, trans.y);
context.rotate(rotation);
context.fillText(text, 0, 0);
context.translate(-trans.x, -trans.y);
context.restore();
pos = new Point(
len * Math.sin(radians(this.direction())),
len * Math.cos(radians(this.direction()))
);
pos = pos.add(new Point(this.xPosition(), this.yPosition()));
this.gotoXY(pos.x, pos.y, false);
this.changed();
stage.changed();
};
you can make the dropdown menus if you like.