@lightningjs/renderer 3.0.0-beta15 → 3.0.0-beta17

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 (245) hide show
  1. package/dist/src/common/CommonTypes.d.ts +11 -0
  2. package/dist/src/core/CoreNode.js +8 -0
  3. package/dist/src/core/CoreNode.js.map +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +14 -0
  5. package/dist/src/core/CoreTextNode.js +90 -5
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/Stage.js +2 -1
  8. package/dist/src/core/Stage.js.map +1 -1
  9. package/dist/src/core/animations/Animation.d.ts +16 -0
  10. package/dist/src/core/animations/Animation.js +111 -0
  11. package/dist/src/core/animations/Animation.js.map +1 -0
  12. package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
  13. package/dist/src/core/animations/CoreAnimation.js +0 -1
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/animations/CoreTransition.d.ts +24 -0
  16. package/dist/src/core/animations/CoreTransition.js +63 -0
  17. package/dist/src/core/animations/CoreTransition.js.map +1 -0
  18. package/dist/src/core/animations/Playback.d.ts +62 -0
  19. package/dist/src/core/animations/Playback.js +155 -0
  20. package/dist/src/core/animations/Playback.js.map +1 -0
  21. package/dist/src/core/animations/Transition.d.ts +25 -0
  22. package/dist/src/core/animations/Transition.js +63 -0
  23. package/dist/src/core/animations/Transition.js.map +1 -0
  24. package/dist/src/core/animations/utils.d.ts +2 -0
  25. package/dist/src/core/animations/utils.js +137 -0
  26. package/dist/src/core/animations/utils.js.map +1 -0
  27. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  28. package/dist/src/core/lib/collectionUtils.js +100 -0
  29. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  30. package/dist/src/core/platforms/Platform.d.ts +5 -0
  31. package/dist/src/core/platforms/Platform.js.map +1 -1
  32. package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
  33. package/dist/src/core/platforms/web/WebPlatform.js +3 -0
  34. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  35. package/dist/src/core/text-rendering/CanvasFontHandler.js +4 -1
  36. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  37. package/dist/src/core/text-rendering/CanvasTextRenderer.js +7 -7
  38. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  39. package/dist/src/core/text-rendering/SdfFontHandler.js +3 -0
  40. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  41. package/dist/src/core/text-rendering/SdfTextRenderer.js +5 -5
  42. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  43. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +12 -13
  44. package/dist/src/core/text-rendering/TextLayoutEngine.js +242 -186
  45. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
  46. package/dist/src/core/text-rendering/TextRenderer.d.ts +22 -7
  47. package/dist/src/core/utils.d.ts +1 -1
  48. package/dist/src/main-api/Inspector.js +9 -5
  49. package/dist/src/main-api/Inspector.js.map +1 -1
  50. package/dist/src/main-api/Renderer.js +3 -2
  51. package/dist/src/main-api/Renderer.js.map +1 -1
  52. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  53. package/package.json +1 -1
  54. package/src/common/CommonTypes.ts +16 -0
  55. package/src/core/CoreNode.test.ts +50 -1
  56. package/src/core/CoreNode.ts +11 -0
  57. package/src/core/CoreTextNode.ts +112 -5
  58. package/src/core/Stage.ts +2 -1
  59. package/src/core/animations/CoreAnimation.ts +0 -2
  60. package/src/core/platforms/Platform.ts +6 -0
  61. package/src/core/platforms/web/WebPlatform.ts +11 -0
  62. package/src/core/text-rendering/CanvasFontHandler.ts +4 -7
  63. package/src/core/text-rendering/CanvasTextRenderer.ts +6 -8
  64. package/src/core/text-rendering/SdfFontHandler.ts +3 -0
  65. package/src/core/text-rendering/SdfTextRenderer.ts +4 -5
  66. package/src/core/text-rendering/TextLayoutEngine.ts +396 -226
  67. package/src/core/text-rendering/TextRenderer.ts +22 -7
  68. package/src/core/text-rendering/tests/{SdfTests.test.ts → TextLayoutEngine.test.ts} +103 -64
  69. package/src/main-api/Inspector.ts +9 -5
  70. package/src/main-api/Renderer.ts +3 -2
  71. package/dist/src/core/TextureError.d.ts +0 -11
  72. package/dist/src/core/TextureError.js +0 -37
  73. package/dist/src/core/TextureError.js.map +0 -1
  74. package/dist/src/core/platform.d.ts +0 -10
  75. package/dist/src/core/platform.js +0 -81
  76. package/dist/src/core/platform.js.map +0 -1
  77. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  78. package/dist/src/core/renderers/CoreShader.js +0 -28
  79. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  80. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  81. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  82. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  86. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  87. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  88. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  89. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
  90. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
  91. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  92. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  93. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  94. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  96. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  97. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  98. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  99. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -65
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -269
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  104. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  108. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
  109. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  111. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
  112. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  113. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  114. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  115. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  116. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  117. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  118. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  119. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  120. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  121. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  122. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  123. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  124. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  125. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  126. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  127. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  128. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  129. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  130. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  131. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  132. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  133. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  134. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  135. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  136. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  137. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  138. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  139. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  140. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  144. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  145. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  146. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  147. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  148. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  150. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  151. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  153. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  154. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  155. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  156. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  157. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  158. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  159. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  160. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  162. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  163. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  164. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  165. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  166. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  171. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  172. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  173. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  174. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  175. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  176. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  177. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  178. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  179. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  180. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  181. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  182. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  183. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  184. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  185. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  188. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  189. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  190. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  191. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  192. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  193. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  194. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  195. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  196. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  197. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  198. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  199. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  200. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  201. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  202. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  203. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  204. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  205. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  208. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  210. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  211. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  212. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  213. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  214. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  215. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  216. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  217. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  218. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  219. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  220. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  221. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  222. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  223. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  224. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  225. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  226. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  227. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  228. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  229. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  230. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  231. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  232. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  233. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  234. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  236. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  237. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  239. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  240. package/dist/src/main-api/DynamicShaderController.js +0 -58
  241. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  242. package/dist/src/main-api/ShaderController.d.ts +0 -31
  243. package/dist/src/main-api/ShaderController.js +0 -37
  244. package/dist/src/main-api/ShaderController.js.map +0 -1
  245. package/src/core/text-rendering/tests/Canvas.test.ts +0 -378
