@lightningjs/renderer 2.15.0 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/exports/canvas-shaders.d.ts +10 -0
  2. package/dist/exports/canvas-shaders.js +27 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -0
  4. package/dist/exports/webgl-shaders.d.ts +11 -0
  5. package/dist/exports/webgl-shaders.js +28 -0
  6. package/dist/exports/webgl-shaders.js.map +1 -0
  7. package/dist/src/core/CoreNode.d.ts +8 -0
  8. package/dist/src/core/CoreNode.js +11 -0
  9. package/dist/src/core/CoreNode.js.map +1 -1
  10. package/dist/src/core/Stage.d.ts +16 -0
  11. package/dist/src/core/Stage.js +39 -1
  12. package/dist/src/core/Stage.js.map +1 -1
  13. package/dist/src/core/lib/utils.d.ts +1 -0
  14. package/dist/src/core/lib/utils.js +3 -0
  15. package/dist/src/core/lib/utils.js.map +1 -1
  16. package/dist/src/core/platforms/Platform.d.ts +37 -0
  17. package/dist/src/core/platforms/Platform.js +22 -0
  18. package/dist/src/core/platforms/Platform.js.map +1 -0
  19. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  20. package/dist/src/core/platforms/web/WebPlatform.js +58 -0
  21. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  22. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  23. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  24. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  25. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  26. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  27. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  28. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +37 -0
  29. package/dist/src/core/renderers/canvas/CanvasRenderer.js +215 -0
  30. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  31. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  32. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +57 -0
  33. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  34. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  35. package/dist/src/core/renderers/canvas/CanvasTexture.js +124 -0
  36. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  37. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  38. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  39. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  40. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  41. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  42. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  43. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  44. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +224 -0
  45. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  46. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  47. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +125 -0
  48. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  49. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  50. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  51. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  52. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  53. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  54. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  55. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +35 -0
  56. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +201 -0
  57. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  58. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  59. package/dist/src/core/shaders/canvas/Border.js +57 -0
  60. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  61. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  62. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  63. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  64. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  65. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  66. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  67. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  68. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  69. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  70. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  71. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  72. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  73. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  74. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  75. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  76. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  77. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  78. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  79. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  80. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  81. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  82. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  83. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  84. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  85. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  86. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  87. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  88. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  89. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  90. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  91. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  92. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  93. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  94. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  95. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  96. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  97. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  98. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  99. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  100. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  101. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  102. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  103. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  104. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  105. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  106. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  107. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  108. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  109. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  110. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  111. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  112. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  113. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  114. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  115. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  116. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  117. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  118. package/dist/src/core/shaders/utils.d.ts +5 -0
  119. package/dist/src/core/shaders/utils.js +41 -0
  120. package/dist/src/core/shaders/utils.js.map +1 -0
  121. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  122. package/dist/src/core/shaders/webgl/Border.js +110 -0
  123. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  124. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  125. package/dist/src/core/shaders/webgl/Default.js +86 -0
  126. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  127. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  128. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  129. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  130. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  131. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  132. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  133. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  134. package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
  135. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  136. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  137. package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
  138. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  140. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  141. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  142. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  143. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  144. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  145. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  146. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  147. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  148. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  149. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  150. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  151. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  152. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  153. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  154. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  155. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  156. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  157. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  158. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  159. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +25 -0
  160. package/dist/src/core/text-rendering/CanvasFontHandler.js +117 -0
  161. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  162. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +6 -0
  163. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  164. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  165. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +137 -0
  166. package/dist/src/core/text-rendering/SdfFontHandler.js +336 -0
  167. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  168. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +21 -0
  169. package/dist/src/core/text-rendering/SdfTextRenderer.js +324 -0
  170. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  171. package/dist/src/core/text-rendering/TextRenderer.d.ts +425 -0
  172. package/dist/src/core/text-rendering/TextRenderer.js +70 -0
  173. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  174. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  175. package/dist/src/core/text-rendering/Utils.js +212 -0
  176. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  177. package/dist/src/core/text-rendering/canvas/Settings.d.ts +53 -0
  178. package/dist/src/core/text-rendering/canvas/Settings.js +20 -0
  179. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  180. package/dist/src/core/text-rendering/canvas/Utils.d.ts +19 -0
  181. package/dist/src/core/text-rendering/canvas/Utils.js +139 -0
  182. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  183. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +37 -0
  184. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +188 -0
  185. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  186. package/dist/src/core/text-rendering/canvas/draw.d.ts +12 -0
  187. package/dist/src/core/text-rendering/canvas/draw.js +133 -0
  188. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  189. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  190. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  191. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  192. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  193. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  194. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  195. package/dist/src/core/utils.d.ts +1 -1
  196. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  197. package/package.json +2 -1
  198. package/src/core/CoreNode.ts +19 -0
  199. package/src/core/Stage.ts +50 -1
  200. package/src/core/lib/utils.ts +4 -0
  201. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +0 -2
  202. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +0 -1
  203. /package/dist/src/core/{renderers/webgl/WebGlCoreShader.destroy.d.ts → shaders/webgl/Spinner.d.ts} +0 -0
