UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

102 lines (98 loc) 3.91 kB
'use strict'; var Extensions = require('../../extensions/Extensions.js'); var CanvasPool = require('../../rendering/renderers/shared/texture/CanvasPool.js'); var TexturePool = require('../../rendering/renderers/shared/texture/TexturePool.js'); var types = require('../../rendering/renderers/types.js'); var isSafari = require('../../utils/browser/isSafari.js'); var warn = require('../../utils/logging/warn.js'); var PoolGroup = require('../../utils/pool/PoolGroup.js'); var getPo2TextureFromSource = require('../text/utils/getPo2TextureFromSource.js'); var HTMLTextRenderData = require('./HTMLTextRenderData.js'); var HTMLTextStyle = require('./HTMLTextStyle.js'); var extractFontFamilies = require('./utils/extractFontFamilies.js'); var getFontCss = require('./utils/getFontCss.js'); var getSVGUrl = require('./utils/getSVGUrl.js'); var getTemporaryCanvasFromImage = require('./utils/getTemporaryCanvasFromImage.js'); var loadSVGImage = require('./utils/loadSVGImage.js'); var measureHtmlText = require('./utils/measureHtmlText.js'); "use strict"; class HTMLTextSystem { constructor(renderer) { this._renderer = renderer; this._createCanvas = renderer.type === types.RendererType.WEBGPU; } /** * @param options * @deprecated Use getTexturePromise instead */ getTexture(options) { return this.getTexturePromise(options); } getTexturePromise(options) { return this._buildTexturePromise(options); } async _buildTexturePromise(options) { const { text, style, resolution, textureStyle } = options; const htmlTextData = PoolGroup.BigPool.get(HTMLTextRenderData.HTMLTextRenderData); const fontFamilies = extractFontFamilies.extractFontFamilies(text, style); const fontCSS = await getFontCss.getFontCss( fontFamilies, style, HTMLTextStyle.HTMLTextStyle.defaultTextStyle ); const measured = measureHtmlText.measureHtmlText(text, style, fontCSS, htmlTextData); const width = Math.ceil(Math.ceil(Math.max(1, measured.width) + style.padding * 2) * resolution); const height = Math.ceil(Math.ceil(Math.max(1, measured.height) + style.padding * 2) * resolution); const image = htmlTextData.image; const uvSafeOffset = 2; image.width = (width | 0) + uvSafeOffset; image.height = (height | 0) + uvSafeOffset; const svgURL = getSVGUrl.getSVGUrl(text, style, resolution, fontCSS, htmlTextData); await loadSVGImage.loadSVGImage(image, svgURL, isSafari.isSafari() && fontFamilies.length > 0); const resource = image; let canvasAndContext; if (this._createCanvas) { canvasAndContext = getTemporaryCanvasFromImage.getTemporaryCanvasFromImage(image, resolution); } const texture = getPo2TextureFromSource.getPo2TextureFromSource( canvasAndContext ? canvasAndContext.canvas : resource, image.width - uvSafeOffset, image.height - uvSafeOffset, resolution ); if (textureStyle) texture.source.style = textureStyle; if (this._createCanvas) { this._renderer.texture.initSource(texture.source); CanvasPool.CanvasPool.returnCanvasAndContext(canvasAndContext); } PoolGroup.BigPool.return(htmlTextData); return texture; } returnTexturePromise(texturePromise) { texturePromise.then((texture) => { this._cleanUp(texture); }).catch(() => { warn.warn("HTMLTextSystem: Failed to clean texture"); }); } _cleanUp(texture) { TexturePool.TexturePool.returnTexture(texture, true); texture.source.resource = null; texture.source.uploadMethodId = "unknown"; } destroy() { this._renderer = null; } } /** @ignore */ HTMLTextSystem.extension = { type: [ Extensions.ExtensionType.WebGLSystem, Extensions.ExtensionType.WebGPUSystem, Extensions.ExtensionType.CanvasSystem ], name: "htmlText" }; exports.HTMLTextSystem = HTMLTextSystem; //# sourceMappingURL=HTMLTextSystem.js.map