@lightningtv/renderer 3.0.0-beta1

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 (481) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +3 -0
  3. package/README.md +147 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +27 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +26 -0
  8. package/dist/exports/canvas.js +45 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +53 -0
  11. package/dist/exports/index.js +62 -0
  12. package/dist/exports/index.js.map +1 -0
  13. package/dist/exports/inspector.d.ts +4 -0
  14. package/dist/exports/inspector.js +23 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +26 -0
  17. package/dist/exports/utils.js +45 -0
  18. package/dist/exports/utils.js.map +1 -0
  19. package/dist/exports/webgl-shaders.d.ts +11 -0
  20. package/dist/exports/webgl-shaders.js +28 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +27 -0
  23. package/dist/exports/webgl.js +46 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +97 -0
  26. package/dist/src/common/CommonTypes.js +20 -0
  27. package/dist/src/common/CommonTypes.js.map +1 -0
  28. package/dist/src/common/EventEmitter.d.ts +12 -0
  29. package/dist/src/common/EventEmitter.js +66 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +66 -0
  32. package/dist/src/common/IAnimationController.js +2 -0
  33. package/dist/src/common/IAnimationController.js.map +1 -0
  34. package/dist/src/common/IEventEmitter.d.ts +8 -0
  35. package/dist/src/common/IEventEmitter.js +18 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/CoreNode.d.ts +860 -0
  38. package/dist/src/core/CoreNode.js +1527 -0
  39. package/dist/src/core/CoreNode.js.map +1 -0
  40. package/dist/src/core/CoreShaderManager.d.ts +38 -0
  41. package/dist/src/core/CoreShaderManager.js +141 -0
  42. package/dist/src/core/CoreShaderManager.js.map +1 -0
  43. package/dist/src/core/CoreTextNode.d.ts +103 -0
  44. package/dist/src/core/CoreTextNode.js +331 -0
  45. package/dist/src/core/CoreTextNode.js.map +1 -0
  46. package/dist/src/core/CoreTextureManager.d.ts +253 -0
  47. package/dist/src/core/CoreTextureManager.js +375 -0
  48. package/dist/src/core/CoreTextureManager.js.map +1 -0
  49. package/dist/src/core/Stage.d.ts +171 -0
  50. package/dist/src/core/Stage.js +566 -0
  51. package/dist/src/core/Stage.js.map +1 -0
  52. package/dist/src/core/TextureMemoryManager.d.ts +143 -0
  53. package/dist/src/core/TextureMemoryManager.js +259 -0
  54. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  55. package/dist/src/core/animations/AnimationManager.d.ts +7 -0
  56. package/dist/src/core/animations/AnimationManager.js +34 -0
  57. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  58. package/dist/src/core/animations/CoreAnimation.d.ts +37 -0
  59. package/dist/src/core/animations/CoreAnimation.js +210 -0
  60. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  61. package/dist/src/core/animations/CoreAnimationController.d.ts +26 -0
  62. package/dist/src/core/animations/CoreAnimationController.js +126 -0
  63. package/dist/src/core/animations/CoreAnimationController.js.map +1 -0
  64. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  65. package/dist/src/core/lib/ContextSpy.js +38 -0
  66. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  67. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  68. package/dist/src/core/lib/ImageWorker.js +200 -0
  69. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  70. package/dist/src/core/lib/Matrix3d.d.ts +73 -0
  71. package/dist/src/core/lib/Matrix3d.js +230 -0
  72. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  73. package/dist/src/core/lib/RenderCoords.d.ts +13 -0
  74. package/dist/src/core/lib/RenderCoords.js +63 -0
  75. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  76. package/dist/src/core/lib/WebGlContextWrapper.d.ts +707 -0
  77. package/dist/src/core/lib/WebGlContextWrapper.js +1018 -0
  78. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  79. package/dist/src/core/lib/textureCompression.d.ts +16 -0
  80. package/dist/src/core/lib/textureCompression.js +128 -0
  81. package/dist/src/core/lib/textureCompression.js.map +1 -0
  82. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  83. package/dist/src/core/lib/textureSvg.js +63 -0
  84. package/dist/src/core/lib/textureSvg.js.map +1 -0
  85. package/dist/src/core/lib/utils.d.ts +59 -0
  86. package/dist/src/core/lib/utils.js +244 -0
  87. package/dist/src/core/lib/utils.js.map +1 -0
  88. package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
  89. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  90. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  91. package/dist/src/core/platform.d.ts +10 -0
  92. package/dist/src/core/platform.js +56 -0
  93. package/dist/src/core/platform.js.map +1 -0
  94. package/dist/src/core/renderers/CoreContextTexture.d.ts +12 -0
  95. package/dist/src/core/renderers/CoreContextTexture.js +34 -0
  96. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  97. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  98. package/dist/src/core/renderers/CoreRenderOp.js +21 -0
  99. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  100. package/dist/src/core/renderers/CoreRenderer.d.ts +68 -0
  101. package/dist/src/core/renderers/CoreRenderer.js +31 -0
  102. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  103. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  104. package/dist/src/core/renderers/CoreShaderNode.js +107 -0
  105. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  106. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  107. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  108. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  109. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  110. package/dist/src/core/renderers/canvas/CanvasRenderer.js +212 -0
  111. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  112. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  113. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +60 -0
  114. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  115. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  116. package/dist/src/core/renderers/canvas/CanvasTexture.js +123 -0
  117. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  118. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -0
  119. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +217 -0
  120. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  121. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +21 -0
  122. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +72 -0
  123. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  124. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  125. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  126. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  128. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  129. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  130. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  131. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +227 -0
  132. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  133. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +36 -0
  134. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +107 -0
  135. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  136. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +134 -0
  137. package/dist/src/core/renderers/webgl/WebGlRenderer.js +546 -0
  138. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  139. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +221 -0
  140. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +334 -0
  141. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  142. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +35 -0
  143. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +195 -0
  144. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +27 -0
  146. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +48 -0
  147. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  149. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +106 -0
  150. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
  152. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +101 -0
  153. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  155. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +31 -0
  156. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  157. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  158. package/dist/src/core/shaders/canvas/Border.js +57 -0
  159. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  160. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  161. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  162. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  163. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  164. package/dist/src/core/shaders/canvas/LinearGradient.js +46 -0
  165. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  166. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  167. package/dist/src/core/shaders/canvas/RadialGradient.js +68 -0
  168. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  169. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  170. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  171. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  172. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  173. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +35 -0
  174. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  175. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  176. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +39 -0
  177. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  178. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  179. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +38 -0
  180. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  181. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  182. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  183. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  184. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  185. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  186. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  187. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  188. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  189. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  190. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  191. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  192. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  193. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  194. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  195. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  196. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  197. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  198. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  199. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  200. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  201. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  202. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  203. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  204. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  205. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  206. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  207. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  208. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  209. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  210. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  211. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  212. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  213. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  214. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  215. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  216. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  217. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  218. package/dist/src/core/shaders/webgl/Border.js +87 -0
  219. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  220. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  221. package/dist/src/core/shaders/webgl/Default.js +86 -0
  222. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  223. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  224. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  225. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  226. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  227. package/dist/src/core/shaders/webgl/HolePunch.js +64 -0
  228. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  229. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  230. package/dist/src/core/shaders/webgl/LinearGradient.js +75 -0
  231. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  232. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  233. package/dist/src/core/shaders/webgl/RadialGradient.js +73 -0
  234. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  235. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  236. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  237. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  239. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +97 -0
  240. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  241. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  242. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +112 -0
  243. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  244. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  245. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  246. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  247. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  248. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  249. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  250. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  251. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  252. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  253. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  254. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  255. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  256. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  257. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  258. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  259. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  260. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  261. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  262. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  263. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  264. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  265. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  266. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +21 -0
  267. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  268. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  269. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  270. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  271. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  272. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  273. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  274. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  275. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  276. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  277. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  278. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  279. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  280. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  281. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  282. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  283. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +126 -0
  284. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  285. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  286. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +91 -0
  287. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +611 -0
  288. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  289. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  290. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  291. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  292. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  293. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  294. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  295. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  296. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  297. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  298. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  299. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  300. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  301. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  302. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  303. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  304. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  305. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  306. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  307. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  308. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  309. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  310. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  311. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  312. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  313. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  314. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
  315. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  316. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +370 -0
  317. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  318. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  319. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  320. package/dist/src/core/textures/ColorTexture.js +76 -0
  321. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  322. package/dist/src/core/textures/ImageTexture.d.ts +124 -0
  323. package/dist/src/core/textures/ImageTexture.js +220 -0
  324. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  325. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  326. package/dist/src/core/textures/NoiseTexture.js +68 -0
  327. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  328. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  329. package/dist/src/core/textures/RenderTexture.js +54 -0
  330. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  331. package/dist/src/core/textures/SubTexture.d.ts +63 -0
  332. package/dist/src/core/textures/SubTexture.js +135 -0
  333. package/dist/src/core/textures/SubTexture.js.map +1 -0
  334. package/dist/src/core/textures/Texture.d.ts +197 -0
  335. package/dist/src/core/textures/Texture.js +201 -0
  336. package/dist/src/core/textures/Texture.js.map +1 -0
  337. package/dist/src/core/utils.d.ts +22 -0
  338. package/dist/src/core/utils.js +173 -0
  339. package/dist/src/core/utils.js.map +1 -0
  340. package/dist/src/main-api/INode.d.ts +63 -0
  341. package/dist/src/main-api/INode.js +2 -0
  342. package/dist/src/main-api/INode.js.map +1 -0
  343. package/dist/src/main-api/Inspector.d.ts +21 -0
  344. package/dist/src/main-api/Inspector.js +376 -0
  345. package/dist/src/main-api/Inspector.js.map +1 -0
  346. package/dist/src/main-api/Renderer.d.ts +414 -0
  347. package/dist/src/main-api/Renderer.js +342 -0
  348. package/dist/src/main-api/Renderer.js.map +1 -0
  349. package/dist/src/main-api/utils.d.ts +2 -0
  350. package/dist/src/main-api/utils.js +34 -0
  351. package/dist/src/main-api/utils.js.map +1 -0
  352. package/dist/src/utils.d.ts +110 -0
  353. package/dist/src/utils.js +229 -0
  354. package/dist/src/utils.js.map +1 -0
  355. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  356. package/exports/canvas-shaders.ts +28 -0
  357. package/exports/canvas.ts +45 -0
  358. package/exports/index.ts +90 -0
  359. package/exports/inspector.ts +24 -0
  360. package/exports/utils.ts +44 -0
  361. package/exports/webgl-shaders.ts +28 -0
  362. package/exports/webgl.ts +50 -0
  363. package/package.json +93 -0
  364. package/scripts/please-use-pnpm.js +13 -0
  365. package/src/common/CommonTypes.ts +146 -0
  366. package/src/common/EventEmitter.ts +77 -0
  367. package/src/common/IAnimationController.ts +92 -0
  368. package/src/common/IEventEmitter.ts +28 -0
  369. package/src/core/CoreNode.test.ts +203 -0
  370. package/src/core/CoreNode.ts +2476 -0
  371. package/src/core/CoreShaderManager.ts +188 -0
  372. package/src/core/CoreTextNode.ts +448 -0
  373. package/src/core/CoreTextureManager.ts +597 -0
  374. package/src/core/Stage.ts +740 -0
  375. package/src/core/TextureMemoryManager.ts +395 -0
  376. package/src/core/animations/AnimationManager.ts +38 -0
  377. package/src/core/animations/CoreAnimation.ts +284 -0
  378. package/src/core/animations/CoreAnimationController.ts +157 -0
  379. package/src/core/lib/ContextSpy.ts +41 -0
  380. package/src/core/lib/ImageWorker.ts +279 -0
  381. package/src/core/lib/Matrix3d.ts +244 -0
  382. package/src/core/lib/RenderCoords.ts +86 -0
  383. package/src/core/lib/WebGlContextWrapper.ts +1324 -0
  384. package/src/core/lib/textureCompression.ts +152 -0
  385. package/src/core/lib/textureSvg.ts +78 -0
  386. package/src/core/lib/utils.ts +361 -0
  387. package/src/core/lib/validateImageBitmap.ts +76 -0
  388. package/src/core/platform.ts +64 -0
  389. package/src/core/renderers/CoreContextTexture.ts +43 -0
  390. package/src/core/renderers/CoreRenderOp.ts +22 -0
  391. package/src/core/renderers/CoreRenderer.ts +107 -0
  392. package/src/core/renderers/CoreShaderNode.ts +171 -0
  393. package/src/core/renderers/CoreShaderProgram.ts +23 -0
  394. package/src/core/renderers/canvas/CanvasRenderer.ts +299 -0
  395. package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -0
  396. package/src/core/renderers/canvas/CanvasTexture.ts +153 -0
  397. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +220 -0
  398. package/src/core/renderers/canvas/internal/ColorUtils.ts +85 -0
  399. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +86 -0
  400. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -0
  401. package/src/core/renderers/webgl/WebGlCtxTexture.ts +301 -0
  402. package/src/core/renderers/webgl/WebGlRenderOp.ts +145 -0
  403. package/src/core/renderers/webgl/WebGlRenderer.ts +715 -0
  404. package/src/core/renderers/webgl/WebGlShaderNode.ts +433 -0
  405. package/src/core/renderers/webgl/WebGlShaderProgram.ts +310 -0
  406. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
  407. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -0
  408. package/src/core/renderers/webgl/internal/ShaderUtils.ts +281 -0
  409. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
  410. package/src/core/shaders/canvas/Border.ts +78 -0
  411. package/src/core/shaders/canvas/HolePunch.ts +62 -0
  412. package/src/core/shaders/canvas/LinearGradient.ts +69 -0
  413. package/src/core/shaders/canvas/RadialGradient.ts +113 -0
  414. package/src/core/shaders/canvas/Rounded.ts +55 -0
  415. package/src/core/shaders/canvas/RoundedWithBorder.ts +68 -0
  416. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -0
  417. package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -0
  418. package/src/core/shaders/canvas/Shadow.ts +52 -0
  419. package/src/core/shaders/canvas/utils/render.ts +151 -0
  420. package/src/core/shaders/templates/BorderTemplate.ts +115 -0
  421. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -0
  422. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -0
  423. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -0
  424. package/src/core/shaders/templates/RoundedTemplate.ts +98 -0
  425. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -0
  426. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -0
  427. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -0
  428. package/src/core/shaders/templates/ShadowTemplate.ts +106 -0
  429. package/src/core/shaders/templates/shaderUtils.ts +47 -0
  430. package/src/core/shaders/webgl/Border.ts +96 -0
  431. package/src/core/shaders/webgl/Default.ts +89 -0
  432. package/src/core/shaders/webgl/DefaultBatched.ts +129 -0
  433. package/src/core/shaders/webgl/HolePunch.ts +78 -0
  434. package/src/core/shaders/webgl/LinearGradient.ts +81 -0
  435. package/src/core/shaders/webgl/RadialGradient.ts +84 -0
  436. package/src/core/shaders/webgl/Rounded.ts +117 -0
  437. package/src/core/shaders/webgl/RoundedWithBorder.ts +114 -0
  438. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +133 -0
  439. package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -0
  440. package/src/core/shaders/webgl/SdfShader.ts +137 -0
  441. package/src/core/shaders/webgl/Shadow.ts +115 -0
  442. package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
  443. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -0
  444. package/src/core/text-rendering/TrFontManager.ts +183 -0
  445. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -0
  446. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
  447. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -0
  448. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -0
  449. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -0
  450. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -0
  451. package/src/core/text-rendering/font-face-types/utils.ts +39 -0
  452. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -0
  453. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +815 -0
  454. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +841 -0
  455. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
  456. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
  457. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
  458. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
  459. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -0
  460. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
  461. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
  462. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +408 -0
  463. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -0
  464. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -0
  465. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
  466. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -0
  467. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
  468. package/src/core/text-rendering/renderers/TextRenderer.ts +550 -0
  469. package/src/core/textures/ColorTexture.ts +102 -0
  470. package/src/core/textures/ImageTexture.ts +376 -0
  471. package/src/core/textures/NoiseTexture.ts +104 -0
  472. package/src/core/textures/RenderTexture.ts +85 -0
  473. package/src/core/textures/SubTexture.ts +205 -0
  474. package/src/core/textures/Texture.ts +337 -0
  475. package/src/core/utils.ts +227 -0
  476. package/src/env.d.ts +7 -0
  477. package/src/main-api/INode.ts +100 -0
  478. package/src/main-api/Inspector.ts +522 -0
  479. package/src/main-api/Renderer.ts +649 -0
  480. package/src/main-api/utils.ts +45 -0
  481. package/src/utils.ts +267 -0
