You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
924 B
JavaScript

'use strict';
const memoizee = require("memoizee");
const setTextStyles = require("./set-text-styles");
const measureFont = memoizee(require("measure-font"));
module.exports = function measureText(text, options) {
let offscreenCanvas = document.createElement("canvas");
let context = offscreenCanvas.getContext("2d");
setTextStyles(context, options);
// FIXME: Allow for more accurate measurement
let fontMeasurements = measureFont(options.fontFamily, {fontSize: 40});
return Object.assign(context.measureText(text), {
height: options.fontSize * (fontMeasurements.descender - fontMeasurements.topBounding),
ascender: options.fontSize * fontMeasurements.ascender,
descender: options.fontSize * fontMeasurements.descender,
capHeight: options.fontSize * fontMeasurements.capHeight,
median: options.fontSize * fontMeasurements.median,
topBounding: options.fontSize * fontMeasurements.topBounding,
});
}