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
936 B
JavaScript
26 lines
936 B
JavaScript
'use strict';
|
|
|
|
const memoizee = require("memoizee");
|
|
|
|
const setTextStyles = require("./set-text-styles");
|
|
//const measureFont = memoizee(require("./measure-font"));
|
|
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);
|
|
|
|
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,
|
|
});
|
|
}
|