@@ -1,551 +0,0 @@
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
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
20
- import { assertTruthy } from '../../../utils.js';
21
- import { getRgbaString } from '../../lib/utils.js';
22
- import { calcDefaultLineHeight } from '../TextRenderingUtils.js';
23
- import { getWebFontMetrics, isZeroWidthSpace, } from '../TextTextureRendererUtils.js';
24
- const MAX_TEXTURE_DIMENSION = 2048;
25
- /**
26
- * Calculate height for the canvas
27
- *
28
- * @param textBaseline
29
- * @param fontSize
30
- * @param lineHeight
31
- * @param numLines
32
- * @param offsetY
33
- * @returns
34
- */
35
- function calcHeight(textBaseline, fontSize, lineHeight, numLines, offsetY) {
36
- const baselineOffset = textBaseline !== 'bottom' ? 0.5 * fontSize : 0;
37
- return (lineHeight * (numLines - 1) +
38
- baselineOffset +
39
- Math.max(lineHeight, fontSize) +
40
- (offsetY || 0));
41
- }
42
- export class LightningTextTextureRenderer {
43
- _canvas;
44
- _context;
45
- _settings;
46
- constructor(canvas, context) {
47
- this._canvas = canvas;
48
- this._context = context;
49
- this._settings = this.mergeDefaults({});
50
- }
51
- set settings(v) {
52
- this._settings = this.mergeDefaults(v);
53
- }
54
- get settings() {
55
- return this._settings;
56
- }
57
- getPrecision() {
58
- return this._settings.precision;
59
- }
60
- setFontProperties() {
61
- this._context.font = this._getFontSetting();
62
- this._context.textBaseline = this._settings.textBaseline;
63
- }
64
- _getFontSetting() {
65
- const ff = [this._settings.fontFamily];
66
- const ffs = [];
67
- for (let i = 0, n = ff.length; i < n; i++) {
68
- if (ff[i] === 'serif' || ff[i] === 'sans-serif') {
69
- ffs.push(ff[i]);
70
- }
71
- else {
72
- ffs.push(`"${ff[i]}"`);
73
- }
74
- }
75
- return `${this._settings.fontStyle} ${this._settings.fontSize * this.getPrecision()}px ${ffs.join(',')}`;
76
- }
77
- _load() {
78
- if (true && document.fonts) {
79
- const fontSetting = this._getFontSetting();
80
- try {
81
- if (!document.fonts.check(fontSetting, this._settings.text)) {
82
- // Use a promise that waits for loading.
83
- return document.fonts
84
- .load(fontSetting, this._settings.text)
85
- .catch((err) => {
86
- // Just load the fallback font.
87
- console.warn('[Lightning] Font load error', err, fontSetting);
88
- })
89
- .then(() => {
90
- if (!document.fonts.check(fontSetting, this._settings.text)) {
91
- console.warn('[Lightning] Font not found', fontSetting);
92
- }
93
- });
94
- }
95
- }
96
- catch (e) {
97
- console.warn("[Lightning] Can't check font loading for " + fontSetting);
98
- }
99
- }
100
- }
101
- calculateRenderInfo() {
102
- const renderInfo = {};
103
- const precision = this.getPrecision();
104
- const paddingLeft = this._settings.paddingLeft * precision;
105
- const paddingRight = this._settings.paddingRight * precision;
106
- const fontSize = this._settings.fontSize * precision;
107
- let offsetY = this._settings.offsetY === null
108
- ? null
109
- : this._settings.offsetY * precision;
110
- const w = this._settings.w * precision;
111
- const h = this._settings.h * precision;
112
- let wordWrapWidth = this._settings.wordWrapWidth * precision;
113
- const cutSx = this._settings.cutSx * precision;
114
- const cutEx = this._settings.cutEx * precision;
115
- const cutSy = this._settings.cutSy * precision;
116
- const cutEy = this._settings.cutEy * precision;
117
- const letterSpacing = (this._settings.letterSpacing || 0) * precision;
118
- const textIndent = this._settings.textIndent * precision;
119
- const trFontFace = this._settings.trFontFace;
120
- // Set font properties.
121
- this.setFontProperties();
122
- assertTruthy(trFontFace);
123
- const metrics = getWebFontMetrics(this._context, trFontFace, fontSize);
124
- const defLineHeight = calcDefaultLineHeight(metrics, fontSize) * precision;
125
- const lineHeight = this._settings.lineHeight !== null
126
- ? this._settings.lineHeight * precision
127
- : defLineHeight;
128
- const maxHeight = this._settings.maxHeight;
129
- const containedMaxLines = maxHeight !== null && lineHeight > 0
130
- ? Math.floor(maxHeight / lineHeight)
131
- : 0;
132
- const setMaxLines = this._settings.maxLines;
133
- const calcMaxLines = containedMaxLines > 0 && setMaxLines > 0
134
- ? Math.min(containedMaxLines, setMaxLines)
135
- : Math.max(containedMaxLines, setMaxLines);
136
- // Total width.
137
- let width = w || 2048 / this.getPrecision();
138
- // Inner width.
139
- let innerWidth = width - paddingLeft;
140
- if (innerWidth < 10) {
141
- width += 10 - innerWidth;
142
- innerWidth = 10;
143
- }
144
- if (!wordWrapWidth) {
145
- wordWrapWidth = innerWidth;
146
- }
147
- // Text overflow
148
- if (this._settings.textOverflow && !this._settings.wordWrap) {
149
- let suffix;
150
- switch (this._settings.textOverflow) {
151
- case 'clip':
152
- suffix = '';
153
- break;
154
- case 'ellipsis':
155
- suffix = this._settings.overflowSuffix;
156
- break;
157
- default:
158
- suffix = this._settings.textOverflow;
159
- }
160
- this._settings.text = this.wrapWord(this._settings.text, wordWrapWidth - textIndent, suffix);
161
- }
162
- // word wrap
163
- // preserve original text
164
- let linesInfo;
165
- if (this._settings.wordWrap) {
166
- linesInfo = this.wrapText(this._settings.text, wordWrapWidth, letterSpacing, textIndent);
167
- }
168
- else {
169
- linesInfo = { l: this._settings.text.split(/(?:\r\n|\r|\n)/), n: [] };
170
- const n = linesInfo.l.length;
171
- for (let i = 0; i < n - 1; i++) {
172
- linesInfo.n.push(i);
173
- }
174
- }
175
- let lines = linesInfo.l;
176
- if (calcMaxLines && lines.length > calcMaxLines) {
177
- const usedLines = lines.slice(0, calcMaxLines);
178
- let otherLines = null;
179
- if (this._settings.overflowSuffix) {
180
- // Wrap again with max lines suffix enabled.
181
- const w = this._settings.overflowSuffix
182
- ? this.measureText(this._settings.overflowSuffix)
183
- : 0;
184
- const al = this.wrapText(usedLines[usedLines.length - 1], wordWrapWidth - w, letterSpacing, textIndent);
185
- usedLines[usedLines.length - 1] = `${al.l[0]}${this._settings.overflowSuffix}`;
186
- otherLines = [al.l.length > 1 ? al.l[1] : ''];
187
- }
188
- else {
189
- otherLines = [''];
190
- }
191
- // Re-assemble the remaining text.
192
- let i;
193
- const n = lines.length;
194
- let j = 0;
195
- const m = linesInfo.n.length;
196
- for (i = calcMaxLines; i < n; i++) {
197
- otherLines[j] += `${otherLines[j] ? ' ' : ''}${lines[i]}`;
198
- if (i + 1 < m && linesInfo.n[i + 1]) {
199
- j++;
200
- }
201
- }
202
- renderInfo.remainingText = otherLines.join('\n');
203
- renderInfo.moreTextLines = true;
204
- lines = usedLines;
205
- }
206
- else {
207
- renderInfo.moreTextLines = false;
208
- renderInfo.remainingText = '';
209
- }
210
- // calculate text width
211
- let maxLineWidth = 0;
212
- const lineWidths = [];
213
- for (let i = 0; i < lines.length; i++) {
214
- const lineWidth = this.measureText(lines[i], letterSpacing) + (i === 0 ? textIndent : 0);
215
- lineWidths.push(lineWidth);
216
- maxLineWidth = Math.max(maxLineWidth, lineWidth);
217
- }
218
- renderInfo.lineWidths = lineWidths;
219
- if (!w) {
220
- // Auto-set width to max text length.
221
- width = maxLineWidth + paddingLeft + paddingRight;
222
- innerWidth = maxLineWidth;
223
- }
224
- // If word wrap is enabled the width needs to be the width of the text.
225
- if (this._settings.wordWrap &&
226
- w > maxLineWidth &&
227
- this._settings.textAlign === 'left' &&
228
- lines.length === 1) {
229
- width = maxLineWidth + paddingLeft + paddingRight;
230
- }
231
- let height;
232
- if (h) {
233
- height = h;
234
- }
235
- else {
236
- height = calcHeight(this._settings.textBaseline, fontSize, lineHeight, lines.length, offsetY);
237
- }
238
- if (offsetY === null) {
239
- offsetY = fontSize;
240
- }
241
- renderInfo.w = width;
242
- renderInfo.h = height;
243
- renderInfo.lines = lines;
244
- renderInfo.precision = precision;
245
- if (!width) {
246
- // To prevent canvas errors.
247
- width = 1;
248
- }
249
- if (!height) {
250
- // To prevent canvas errors.
251
- height = 1;
252
- }
253
- if (cutSx || cutEx) {
254
- width = Math.min(width, cutEx - cutSx);
255
- }
256
- if (cutSy || cutEy) {
257
- height = Math.min(height, cutEy - cutSy);
258
- }
259
- renderInfo.width = width;
260
- renderInfo.innerWidth = innerWidth;
261
- renderInfo.height = height;
262
- renderInfo.fontSize = fontSize;
263
- renderInfo.cutSx = cutSx;
264
- renderInfo.cutSy = cutSy;
265
- renderInfo.cutEx = cutEx;
266
- renderInfo.cutEy = cutEy;
267
- renderInfo.lineHeight = lineHeight;
268
- renderInfo.defLineHeight = defLineHeight;
269
- renderInfo.lineWidths = lineWidths;
270
- renderInfo.offsetY = offsetY;
271
- renderInfo.paddingLeft = paddingLeft;
272
- renderInfo.paddingRight = paddingRight;
273
- renderInfo.letterSpacing = letterSpacing;
274
- renderInfo.textIndent = textIndent;
275
- renderInfo.metrics = metrics;
276
- return renderInfo;
277
- }
278
- draw(renderInfo, linesOverride) {
279
- const precision = this.getPrecision();
280
- // Allow lines to be overriden for partial rendering.
281
- const lines = linesOverride?.lines || renderInfo.lines;
282
- const lineWidths = linesOverride?.lineWidths || renderInfo.lineWidths;
283
- const height = linesOverride
284
- ? calcHeight(this._settings.textBaseline, renderInfo.fontSize, renderInfo.lineHeight, linesOverride.lines.length, this._settings.offsetY === null
285
- ? null
286
- : this._settings.offsetY * precision)
287
- : renderInfo.height;
288
- // Add extra margin to prevent issue with clipped text when scaling.
289
- this._canvas.width = Math.min(Math.ceil(renderInfo.width + this._settings.textRenderIssueMargin), MAX_TEXTURE_DIMENSION);
290
- this._canvas.height = Math.min(Math.ceil(height), MAX_TEXTURE_DIMENSION);
291
- // Canvas context has been reset.
292
- this.setFontProperties();
293
- if (renderInfo.fontSize >= 128) {
294
- // WpeWebKit bug: must force compositing because cairo-traps-compositor will not work with text first.
295
- this._context.globalAlpha = 0.01;
296
- this._context.fillRect(0, 0, 0.01, 0.01);
297
- this._context.globalAlpha = 1.0;
298
- }
299
- if (renderInfo.cutSx || renderInfo.cutSy) {
300
- this._context.translate(-renderInfo.cutSx, -renderInfo.cutSy);
301
- }
302
- let linePositionX;
303
- let linePositionY;
304
- const drawLines = [];
305
- const { metrics } = renderInfo;
306
- /**
307
- * Ascender (in pixels)
308
- */
309
- const ascenderPx = metrics
310
- ? metrics.ascender * renderInfo.fontSize
311
- : renderInfo.fontSize;
312
- /**
313
- * Bare line height is the distance between the ascender and descender of the font.
314
- * without the line gap metric.
315
- */
316
- const bareLineHeightPx = (metrics.ascender - metrics.descender) * renderInfo.fontSize;
317
- // Draw lines line by line.
318
- for (let i = 0, n = lines.length; i < n; i++) {
319
- linePositionX = i === 0 ? renderInfo.textIndent : 0;
320
- // By default, text is aligned to top
321
- linePositionY = i * renderInfo.lineHeight + ascenderPx;
322
- if (this._settings.verticalAlign == 'middle') {
323
- linePositionY += (renderInfo.lineHeight - bareLineHeightPx) / 2;
324
- }
325
- else if (this._settings.verticalAlign == 'bottom') {
326
- linePositionY += renderInfo.lineHeight - bareLineHeightPx;
327
- }
328
- if (this._settings.textAlign === 'right') {
329
- linePositionX += renderInfo.innerWidth - lineWidths[i];
330
- }
331
- else if (this._settings.textAlign === 'center') {
332
- linePositionX += (renderInfo.innerWidth - lineWidths[i]) / 2;
333
- }
334
- linePositionX += renderInfo.paddingLeft;
335
- drawLines.push({
336
- text: lines[i],
337
- x: linePositionX,
338
- y: linePositionY,
339
- w: lineWidths[i],
340
- });
341
- }
342
- // Highlight.
343
- if (this._settings.highlight) {
344
- const color = this._settings.highlightColor;
345
- const hlHeight = this._settings.highlightHeight * precision || renderInfo.fontSize * 1.5;
346
- const offset = this._settings.highlightOffset * precision;
347
- const hlPaddingLeft = this._settings.highlightPaddingLeft !== null
348
- ? this._settings.highlightPaddingLeft * precision
349
- : renderInfo.paddingLeft;
350
- const hlPaddingRight = this._settings.highlightPaddingRight !== null
351
- ? this._settings.highlightPaddingRight * precision
352
- : renderInfo.paddingRight;
353
- this._context.fillStyle = getRgbaString(color);
354
- for (let i = 0; i < drawLines.length; i++) {
355
- const drawLine = drawLines[i];
356
- this._context.fillRect(drawLine.x - hlPaddingLeft, drawLine.y - renderInfo.offsetY + offset, drawLine.w + hlPaddingRight + hlPaddingLeft, hlHeight);
357
- }
358
- }
359
- // Text shadow.
360
- let prevShadowSettings = null;
361
- if (this._settings.shadow) {
362
- prevShadowSettings = [
363
- this._context.shadowColor,
364
- this._context.shadowOffsetX,
365
- this._context.shadowOffsetY,
366
- this._context.shadowBlur,
367
- ];
368
- this._context.shadowColor = getRgbaString(this._settings.shadowColor);
369
- this._context.shadowOffsetX = this._settings.shadowOffsetX * precision;
370
- this._context.shadowOffsetY = this._settings.shadowOffsetY * precision;
371
- this._context.shadowBlur = this._settings.shadowBlur * precision;
372
- }
373
- this._context.fillStyle = getRgbaString(this._settings.textColor);
374
- for (let i = 0, n = drawLines.length; i < n; i++) {
375
- const drawLine = drawLines[i];
376
- if (renderInfo.letterSpacing === 0) {
377
- this._context.fillText(drawLine.text, drawLine.x, drawLine.y);
378
- }
379
- else {
380
- const textSplit = drawLine.text.split('');
381
- let x = drawLine.x;
382
- for (let i = 0, j = textSplit.length; i < j; i++) {
383
- this._context.fillText(textSplit[i], x, drawLine.y);
384
- x += this.measureText(textSplit[i], renderInfo.letterSpacing);
385
- }
386
- }
387
- }
388
- if (prevShadowSettings) {
389
- this._context.shadowColor = prevShadowSettings[0];
390
- this._context.shadowOffsetX = prevShadowSettings[1];
391
- this._context.shadowOffsetY = prevShadowSettings[2];
392
- this._context.shadowBlur = prevShadowSettings[3];
393
- }
394
- if (renderInfo.cutSx || renderInfo.cutSy) {
395
- this._context.translate(renderInfo.cutSx, renderInfo.cutSy);
396
- }
397
- }
398
- wrapWord(word, wordWrapWidth, suffix) {
399
- const suffixWidth = this._context.measureText(suffix).width;
400
- const wordLen = word.length;
401
- const wordWidth = this._context.measureText(word).width;
402
- /* If word fits wrapWidth, do nothing */
403
- if (wordWidth <= wordWrapWidth) {
404
- return word;
405
- }
406
- /* Make initial guess for text cuttoff */
407
- let cutoffIndex = Math.floor((wordWrapWidth * wordLen) / wordWidth);
408
- let truncWordWidth = this._context.measureText(word.substring(0, cutoffIndex)).width +
409
- suffixWidth;
410
- /* In case guess was overestimated, shrink it letter by letter. */
411
- if (truncWordWidth > wordWrapWidth) {
412
- while (cutoffIndex > 0) {
413
- truncWordWidth =
414
- this._context.measureText(word.substring(0, cutoffIndex)).width +
415
- suffixWidth;
416
- if (truncWordWidth > wordWrapWidth) {
417
- cutoffIndex -= 1;
418
- }
419
- else {
420
- break;
421
- }
422
- }
423
- /* In case guess was underestimated, extend it letter by letter. */
424
- }
425
- else {
426
- while (cutoffIndex < wordLen) {
427
- truncWordWidth =
428
- this._context.measureText(word.substring(0, cutoffIndex)).width +
429
- suffixWidth;
430
- if (truncWordWidth < wordWrapWidth) {
431
- cutoffIndex += 1;
432
- }
433
- else {
434
- // Finally, when bound is crossed, retract last letter.
435
- cutoffIndex -= 1;
436
- break;
437
- }
438
- }
439
- }
440
- /* If wrapWidth is too short to even contain suffix alone, return empty string */
441
- return (word.substring(0, cutoffIndex) +
442
- (wordWrapWidth >= suffixWidth ? suffix : ''));
443
- }
444
- /**
445
- * Applies newlines to a string to have it optimally fit into the horizontal
446
- * bounds set by the Text object's wordWrapWidth property.
447
- */
448
- wrapText(text, wordWrapWidth, letterSpacing, indent = 0) {
449
- const spaceRegex = / |\u200B/g; // ZWSP and spaces
450
- const lines = text.split(/\r?\n/g);
451
- let allLines = [];
452
- const realNewlines = [];
453
- for (let i = 0; i < lines.length; i++) {
454
- const resultLines = [];
455
- let result = '';
456
- let spaceLeft = wordWrapWidth - indent;
457
- // Split the line into words, considering ZWSP
458
- const words = lines[i].split(spaceRegex);
459
- const spaces = lines[i].match(spaceRegex) || [];
460
- for (let j = 0; j < words.length; j++) {
461
- const space = spaces[j - 1] || '';
462
- const word = words[j];
463
- const wordWidth = this.measureText(word, letterSpacing);
464
- const wordWidthWithSpace = isZeroWidthSpace(space)
465
- ? wordWidth
466
- : wordWidth + this.measureText(space, letterSpacing);
467
- if (j === 0 || wordWidthWithSpace > spaceLeft) {
468
- if (j > 0) {
469
- resultLines.push(result);
470
- result = '';
471
- }
472
- result += word;
473
- spaceLeft = wordWrapWidth - wordWidth - (j === 0 ? indent : 0);
474
- }
475
- else {
476
- spaceLeft -= wordWidthWithSpace;
477
- result += space + word;
478
- }
479
- }
480
- resultLines.push(result);
481
- result = '';
482
- allLines = allLines.concat(resultLines);
483
- if (i < lines.length - 1) {
484
- realNewlines.push(allLines.length);
485
- }
486
- }
487
- return { l: allLines, n: realNewlines };
488
- }
489
- measureText(word, space = 0) {
490
- if (!space) {
491
- return this._context.measureText(word).width;
492
- }
493
- // Split word into characters, but skip ZWSP in the width calculation
494
- return word.split('').reduce((acc, char) => {
495
- // Check if the character is a zero-width space and skip it
496
- if (isZeroWidthSpace(char)) {
497
- return acc;
498
- }
499
- return acc + this._context.measureText(char).width + space;
500
- }, 0);
501
- }
502
- mergeDefaults(settings) {
503
- return {
504
- text: '',
505
- w: 0,
506
- h: 0,
507
- fontStyle: 'normal',
508
- fontSize: 40,
509
- fontFamily: null,
510
- trFontFace: null,
511
- wordWrap: true,
512
- wordWrapWidth: 0,
513
- wordBreak: false,
514
- textOverflow: '',
515
- lineHeight: null,
516
- textBaseline: 'alphabetic',
517
- textAlign: 'left',
518
- verticalAlign: 'top',
519
- offsetY: null,
520
- maxLines: 0,
521
- maxHeight: null,
522
- overflowSuffix: '...',
523
- textColor: [1.0, 1.0, 1.0, 1.0],
524
- paddingLeft: 0,
525
- paddingRight: 0,
526
- shadow: false,
527
- shadowColor: [0.0, 0.0, 0.0, 1.0],
528
- shadowOffsetX: 0,
529
- shadowOffsetY: 0,
530
- shadowBlur: 5,
531
- highlight: false,
532
- highlightHeight: 0,
533
- highlightColor: [0.0, 0.0, 0.0, 1.0],
534
- highlightOffset: 0,
535
- highlightPaddingLeft: 0,
536
- highlightPaddingRight: 0,
537
- letterSpacing: 0,
538
- textIndent: 0,
539
- cutSx: 0,
540
- cutEx: 0,
541
- cutSy: 0,
542
- cutEy: 0,
543
- advancedRenderer: false,
544
- fontBaselineRatio: 0,
545
- precision: 1,
546
- textRenderIssueMargin: 0,
547
- ...settings,
548
- };
549
- }
550
- }
551
- //# sourceMappingURL=LightningTextTextureRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LightningTextTextureRenderer.js","sourceRoot":"","sources":["../../../../../src/core/text-rendering/renderers/LightningTextTextureRenderer.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import { type BoundWithValid, type RectWithValid } from '../../../lib/utils.js';
2
- import { TextRenderer, type TrProps, type TextRendererState, type TrFontProps, type TrPropSetters } from '../TextRenderer.js';
3
- import { SdfTrFontFace } from '../../font-face-types/SdfTrFontFace/SdfTrFontFace.js';
4
- import { type SdfRenderWindow } from './internal/setRenderWindow.js';
5
- import type { TrFontFace } from '../../font-face-types/TrFontFace.js';
6
- import type { Stage } from '../../../Stage.js';
7
- import { BufferCollection } from '../../../renderers/webgl/internal/BufferCollection.js';
8
- import type { Matrix3d } from '../../../lib/Matrix3d.js';
9
- import type { Dimensions } from '../../../../common/CommonTypes.js';
10
- declare module '../TextRenderer.js' {
11
- interface TextRendererMap {
12
- sdf: SdfTextRenderer;
13
- }
14
- interface TextRendererDebugProps {
15
- sdfShaderDebug: boolean;
16
- }
17
- }
18
- export interface LineCacheItem {
19
- codepointIndex: number;
20
- maxY: number;
21
- maxX: number;
22
- }
23
- export interface SdfTextRendererState extends TextRendererState {
24
- /**
25
- * Cache for layout resume points indexed by the `curY` for each line
26
- * in the render sequence.
27
- *
28
- * Allows faster rendering by skipping parts of the layout loop that are
29
- * outside of the renderWindow.
30
- */
31
- lineCache: LineCacheItem[];
32
- renderWindow: SdfRenderWindow;
33
- elementBounds: BoundWithValid;
34
- clippingRect: RectWithValid;
35
- bufferNumFloats: number;
36
- bufferNumQuads: number;
37
- vertexBuffer: Float32Array | undefined;
38
- webGlBuffers: BufferCollection | null;
39
- bufferUploaded: boolean;
40
- distanceRange: number;
41
- trFontFace: SdfTrFontFace | undefined;
42
- /**
43
- * Resolved line height in logical screen pixel units
44
- */
45
- resLineHeight: number | undefined;
46
- }
47
- /**
48
- * Singleton class for rendering text using signed distance fields.
49
- *
50
- * @remarks
51
- * SdfTextRenderer supports both single-channel and multi-channel signed distance fields.
52
- */
53
- export declare class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
54
- /**
55
- * Map of font family names to a set of font faces.
56
- */
57
- private ssdfFontFamilies;
58
- private msdfFontFamilies;
59
- private fontFamilyArray;
60
- private sdfShader;
61
- private rendererBounds;
62
- type: 'canvas' | 'sdf';
63
- constructor(stage: Stage);
64
- getPropertySetters(): Partial<TrPropSetters<SdfTextRendererState>>;
65
- canRenderFont(props: TrFontProps): boolean;
66
- isFontFaceSupported(fontFace: TrFontFace): boolean;
67
- addFontFace(fontFace: TrFontFace): void;
68
- createState(props: TrProps): SdfTextRendererState;
69
- updateState(state: SdfTextRendererState): void;
70
- renderQuads(state: SdfTextRendererState, transform: Matrix3d, clippingRect: Readonly<RectWithValid>, alpha: number, parentHasRenderTexture: boolean, framebufferDimensions: Dimensions): void;
71
- setIsRenderable(state: SdfTextRendererState, renderable: boolean): void;
72
- destroyState(state: SdfTextRendererState): void;
73
- resolveFontFace(props: TrFontProps): SdfTrFontFace | undefined;
74
- /**
75
- * Release the loaded SDF font face
76
- *
77
- * @param state
78
- */
79
- protected releaseFontFace(state: SdfTextRendererState): void;
80
- /**
81
- * Invalidate the layout cache stored in the state. This will cause the text
82
- * to be re-layed out on the next update.
83
- *
84
- * @remarks
85
- * This also invalidates the visible window cache.
86
- *
87
- * @param state
88
- */
89
- protected invalidateLayoutCache(state: SdfTextRendererState): void;
90
- protected setElementBoundsX(state: SdfTextRendererState): void;
91
- protected setElementBoundsY(state: SdfTextRendererState): void;
92
- }