161 lines
12 KiB
JavaScript
161 lines
12 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics = function(global, require, module, exports) {
|
|
global = require("module$node_modules$tiny_lru$dist$tiny_lru_cjs");
|
|
var adapter = require("module$node_modules$pixi_DOT_js$lib$environment$adapter"), measureTaggedText = require("module$node_modules$pixi_DOT_js$lib$scene$text$canvas$utils$measureTaggedText"), parseTaggedText = require("module$node_modules$pixi_DOT_js$lib$scene$text$canvas$utils$parseTaggedText"), textTokenization = require("module$node_modules$pixi_DOT_js$lib$scene$text$canvas$utils$textTokenization"), wordWrap = require("module$node_modules$pixi_DOT_js$lib$scene$text$canvas$utils$wordWrap");
|
|
"use strict";
|
|
const contextSettings = {willReadFrequently:!0}, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34 = class {
|
|
static get experimentalLetterSpacingSupported() {
|
|
var result = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._experimentalLetterSpacingSupported;
|
|
void 0 === result && (result = adapter.DOMAdapter.get().getCanvasRenderingContext2D().prototype, result = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._experimentalLetterSpacingSupported = "letterSpacing" in result || "textLetterSpacing" in result);
|
|
return result;
|
|
}
|
|
constructor(text, style, width, height, lines, lineWidths, lineHeight, maxLineWidth, fontProperties, taggedData) {
|
|
this.text = text;
|
|
this.style = style;
|
|
this.width = width;
|
|
this.height = height;
|
|
this.lines = lines;
|
|
this.lineWidths = lineWidths;
|
|
this.lineHeight = lineHeight;
|
|
this.maxLineWidth = maxLineWidth;
|
|
this.fontProperties = fontProperties;
|
|
taggedData && (this.runsByLine = taggedData.runsByLine, this.lineAscents = taggedData.lineAscents, this.lineDescents = taggedData.lineDescents, this.lineHeights = taggedData.lineHeights, this.hasDropShadow = taggedData.hasDropShadow);
|
|
}
|
|
static measureText(text = " ", style, canvas = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._canvas, wordWrap2 = style.wordWrap) {
|
|
const textKey = `${text}-${style.styleKey}-wordWrap-${wordWrap2}`;
|
|
if (node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measurementCache.has(textKey)) {
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measurementCache.get(textKey);
|
|
}
|
|
if (parseTaggedText.hasTagStyles(style) && parseTaggedText.hasTagMarkup(text)) {
|
|
var result = measureTaggedText.measureTaggedText(text, style, wordWrap2, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._context, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureText, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureTextAdvance, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.measureFont, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.canBreakChars,
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.wordWrapSplit);
|
|
text = new node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34(text, style, result.width, result.height, result.lines, result.lineWidths, result.lineHeight, result.maxLineWidth, result.fontProperties, {runsByLine:result.runsByLine, lineAscents:result.lineAscents, lineDescents:result.lineDescents, lineHeights:result.lineHeights, hasDropShadow:result.hasDropShadow});
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measurementCache.set(textKey, text);
|
|
return text;
|
|
}
|
|
var font = style._fontString;
|
|
result = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.measureFont(font);
|
|
0 === result.fontSize && (result.fontSize = style.fontSize, result.ascent = style.fontSize, result.descent = 0);
|
|
var context = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._context;
|
|
context.font = font;
|
|
canvas = (wordWrap2 ? node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._wordWrap(text, style, canvas) : text).split(textTokenization.NEWLINE_MATCH_REGEX);
|
|
wordWrap2 = Array(canvas.length);
|
|
font = 0;
|
|
for (var i = 0; i < canvas.length; i++) {
|
|
var lineWidth = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureText(canvas[i], style.letterSpacing, context);
|
|
wordWrap2[i] = lineWidth;
|
|
font = Math.max(font, lineWidth);
|
|
}
|
|
lineWidth = style._stroke?.width ?? 0;
|
|
context = style.lineHeight || result.fontSize;
|
|
i = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._adjustWidthForStyle(font, style);
|
|
lineWidth = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._adjustHeightForStyle(Math.max(context, result.fontSize + lineWidth) + (canvas.length - 1) * (context + style.leading), style);
|
|
text = new node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34(text, style, i, lineWidth, canvas, wordWrap2, context + style.leading, font, result);
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measurementCache.set(textKey, text);
|
|
return text;
|
|
}
|
|
static _adjustWidthForStyle(baseWidth, style) {
|
|
baseWidth += style._stroke?.width || 0;
|
|
style.dropShadow && (baseWidth += style.dropShadow.distance);
|
|
return baseWidth;
|
|
}
|
|
static _adjustHeightForStyle(baseHeight, style) {
|
|
style.dropShadow && (baseHeight += style.dropShadow.distance);
|
|
return baseHeight;
|
|
}
|
|
static _measureText(text, letterSpacing, context) {
|
|
const {metricWidth, metrics, letterSpacingVal} = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureTextCore(text, letterSpacing, context);
|
|
text = (metrics.actualBoundingBoxRight ?? 0) - -(metrics.actualBoundingBoxLeft ?? 0);
|
|
0 < metrics.width && (text += letterSpacingVal);
|
|
return Math.max(metricWidth, text);
|
|
}
|
|
static _measureTextAdvance(text, letterSpacing, context) {
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureTextCore(text, letterSpacing, context).metricWidth;
|
|
}
|
|
static _measureTextCore(text, letterSpacing, context) {
|
|
let useExperimentalLetterSpacing = !1;
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.experimentalLetterSpacingSupported && (node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.experimentalLetterSpacing ? (context.letterSpacing = `${letterSpacing}px`, context.textLetterSpacing = `${letterSpacing}px`, useExperimentalLetterSpacing = !0) : (context.letterSpacing = "0px", context.textLetterSpacing = "0px"));
|
|
context = context.measureText(text);
|
|
let metricWidth = context.width, letterSpacingVal = 0;
|
|
0 < metricWidth && (letterSpacingVal = useExperimentalLetterSpacing ? -letterSpacing : (node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.graphemeSegmenter(text).length - 1) * letterSpacing, metricWidth += letterSpacingVal);
|
|
return {metricWidth, metrics:context, letterSpacingVal};
|
|
}
|
|
static _wordWrap(text, style, canvas = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._canvas) {
|
|
return wordWrap.wordWrap(text, style, canvas, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._measureTextAdvance, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.canBreakWords, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.canBreakChars, node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.wordWrapSplit);
|
|
}
|
|
static isBreakingSpace(char, _nextChar) {
|
|
return textTokenization.isBreakingSpace(char, _nextChar);
|
|
}
|
|
static canBreakWords(_token, breakWords) {
|
|
return breakWords;
|
|
}
|
|
static canBreakChars(_char, _nextChar, _token, _index, _breakWords) {
|
|
return !0;
|
|
}
|
|
static wordWrapSplit(token) {
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.graphemeSegmenter(token);
|
|
}
|
|
static measureFont(font) {
|
|
if (node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._fonts[font]) {
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._fonts[font];
|
|
}
|
|
var context = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._context;
|
|
context.font = font;
|
|
var metrics = context.measureText(node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.METRICS_STRING + node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.BASELINE_SYMBOL);
|
|
context = metrics.actualBoundingBoxAscent ?? 0;
|
|
metrics = metrics.actualBoundingBoxDescent ?? 0;
|
|
context = {ascent:context, descent:metrics, fontSize:context + metrics};
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._fonts[font] = context;
|
|
}
|
|
static clearMetrics(font = "") {
|
|
font ? delete node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._fonts[font] : node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._fonts = {};
|
|
}
|
|
static get _canvas() {
|
|
if (!node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__canvas) {
|
|
let canvas;
|
|
try {
|
|
const c = new OffscreenCanvas(0, 0);
|
|
if (c.getContext("2d", contextSettings)?.measureText) {
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__canvas = c;
|
|
}
|
|
canvas = adapter.DOMAdapter.get().createCanvas();
|
|
} catch (_cx) {
|
|
canvas = adapter.DOMAdapter.get().createCanvas();
|
|
}
|
|
canvas.width = canvas.height = 10;
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__canvas = canvas;
|
|
}
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__canvas;
|
|
}
|
|
static get _context() {
|
|
node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__context || (node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__context = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34._canvas.getContext("2d", contextSettings));
|
|
return node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34.__context;
|
|
}
|
|
};
|
|
require = node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics$classdecl$var34;
|
|
require.METRICS_STRING = "|ÉqÅ";
|
|
require.BASELINE_SYMBOL = "M";
|
|
require.BASELINE_MULTIPLIER = 1.4;
|
|
require.HEIGHT_MULTIPLIER = 2;
|
|
require.graphemeSegmenter = (() => {
|
|
if ("function" === typeof Intl?.Segmenter) {
|
|
const segmenter = new Intl.Segmenter();
|
|
return s => {
|
|
s = segmenter.segment(s);
|
|
const result = [];
|
|
let i = 0;
|
|
for (const segment of s) {
|
|
result[i++] = segment.segment;
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
return s => [...s];
|
|
})();
|
|
require.experimentalLetterSpacing = !1;
|
|
require._fonts = {};
|
|
require._measurementCache = global.lru(1e3);
|
|
exports.CanvasTextMetrics = require;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics.js.map
|