@stringsync/vexml
Version:
MusicXML to Vexflow
20 lines (19 loc) • 634 B
JavaScript
import * as util from '../util';
export class TextMeasurer {
font;
constructor(font) {
this.font = font;
}
measure(text) {
const ctx = document.createElement('canvas').getContext('2d');
util.assertNotNull(ctx);
const fontSize = this.font.size || '16px';
const fontFamily = this.font.family || 'Arial, sans-serif';
ctx.font = `${fontSize} ${fontFamily}`;
const metrics = ctx.measureText(text);
return {
width: metrics.width,
approximateHeight: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent,
};
}
}