@@ -0,0 +1,1527 @@
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
+ import { assertTruthy, getNewId, isProductionEnvironment, mergeColorAlphaPremultiplied, } from '../utils.js';
20
+ import {} from './textures/Texture.js';
21
+ import { EventEmitter } from '../common/EventEmitter.js';
22
+ import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
23
+ import { Matrix3d } from './lib/Matrix3d.js';
24
+ import { RenderCoords } from './lib/RenderCoords.js';
25
+ import { CoreAnimation } from './animations/CoreAnimation.js';
26
+ import { CoreAnimationController } from './animations/CoreAnimationController.js';
27
+ export var CoreNodeRenderState;
28
+ (function (CoreNodeRenderState) {
29
+ CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
30
+ CoreNodeRenderState[CoreNodeRenderState["OutOfBounds"] = 2] = "OutOfBounds";
31
+ CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
32
+ CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
33
+ })(CoreNodeRenderState || (CoreNodeRenderState = {}));
34
+ const CoreNodeRenderStateMap = new Map();
35
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
36
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
37
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.InBounds, 'inBounds');
38
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.InViewport, 'inViewport');
39
+ export var UpdateType;
40
+ (function (UpdateType) {
41
+ /**
42
+ * Child updates
43
+ */
44
+ UpdateType[UpdateType["Children"] = 1] = "Children";
45
+ /**
46
+ * Scale/Rotate transform update
47
+ *
48
+ * @remarks
49
+ * CoreNode Properties Updated:
50
+ * - `scaleRotateTransform`
51
+ */
52
+ UpdateType[UpdateType["ScaleRotate"] = 2] = "ScaleRotate";
53
+ /**
54
+ * Translate transform update (x/y/width/height/pivot/mount)
55
+ *
56
+ * @remarks
57
+ * CoreNode Properties Updated:
58
+ * - `localTransform`
59
+ */
60
+ UpdateType[UpdateType["Local"] = 4] = "Local";
61
+ /**
62
+ * Global Transform update
63
+ *
64
+ * @remarks
65
+ * CoreNode Properties Updated:
66
+ * - `globalTransform`
67
+ * - `renderCoords`
68
+ * - `renderBound`
69
+ */
70
+ UpdateType[UpdateType["Global"] = 8] = "Global";
71
+ /**
72
+ * Clipping rect update
73
+ *
74
+ * @remarks
75
+ * CoreNode Properties Updated:
76
+ * - `clippingRect`
77
+ */
78
+ UpdateType[UpdateType["Clipping"] = 16] = "Clipping";
79
+ /**
80
+ * Calculated ZIndex update
81
+ *
82
+ * @remarks
83
+ * CoreNode Properties Updated:
84
+ * - `calcZIndex`
85
+ */
86
+ UpdateType[UpdateType["CalculatedZIndex"] = 32] = "CalculatedZIndex";
87
+ /**
88
+ * Z-Index Sorted Children update
89
+ *
90
+ * @remarks
91
+ * CoreNode Properties Updated:
92
+ * - `children` (sorts children by their `calcZIndex`)
93
+ */
94
+ UpdateType[UpdateType["ZIndexSortedChildren"] = 64] = "ZIndexSortedChildren";
95
+ /**
96
+ * Premultiplied Colors update
97
+ *
98
+ * @remarks
99
+ * CoreNode Properties Updated:
100
+ * - `premultipliedColorTl`
101
+ * - `premultipliedColorTr`
102
+ * - `premultipliedColorBl`
103
+ * - `premultipliedColorBr`
104
+ */
105
+ UpdateType[UpdateType["PremultipliedColors"] = 128] = "PremultipliedColors";
106
+ /**
107
+ * World Alpha update
108
+ *
109
+ * @remarks
110
+ * CoreNode Properties Updated:
111
+ * - `worldAlpha` = `parent.worldAlpha` * `alpha`
112
+ */
113
+ UpdateType[UpdateType["WorldAlpha"] = 256] = "WorldAlpha";
114
+ /**
115
+ * Render State update
116
+ *
117
+ * @remarks
118
+ * CoreNode Properties Updated:
119
+ * - `renderState`
120
+ */
121
+ UpdateType[UpdateType["RenderState"] = 512] = "RenderState";
122
+ /**
123
+ * Is Renderable update
124
+ *
125
+ * @remarks
126
+ * CoreNode Properties Updated:
127
+ * - `isRenderable`
128
+ */
129
+ UpdateType[UpdateType["IsRenderable"] = 1024] = "IsRenderable";
130
+ /**
131
+ * Render Texture update
132
+ */
133
+ UpdateType[UpdateType["RenderTexture"] = 2048] = "RenderTexture";
134
+ /**
135
+ * Track if parent has render texture
136
+ */
137
+ UpdateType[UpdateType["ParentRenderTexture"] = 4096] = "ParentRenderTexture";
138
+ /**
139
+ * Render Bounds update
140
+ */
141
+ UpdateType[UpdateType["RenderBounds"] = 8192] = "RenderBounds";
142
+ /**
143
+ * None
144
+ */
145
+ UpdateType[UpdateType["None"] = 0] = "None";
146
+ /**
147
+ * All
148
+ */
149
+ UpdateType[UpdateType["All"] = 14335] = "All";
150
+ /**
151
+ * RecalcUniforms
152
+ */
153
+ UpdateType[UpdateType["RecalcUniforms"] = 16384] = "RecalcUniforms";
154
+ })(UpdateType || (UpdateType = {}));
155
+ /**
156
+ * A visual Node in the Renderer scene graph.
157
+ *
158
+ * @remarks
159
+ * CoreNode is an internally used class that represents a Renderer Node in the
160
+ * scene graph. See INode.ts for the public APIs exposed to Renderer users
161
+ * that include generic types for Shaders.
162
+ */
163
+ export class CoreNode extends EventEmitter {
164
+ stage;
165
+ children = [];
166
+ _id = getNewId();
167
+ props;
168
+ updateType = UpdateType.All;
169
+ childUpdateType = UpdateType.None;
170
+ globalTransform;
171
+ scaleRotateTransform;
172
+ localTransform;
173
+ sceneGlobalTransform;
174
+ renderCoords;
175
+ sceneRenderCoords;
176
+ renderBound;
177
+ strictBound;
178
+ preloadBound;
179
+ clippingRect = {
180
+ x: 0,
181
+ y: 0,
182
+ width: 0,
183
+ height: 0,
184
+ valid: false,
185
+ };
186
+ isRenderable = false;
187
+ renderState = CoreNodeRenderState.Init;
188
+ worldAlpha = 1;
189
+ premultipliedColorTl = 0;
190
+ premultipliedColorTr = 0;
191
+ premultipliedColorBl = 0;
192
+ premultipliedColorBr = 0;
193
+ calcZIndex = 0;
194
+ hasRTTupdates = false;
195
+ parentHasRenderTexture = false;
196
+ rttParent = null;
197
+ constructor(stage, props) {
198
+ super();
199
+ this.stage = stage;
200
+ this.props = Object.assign({}, props, {
201
+ parent: null,
202
+ texture: null,
203
+ shader: null,
204
+ src: null,
205
+ rtt: false,
206
+ });
207
+ // Assign props to instance
208
+ this.parent = props.parent;
209
+ this.texture = props.texture;
210
+ this.shader = props.shader;
211
+ this.src = props.src;
212
+ this.rtt = props.rtt;
213
+ if (props.boundsMargin) {
214
+ this.boundsMargin = Array.isArray(props.boundsMargin)
215
+ ? props.boundsMargin
216
+ : [
217
+ props.boundsMargin,
218
+ props.boundsMargin,
219
+ props.boundsMargin,
220
+ props.boundsMargin,
221
+ ];
222
+ }
223
+ this.setUpdateType(UpdateType.ScaleRotate |
224
+ UpdateType.Local |
225
+ UpdateType.RenderBounds |
226
+ UpdateType.RenderState);
227
+ if (isProductionEnvironment() === false && props.preventCleanup === true) {
228
+ console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
229
+ }
230
+ // if the default texture isn't loaded yet, wait for it to load
231
+ // this only happens when the node is created before the stage is ready
232
+ if (this.stage.defaultTexture &&
233
+ this.stage.defaultTexture.state !== 'loaded') {
234
+ this.stage.defaultTexture.once('loaded', () => {
235
+ this.setUpdateType(UpdateType.IsRenderable);
236
+ });
237
+ }
238
+ }
239
+ //#region Textures
240
+ loadTexture() {
241
+ const { texture } = this.props;
242
+ assertTruthy(texture);
243
+ // If texture is already loaded / failed, trigger loaded event manually
244
+ // so that users get a consistent event experience.
245
+ // We do this in a microtask to allow listeners to be attached in the same
246
+ // synchronous task after calling loadTexture()
247
+ queueMicrotask(() => {
248
+ if (this.textureOptions.preload === true) {
249
+ this.stage.txManager.loadTexture(texture);
250
+ }
251
+ texture.preventCleanup =
252
+ this.props.textureOptions?.preventCleanup ?? false;
253
+ texture.on('loaded', this.onTextureLoaded);
254
+ texture.on('failed', this.onTextureFailed);
255
+ texture.on('freed', this.onTextureFreed);
256
+ // If the parent is a render texture, the initial texture status
257
+ // will be set to freed until the texture is processed by the
258
+ // Render RTT nodes. So we only need to listen fo changes and
259
+ // no need to check the texture.state until we restructure how
260
+ // textures are being processed.
261
+ if (this.parentHasRenderTexture) {
262
+ this.notifyParentRTTOfUpdate();
263
+ return;
264
+ }
265
+ if (texture.state === 'loaded') {
266
+ assertTruthy(texture.dimensions);
267
+ this.onTextureLoaded(texture, texture.dimensions);
268
+ }
269
+ else if (texture.state === 'failed') {
270
+ assertTruthy(texture.error);
271
+ this.onTextureFailed(texture, texture.error);
272
+ }
273
+ else if (texture.state === 'freed') {
274
+ this.onTextureFreed(texture);
275
+ }
276
+ });
277
+ }
278
+ unloadTexture() {
279
+ if (this.texture !== null) {
280
+ this.texture.off('loaded', this.onTextureLoaded);
281
+ this.texture.off('failed', this.onTextureFailed);
282
+ this.texture.off('freed', this.onTextureFreed);
283
+ this.texture.setRenderableOwner(this, false);
284
+ }
285
+ }
286
+ autosizeNode(dimensions) {
287
+ if (this.autosize) {
288
+ this.width = dimensions.width;
289
+ this.height = dimensions.height;
290
+ }
291
+ }
292
+ onTextureLoaded = (_, dimensions) => {
293
+ this.autosizeNode(dimensions);
294
+ this.setUpdateType(UpdateType.IsRenderable);
295
+ // Texture was loaded. In case the RAF loop has already stopped, we request
296
+ // a render to ensure the texture is rendered.
297
+ this.stage.requestRender();
298
+ // If parent has a render texture, flag that we need to update
299
+ if (this.parentHasRenderTexture) {
300
+ this.notifyParentRTTOfUpdate();
301
+ }
302
+ // ignore 1x1 pixel textures
303
+ if (dimensions.width > 1 && dimensions.height > 1) {
304
+ this.emit('loaded', {
305
+ type: 'texture',
306
+ dimensions,
307
+ });
308
+ }
309
+ // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
310
+ if (this.props.textureOptions?.resizeMode?.type === 'contain') {
311
+ this.setUpdateType(UpdateType.Local);
312
+ }
313
+ };
314
+ onTextureFailed = (_, error) => {
315
+ this.setUpdateType(UpdateType.IsRenderable);
316
+ // If parent has a render texture, flag that we need to update
317
+ if (this.parentHasRenderTexture) {
318
+ this.notifyParentRTTOfUpdate();
319
+ }
320
+ this.emit('failed', {
321
+ type: 'texture',
322
+ error,
323
+ });
324
+ };
325
+ onTextureFreed = () => {
326
+ this.setUpdateType(UpdateType.IsRenderable);
327
+ // If parent has a render texture, flag that we need to update
328
+ if (this.parentHasRenderTexture) {
329
+ this.notifyParentRTTOfUpdate();
330
+ }
331
+ this.emit('freed', {
332
+ type: 'texture',
333
+ });
334
+ };
335
+ //#endregion Textures
336
+ /**
337
+ * Change types types is used to determine the scope of the changes being applied
338
+ *
339
+ * @remarks
340
+ * See {@link UpdateType} for more information on each type
341
+ *
342
+ * @param type
343
+ */
344
+ setUpdateType(type) {
345
+ this.updateType |= type;
346
+ const parent = this.props.parent;
347
+ if (!parent)
348
+ return;
349
+ if ((parent.updateType & UpdateType.Children) === 0) {
350
+ // Inform the parent if it doesn’t already have a child update
351
+ parent.setUpdateType(UpdateType.Children);
352
+ }
353
+ }
354
+ sortChildren() {
355
+ this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
356
+ }
357
+ updateScaleRotateTransform() {
358
+ const { rotation, scaleX, scaleY } = this.props;
359
+ // optimize simple translation cases
360
+ if (rotation === 0 && scaleX === 1 && scaleY === 1) {
361
+ this.scaleRotateTransform = undefined;
362
+ return;
363
+ }
364
+ this.scaleRotateTransform = Matrix3d.rotate(rotation, this.scaleRotateTransform).scale(scaleX, scaleY);
365
+ }
366
+ updateLocalTransform() {
367
+ const { x, y, width, height } = this.props;
368
+ const mountTranslateX = this.props.mountX * width;
369
+ const mountTranslateY = this.props.mountY * height;
370
+ if (this.scaleRotateTransform) {
371
+ const pivotTranslateX = this.props.pivotX * width;
372
+ const pivotTranslateY = this.props.pivotY * height;
373
+ this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
374
+ .multiply(this.scaleRotateTransform)
375
+ .translate(-pivotTranslateX, -pivotTranslateY);
376
+ }
377
+ else {
378
+ this.localTransform = Matrix3d.translate(x - mountTranslateX, y - mountTranslateY, this.localTransform);
379
+ }
380
+ // Handle 'contain' resize mode
381
+ const texture = this.props.texture;
382
+ if (texture &&
383
+ texture.dimensions &&
384
+ this.props.textureOptions?.resizeMode?.type === 'contain') {
385
+ let resizeModeScaleX = 1;
386
+ let resizeModeScaleY = 1;
387
+ let extraX = 0;
388
+ let extraY = 0;
389
+ const { width: tw, height: th } = texture.dimensions;
390
+ const txAspectRatio = tw / th;
391
+ const nodeAspectRatio = width / height;
392
+ if (txAspectRatio > nodeAspectRatio) {
393
+ // Texture is wider than node
394
+ // Center the node vertically (shift down by extraY)
395
+ // Scale the node vertically to maintain original aspect ratio
396
+ const scaleX = width / tw;
397
+ const scaledTxHeight = th * scaleX;
398
+ extraY = (height - scaledTxHeight) / 2;
399
+ resizeModeScaleY = scaledTxHeight / height;
400
+ }
401
+ else {
402
+ // Texture is taller than node (or equal)
403
+ // Center the node horizontally (shift right by extraX)
404
+ // Scale the node horizontally to maintain original aspect ratio
405
+ const scaleY = height / th;
406
+ const scaledTxWidth = tw * scaleY;
407
+ extraX = (width - scaledTxWidth) / 2;
408
+ resizeModeScaleX = scaledTxWidth / width;
409
+ }
410
+ // Apply the extra translation and scale to the local transform
411
+ this.localTransform
412
+ .translate(extraX, extraY)
413
+ .scale(resizeModeScaleX, resizeModeScaleY);
414
+ }
415
+ this.setUpdateType(UpdateType.Global);
416
+ }
417
+ /**
418
+ * @todo: test for correct calculation flag
419
+ * @param delta
420
+ */
421
+ update(delta, parentClippingRect) {
422
+ if (this.updateType & UpdateType.ScaleRotate) {
423
+ this.updateScaleRotateTransform();
424
+ this.setUpdateType(UpdateType.Local);
425
+ }
426
+ if (this.updateType & UpdateType.Local) {
427
+ this.updateLocalTransform();
428
+ this.setUpdateType(UpdateType.Global);
429
+ }
430
+ const parent = this.props.parent;
431
+ let renderState = null;
432
+ // Handle specific RTT updates at this node level
433
+ if (this.updateType & UpdateType.RenderTexture && this.rtt) {
434
+ this.hasRTTupdates = true;
435
+ }
436
+ if (this.updateType & UpdateType.Global) {
437
+ assertTruthy(this.localTransform);
438
+ if (this.parentHasRenderTexture === true && parent?.rtt === true) {
439
+ // we are at the start of the RTT chain, so we need to reset the globalTransform
440
+ // for correct RTT rendering
441
+ this.globalTransform = Matrix3d.identity();
442
+ // Maintain a full scene global transform for bounds detection
443
+ this.sceneGlobalTransform = Matrix3d.copy(parent?.globalTransform || Matrix3d.identity()).multiply(this.localTransform);
444
+ }
445
+ else if (this.parentHasRenderTexture === true &&
446
+ parent?.rtt === false) {
447
+ // we're part of an RTT chain but our parent is not the main RTT node
448
+ // so we need to propogate the sceneGlobalTransform of the parent
449
+ // to maintain a full scene global transform for bounds detection
450
+ this.sceneGlobalTransform = Matrix3d.copy(parent?.sceneGlobalTransform || this.localTransform).multiply(this.localTransform);
451
+ this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
452
+ }
453
+ else {
454
+ this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
455
+ }
456
+ if (parent !== null) {
457
+ this.globalTransform.multiply(this.localTransform);
458
+ }
459
+ this.calculateRenderCoords();
460
+ this.updateBoundingRect();
461
+ this.setUpdateType(UpdateType.RenderState |
462
+ UpdateType.Children |
463
+ UpdateType.RecalcUniforms);
464
+ this.childUpdateType |= UpdateType.Global;
465
+ if (this.clipping === true) {
466
+ this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds);
467
+ this.childUpdateType |= UpdateType.RenderBounds;
468
+ }
469
+ }
470
+ if (this.updateType & UpdateType.RenderBounds) {
471
+ this.createRenderBounds();
472
+ this.setUpdateType(UpdateType.RenderState);
473
+ this.setUpdateType(UpdateType.Children);
474
+ this.childUpdateType |= UpdateType.RenderBounds;
475
+ }
476
+ if (this.updateType & UpdateType.RenderState) {
477
+ renderState = this.checkRenderBounds();
478
+ this.setUpdateType(UpdateType.IsRenderable);
479
+ // if we're not going out of bounds, update the render state
480
+ // this is done so the update loop can finish before we mark a node
481
+ // as out of bounds
482
+ if (renderState !== CoreNodeRenderState.OutOfBounds) {
483
+ this.updateRenderState(renderState);
484
+ }
485
+ }
486
+ if (this.updateType & UpdateType.WorldAlpha) {
487
+ if (parent) {
488
+ this.worldAlpha = parent.worldAlpha * this.props.alpha;
489
+ }
490
+ else {
491
+ this.worldAlpha = this.props.alpha;
492
+ }
493
+ this.setUpdateType(UpdateType.Children |
494
+ UpdateType.PremultipliedColors |
495
+ UpdateType.IsRenderable);
496
+ this.childUpdateType |= UpdateType.WorldAlpha;
497
+ }
498
+ if (this.updateType & UpdateType.IsRenderable) {
499
+ this.updateIsRenderable();
500
+ }
501
+ if (this.updateType & UpdateType.Clipping) {
502
+ this.calculateClippingRect(parentClippingRect);
503
+ this.setUpdateType(UpdateType.Children);
504
+ this.childUpdateType |= UpdateType.Clipping;
505
+ this.childUpdateType |= UpdateType.RenderBounds;
506
+ }
507
+ if (this.updateType & UpdateType.PremultipliedColors) {
508
+ this.premultipliedColorTl = mergeColorAlphaPremultiplied(this.props.colorTl, this.worldAlpha, true);
509
+ // If all the colors are the same just sent them all to the same value
510
+ if (this.props.colorTl === this.props.colorTr &&
511
+ this.props.colorBl === this.props.colorBr &&
512
+ this.props.colorTl === this.props.colorBl) {
513
+ this.premultipliedColorTr =
514
+ this.premultipliedColorBl =
515
+ this.premultipliedColorBr =
516
+ this.premultipliedColorTl;
517
+ }
518
+ else {
519
+ this.premultipliedColorTr = mergeColorAlphaPremultiplied(this.props.colorTr, this.worldAlpha, true);
520
+ this.premultipliedColorBl = mergeColorAlphaPremultiplied(this.props.colorBl, this.worldAlpha, true);
521
+ this.premultipliedColorBr = mergeColorAlphaPremultiplied(this.props.colorBr, this.worldAlpha, true);
522
+ }
523
+ }
524
+ // No need to update zIndex if there is no parent
525
+ if (parent !== null && this.updateType & UpdateType.CalculatedZIndex) {
526
+ this.calculateZIndex();
527
+ // Tell parent to re-sort children
528
+ parent.setUpdateType(UpdateType.ZIndexSortedChildren);
529
+ }
530
+ if (this.props.strictBounds === true &&
531
+ this.renderState === CoreNodeRenderState.OutOfBounds) {
532
+ this.updateType &= ~UpdateType.RenderBounds; // remove render bounds update
533
+ return;
534
+ }
535
+ if (this.shader?.update !== undefined &&
536
+ (this.updateType & UpdateType.Local ||
537
+ this.updateType & UpdateType.RecalcUniforms)) {
538
+ this.shader.update();
539
+ }
540
+ if (this.updateType & UpdateType.Children && this.children.length > 0) {
541
+ for (let i = 0, length = this.children.length; i < length; i++) {
542
+ const child = this.children[i];
543
+ child.setUpdateType(this.childUpdateType);
544
+ if (child.updateType === 0) {
545
+ continue;
546
+ }
547
+ let childClippingRect = this.clippingRect;
548
+ if (this.rtt === true) {
549
+ childClippingRect = {
550
+ x: 0,
551
+ y: 0,
552
+ width: 0,
553
+ height: 0,
554
+ valid: false,
555
+ };
556
+ }
557
+ child.update(delta, childClippingRect);
558
+ }
559
+ }
560
+ // If the node has an RTT parent and requires a texture re-render, inform the RTT parent
561
+ // if (this.parentHasRenderTexture && this.updateType & UpdateType.RenderTexture) {
562
+ // @TODO have a more scoped down updateType for RTT updates
563
+ if (this.parentHasRenderTexture && this.updateType > 0) {
564
+ this.notifyParentRTTOfUpdate();
565
+ }
566
+ // Sorting children MUST happen after children have been updated so
567
+ // that they have the oppotunity to update their calculated zIndex.
568
+ if (this.updateType & UpdateType.ZIndexSortedChildren) {
569
+ // reorder z-index
570
+ this.sortChildren();
571
+ }
572
+ // If we're out of bounds, apply the render state now
573
+ // this is done so nodes can finish their entire update loop before
574
+ // being marked as out of bounds
575
+ if (renderState === CoreNodeRenderState.OutOfBounds) {
576
+ this.updateRenderState(renderState);
577
+ this.updateIsRenderable();
578
+ if (this.rtt === true &&
579
+ renderState === CoreNodeRenderState.OutOfBounds) {
580
+ // notify children that we are going out of bounds
581
+ // we have to do this now before we stop processing the render tree
582
+ this.notifyChildrenRTTOfUpdate(renderState);
583
+ // this.childUpdateType |= UpdateType.RenderState;
584
+ }
585
+ }
586
+ // reset update type
587
+ this.updateType = 0;
588
+ this.childUpdateType = 0;
589
+ }
590
+ findParentRTTNode() {
591
+ let rttNode = this.parent;
592
+ while (rttNode && !rttNode.rtt) {
593
+ rttNode = rttNode.parent;
594
+ }
595
+ return rttNode;
596
+ }
597
+ getRTTParentRenderState() {
598
+ const rttNode = this.rttParent || this.findParentRTTNode();
599
+ if (!rttNode) {
600
+ return null;
601
+ }
602
+ return rttNode.renderState;
603
+ }
604
+ notifyChildrenRTTOfUpdate(renderState) {
605
+ for (const child of this.children) {
606
+ // force child to update render state
607
+ child.updateRenderState(renderState);
608
+ child.updateIsRenderable();
609
+ child.notifyChildrenRTTOfUpdate(renderState);
610
+ }
611
+ }
612
+ notifyParentRTTOfUpdate() {
613
+ if (this.parent === null) {
614
+ return;
615
+ }
616
+ const rttNode = this.rttParent || this.findParentRTTNode();
617
+ if (!rttNode) {
618
+ return;
619
+ }
620
+ // If an RTT node is found, mark it for re-rendering
621
+ rttNode.hasRTTupdates = true;
622
+ rttNode.setUpdateType(UpdateType.RenderTexture);
623
+ // if rttNode is nested, also make it update its RTT parent
624
+ if (rttNode.parentHasRenderTexture === true) {
625
+ rttNode.notifyParentRTTOfUpdate();
626
+ }
627
+ }
628
+ checkRenderBounds() {
629
+ assertTruthy(this.renderBound);
630
+ assertTruthy(this.strictBound);
631
+ assertTruthy(this.preloadBound);
632
+ if (boundInsideBound(this.renderBound, this.strictBound)) {
633
+ return CoreNodeRenderState.InViewport;
634
+ }
635
+ if (boundInsideBound(this.renderBound, this.preloadBound)) {
636
+ return CoreNodeRenderState.InBounds;
637
+ }
638
+ // check if we're larger then our parent, we're definitely in the viewport
639
+ if (boundLargeThanBound(this.renderBound, this.strictBound)) {
640
+ return CoreNodeRenderState.InViewport;
641
+ }
642
+ // check if we dont have dimensions, take our parent's render state
643
+ if (this.parent !== null &&
644
+ (this.props.width === 0 || this.props.height === 0)) {
645
+ return this.parent.renderState;
646
+ }
647
+ return CoreNodeRenderState.OutOfBounds;
648
+ }
649
+ updateBoundingRect() {
650
+ const transform = this.sceneGlobalTransform || this.globalTransform;
651
+ const renderCoords = this.sceneRenderCoords || this.renderCoords;
652
+ assertTruthy(transform);
653
+ assertTruthy(renderCoords);
654
+ const { tb, tc } = transform;
655
+ const { x1, y1, x3, y3 } = renderCoords;
656
+ if (tb === 0 || tc === 0) {
657
+ this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
658
+ }
659
+ else {
660
+ const { x2, x4, y2, y4 } = renderCoords;
661
+ this.renderBound = createBound(Math.min(x1, x2, x3, x4), Math.min(y1, y2, y3, y4), Math.max(x1, x2, x3, x4), Math.max(y1, y2, y3, y4), this.renderBound);
662
+ }
663
+ }
664
+ createRenderBounds() {
665
+ assertTruthy(this.stage);
666
+ if (this.parent !== null && this.parent.strictBound !== undefined) {
667
+ // we have a parent with a valid bound, copy it
668
+ const parentBound = this.parent.strictBound;
669
+ this.strictBound = createBound(parentBound.x1, parentBound.y1, parentBound.x2, parentBound.y2);
670
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
671
+ }
672
+ else {
673
+ // no parent or parent does not have a bound, take the stage boundaries
674
+ this.strictBound = this.stage.strictBound;
675
+ this.preloadBound = this.stage.preloadBound;
676
+ }
677
+ // if clipping is disabled, we're done
678
+ if (this.props.clipping === false) {
679
+ return;
680
+ }
681
+ // only create local clipping bounds if node itself is in bounds
682
+ // this can only be done if we have a render bound already
683
+ if (this.renderBound === undefined) {
684
+ return;
685
+ }
686
+ // if we're out of bounds, we're done
687
+ if (boundInsideBound(this.renderBound, this.strictBound) === false) {
688
+ return;
689
+ }
690
+ // clipping is enabled and we are in bounds create our own bounds
691
+ const { x, y, width, height } = this.props;
692
+ // Pick the global transform if available, otherwise use the local transform
693
+ // global transform is only available if the node in an RTT chain
694
+ const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
695
+ const _x = tx ?? x;
696
+ const _y = ty ?? y;
697
+ this.strictBound = createBound(_x, _y, _x + width, _y + height, this.strictBound);
698
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
699
+ }
700
+ updateRenderState(renderState) {
701
+ if (renderState === this.renderState) {
702
+ return;
703
+ }
704
+ const previous = this.renderState;
705
+ this.renderState = renderState;
706
+ const event = CoreNodeRenderStateMap.get(renderState);
707
+ assertTruthy(event);
708
+ this.emit(event, {
709
+ previous,
710
+ current: renderState,
711
+ });
712
+ }
713
+ /**
714
+ * Updates the `isRenderable` property based on various conditions.
715
+ */
716
+ updateIsRenderable() {
717
+ let newIsRenderable = false;
718
+ let needsTextureOwnership = false;
719
+ // If the node is out of bounds or has an alpha of 0, it is not renderable
720
+ if (this.checkBasicRenderability() === false) {
721
+ this.updateTextureOwnership(false);
722
+ this.setRenderable(false);
723
+ return;
724
+ }
725
+ if (this.texture !== null) {
726
+ needsTextureOwnership = true;
727
+ // we're only renderable if the texture state is loaded
728
+ newIsRenderable = this.texture.state === 'loaded';
729
+ }
730
+ else if ((this.hasShader() || this.hasColorProperties() === true) &&
731
+ this.hasDimensions() === true) {
732
+ // This mean we have dimensions and a color set, so we can render a ColorTexture
733
+ if (this.stage.defaultTexture &&
734
+ this.stage.defaultTexture.state === 'loaded') {
735
+ newIsRenderable = true;
736
+ }
737
+ }
738
+ this.updateTextureOwnership(needsTextureOwnership);
739
+ this.setRenderable(newIsRenderable);
740
+ }
741
+ /**
742
+ * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
743
+ */
744
+ checkBasicRenderability() {
745
+ if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
746
+ return false;
747
+ }
748
+ else {
749
+ return true;
750
+ }
751
+ }
752
+ /**
753
+ * Sets the renderable state and triggers changes if necessary.
754
+ * @param isRenderable - The new renderable state
755
+ */
756
+ setRenderable(isRenderable) {
757
+ this.isRenderable = isRenderable;
758
+ }
759
+ /**
760
+ * Changes the renderable state of the node.
761
+ */
762
+ updateTextureOwnership(isRenderable) {
763
+ this.texture?.setRenderableOwner(this, isRenderable);
764
+ }
765
+ /**
766
+ * Checks if the node is out of the viewport bounds.
767
+ */
768
+ isOutOfBounds() {
769
+ return this.renderState <= CoreNodeRenderState.OutOfBounds;
770
+ }
771
+ /**
772
+ * Checks if the node has dimensions (width/height)
773
+ */
774
+ hasDimensions() {
775
+ return this.props.width !== 0 && this.props.height !== 0;
776
+ }
777
+ /**
778
+ * Checks if the node has any color properties set.
779
+ */
780
+ hasColorProperties() {
781
+ return (this.props.color !== 0 ||
782
+ this.props.colorTop !== 0 ||
783
+ this.props.colorBottom !== 0 ||
784
+ this.props.colorLeft !== 0 ||
785
+ this.props.colorRight !== 0 ||
786
+ this.props.colorTl !== 0 ||
787
+ this.props.colorTr !== 0 ||
788
+ this.props.colorBl !== 0 ||
789
+ this.props.colorBr !== 0);
790
+ }
791
+ hasShader() {
792
+ return this.props.shader !== null;
793
+ }
794
+ calculateRenderCoords() {
795
+ const { width, height } = this;
796
+ const { tx, ty, ta, tb, tc, td } = this.globalTransform;
797
+ if (tb === 0 && tc === 0) {
798
+ const minX = tx;
799
+ const maxX = tx + width * ta;
800
+ const minY = ty;
801
+ const maxY = ty + height * td;
802
+ this.renderCoords = RenderCoords.translate(
803
+ //top-left
804
+ minX, minY,
805
+ //top-right
806
+ maxX, minY,
807
+ //bottom-right
808
+ maxX, maxY,
809
+ //bottom-left
810
+ minX, maxY, this.renderCoords);
811
+ }
812
+ else {
813
+ this.renderCoords = RenderCoords.translate(
814
+ //top-left
815
+ tx, ty,
816
+ //top-right
817
+ tx + width * ta, ty + width * tc,
818
+ //bottom-right
819
+ tx + width * ta + height * tb, ty + width * tc + height * td,
820
+ //bottom-left
821
+ tx + height * tb, ty + height * td, this.renderCoords);
822
+ }
823
+ if (this.sceneGlobalTransform === undefined) {
824
+ return;
825
+ }
826
+ const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
827
+ if (stb === 0 && stc === 0) {
828
+ const minX = stx;
829
+ const maxX = stx + width * sta;
830
+ const minY = sty;
831
+ const maxY = sty + height * std;
832
+ this.sceneRenderCoords = RenderCoords.translate(
833
+ //top-left
834
+ minX, minY,
835
+ //top-right
836
+ maxX, minY,
837
+ //bottom-right
838
+ maxX, maxY,
839
+ //bottom-left
840
+ minX, maxY, this.sceneRenderCoords);
841
+ }
842
+ else {
843
+ this.sceneRenderCoords = RenderCoords.translate(
844
+ //top-left
845
+ stx, sty,
846
+ //top-right
847
+ stx + width * sta, sty + width * stc,
848
+ //bottom-right
849
+ stx + width * sta + height * stb, sty + width * stc + height * std,
850
+ //bottom-left
851
+ stx + height * stb, sty + height * std, this.sceneRenderCoords);
852
+ }
853
+ }
854
+ /**
855
+ * This function calculates the clipping rectangle for a node.
856
+ *
857
+ * The function then checks if the node is rotated. If the node requires clipping and is not rotated, a new clipping rectangle is created based on the node's global transform and dimensions.
858
+ * If a parent clipping rectangle exists, it is intersected with the node's clipping rectangle (if it exists), or replaces the node's clipping rectangle.
859
+ *
860
+ * Finally, the node's parentClippingRect and clippingRect properties are updated.
861
+ */
862
+ calculateClippingRect(parentClippingRect) {
863
+ assertTruthy(this.globalTransform);
864
+ const { clippingRect, props, globalTransform: gt } = this;
865
+ const { clipping } = props;
866
+ const isRotated = gt.tb !== 0 || gt.tc !== 0;
867
+ if (clipping === true && isRotated === false) {
868
+ clippingRect.x = gt.tx;
869
+ clippingRect.y = gt.ty;
870
+ clippingRect.width = this.width * gt.ta;
871
+ clippingRect.height = this.height * gt.td;
872
+ clippingRect.valid = true;
873
+ }
874
+ else {
875
+ clippingRect.valid = false;
876
+ }
877
+ if (parentClippingRect.valid === true && clippingRect.valid === true) {
878
+ // Intersect parent clipping rect with node clipping rect
879
+ intersectRect(parentClippingRect, clippingRect, clippingRect);
880
+ }
881
+ else if (parentClippingRect.valid === true) {
882
+ // Copy parent clipping rect
883
+ copyRect(parentClippingRect, clippingRect);
884
+ clippingRect.valid = true;
885
+ }
886
+ }
887
+ calculateZIndex() {
888
+ const props = this.props;
889
+ const z = props.zIndex || 0;
890
+ const p = props.parent?.zIndex || 0;
891
+ let zIndex = z;
892
+ if (props.parent?.zIndexLocked) {
893
+ zIndex = z < p ? z : p;
894
+ }
895
+ this.calcZIndex = zIndex;
896
+ }
897
+ /**
898
+ * Destroy the node and cleanup all resources
899
+ */
900
+ destroy() {
901
+ this.unloadTexture();
902
+ this.clippingRect.valid = false;
903
+ this.isRenderable = false;
904
+ this.renderCoords = undefined;
905
+ this.renderBound = undefined;
906
+ this.strictBound = undefined;
907
+ this.preloadBound = undefined;
908
+ this.globalTransform = undefined;
909
+ this.scaleRotateTransform = undefined;
910
+ this.localTransform = undefined;
911
+ this.props.texture = null;
912
+ this.props.shader = this.stage.defShaderNode;
913
+ while (this.children.length > 0) {
914
+ this.children[0]?.destroy();
915
+ }
916
+ // This very action will also remove the node from the parent's children array
917
+ this.parent = null;
918
+ if (this.rtt) {
919
+ this.stage.renderer.removeRTTNode(this);
920
+ }
921
+ this.removeAllListeners();
922
+ }
923
+ renderQuads(renderer) {
924
+ // Prevent quad rendering if parent has a render texture
925
+ // and renderer is not currently rendering to a texture
926
+ if (this.parentHasRenderTexture) {
927
+ if (!renderer.renderToTextureActive) {
928
+ return;
929
+ }
930
+ // Prevent quad rendering if parent render texture is not the active render texture
931
+ if (this.parentRenderTexture !== renderer.activeRttNode) {
932
+ return;
933
+ }
934
+ }
935
+ assertTruthy(this.globalTransform);
936
+ assertTruthy(this.renderCoords);
937
+ // add to list of renderables to be sorted before rendering
938
+ renderer.addQuad({
939
+ width: this.props.width,
940
+ height: this.props.height,
941
+ colorTl: this.premultipliedColorTl,
942
+ colorTr: this.premultipliedColorTr,
943
+ colorBl: this.premultipliedColorBl,
944
+ colorBr: this.premultipliedColorBr,
945
+ // if we do not have a texture, use the default texture
946
+ // this assumes any renderable node is either a distinct texture or a ColorTexture
947
+ texture: this.texture || this.stage.defaultTexture,
948
+ textureOptions: this.textureOptions,
949
+ zIndex: this.zIndex,
950
+ shader: this.props.shader,
951
+ alpha: this.worldAlpha,
952
+ clippingRect: this.clippingRect,
953
+ tx: this.globalTransform.tx,
954
+ ty: this.globalTransform.ty,
955
+ ta: this.globalTransform.ta,
956
+ tb: this.globalTransform.tb,
957
+ tc: this.globalTransform.tc,
958
+ td: this.globalTransform.td,
959
+ renderCoords: this.renderCoords,
960
+ rtt: this.rtt,
961
+ parentHasRenderTexture: this.parentHasRenderTexture,
962
+ framebufferDimensions: this.framebufferDimensions,
963
+ });
964
+ }
965
+ //#region Properties
966
+ get id() {
967
+ return this._id;
968
+ }
969
+ get data() {
970
+ return this.props.data;
971
+ }
972
+ set data(d) {
973
+ this.props.data = d;
974
+ }
975
+ get x() {
976
+ return this.props.x;
977
+ }
978
+ set x(value) {
979
+ if (this.props.x !== value) {
980
+ this.props.x = value;
981
+ this.setUpdateType(UpdateType.Local);
982
+ }
983
+ }
984
+ get absX() {
985
+ return (this.props.x +
986
+ -this.props.width * this.props.mountX +
987
+ (this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
988
+ }
989
+ get absY() {
990
+ return (this.props.y +
991
+ -this.props.height * this.props.mountY +
992
+ (this.props.parent?.absY ?? 0));
993
+ }
994
+ get y() {
995
+ return this.props.y;
996
+ }
997
+ set y(value) {
998
+ if (this.props.y !== value) {
999
+ this.props.y = value;
1000
+ this.setUpdateType(UpdateType.Local);
1001
+ }
1002
+ }
1003
+ get width() {
1004
+ return this.props.width;
1005
+ }
1006
+ set width(value) {
1007
+ if (this.props.width !== value) {
1008
+ this.props.width = value;
1009
+ this.setUpdateType(UpdateType.Local);
1010
+ if (this.props.rtt) {
1011
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1012
+ width: this.width,
1013
+ height: this.height,
1014
+ });
1015
+ this.setUpdateType(UpdateType.RenderTexture);
1016
+ }
1017
+ }
1018
+ }
1019
+ get height() {
1020
+ return this.props.height;
1021
+ }
1022
+ set height(value) {
1023
+ if (this.props.height !== value) {
1024
+ this.props.height = value;
1025
+ this.setUpdateType(UpdateType.Local);
1026
+ if (this.props.rtt) {
1027
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1028
+ width: this.width,
1029
+ height: this.height,
1030
+ });
1031
+ this.setUpdateType(UpdateType.RenderTexture);
1032
+ }
1033
+ }
1034
+ }
1035
+ get scale() {
1036
+ // The CoreNode `scale` property is only used by Animations.
1037
+ // Unlike INode, `null` should never be possibility for Animations.
1038
+ return this.scaleX;
1039
+ }
1040
+ set scale(value) {
1041
+ // The CoreNode `scale` property is only used by Animations.
1042
+ // Unlike INode, `null` should never be possibility for Animations.
1043
+ this.scaleX = value;
1044
+ this.scaleY = value;
1045
+ }
1046
+ get scaleX() {
1047
+ return this.props.scaleX;
1048
+ }
1049
+ set scaleX(value) {
1050
+ if (this.props.scaleX !== value) {
1051
+ this.props.scaleX = value;
1052
+ this.setUpdateType(UpdateType.ScaleRotate);
1053
+ }
1054
+ }
1055
+ get scaleY() {
1056
+ return this.props.scaleY;
1057
+ }
1058
+ set scaleY(value) {
1059
+ if (this.props.scaleY !== value) {
1060
+ this.props.scaleY = value;
1061
+ this.setUpdateType(UpdateType.ScaleRotate);
1062
+ }
1063
+ }
1064
+ get mount() {
1065
+ return this.props.mount;
1066
+ }
1067
+ set mount(value) {
1068
+ if (this.props.mountX !== value || this.props.mountY !== value) {
1069
+ this.props.mountX = value;
1070
+ this.props.mountY = value;
1071
+ this.props.mount = value;
1072
+ this.setUpdateType(UpdateType.Local);
1073
+ }
1074
+ }
1075
+ get mountX() {
1076
+ return this.props.mountX;
1077
+ }
1078
+ set mountX(value) {
1079
+ if (this.props.mountX !== value) {
1080
+ this.props.mountX = value;
1081
+ this.setUpdateType(UpdateType.Local);
1082
+ }
1083
+ }
1084
+ get mountY() {
1085
+ return this.props.mountY;
1086
+ }
1087
+ set mountY(value) {
1088
+ if (this.props.mountY !== value) {
1089
+ this.props.mountY = value;
1090
+ this.setUpdateType(UpdateType.Local);
1091
+ }
1092
+ }
1093
+ get pivot() {
1094
+ return this.props.pivot;
1095
+ }
1096
+ set pivot(value) {
1097
+ if (this.props.pivotX !== value || this.props.pivotY !== value) {
1098
+ this.props.pivotX = value;
1099
+ this.props.pivotY = value;
1100
+ this.props.pivot = value;
1101
+ this.setUpdateType(UpdateType.Local);
1102
+ }
1103
+ }
1104
+ get pivotX() {
1105
+ return this.props.pivotX;
1106
+ }
1107
+ set pivotX(value) {
1108
+ if (this.props.pivotX !== value) {
1109
+ this.props.pivotX = value;
1110
+ this.setUpdateType(UpdateType.Local);
1111
+ }
1112
+ }
1113
+ get pivotY() {
1114
+ return this.props.pivotY;
1115
+ }
1116
+ set pivotY(value) {
1117
+ if (this.props.pivotY !== value) {
1118
+ this.props.pivotY = value;
1119
+ this.setUpdateType(UpdateType.Local);
1120
+ }
1121
+ }
1122
+ get rotation() {
1123
+ return this.props.rotation;
1124
+ }
1125
+ set rotation(value) {
1126
+ if (this.props.rotation !== value) {
1127
+ this.props.rotation = value;
1128
+ this.setUpdateType(UpdateType.ScaleRotate);
1129
+ }
1130
+ }
1131
+ get alpha() {
1132
+ return this.props.alpha;
1133
+ }
1134
+ set alpha(value) {
1135
+ this.props.alpha = value;
1136
+ this.setUpdateType(UpdateType.PremultipliedColors |
1137
+ UpdateType.WorldAlpha |
1138
+ UpdateType.Children |
1139
+ UpdateType.IsRenderable);
1140
+ this.childUpdateType |= UpdateType.WorldAlpha;
1141
+ }
1142
+ get autosize() {
1143
+ return this.props.autosize;
1144
+ }
1145
+ set autosize(value) {
1146
+ this.props.autosize = value;
1147
+ }
1148
+ get boundsMargin() {
1149
+ return (this.props.boundsMargin ??
1150
+ this.parent?.boundsMargin ??
1151
+ this.stage.boundsMargin);
1152
+ }
1153
+ set boundsMargin(value) {
1154
+ if (value === this.props.boundsMargin) {
1155
+ return;
1156
+ }
1157
+ if (value === null) {
1158
+ this.props.boundsMargin = value;
1159
+ }
1160
+ else {
1161
+ const bm = Array.isArray(value)
1162
+ ? value
1163
+ : [value, value, value, value];
1164
+ this.props.boundsMargin = bm;
1165
+ }
1166
+ this.setUpdateType(UpdateType.RenderBounds);
1167
+ }
1168
+ get clipping() {
1169
+ return this.props.clipping;
1170
+ }
1171
+ set clipping(value) {
1172
+ this.props.clipping = value;
1173
+ this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds | UpdateType.Children);
1174
+ this.childUpdateType |= UpdateType.Global | UpdateType.Clipping;
1175
+ }
1176
+ get color() {
1177
+ return this.props.color;
1178
+ }
1179
+ set color(value) {
1180
+ this.colorTop = value;
1181
+ this.colorBottom = value;
1182
+ this.colorLeft = value;
1183
+ this.colorRight = value;
1184
+ this.props.color = value;
1185
+ this.setUpdateType(UpdateType.PremultipliedColors);
1186
+ }
1187
+ get colorTop() {
1188
+ return this.props.colorTop;
1189
+ }
1190
+ set colorTop(value) {
1191
+ if (this.props.colorTl !== value || this.props.colorTr !== value) {
1192
+ this.colorTl = value;
1193
+ this.colorTr = value;
1194
+ }
1195
+ this.props.colorTop = value;
1196
+ this.setUpdateType(UpdateType.PremultipliedColors);
1197
+ }
1198
+ get colorBottom() {
1199
+ return this.props.colorBottom;
1200
+ }
1201
+ set colorBottom(value) {
1202
+ if (this.props.colorBl !== value || this.props.colorBr !== value) {
1203
+ this.colorBl = value;
1204
+ this.colorBr = value;
1205
+ }
1206
+ this.props.colorBottom = value;
1207
+ this.setUpdateType(UpdateType.PremultipliedColors);
1208
+ }
1209
+ get colorLeft() {
1210
+ return this.props.colorLeft;
1211
+ }
1212
+ set colorLeft(value) {
1213
+ if (this.props.colorTl !== value || this.props.colorBl !== value) {
1214
+ this.colorTl = value;
1215
+ this.colorBl = value;
1216
+ }
1217
+ this.props.colorLeft = value;
1218
+ this.setUpdateType(UpdateType.PremultipliedColors);
1219
+ }
1220
+ get colorRight() {
1221
+ return this.props.colorRight;
1222
+ }
1223
+ set colorRight(value) {
1224
+ if (this.props.colorTr !== value || this.props.colorBr !== value) {
1225
+ this.colorTr = value;
1226
+ this.colorBr = value;
1227
+ }
1228
+ this.props.colorRight = value;
1229
+ this.setUpdateType(UpdateType.PremultipliedColors);
1230
+ }
1231
+ get colorTl() {
1232
+ return this.props.colorTl;
1233
+ }
1234
+ set colorTl(value) {
1235
+ this.props.colorTl = value;
1236
+ this.setUpdateType(UpdateType.PremultipliedColors);
1237
+ }
1238
+ get colorTr() {
1239
+ return this.props.colorTr;
1240
+ }
1241
+ set colorTr(value) {
1242
+ this.props.colorTr = value;
1243
+ this.setUpdateType(UpdateType.PremultipliedColors);
1244
+ }
1245
+ get colorBl() {
1246
+ return this.props.colorBl;
1247
+ }
1248
+ set colorBl(value) {
1249
+ this.props.colorBl = value;
1250
+ this.setUpdateType(UpdateType.PremultipliedColors);
1251
+ }
1252
+ get colorBr() {
1253
+ return this.props.colorBr;
1254
+ }
1255
+ set colorBr(value) {
1256
+ this.props.colorBr = value;
1257
+ this.setUpdateType(UpdateType.PremultipliedColors);
1258
+ }
1259
+ // we're only interested in parent zIndex to test
1260
+ // if we should use node zIndex is higher then parent zIndex
1261
+ get zIndexLocked() {
1262
+ return this.props.zIndexLocked || 0;
1263
+ }
1264
+ set zIndexLocked(value) {
1265
+ this.props.zIndexLocked = value;
1266
+ this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1267
+ for (let i = 0, length = this.children.length; i < length; i++) {
1268
+ this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1269
+ }
1270
+ }
1271
+ get zIndex() {
1272
+ return this.props.zIndex;
1273
+ }
1274
+ set zIndex(value) {
1275
+ this.props.zIndex = value;
1276
+ this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1277
+ for (let i = 0, length = this.children.length; i < length; i++) {
1278
+ this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1279
+ }
1280
+ }
1281
+ get parent() {
1282
+ return this.props.parent;
1283
+ }
1284
+ set parent(newParent) {
1285
+ const oldParent = this.props.parent;
1286
+ if (oldParent === newParent) {
1287
+ return;
1288
+ }
1289
+ this.props.parent = newParent;
1290
+ if (oldParent) {
1291
+ const index = oldParent.children.indexOf(this);
1292
+ assertTruthy(index !== -1, "CoreNode.parent: Node not found in old parent's children!");
1293
+ oldParent.children.splice(index, 1);
1294
+ oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1295
+ }
1296
+ if (newParent) {
1297
+ newParent.children.push(this);
1298
+ // Since this node has a new parent, to be safe, have it do a full update.
1299
+ this.setUpdateType(UpdateType.All);
1300
+ // Tell parent that it's children need to be updated and sorted.
1301
+ newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1302
+ // If the new parent has an RTT enabled, apply RTT inheritance
1303
+ if (newParent.rtt || newParent.parentHasRenderTexture) {
1304
+ this.applyRTTInheritance(newParent);
1305
+ }
1306
+ }
1307
+ this.updateScaleRotateTransform();
1308
+ // fetch render bounds from parent
1309
+ this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1310
+ }
1311
+ get preventCleanup() {
1312
+ return this.props.textureOptions.preventCleanup || false;
1313
+ }
1314
+ set preventCleanup(value) {
1315
+ if (isProductionEnvironment() === false) {
1316
+ console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
1317
+ }
1318
+ this.props.textureOptions.preventCleanup = value;
1319
+ }
1320
+ get rtt() {
1321
+ return this.props.rtt;
1322
+ }
1323
+ set rtt(value) {
1324
+ if (this.props.rtt === value) {
1325
+ return;
1326
+ }
1327
+ this.props.rtt = value;
1328
+ if (value === true) {
1329
+ this.initRenderTexture();
1330
+ this.markChildrenWithRTT();
1331
+ }
1332
+ else {
1333
+ this.cleanupRenderTexture();
1334
+ }
1335
+ this.setUpdateType(UpdateType.RenderTexture);
1336
+ if (this.parentHasRenderTexture === true) {
1337
+ this.notifyParentRTTOfUpdate();
1338
+ }
1339
+ }
1340
+ initRenderTexture() {
1341
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1342
+ width: this.width,
1343
+ height: this.height,
1344
+ });
1345
+ this.stage.renderer.renderToTexture(this);
1346
+ }
1347
+ cleanupRenderTexture() {
1348
+ this.unloadTexture();
1349
+ this.clearRTTInheritance();
1350
+ this.hasRTTupdates = false;
1351
+ this.texture = null;
1352
+ }
1353
+ markChildrenWithRTT(node = null) {
1354
+ const parent = node || this;
1355
+ for (const child of parent.children) {
1356
+ child.setUpdateType(UpdateType.All);
1357
+ child.parentHasRenderTexture = true;
1358
+ child.markChildrenWithRTT();
1359
+ }
1360
+ }
1361
+ // Apply RTT inheritance when a node has an RTT-enabled parent
1362
+ applyRTTInheritance(parent) {
1363
+ if (parent.rtt) {
1364
+ // Only the RTT node should be added to `renderToTexture`
1365
+ parent.setUpdateType(UpdateType.RenderTexture);
1366
+ }
1367
+ // Propagate `parentHasRenderTexture` downwards
1368
+ this.markChildrenWithRTT(parent);
1369
+ }
1370
+ // Clear RTT inheritance when detaching from an RTT chain
1371
+ clearRTTInheritance() {
1372
+ // if this node is RTT itself stop the propagation important for nested RTT nodes
1373
+ // for the initial RTT node this is already handled in `set rtt`
1374
+ if (this.rtt) {
1375
+ return;
1376
+ }
1377
+ for (const child of this.children) {
1378
+ // force child to update everything as the RTT inheritance has changed
1379
+ child.parentHasRenderTexture = false;
1380
+ child.rttParent = null;
1381
+ child.setUpdateType(UpdateType.All);
1382
+ child.clearRTTInheritance();
1383
+ }
1384
+ }
1385
+ get shader() {
1386
+ return this.props.shader;
1387
+ }
1388
+ set shader(shader) {
1389
+ if (this.props.shader === shader) {
1390
+ return;
1391
+ }
1392
+ if (shader === null) {
1393
+ this.props.shader = this.stage.defShaderNode;
1394
+ this.setUpdateType(UpdateType.IsRenderable);
1395
+ return;
1396
+ }
1397
+ shader.attachNode(this);
1398
+ this.props.shader = shader;
1399
+ this.setUpdateType(UpdateType.IsRenderable);
1400
+ }
1401
+ get src() {
1402
+ return this.props.src;
1403
+ }
1404
+ set src(imageUrl) {
1405
+ if (this.props.src === imageUrl) {
1406
+ return;
1407
+ }
1408
+ this.props.src = imageUrl;
1409
+ if (!imageUrl) {
1410
+ this.texture = null;
1411
+ return;
1412
+ }
1413
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
1414
+ src: imageUrl,
1415
+ width: this.props.width,
1416
+ height: this.props.height,
1417
+ type: this.props.imageType,
1418
+ sx: this.props.srcX,
1419
+ sy: this.props.srcY,
1420
+ sw: this.props.srcWidth,
1421
+ sh: this.props.srcHeight,
1422
+ });
1423
+ }
1424
+ set imageType(type) {
1425
+ if (this.props.imageType === type) {
1426
+ return;
1427
+ }
1428
+ this.props.imageType = type;
1429
+ }
1430
+ get imageType() {
1431
+ return this.props.imageType || null;
1432
+ }
1433
+ get srcHeight() {
1434
+ return this.props.srcHeight;
1435
+ }
1436
+ set srcHeight(value) {
1437
+ this.props.srcHeight = value;
1438
+ }
1439
+ get srcWidth() {
1440
+ return this.props.srcWidth;
1441
+ }
1442
+ set srcWidth(value) {
1443
+ this.props.srcWidth = value;
1444
+ }
1445
+ get srcX() {
1446
+ return this.props.srcX;
1447
+ }
1448
+ set srcX(value) {
1449
+ this.props.srcX = value;
1450
+ }
1451
+ get srcY() {
1452
+ return this.props.srcY;
1453
+ }
1454
+ set srcY(value) {
1455
+ this.props.srcY = value;
1456
+ }
1457
+ /**
1458
+ * Returns the framebuffer dimensions of the node.
1459
+ * If the node has a render texture, the dimensions are the same as the node's dimensions.
1460
+ * If the node does not have a render texture, the dimensions are inherited from the parent.
1461
+ * If the node parent has a render texture and the node is a render texture, the nodes dimensions are used.
1462
+ */
1463
+ get framebufferDimensions() {
1464
+ if (this.parentHasRenderTexture && !this.rtt && this.parent) {
1465
+ return this.parent.framebufferDimensions;
1466
+ }
1467
+ return { width: this.width, height: this.height };
1468
+ }
1469
+ /**
1470
+ * Returns the parent render texture node if it exists.
1471
+ */
1472
+ get parentRenderTexture() {
1473
+ let parent = this.parent;
1474
+ while (parent) {
1475
+ if (parent.rtt) {
1476
+ return parent;
1477
+ }
1478
+ parent = parent.parent;
1479
+ }
1480
+ return null;
1481
+ }
1482
+ get texture() {
1483
+ return this.props.texture;
1484
+ }
1485
+ set texture(value) {
1486
+ if (this.props.texture === value) {
1487
+ return;
1488
+ }
1489
+ const oldTexture = this.props.texture;
1490
+ if (oldTexture) {
1491
+ oldTexture.setRenderableOwner(this, false);
1492
+ this.unloadTexture();
1493
+ }
1494
+ this.props.texture = value;
1495
+ if (value !== null) {
1496
+ value.setRenderableOwner(this, this.isRenderable);
1497
+ this.loadTexture();
1498
+ }
1499
+ this.setUpdateType(UpdateType.IsRenderable);
1500
+ }
1501
+ set textureOptions(value) {
1502
+ this.props.textureOptions = value;
1503
+ }
1504
+ get textureOptions() {
1505
+ return this.props.textureOptions;
1506
+ }
1507
+ get strictBounds() {
1508
+ return this.props.strictBounds;
1509
+ }
1510
+ set strictBounds(v) {
1511
+ if (v === this.props.strictBounds) {
1512
+ return;
1513
+ }
1514
+ this.props.strictBounds = v;
1515
+ this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1516
+ this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
1517
+ }
1518
+ animate(props, settings) {
1519
+ const animation = new CoreAnimation(this, props, settings);
1520
+ const controller = new CoreAnimationController(this.stage.animationManager, animation);
1521
+ return controller;
1522
+ }
1523
+ flush() {
1524
+ // no-op
1525
+ }
1526
+ }
1527
+ //# sourceMappingURL=CoreNode.js.map