@@ -0,0 +1,188 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2025 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { calculateFontMetrics } from '../Utils.js';
20
+ import { wrapText, wrapWord, measureText, calcHeight } from './Utils.js';
21
+ import { getFontMetrics, setFontMetrics } from '../CanvasFontHandler.js';
22
+ import { TextAlign, TextBaselineValueToKey } from '../TextRenderer.js';
23
+ export function calculateRenderInfo({ context, settings, }) {
24
+ const precision = settings.precision;
25
+ const paddingLeft = settings.paddingLeft * precision;
26
+ const paddingRight = settings.paddingRight * precision;
27
+ const fontSize = settings.fontSize * precision;
28
+ let offsetY = settings.offsetY === null ? null : settings.offsetY * precision;
29
+ const w = settings.w * precision;
30
+ const h = settings.h * precision;
31
+ let wordWrapWidth = settings.wordWrapWidth * precision;
32
+ const cutSx = settings.cutSx * precision;
33
+ const cutEx = settings.cutEx * precision;
34
+ const cutSy = settings.cutSy * precision;
35
+ const cutEy = settings.cutEy * precision;
36
+ const letterSpacing = (settings.letterSpacing || 0) * precision;
37
+ const textIndent = settings.textIndent * precision;
38
+ const fontFamily = settings.fontFamily;
39
+ // Set font properties
40
+ context.font = `${settings.fontStyle} ${fontSize}px ${fontFamily}`;
41
+ context.textBaseline = TextBaselineValueToKey[settings.textBaseline];
42
+ let metrics = getFontMetrics(fontFamily);
43
+ if (metrics === null) {
44
+ metrics = calculateFontMetrics(context, fontFamily, fontSize);
45
+ setFontMetrics(fontFamily, metrics);
46
+ }
47
+ const defLineHeight = fontSize *
48
+ (metrics.ascender - metrics.descender + metrics.lineGap) *
49
+ precision;
50
+ const lineHeight = settings.lineHeight !== null
51
+ ? settings.lineHeight * precision
52
+ : defLineHeight;
53
+ const maxHeight = settings.maxHeight;
54
+ const containedMaxLines = maxHeight !== null && lineHeight > 0
55
+ ? Math.floor(maxHeight / lineHeight)
56
+ : 0;
57
+ const setMaxLines = settings.maxLines;
58
+ const calcMaxLines = containedMaxLines > 0 && setMaxLines > 0
59
+ ? Math.min(containedMaxLines, setMaxLines)
60
+ : Math.max(containedMaxLines, setMaxLines);
61
+ const textOverflow = settings.textOverflow;
62
+ const wordWrap = settings.wordWrap;
63
+ // Total width
64
+ let width = w || 2048 / precision;
65
+ // Inner width
66
+ let innerWidth = width - paddingLeft;
67
+ if (innerWidth < 10) {
68
+ width += 10 - innerWidth;
69
+ innerWidth = 10;
70
+ }
71
+ if (wordWrapWidth === 0) {
72
+ wordWrapWidth = innerWidth;
73
+ }
74
+ // Text overflow
75
+ let text = settings.text;
76
+ if (textOverflow !== null && wordWrap === false) {
77
+ let suffix;
78
+ switch (textOverflow) {
79
+ case 'clip':
80
+ suffix = '';
81
+ break;
82
+ case 'ellipsis':
83
+ suffix = settings.overflowSuffix;
84
+ break;
85
+ default:
86
+ suffix = String(textOverflow);
87
+ }
88
+ text = wrapWord(context, text, wordWrapWidth - textIndent, suffix, letterSpacing);
89
+ }
90
+ // Word wrap
91
+ let linesInfo;
92
+ if (wordWrap === true) {
93
+ linesInfo = wrapText(context, text, wordWrapWidth, letterSpacing, textIndent);
94
+ }
95
+ else {
96
+ linesInfo = { l: text.split(/(?:\r\n|\r|\n)/), n: [] };
97
+ const n = linesInfo.l.length;
98
+ for (let i = 0; i < n - 1; i++) {
99
+ linesInfo.n.push(i);
100
+ }
101
+ }
102
+ let lines = linesInfo.l;
103
+ let remainingText = '';
104
+ let moreTextLines = false;
105
+ if (calcMaxLines > 0 && lines.length > calcMaxLines) {
106
+ const usedLines = lines.slice(0, calcMaxLines);
107
+ let otherLines = [];
108
+ const overflowSuffix = settings.overflowSuffix;
109
+ if (overflowSuffix.length > 0) {
110
+ const w = measureText(context, overflowSuffix, letterSpacing);
111
+ const al = wrapText(context, usedLines[usedLines.length - 1], wordWrapWidth - w, letterSpacing, textIndent);
112
+ usedLines[usedLines.length - 1] = `${al.l[0]}${overflowSuffix}`;
113
+ otherLines = [al.l.length > 1 ? al.l[1] : ''];
114
+ }
115
+ else {
116
+ otherLines = [''];
117
+ }
118
+ // Re-assemble the remaining text
119
+ let i;
120
+ const n = lines.length;
121
+ let j = 0;
122
+ const m = linesInfo.n.length;
123
+ for (i = calcMaxLines; i < n; i++) {
124
+ otherLines[j] += `${otherLines[j] ? ' ' : ''}${lines[i] ?? ''}`;
125
+ if (i + 1 < m && linesInfo.n[i + 1] !== undefined) {
126
+ j++;
127
+ }
128
+ }
129
+ remainingText = otherLines.join('\n');
130
+ moreTextLines = true;
131
+ lines = usedLines;
132
+ }
133
+ // Calculate text width
134
+ let maxLineWidth = 0;
135
+ const lineWidths = [];
136
+ for (let i = 0; i < lines.length; i++) {
137
+ const lineWidth = measureText(context, lines[i], letterSpacing) +
138
+ (i === 0 ? textIndent : 0);
139
+ lineWidths.push(lineWidth);
140
+ maxLineWidth = Math.max(maxLineWidth, lineWidth);
141
+ }
142
+ if (w === 0) {
143
+ width = maxLineWidth + paddingLeft + paddingRight;
144
+ innerWidth = maxLineWidth;
145
+ }
146
+ if (wordWrap === true &&
147
+ w > maxLineWidth &&
148
+ settings.textAlign === TextAlign.left &&
149
+ lines.length === 1) {
150
+ width = maxLineWidth + paddingLeft + paddingRight;
151
+ }
152
+ let height;
153
+ if (h > 0) {
154
+ height = h;
155
+ }
156
+ else {
157
+ height = calcHeight(settings.textBaseline, fontSize, lineHeight, lines.length, offsetY);
158
+ }
159
+ if (offsetY === null) {
160
+ offsetY = fontSize;
161
+ }
162
+ return {
163
+ w: width,
164
+ h: height,
165
+ lines,
166
+ precision,
167
+ remainingText,
168
+ moreTextLines,
169
+ width,
170
+ innerWidth,
171
+ height,
172
+ fontSize,
173
+ cutSx,
174
+ cutSy,
175
+ cutEx,
176
+ cutEy,
177
+ lineHeight,
178
+ defLineHeight,
179
+ lineWidths,
180
+ offsetY: offsetY,
181
+ paddingLeft,
182
+ paddingRight,
183
+ letterSpacing,
184
+ textIndent,
185
+ metrics,
186
+ };
187
+ }
188
+ //# sourceMappingURL=calculateRenderInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateRenderInfo.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/canvas/calculateRenderInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RenderInfo } from './calculateRenderInfo.js';
2
+ import type { Settings } from './Settings.js';
3
+ export declare const draw: ({ canvas, context, renderInfo, settings, linesOverride, }: {
4
+ canvas: OffscreenCanvas | HTMLCanvasElement;
5
+ context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
6
+ renderInfo: RenderInfo;
7
+ settings: Settings;
8
+ linesOverride?: {
9
+ lines: string[];
10
+ lineWidths: number[];
11
+ };
12
+ }) => void;
@@ -0,0 +1,133 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2025 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import { getRgbaString } from '../../lib/utils.js';
20
+ import { calcHeight, measureText } from './Utils.js';
21
+ import { TextAlign, TextBaselineValueToKey, TextVerticalAlign } from '../TextRenderer.js';
22
+ const MAX_TEXTURE_DIMENSION = 4096;
23
+ export const draw = ({ canvas, context, renderInfo, settings, linesOverride, }) => {
24
+ const fontSize = renderInfo.fontSize;
25
+ const lineHeight = renderInfo.lineHeight;
26
+ const precision = settings.precision;
27
+ const lines = linesOverride?.lines || renderInfo.lines;
28
+ const lineWidths = linesOverride?.lineWidths || renderInfo.lineWidths;
29
+ const height = linesOverride !== undefined
30
+ ? calcHeight(settings.textBaseline, fontSize, lineHeight, linesOverride.lines.length, settings.offsetY === null ? null : settings.offsetY * precision)
31
+ : renderInfo.height;
32
+ // Add extra margin to prevent issue with clipped text when scaling.
33
+ canvas.width = Math.min(Math.ceil(renderInfo.width + settings.textRenderIssueMargin), MAX_TEXTURE_DIMENSION);
34
+ canvas.height = Math.min(Math.ceil(height), MAX_TEXTURE_DIMENSION);
35
+ // Canvas context has been reset.
36
+ context.font = `${settings.fontStyle} ${fontSize}px ${settings.fontFamily}`;
37
+ context.textBaseline = TextBaselineValueToKey[settings.textBaseline];
38
+ if (fontSize >= 128) {
39
+ context.globalAlpha = 0.01;
40
+ context.fillRect(0, 0, 0.01, 0.01);
41
+ context.globalAlpha = 1.0;
42
+ }
43
+ if (renderInfo.cutSx || renderInfo.cutSy) {
44
+ context.translate(-renderInfo.cutSx, -renderInfo.cutSy);
45
+ }
46
+ let linePositionX;
47
+ let linePositionY;
48
+ const drawLines = [];
49
+ const metrics = renderInfo.metrics;
50
+ const ascenderPx = metrics ? metrics.ascender * fontSize : fontSize;
51
+ const bareLineHeightPx = metrics
52
+ ? (metrics.ascender - metrics.descender) * fontSize
53
+ : fontSize;
54
+ for (let i = 0, n = lines.length; i < n; i++) {
55
+ linePositionX = i === 0 ? renderInfo.textIndent : 0;
56
+ linePositionY = i * lineHeight + ascenderPx;
57
+ if (settings.verticalAlign === TextVerticalAlign.middle) {
58
+ linePositionY += (lineHeight - bareLineHeightPx) / 2;
59
+ }
60
+ else if (settings.verticalAlign === TextVerticalAlign.bottom) {
61
+ linePositionY += lineHeight - bareLineHeightPx;
62
+ }
63
+ if (settings.textAlign === TextAlign.right) {
64
+ linePositionX += renderInfo.innerWidth - lineWidths[i];
65
+ }
66
+ else if (settings.textAlign === TextAlign.center) {
67
+ linePositionX += (renderInfo.innerWidth - lineWidths[i]) / 2;
68
+ }
69
+ linePositionX += renderInfo.paddingLeft;
70
+ drawLines.push({
71
+ text: lines[i],
72
+ x: linePositionX,
73
+ y: linePositionY,
74
+ w: lineWidths[i],
75
+ });
76
+ }
77
+ // Highlight
78
+ if (settings.highlight === true) {
79
+ const color = settings.highlightColor;
80
+ const hlHeight = settings.highlightHeight * precision || fontSize * 1.5;
81
+ const offset = settings.highlightOffset * precision;
82
+ const hlPaddingLeft = settings.highlightPaddingLeft !== null
83
+ ? settings.highlightPaddingLeft * precision
84
+ : renderInfo.paddingLeft;
85
+ const hlPaddingRight = settings.highlightPaddingRight !== null
86
+ ? settings.highlightPaddingRight * precision
87
+ : renderInfo.paddingRight;
88
+ context.fillStyle = getRgbaString(color);
89
+ for (let i = 0; i < drawLines.length; i++) {
90
+ const drawLine = drawLines[i];
91
+ context.fillRect(drawLine.x - hlPaddingLeft, drawLine.y - renderInfo.offsetY + offset, drawLine.w + hlPaddingRight + hlPaddingLeft, hlHeight);
92
+ }
93
+ }
94
+ // Text shadow
95
+ let prevShadowSettings = null;
96
+ if (settings.shadow === true) {
97
+ prevShadowSettings = [
98
+ context.shadowColor,
99
+ context.shadowOffsetX,
100
+ context.shadowOffsetY,
101
+ context.shadowBlur,
102
+ ];
103
+ context.shadowColor = getRgbaString(settings.shadowColor);
104
+ context.shadowOffsetX = settings.shadowOffsetX * precision;
105
+ context.shadowOffsetY = settings.shadowOffsetY * precision;
106
+ context.shadowBlur = settings.shadowBlur * precision;
107
+ }
108
+ context.fillStyle = getRgbaString(settings.textColor);
109
+ for (let i = 0, n = drawLines.length; i < n; i++) {
110
+ const drawLine = drawLines[i];
111
+ if (renderInfo.letterSpacing === 0) {
112
+ context.fillText(drawLine.text, drawLine.x, drawLine.y);
113
+ }
114
+ else {
115
+ const textSplit = drawLine.text.split('');
116
+ let x = drawLine.x;
117
+ for (let i = 0, j = textSplit.length; i < j; i++) {
118
+ context.fillText(textSplit[i], x, drawLine.y);
119
+ x += measureText(context, textSplit[i], renderInfo.letterSpacing);
120
+ }
121
+ }
122
+ }
123
+ if (prevShadowSettings) {
124
+ context.shadowColor = prevShadowSettings[0];
125
+ context.shadowOffsetX = prevShadowSettings[1];
126
+ context.shadowOffsetY = prevShadowSettings[2];
127
+ context.shadowBlur = prevShadowSettings[3];
128
+ }
129
+ if (renderInfo.cutSx || renderInfo.cutSy) {
130
+ context.translate(renderInfo.cutSx, renderInfo.cutSy);
131
+ }
132
+ };
133
+ //# sourceMappingURL=draw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/canvas/draw.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A wrapper Generator class that makes a generator peekable.
3
+ */
4
+ export declare class PeekableIterator<T = unknown, TReturn = any, TNext = unknown> implements Iterator<T, TReturn, TNext> {
5
+ private iterator;
6
+ private peekBuffer;
7
+ private _lastIndex;
8
+ constructor(iterator: Iterator<T, TReturn, TNext>, indexBase?: number);
9
+ next(): IteratorResult<T, TReturn>;
10
+ peek(): IteratorResult<T, TReturn>;
11
+ get lastIndex(): number;
12
+ }
@@ -0,0 +1,61 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ /**
20
+ * A wrapper Generator class that makes a generator peekable.
21
+ */
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ export class PeekableIterator {
24
+ iterator;
25
+ peekBuffer = [];
26
+ _lastIndex = -1;
27
+ constructor(iterator, indexBase = 0) {
28
+ this.iterator = iterator;
29
+ this.iterator = iterator;
30
+ this._lastIndex = indexBase - 1;
31
+ this.peekBuffer = [];
32
+ }
33
+ next() {
34
+ const nextResult = this.peekBuffer.length > 0
35
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
36
+ this.peekBuffer.pop()
37
+ : this.iterator.next();
38
+ if (nextResult.done === true) {
39
+ this._lastIndex = -1;
40
+ }
41
+ else {
42
+ this._lastIndex++;
43
+ }
44
+ return nextResult;
45
+ }
46
+ peek() {
47
+ if (this.peekBuffer.length > 0) {
48
+ // We know that the buffer is not empty, so we can safely use the
49
+ // non-null assertion operator
50
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
51
+ return this.peekBuffer[0];
52
+ }
53
+ const result = this.iterator.next();
54
+ this.peekBuffer.push(result);
55
+ return result;
56
+ }
57
+ get lastIndex() {
58
+ return this._lastIndex;
59
+ }
60
+ }
61
+ //# sourceMappingURL=PeekableGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeekableGenerator.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/sdf/PeekableGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,8DAA8D;AAC9D,MAAM,OAAO,gBAAgB;IAMP;IAHZ,UAAU,GAAiC,EAAE,CAAC;IAC9C,UAAU,GAAG,CAAC,CAAC,CAAC;IAExB,YAAoB,QAAqC,EAAE,SAAS,GAAG,CAAC;QAApD,aAAQ,GAAR,QAAQ,CAA6B;QACvD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI;QACF,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,oEAAoE;gBACpE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAG;YACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,iEAAiE;YACjE,8BAA8B;YAC9B,oEAAoE;YACpE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { PeekableIterator } from './PeekableGenerator.js';
2
+ /**
3
+ * Minimal glyph info for performance-focused text shaping
4
+ */
5
+ export interface SimpleGlyphInfo {
6
+ /**
7
+ * Whether the character was successfully mapped to a glyph
8
+ */
9
+ mapped: boolean;
10
+ /**
11
+ * Unicode codepoint
12
+ */
13
+ codepoint: number;
14
+ /**
15
+ * How much to advance horizontally after rendering this glyph
16
+ */
17
+ xAdvance: number;
18
+ }
19
+ /**
20
+ * Minimal font shaper properties
21
+ */
22
+ export interface FontShaperProps {
23
+ /**
24
+ * Font family name
25
+ */
26
+ fontFamily: string;
27
+ /**
28
+ * Font size in pixels
29
+ */
30
+ fontSize: number;
31
+ /**
32
+ * Letter spacing in pixels
33
+ */
34
+ letterSpacing: number;
35
+ }
36
+ /**
37
+ * Functional font shaper interface
38
+ */
39
+ export interface FontShaper {
40
+ shapeText: (props: FontShaperProps, codepoints: PeekableIterator<number>) => Generator<SimpleGlyphInfo, void>;
41
+ }
42
+ /**
43
+ * Create a simple SDF font shaper
44
+ */
45
+ export declare const createSdfFontShaper: () => FontShaper;
@@ -0,0 +1,69 @@
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2025 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import * as SdfFontHandler from '../SdfFontHandler.js';
20
+ /**
21
+ * Create a simple SDF font shaper
22
+ */
23
+ export const createSdfFontShaper = () => ({
24
+ shapeText: function* (props, codepoints) {
25
+ // Host paths on top
26
+ const fontFamily = props.fontFamily;
27
+ const fontSize = props.fontSize;
28
+ const letterSpacing = props.letterSpacing;
29
+ const fontData = SdfFontHandler.getFontData(fontFamily);
30
+ if (fontData === null)
31
+ return;
32
+ const fontScale = fontSize / fontData.common.lineHeight;
33
+ let prevCodepoint = 0;
34
+ while (true) {
35
+ const result = codepoints.next();
36
+ if (result.done)
37
+ break;
38
+ const codepoint = result.value;
39
+ if (!codepoint)
40
+ continue;
41
+ // Get glyph data
42
+ const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
43
+ if (glyph === null) {
44
+ yield {
45
+ mapped: false,
46
+ codepoint,
47
+ xAdvance: 0,
48
+ };
49
+ continue;
50
+ }
51
+ // Calculate advance with kerning
52
+ let advance = glyph.xadvance * fontScale;
53
+ // Add kerning if there's a previous character
54
+ if (prevCodepoint !== 0) {
55
+ const kerning = SdfFontHandler.getKerning(fontFamily, prevCodepoint, codepoint);
56
+ advance += kerning * fontScale;
57
+ }
58
+ // Add letter spacing
59
+ advance += letterSpacing;
60
+ yield {
61
+ mapped: true,
62
+ codepoint,
63
+ xAdvance: advance,
64
+ };
65
+ prevCodepoint = codepoint;
66
+ }
67
+ },
68
+ });
69
+ //# sourceMappingURL=SimpleFontShaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleFontShaper.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/sdf/SimpleFontShaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAgDvD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAe,EAAE,CAAC,CAAC;IACpD,SAAS,EAAE,QAAQ,CAAC,EAClB,KAAsB,EACtB,UAAoC;QAEpC,oBAAoB;QACpB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAE1C,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAE9B,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QACxD,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAM;YAEvB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,iBAAiB;YACjB,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM;oBACJ,MAAM,EAAE,KAAK;oBACb,SAAS;oBACT,QAAQ,EAAE,CAAC;iBACZ,CAAC;gBACF,SAAS;YACX,CAAC;YAED,iCAAiC;YACjC,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;YAEzC,8CAA8C;YAC9C,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CACvC,UAAU,EACV,aAAa,EACb,SAAS,CACV,CAAC;gBACF,OAAO,IAAI,OAAO,GAAG,SAAS,CAAC;YACjC,CAAC;YAED,qBAAqB;YACrB,OAAO,IAAI,aAAa,CAAC;YAEzB,MAAM;gBACJ,MAAM,EAAE,IAAI;gBACZ,SAAS;gBACT,QAAQ,EAAE,OAAO;aAClB,CAAC;YAEF,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * @module
5
5
  */
6
6
  export declare const EPSILON = 0.000001;
7
- export declare let ARRAY_TYPE: Float32ArrayConstructor | ArrayConstructor;
7
+ export declare let ARRAY_TYPE: ArrayConstructor | Float32ArrayConstructor;
8
8
  export declare const RANDOM: () => number;
9
9
  export declare const ANGLE_ORDER = "zyx";
10
10
  export declare const setMatrixArrayType: (type: Float32ArrayConstructor | ArrayConstructor) => void;