{"version":3,"file":"drawGlyph.mjs","sources":["../../src/utils/drawGlyph.ts"],"sourcesContent":["import { utils } from 'pixijs/core';\nimport { generateFillStyle } from './generateFillStyle';\n\nimport type { ICanvas, ICanvasRenderingContext2D } from 'pixijs/core';\nimport type { TextMetrics, TextStyle } from 'pixijs/text';\n\n// TODO: Prevent code duplication b/w drawGlyph & Text#updateText\n\n/**\n * Draws the glyph `metrics.text` on the given canvas.\n *\n * Ignored because not directly exposed.\n * @ignore\n * @param {PIXI.ICanvas} canvas\n * @param {PIXI.ICanvasRenderingContext2D} context\n * @param {TextMetrics} metrics\n * @param {number} x\n * @param {number} y\n * @param {number} resolution\n * @param {TextStyle} style\n */\nexport function drawGlyph(\n    canvas: ICanvas,\n    context: ICanvasRenderingContext2D,\n    metrics: TextMetrics,\n    x: number,\n    y: number,\n    resolution: number,\n    style: TextStyle\n): void\n{\n    const char = metrics.text;\n    const fontProperties = metrics.fontProperties;\n\n    context.translate(x, y);\n    context.scale(resolution, resolution);\n\n    const tx = style.strokeThickness / 2;\n    const ty = -(style.strokeThickness / 2);\n\n    context.font = style.toFontString();\n    context.lineWidth = style.strokeThickness;\n    context.textBaseline = style.textBaseline;\n    context.lineJoin = style.lineJoin;\n    context.miterLimit = style.miterLimit;\n\n    // set canvas text styles\n    context.fillStyle = generateFillStyle(canvas, context, style, resolution, [char], metrics);\n    context.strokeStyle = style.stroke as string;\n\n    if (style.dropShadow)\n    {\n        const dropShadowColor = style.dropShadowColor;\n        const rgb = utils.hex2rgb(typeof dropShadowColor === 'number' ? dropShadowColor : utils.string2hex(dropShadowColor));\n        const dropShadowBlur = style.dropShadowBlur * resolution;\n        const dropShadowDistance = style.dropShadowDistance * resolution;\n\n        context.shadowColor = `rgba(${rgb[0] * 255},${rgb[1] * 255},${rgb[2] * 255},${style.dropShadowAlpha})`;\n        context.shadowBlur = dropShadowBlur;\n        context.shadowOffsetX = Math.cos(style.dropShadowAngle) * dropShadowDistance;\n        context.shadowOffsetY = Math.sin(style.dropShadowAngle) * dropShadowDistance;\n    }\n    else\n    {\n        context.shadowColor = 'black';\n        context.shadowBlur = 0;\n        context.shadowOffsetX = 0;\n        context.shadowOffsetY = 0;\n    }\n\n    if (style.stroke && style.strokeThickness)\n    {\n        context.strokeText(char, tx, ty + metrics.lineHeight - fontProperties.descent);\n    }\n    if (style.fill)\n    {\n        context.fillText(char, tx, ty + metrics.lineHeight - fontProperties.descent);\n    }\n\n    context.setTransform(1, 0, 0, 1, 0, 0); // defaults needed for older browsers (e.g. Opera 29)\n\n    context.fillStyle = 'rgba(0, 0, 0, 0)';\n}\n"],"names":[],"mappings":"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"}