@lightningjs/renderer 3.0.0-beta8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +230 -147
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -1
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +5 -6
- package/dist/exports/index.js +3 -5
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/platform.d.ts +7 -0
- package/dist/exports/platform.js +27 -0
- package/dist/exports/platform.js.map +1 -0
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -1
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +169 -0
- package/dist/src/core/AutosizeManager.js.map +1 -0
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +196 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +106 -58
- package/dist/src/core/CoreNode.js +530 -282
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +73 -88
- package/dist/src/core/CoreTextNode.js +375 -236
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +23 -26
- package/dist/src/core/CoreTextureManager.js +60 -166
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +63 -9
- package/dist/src/core/Stage.js +233 -133
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +3 -5
- package/dist/src/core/TextureMemoryManager.js +84 -94
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +3 -3
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +8 -5
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +27 -0
- package/dist/src/core/animations/Transition.js +52 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +30 -11
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
- package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +4 -0
- package/dist/src/core/lib/collectionUtils.js +72 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +72 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -67
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +6 -6
- package/dist/src/core/lib/utils.js +21 -65
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platform.d.ts +10 -0
- package/dist/src/core/platform.js +81 -0
- package/dist/src/core/platform.js.map +1 -0
- package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
- package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
- package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +78 -12
- package/dist/src/core/platforms/Platform.js +18 -0
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
- package/dist/src/core/platforms/web/WebPlatform.js +158 -13
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
- package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
- package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
- package/dist/src/core/platforms/web/lib/utils.js +86 -0
- package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
- package/dist/src/core/renderers/CoreRenderer.js +3 -4
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShader.d.ts +9 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
- package/dist/src/core/renderers/CoreShader.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
- package/dist/src/core/renderers/CoreShaderNode.js +19 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +11 -9
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -46
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +64 -25
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +3 -3
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +4 -2
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -18
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
- package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +138 -84
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +46 -47
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
- package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +74 -72
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.js +89 -83
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
- package/dist/src/core/text-rendering/CanvasFont.js +111 -0
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
- package/dist/src/core/text-rendering/CoreFont.js +48 -0
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
- package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
- package/dist/src/core/text-rendering/FontManager.js +42 -0
- package/dist/src/core/text-rendering/FontManager.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
- package/dist/src/core/text-rendering/SdfFont.js +142 -0
- package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
- package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +84 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -4
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +33 -14
- package/dist/src/core/textures/ImageTexture.js +46 -125
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -8
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -12
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +22 -40
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +74 -11
- package/dist/src/core/textures/Texture.js +136 -18
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -1
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
- package/dist/src/main-api/DynamicShaderController.js +58 -0
- package/dist/src/main-api/DynamicShaderController.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +129 -1
- package/dist/src/main-api/Inspector.js +462 -23
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +223 -41
- package/dist/src/main-api/Renderer.js +107 -62
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +31 -0
- package/dist/src/main-api/ShaderController.js +37 -0
- package/dist/src/main-api/ShaderController.js.map +1 -0
- package/dist/src/utils.d.ts +0 -2
- package/dist/src/utils.js +0 -36
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +28 -28
- package/exports/canvas.ts +45 -45
- package/exports/index.ts +90 -90
- package/exports/inspector.ts +24 -24
- package/exports/platform.ts +31 -0
- package/exports/utils.ts +50 -50
- package/exports/webgl-shaders.ts +28 -28
- package/exports/webgl.ts +52 -50
- package/package.json +16 -15
- package/src/common/CommonTypes.ts +163 -146
- package/src/common/EventEmitter.ts +77 -77
- package/src/common/IAnimationController.ts +92 -92
- package/src/common/IEventEmitter.ts +28 -28
- package/src/core/Autosizer.ts +224 -0
- package/src/core/CoreNode.test.ts +365 -202
- package/src/core/CoreNode.ts +2785 -2483
- package/src/core/CoreShaderManager.ts +188 -188
- package/src/core/CoreTextNode.test.ts +311 -0
- package/src/core/CoreTextNode.ts +598 -451
- package/src/core/CoreTextureManager.ts +484 -608
- package/src/core/Stage.ts +927 -800
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +418 -435
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +290 -291
- package/src/core/animations/CoreAnimationController.ts +169 -164
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/Matrix3d.ts +244 -244
- package/src/core/lib/RenderCoords.ts +71 -71
- package/src/core/lib/collectionUtils.ts +83 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
- package/src/core/lib/utils.ts +337 -390
- package/src/core/platforms/GlContextWrapper.ts +291 -0
- package/src/core/platforms/Platform.ts +176 -77
- package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1374
- package/src/core/platforms/web/WebPlatform.ts +306 -84
- package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
- package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
- package/src/core/platforms/web/WebPlatformNext.ts +57 -0
- package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
- package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
- package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
- package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
- package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
- package/src/core/platforms/web/lib/textureCompression.ts +391 -0
- package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
- package/src/core/platforms/web/lib/utils.ts +105 -0
- package/src/core/renderers/CoreContextTexture.ts +44 -43
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +71 -110
- package/src/core/renderers/CoreShaderNode.ts +202 -175
- package/src/core/renderers/CoreShaderProgram.ts +23 -23
- package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
- package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
- package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
- package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
- package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
- package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -318
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/shaders/canvas/Border.ts +132 -78
- package/src/core/shaders/canvas/HolePunch.ts +56 -62
- package/src/core/shaders/canvas/LinearGradient.ts +73 -71
- package/src/core/shaders/canvas/RadialGradient.ts +96 -99
- package/src/core/shaders/canvas/Rounded.ts +55 -55
- package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
- package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
- package/src/core/shaders/canvas/Shadow.ts +54 -52
- package/src/core/shaders/canvas/utils/render.ts +160 -151
- package/src/core/shaders/templates/BorderTemplate.ts +145 -115
- package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
- package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
- package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
- package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
- package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
- package/src/core/shaders/utils.ts +46 -46
- package/src/core/shaders/webgl/Border.ts +169 -116
- package/src/core/shaders/webgl/Default.ts +88 -89
- package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
- package/src/core/shaders/webgl/HolePunch.ts +75 -75
- package/src/core/shaders/webgl/LinearGradient.ts +106 -82
- package/src/core/shaders/webgl/RadialGradient.ts +108 -85
- package/src/core/shaders/webgl/Rounded.ts +115 -117
- package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
- package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
- package/src/core/shaders/webgl/SdfShader.ts +122 -134
- package/src/core/shaders/webgl/Shadow.ts +121 -115
- package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
- package/src/core/text-rendering/SdfFontHandler.ts +584 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +444 -0
- package/src/core/text-rendering/Utils.ts +99 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
- package/src/core/textures/ColorTexture.ts +104 -102
- package/src/core/textures/ImageTexture.ts +292 -418
- package/src/core/textures/NoiseTexture.ts +106 -104
- package/src/core/textures/RenderTexture.ts +87 -85
- package/src/core/textures/SubTexture.ts +184 -205
- package/src/core/textures/Texture.ts +524 -372
- package/src/core/utils.ts +229 -227
- package/src/env.d.ts +7 -7
- package/src/main-api/INode.ts +100 -100
- package/src/main-api/Inspector.ts +1278 -569
- package/src/main-api/Renderer.ts +1030 -818
- package/src/main-api/utils.ts +45 -45
- package/src/utils.ts +220 -267
- package/COPYING +0 -1
- package/src/core/lib/ImageWorker.ts +0 -286
- package/src/core/lib/textureCompression.ts +0 -152
- package/src/core/lib/validateImageBitmap.ts +0 -87
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
-
* following copyright and licenses apply:
|
|
4
|
-
*
|
|
5
|
-
* Copyright 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 { deepClone } from '../utils.js';
|
|
20
|
-
import {
|
|
21
|
-
CoreShaderNode,
|
|
22
|
-
resolveShaderProps,
|
|
23
|
-
type CoreShaderType,
|
|
24
|
-
} from './renderers/CoreShaderNode.js';
|
|
25
|
-
import type { CoreShaderProgram } from './renderers/CoreShaderProgram.js';
|
|
26
|
-
import type { Stage } from './Stage.js';
|
|
27
|
-
|
|
28
|
-
export type ShaderMap = Record<string, CoreShaderType>;
|
|
29
|
-
|
|
30
|
-
export type ExtractProps<Props> = {
|
|
31
|
-
[K in keyof Props]: Props[K] extends { default: infer D } ? D : Props[K];
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type PartialShaderProps<Props> = Partial<ExtractProps<Props>>;
|
|
35
|
-
export type ExtractShaderProps<T extends keyof ShaderMap> = ExtractProps<
|
|
36
|
-
ShaderMap[T]['props']
|
|
37
|
-
>;
|
|
38
|
-
export type OptionalShaderProps<T extends keyof ShaderMap> = PartialShaderProps<
|
|
39
|
-
ShaderMap[T]['props']
|
|
40
|
-
>;
|
|
41
|
-
|
|
42
|
-
export class CoreShaderManager {
|
|
43
|
-
protected shTypes: ShaderMap = {};
|
|
44
|
-
protected shCache: Map<string, CoreShaderProgram> = new Map();
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* valuesCache is used to store calculations that can be shared between shader nodes.
|
|
48
|
-
*/
|
|
49
|
-
protected valuesCache: Map<string, Record<string, unknown>> = new Map();
|
|
50
|
-
protected valuesCacheUsage: Map<string, number> = new Map();
|
|
51
|
-
|
|
52
|
-
protected attachedShader: CoreShaderProgram | null = null;
|
|
53
|
-
|
|
54
|
-
constructor(readonly stage: Stage) {}
|
|
55
|
-
|
|
56
|
-
registerShaderType(name: string, shType: CoreShaderType): void {
|
|
57
|
-
/**
|
|
58
|
-
* block name duplicates
|
|
59
|
-
*/
|
|
60
|
-
if (this.shTypes[name] !== undefined) {
|
|
61
|
-
console.warn(
|
|
62
|
-
`ShaderType already exists with the name: ${name}. Breaking off registration.`,
|
|
63
|
-
);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Check renderer if shader type is supported.
|
|
68
|
-
*/
|
|
69
|
-
if (this.stage.renderer.supportsShaderType(shType) === false) {
|
|
70
|
-
console.warn(
|
|
71
|
-
`The renderer being used does not support this shader type. Breaking off registration.`,
|
|
72
|
-
);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
this.shTypes[name] = deepClone(shType);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Loads a shader (if not already loaded) and returns a controller for it.
|
|
80
|
-
*
|
|
81
|
-
* @param shType
|
|
82
|
-
* @param props
|
|
83
|
-
* @returns
|
|
84
|
-
*/
|
|
85
|
-
createShader<Name extends keyof ShaderMap>(
|
|
86
|
-
name: Name,
|
|
87
|
-
props?: Record<string, unknown>,
|
|
88
|
-
): CoreShaderNode | null {
|
|
89
|
-
const shType = this.shTypes[name as string] as ShaderMap[Name];
|
|
90
|
-
if (shType === undefined) {
|
|
91
|
-
console.warn(
|
|
92
|
-
`ShaderType not found falling back on renderer default shader`,
|
|
93
|
-
);
|
|
94
|
-
return this.stage.defShaderNode;
|
|
95
|
-
}
|
|
96
|
-
let shaderKey = name as string;
|
|
97
|
-
if (shType.props !== undefined) {
|
|
98
|
-
/**
|
|
99
|
-
* if props is undefined create empty obj to fill
|
|
100
|
-
*/
|
|
101
|
-
props = props || {};
|
|
102
|
-
/**
|
|
103
|
-
* resolve shader values
|
|
104
|
-
*/
|
|
105
|
-
resolveShaderProps(props, shType.props);
|
|
106
|
-
if (shType.getCacheMarkers !== undefined) {
|
|
107
|
-
shaderKey += `-${shType.getCacheMarkers(props)}`;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (this.stage.renderer.mode === 'canvas') {
|
|
112
|
-
return this.stage.renderer.createShaderNode(shaderKey, shType, props);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* get shaderProgram by cacheKey
|
|
117
|
-
*/
|
|
118
|
-
let shProgram = this.shCache.get(shaderKey);
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* if shaderProgram was not found create a new one
|
|
122
|
-
*/
|
|
123
|
-
if (shProgram === undefined) {
|
|
124
|
-
shProgram = this.stage.renderer.createShaderProgram(shType, props)!;
|
|
125
|
-
this.shCache.set(shaderKey, shProgram);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return this.stage.renderer.createShaderNode(
|
|
129
|
-
shaderKey,
|
|
130
|
-
shType,
|
|
131
|
-
props,
|
|
132
|
-
shProgram,
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
mutateShaderValueUsage(key: string, mutation: number) {
|
|
137
|
-
let usage = this.valuesCacheUsage.get(key) || 0;
|
|
138
|
-
this.valuesCacheUsage.set(key, usage + mutation);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
getShaderValues(key: string) {
|
|
142
|
-
const values = this.valuesCache.get(key);
|
|
143
|
-
if (values === undefined) {
|
|
144
|
-
return undefined;
|
|
145
|
-
}
|
|
146
|
-
this.mutateShaderValueUsage(key, 1);
|
|
147
|
-
return values;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
setShaderValues(key: string, values: Record<string, unknown>) {
|
|
151
|
-
this.valuesCache.set(key, values);
|
|
152
|
-
this.mutateShaderValueUsage(key, 1);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
cleanup() {
|
|
156
|
-
const values = [...this.valuesCacheUsage.entries()].sort(
|
|
157
|
-
(entryA, entryB) => {
|
|
158
|
-
if (entryA[1] < entryB[1]) {
|
|
159
|
-
return -1;
|
|
160
|
-
} else if (entryA[1] > entryB[1]) {
|
|
161
|
-
return 1;
|
|
162
|
-
}
|
|
163
|
-
return 0;
|
|
164
|
-
},
|
|
165
|
-
);
|
|
166
|
-
|
|
167
|
-
for (let i = 0; i < values.length; i++) {
|
|
168
|
-
if (values[i]![1] > 0) {
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
this.valuesCacheUsage.delete(values[i]![0]);
|
|
172
|
-
this.valuesCache.delete(values[i]![0]);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
useShader(shader: CoreShaderProgram): void {
|
|
177
|
-
if (this.attachedShader === shader) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
if (this.attachedShader && this.attachedShader.detach) {
|
|
181
|
-
this.attachedShader.detach();
|
|
182
|
-
}
|
|
183
|
-
if (shader.attach) {
|
|
184
|
-
shader.attach();
|
|
185
|
-
}
|
|
186
|
-
this.attachedShader = shader;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 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 { deepClone } from '../utils.js';
|
|
20
|
+
import {
|
|
21
|
+
CoreShaderNode,
|
|
22
|
+
resolveShaderProps,
|
|
23
|
+
type CoreShaderType,
|
|
24
|
+
} from './renderers/CoreShaderNode.js';
|
|
25
|
+
import type { CoreShaderProgram } from './renderers/CoreShaderProgram.js';
|
|
26
|
+
import type { Stage } from './Stage.js';
|
|
27
|
+
|
|
28
|
+
export type ShaderMap = Record<string, CoreShaderType>;
|
|
29
|
+
|
|
30
|
+
export type ExtractProps<Props> = {
|
|
31
|
+
[K in keyof Props]: Props[K] extends { default: infer D } ? D : Props[K];
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type PartialShaderProps<Props> = Partial<ExtractProps<Props>>;
|
|
35
|
+
export type ExtractShaderProps<T extends keyof ShaderMap> = ExtractProps<
|
|
36
|
+
ShaderMap[T]['props']
|
|
37
|
+
>;
|
|
38
|
+
export type OptionalShaderProps<T extends keyof ShaderMap> = PartialShaderProps<
|
|
39
|
+
ShaderMap[T]['props']
|
|
40
|
+
>;
|
|
41
|
+
|
|
42
|
+
export class CoreShaderManager {
|
|
43
|
+
protected shTypes: ShaderMap = {};
|
|
44
|
+
protected shCache: Map<string, CoreShaderProgram> = new Map();
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* valuesCache is used to store calculations that can be shared between shader nodes.
|
|
48
|
+
*/
|
|
49
|
+
protected valuesCache: Map<string, Record<string, unknown>> = new Map();
|
|
50
|
+
protected valuesCacheUsage: Map<string, number> = new Map();
|
|
51
|
+
|
|
52
|
+
protected attachedShader: CoreShaderProgram | null = null;
|
|
53
|
+
|
|
54
|
+
constructor(readonly stage: Stage) {}
|
|
55
|
+
|
|
56
|
+
registerShaderType(name: string, shType: CoreShaderType): void {
|
|
57
|
+
/**
|
|
58
|
+
* block name duplicates
|
|
59
|
+
*/
|
|
60
|
+
if (this.shTypes[name] !== undefined) {
|
|
61
|
+
console.warn(
|
|
62
|
+
`ShaderType already exists with the name: ${name}. Breaking off registration.`,
|
|
63
|
+
);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check renderer if shader type is supported.
|
|
68
|
+
*/
|
|
69
|
+
if (this.stage.renderer.supportsShaderType(shType) === false) {
|
|
70
|
+
console.warn(
|
|
71
|
+
`The renderer being used does not support this shader type. Breaking off registration.`,
|
|
72
|
+
);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.shTypes[name] = deepClone(shType);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Loads a shader (if not already loaded) and returns a controller for it.
|
|
80
|
+
*
|
|
81
|
+
* @param shType
|
|
82
|
+
* @param props
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
createShader<Name extends keyof ShaderMap>(
|
|
86
|
+
name: Name,
|
|
87
|
+
props?: Record<string, unknown>,
|
|
88
|
+
): CoreShaderNode | null {
|
|
89
|
+
const shType = this.shTypes[name as string] as ShaderMap[Name];
|
|
90
|
+
if (shType === undefined) {
|
|
91
|
+
console.warn(
|
|
92
|
+
`ShaderType not found falling back on renderer default shader`,
|
|
93
|
+
);
|
|
94
|
+
return this.stage.defShaderNode;
|
|
95
|
+
}
|
|
96
|
+
let shaderKey = name as string;
|
|
97
|
+
if (shType.props !== undefined) {
|
|
98
|
+
/**
|
|
99
|
+
* if props is undefined create empty obj to fill
|
|
100
|
+
*/
|
|
101
|
+
props = props || {};
|
|
102
|
+
/**
|
|
103
|
+
* resolve shader values
|
|
104
|
+
*/
|
|
105
|
+
resolveShaderProps(props, shType.props);
|
|
106
|
+
if (shType.getCacheMarkers !== undefined) {
|
|
107
|
+
shaderKey += `-${shType.getCacheMarkers(props)}`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (this.stage.renderer.mode === 'canvas') {
|
|
112
|
+
return this.stage.renderer.createShaderNode(shaderKey, shType, props);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* get shaderProgram by cacheKey
|
|
117
|
+
*/
|
|
118
|
+
let shProgram = this.shCache.get(shaderKey);
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* if shaderProgram was not found create a new one
|
|
122
|
+
*/
|
|
123
|
+
if (shProgram === undefined) {
|
|
124
|
+
shProgram = this.stage.renderer.createShaderProgram(shType, props)!;
|
|
125
|
+
this.shCache.set(shaderKey, shProgram);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return this.stage.renderer.createShaderNode(
|
|
129
|
+
shaderKey,
|
|
130
|
+
shType,
|
|
131
|
+
props,
|
|
132
|
+
shProgram,
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
mutateShaderValueUsage(key: string, mutation: number) {
|
|
137
|
+
let usage = this.valuesCacheUsage.get(key) || 0;
|
|
138
|
+
this.valuesCacheUsage.set(key, usage + mutation);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
getShaderValues(key: string) {
|
|
142
|
+
const values = this.valuesCache.get(key);
|
|
143
|
+
if (values === undefined) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
this.mutateShaderValueUsage(key, 1);
|
|
147
|
+
return values;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
setShaderValues(key: string, values: Record<string, unknown>) {
|
|
151
|
+
this.valuesCache.set(key, values);
|
|
152
|
+
this.mutateShaderValueUsage(key, 1);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
cleanup() {
|
|
156
|
+
const values = [...this.valuesCacheUsage.entries()].sort(
|
|
157
|
+
(entryA, entryB) => {
|
|
158
|
+
if (entryA[1] < entryB[1]) {
|
|
159
|
+
return -1;
|
|
160
|
+
} else if (entryA[1] > entryB[1]) {
|
|
161
|
+
return 1;
|
|
162
|
+
}
|
|
163
|
+
return 0;
|
|
164
|
+
},
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
for (let i = 0; i < values.length; i++) {
|
|
168
|
+
if (values[i]![1] > 0) {
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
this.valuesCacheUsage.delete(values[i]![0]);
|
|
172
|
+
this.valuesCache.delete(values[i]![0]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
useShader(shader: CoreShaderProgram): void {
|
|
177
|
+
if (this.attachedShader === shader) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (this.attachedShader && this.attachedShader.detach) {
|
|
181
|
+
this.attachedShader.detach();
|
|
182
|
+
}
|
|
183
|
+
if (shader.attach) {
|
|
184
|
+
shader.attach();
|
|
185
|
+
}
|
|
186
|
+
this.attachedShader = shader;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
|
21
|
+
import { CoreTextNode, type CoreTextNodeProps } from './CoreTextNode.js';
|
|
22
|
+
import { Stage } from './Stage.js';
|
|
23
|
+
import { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
24
|
+
import { mock } from 'vitest-mock-extended';
|
|
25
|
+
import type { TextRenderer } from './text-rendering/TextRenderer.js';
|
|
26
|
+
import { createBound } from './lib/utils.js';
|
|
27
|
+
|
|
28
|
+
describe('CoreTextNode', () => {
|
|
29
|
+
let stage: Stage;
|
|
30
|
+
let mockTextRenderer: TextRenderer;
|
|
31
|
+
|
|
32
|
+
const defaultTextProps: CoreTextNodeProps = {
|
|
33
|
+
// CoreNodeProps
|
|
34
|
+
alpha: 1,
|
|
35
|
+
autosize: false,
|
|
36
|
+
boundsMargin: null,
|
|
37
|
+
clipping: false,
|
|
38
|
+
color: 0xffffffff,
|
|
39
|
+
colorBl: 0xffffffff,
|
|
40
|
+
colorBottom: 0xffffffff,
|
|
41
|
+
colorBr: 0xffffffff,
|
|
42
|
+
colorLeft: 0xffffffff,
|
|
43
|
+
colorRight: 0xffffffff,
|
|
44
|
+
colorTl: 0xffffffff,
|
|
45
|
+
colorTop: 0xffffffff,
|
|
46
|
+
colorTr: 0xffffffff,
|
|
47
|
+
h: 0,
|
|
48
|
+
mount: 0,
|
|
49
|
+
mountX: 0,
|
|
50
|
+
mountY: 0,
|
|
51
|
+
parent: null,
|
|
52
|
+
pivot: 0,
|
|
53
|
+
pivotX: 0,
|
|
54
|
+
pivotY: 0,
|
|
55
|
+
rotation: 0,
|
|
56
|
+
rtt: false,
|
|
57
|
+
scale: 1,
|
|
58
|
+
scaleX: 1,
|
|
59
|
+
scaleY: 1,
|
|
60
|
+
shader: null,
|
|
61
|
+
src: '',
|
|
62
|
+
texture: null,
|
|
63
|
+
textureOptions: {},
|
|
64
|
+
w: 0,
|
|
65
|
+
x: 0,
|
|
66
|
+
y: 0,
|
|
67
|
+
zIndex: 0,
|
|
68
|
+
// TrProps
|
|
69
|
+
text: 'Test',
|
|
70
|
+
textAlign: 'left',
|
|
71
|
+
contain: 'none',
|
|
72
|
+
fontFamily: 'Arial',
|
|
73
|
+
fontStyle: 'normal',
|
|
74
|
+
fontSize: 16,
|
|
75
|
+
letterSpacing: 0,
|
|
76
|
+
lineHeight: 1,
|
|
77
|
+
maxHeight: 0,
|
|
78
|
+
maxLines: 0,
|
|
79
|
+
maxWidth: 0,
|
|
80
|
+
offsetY: 0,
|
|
81
|
+
overflowSuffix: '...',
|
|
82
|
+
verticalAlign: 'top',
|
|
83
|
+
wordBreak: 'break-word',
|
|
84
|
+
// CoreTextNodeProps specific
|
|
85
|
+
textRendererOverride: null,
|
|
86
|
+
forceLoad: false,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const clippingRect = {
|
|
90
|
+
x: 0,
|
|
91
|
+
y: 0,
|
|
92
|
+
w: 200,
|
|
93
|
+
h: 200,
|
|
94
|
+
valid: true,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
beforeEach(() => {
|
|
98
|
+
stage = mock<Stage>({
|
|
99
|
+
strictBound: createBound(0, 0, 1920, 1080),
|
|
100
|
+
preloadBound: createBound(0, 0, 1920, 1080),
|
|
101
|
+
defaultTexture: {
|
|
102
|
+
state: 'loaded',
|
|
103
|
+
},
|
|
104
|
+
renderer: mock<CoreRenderer>() as CoreRenderer,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Mock text renderer with basic functionality
|
|
108
|
+
mockTextRenderer = {
|
|
109
|
+
type: 'sdf',
|
|
110
|
+
font: {
|
|
111
|
+
isFontLoaded: vi.fn().mockReturnValue(true),
|
|
112
|
+
waitingForFont: vi.fn(),
|
|
113
|
+
stopWaitingForFont: vi.fn(),
|
|
114
|
+
},
|
|
115
|
+
renderText: vi.fn().mockReturnValue({
|
|
116
|
+
width: 100,
|
|
117
|
+
height: 20,
|
|
118
|
+
layout: { glyphs: [], width: 100, height: 20 },
|
|
119
|
+
}),
|
|
120
|
+
addQuads: vi.fn().mockReturnValue(new Float32Array(0)),
|
|
121
|
+
renderQuads: vi.fn(),
|
|
122
|
+
} as any;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('text property handling', () => {
|
|
126
|
+
it('should normalize empty string and set node as non-renderable', () => {
|
|
127
|
+
const node = new CoreTextNode(stage, defaultTextProps, mockTextRenderer);
|
|
128
|
+
|
|
129
|
+
node.text = '';
|
|
130
|
+
|
|
131
|
+
expect(node.text).toBe('');
|
|
132
|
+
expect(node.isRenderable).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('should normalize null to empty string and set node as non-renderable', () => {
|
|
136
|
+
const node = new CoreTextNode(stage, defaultTextProps, mockTextRenderer);
|
|
137
|
+
|
|
138
|
+
node.text = null as any;
|
|
139
|
+
|
|
140
|
+
expect(node.text).toBe('');
|
|
141
|
+
expect(node.isRenderable).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('should normalize undefined to empty string and set node as non-renderable', () => {
|
|
145
|
+
const node = new CoreTextNode(stage, defaultTextProps, mockTextRenderer);
|
|
146
|
+
|
|
147
|
+
node.text = undefined as any;
|
|
148
|
+
|
|
149
|
+
expect(node.text).toBe('');
|
|
150
|
+
expect(node.isRenderable).toBe(false);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('should convert non-string values to strings', () => {
|
|
154
|
+
const node = new CoreTextNode(stage, defaultTextProps, mockTextRenderer);
|
|
155
|
+
|
|
156
|
+
node.text = 123 as any;
|
|
157
|
+
|
|
158
|
+
expect(node.text).toBe('123');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it('should handle valid text and allow node to be renderable', () => {
|
|
162
|
+
const node = new CoreTextNode(stage, defaultTextProps, mockTextRenderer);
|
|
163
|
+
|
|
164
|
+
node.text = 'Valid text content';
|
|
165
|
+
|
|
166
|
+
expect(node.text).toBe('Valid text content');
|
|
167
|
+
// Note: renderable state is determined during update cycle
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('should clear cached layout data when text is set to empty', () => {
|
|
171
|
+
const props = { ...defaultTextProps, text: 'Initial text' };
|
|
172
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
173
|
+
|
|
174
|
+
// Simulate some cached state
|
|
175
|
+
node.text = '';
|
|
176
|
+
|
|
177
|
+
expect(node.text).toBe('');
|
|
178
|
+
expect(node.isRenderable).toBe(false);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('should clear cached layout data when text is set to null', () => {
|
|
182
|
+
const props = { ...defaultTextProps, text: 'Initial text' };
|
|
183
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
184
|
+
|
|
185
|
+
node.text = null as any;
|
|
186
|
+
|
|
187
|
+
expect(node.text).toBe('');
|
|
188
|
+
expect(node.isRenderable).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('should clear cached layout data when text is set to undefined', () => {
|
|
192
|
+
const props = { ...defaultTextProps, text: 'Initial text' };
|
|
193
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
194
|
+
|
|
195
|
+
node.text = undefined as any;
|
|
196
|
+
|
|
197
|
+
expect(node.text).toBe('');
|
|
198
|
+
expect(node.isRenderable).toBe(false);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('should not call renderText during update when text is empty', () => {
|
|
202
|
+
const props = { ...defaultTextProps, text: '', forceLoad: true };
|
|
203
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
204
|
+
|
|
205
|
+
node.update(16, clippingRect);
|
|
206
|
+
|
|
207
|
+
expect(mockTextRenderer.renderText).not.toHaveBeenCalled();
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('should not call renderText during update when text is null', () => {
|
|
211
|
+
const props = { ...defaultTextProps, text: null as any, forceLoad: true };
|
|
212
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
213
|
+
|
|
214
|
+
node.update(16, clippingRect);
|
|
215
|
+
|
|
216
|
+
expect(mockTextRenderer.renderText).not.toHaveBeenCalled();
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it('should transition from valid text to empty text correctly', () => {
|
|
220
|
+
const props = { ...defaultTextProps, text: 'Valid text' };
|
|
221
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
222
|
+
|
|
223
|
+
// Set to valid text first
|
|
224
|
+
node.text = 'Some content';
|
|
225
|
+
expect(node.text).toBe('Some content');
|
|
226
|
+
|
|
227
|
+
// Then set to empty
|
|
228
|
+
node.text = '';
|
|
229
|
+
expect(node.text).toBe('');
|
|
230
|
+
expect(node.isRenderable).toBe(false);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it('should transition from empty text to valid text correctly', () => {
|
|
234
|
+
const props = { ...defaultTextProps, text: '' };
|
|
235
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
236
|
+
|
|
237
|
+
expect(node.text).toBe('');
|
|
238
|
+
expect(node.isRenderable).toBe(false);
|
|
239
|
+
|
|
240
|
+
// Set to valid text
|
|
241
|
+
node.text = 'New content';
|
|
242
|
+
expect(node.text).toBe('New content');
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('should handle rapid text changes including null/undefined', () => {
|
|
246
|
+
const props = { ...defaultTextProps, text: 'Initial' };
|
|
247
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
248
|
+
|
|
249
|
+
node.text = 'First';
|
|
250
|
+
expect(node.text).toBe('First');
|
|
251
|
+
|
|
252
|
+
node.text = null as any;
|
|
253
|
+
expect(node.text).toBe('');
|
|
254
|
+
expect(node.isRenderable).toBe(false);
|
|
255
|
+
|
|
256
|
+
node.text = 'Second';
|
|
257
|
+
expect(node.text).toBe('Second');
|
|
258
|
+
|
|
259
|
+
node.text = undefined as any;
|
|
260
|
+
expect(node.text).toBe('');
|
|
261
|
+
expect(node.isRenderable).toBe(false);
|
|
262
|
+
|
|
263
|
+
node.text = 'Third';
|
|
264
|
+
expect(node.text).toBe('Third');
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
describe('updateIsRenderable with invalid text', () => {
|
|
269
|
+
it('should mark node as non-renderable when text is empty', () => {
|
|
270
|
+
const props = { ...defaultTextProps, text: '' };
|
|
271
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
272
|
+
|
|
273
|
+
node.updateIsRenderable();
|
|
274
|
+
|
|
275
|
+
expect(node.isRenderable).toBe(false);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('should mark node as non-renderable even if layout exists when text is empty', () => {
|
|
279
|
+
const props = { ...defaultTextProps, text: 'Valid' };
|
|
280
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
281
|
+
|
|
282
|
+
// Change text to empty after potential layout generation
|
|
283
|
+
node.text = '';
|
|
284
|
+
node.updateIsRenderable();
|
|
285
|
+
|
|
286
|
+
expect(node.isRenderable).toBe(false);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
describe('update cycle with invalid text', () => {
|
|
291
|
+
it('should skip layout generation when text is empty', () => {
|
|
292
|
+
const props = { ...defaultTextProps, text: '', forceLoad: true };
|
|
293
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
294
|
+
|
|
295
|
+
node.update(16, clippingRect);
|
|
296
|
+
|
|
297
|
+
expect(mockTextRenderer.renderText).not.toHaveBeenCalled();
|
|
298
|
+
expect(node.isRenderable).toBe(false);
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it('should skip layout generation when text becomes empty during update', () => {
|
|
302
|
+
const props = { ...defaultTextProps, text: 'Valid', forceLoad: true };
|
|
303
|
+
const node = new CoreTextNode(stage, props, mockTextRenderer);
|
|
304
|
+
|
|
305
|
+
node.text = '';
|
|
306
|
+
node.update(16, clippingRect);
|
|
307
|
+
|
|
308
|
+
expect(node.isRenderable).toBe(false);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
});
|