@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta15
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/dist/exports/index.d.ts +1 -0
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +1 -1
- package/dist/src/core/CoreTextNode.d.ts +0 -2
- package/dist/src/core/CoreTextNode.js +4 -16
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/Stage.js +2 -3
- 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/animations/CoreAnimation.d.ts +3 -2
- package/dist/src/core/animations/CoreAnimation.js +3 -2
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -5
- package/dist/src/core/lib/textureCompression.js +1 -1
- package/dist/src/core/lib/textureCompression.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/renderers/CoreShader.d.ts +9 -0
- package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
- package/dist/src/core/renderers/CoreShader.js.map +1 -0
- 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/internal/C2DShaderUtils.d.ts +14 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.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 +65 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +269 -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 +616 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -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 +119 -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 +413 -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 +131 -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 +160 -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 +129 -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 +39 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -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/RoundedWithBorder.js +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
- package/dist/src/core/text-rendering/CanvasFontHandler.js +94 -32
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
- package/dist/src/core/text-rendering/SdfFontHandler.js +76 -56
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
- package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -105
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
- package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
- package/dist/src/core/text-rendering/TrFontManager.js +131 -0
- package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +1 -42
- package/dist/src/core/text-rendering/Utils.js +4 -132
- package/dist/src/core/text-rendering/Utils.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
- package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
- package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
- 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 +124 -0
- package/dist/src/main-api/Inspector.js +283 -8
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +150 -26
- package/dist/src/main-api/Renderer.js +27 -25
- 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/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/index.ts +1 -0
- package/package.json +14 -15
- package/src/core/CoreTextNode.ts +4 -22
- package/src/core/Stage.ts +2 -3
- package/src/core/animations/CoreAnimation.ts +8 -7
- package/src/core/lib/textureCompression.ts +4 -2
- package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
- package/src/core/shaders/webgl/LinearGradient.ts +26 -3
- package/src/core/shaders/webgl/RadialGradient.ts +50 -28
- package/src/core/shaders/webgl/SdfShader.ts +1 -12
- package/src/core/text-rendering/CanvasFontHandler.ts +136 -39
- package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
- package/src/core/text-rendering/SdfFontHandler.ts +94 -60
- package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
- package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +209 -143
- package/src/core/text-rendering/TextRenderer.ts +36 -13
- package/src/core/text-rendering/Utils.ts +5 -163
- package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
- package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
- package/src/core/utils.ts +9 -7
- package/src/main-api/Inspector.ts +502 -12
- package/src/main-api/Renderer.ts +158 -26
- package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
- package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
- package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
- package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
- package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
- package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
- package/dist/src/core/text-rendering/canvas/draw.js +0 -132
- package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
- package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
- package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
- package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
- package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
- package/src/core/text-rendering/canvas/Settings.ts +0 -99
- package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
- package/src/core/text-rendering/canvas/Utils.ts +0 -178
- package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
- package/src/core/text-rendering/canvas/draw.ts +0 -165
|
@@ -0,0 +1,250 @@
|
|
|
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 { getRgbaComponents } from '../../lib/utils.js';
|
|
20
|
+
import { SubTexture } from '../../textures/SubTexture.js';
|
|
21
|
+
import { TextureType } from '../../textures/Texture.js';
|
|
22
|
+
import { CoreRenderer, } from '../CoreRenderer.js';
|
|
23
|
+
import { CanvasCoreTexture } from './CanvasCoreTexture.js';
|
|
24
|
+
import { getBorder, getRadius, roundRect, strokeLine, } from './internal/C2DShaderUtils.js';
|
|
25
|
+
import { formatRgba, parseColorRgba, parseColor, } from './internal/ColorUtils.js';
|
|
26
|
+
import { UnsupportedShader } from './shaders/UnsupportedShader.js';
|
|
27
|
+
import { assertTruthy } from '../../../utils.js';
|
|
28
|
+
export class CanvasCoreRenderer extends CoreRenderer {
|
|
29
|
+
context;
|
|
30
|
+
canvas;
|
|
31
|
+
pixelRatio;
|
|
32
|
+
clearColor;
|
|
33
|
+
renderToTextureActive = false;
|
|
34
|
+
activeRttNode = null;
|
|
35
|
+
defShaderCtr;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
super(options);
|
|
38
|
+
this.mode = 'canvas';
|
|
39
|
+
this.shManager.renderer = this;
|
|
40
|
+
const { canvas, pixelRatio, clearColor } = options;
|
|
41
|
+
this.canvas = canvas;
|
|
42
|
+
this.context = canvas.getContext('2d');
|
|
43
|
+
this.pixelRatio = pixelRatio;
|
|
44
|
+
this.clearColor = clearColor ? getRgbaComponents(clearColor) : undefined;
|
|
45
|
+
// Stub for default shader controller since the canvas renderer does not
|
|
46
|
+
// (really) support the concept of a shader (yet)
|
|
47
|
+
this.defShaderCtr = {
|
|
48
|
+
type: 'DefaultShader',
|
|
49
|
+
props: {},
|
|
50
|
+
shader: new UnsupportedShader('DefaultShader'),
|
|
51
|
+
getResolvedProps: () => () => {
|
|
52
|
+
return {};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
reset() {
|
|
57
|
+
this.canvas.width = this.canvas.width; // quick reset canvas
|
|
58
|
+
const ctx = this.context;
|
|
59
|
+
if (this.clearColor) {
|
|
60
|
+
const [r, g, b, a] = this.clearColor;
|
|
61
|
+
ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${a / 255})`;
|
|
62
|
+
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
63
|
+
}
|
|
64
|
+
ctx.scale(this.pixelRatio, this.pixelRatio);
|
|
65
|
+
}
|
|
66
|
+
render() {
|
|
67
|
+
// noop
|
|
68
|
+
}
|
|
69
|
+
addQuad(quad) {
|
|
70
|
+
const ctx = this.context;
|
|
71
|
+
const { tx, ty, width, height, alpha, colorTl, colorTr, colorBr, ta, tb, tc, td, clippingRect, } = quad;
|
|
72
|
+
let texture = quad.texture;
|
|
73
|
+
let ctxTexture = undefined;
|
|
74
|
+
let frame;
|
|
75
|
+
const textureType = texture?.type;
|
|
76
|
+
assertTruthy(textureType, 'Texture type is not defined');
|
|
77
|
+
// The Canvas2D renderer only supports image and color textures and subTexture images
|
|
78
|
+
if (textureType !== TextureType.image &&
|
|
79
|
+
textureType !== TextureType.color &&
|
|
80
|
+
textureType !== TextureType.subTexture &&
|
|
81
|
+
textureType !== TextureType.noise) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (texture) {
|
|
85
|
+
if (texture instanceof SubTexture) {
|
|
86
|
+
frame = texture.props;
|
|
87
|
+
texture = texture.parentTexture;
|
|
88
|
+
}
|
|
89
|
+
ctxTexture = texture.ctxTexture;
|
|
90
|
+
if (texture.state === 'freed') {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (texture.state !== 'loaded') {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const color = parseColor(colorTl);
|
|
98
|
+
const hasTransform = ta !== 1;
|
|
99
|
+
const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
|
|
100
|
+
const hasGradient = colorTl !== colorTr || colorTl !== colorBr;
|
|
101
|
+
const hasQuadShader = Boolean(quad.shader);
|
|
102
|
+
const radius = hasQuadShader ? getRadius(quad) : 0;
|
|
103
|
+
const border = hasQuadShader ? getBorder(quad) : undefined;
|
|
104
|
+
if (hasTransform || hasClipping || radius) {
|
|
105
|
+
ctx.save();
|
|
106
|
+
}
|
|
107
|
+
if (hasClipping) {
|
|
108
|
+
const path = new Path2D();
|
|
109
|
+
const { x, y, width, height } = clippingRect;
|
|
110
|
+
path.rect(x, y, width, height);
|
|
111
|
+
ctx.clip(path);
|
|
112
|
+
}
|
|
113
|
+
if (hasTransform) {
|
|
114
|
+
// Quad transform:
|
|
115
|
+
// | ta tb tx |
|
|
116
|
+
// | tc td ty |
|
|
117
|
+
// | 0 0 1 |
|
|
118
|
+
// C2D transform:
|
|
119
|
+
// | a c e |
|
|
120
|
+
// | b d f |
|
|
121
|
+
// | 0 0 1 |
|
|
122
|
+
const scale = this.pixelRatio;
|
|
123
|
+
ctx.setTransform(ta, tc, tb, td, tx * scale, ty * scale);
|
|
124
|
+
ctx.scale(scale, scale);
|
|
125
|
+
ctx.translate(-tx, -ty);
|
|
126
|
+
}
|
|
127
|
+
if (radius) {
|
|
128
|
+
const path = new Path2D();
|
|
129
|
+
roundRect.call(path, tx, ty, width, height, radius);
|
|
130
|
+
ctx.clip(path);
|
|
131
|
+
}
|
|
132
|
+
if ((textureType === TextureType.image ||
|
|
133
|
+
textureType === TextureType.subTexture ||
|
|
134
|
+
textureType === TextureType.noise) &&
|
|
135
|
+
ctxTexture) {
|
|
136
|
+
const image = ctxTexture.getImage(color);
|
|
137
|
+
ctx.globalAlpha = color.a ?? alpha;
|
|
138
|
+
if (frame) {
|
|
139
|
+
ctx.drawImage(image, frame.x, frame.y, frame.width, frame.height, tx, ty, width, height);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
try {
|
|
143
|
+
ctx.drawImage(image, tx, ty, width, height);
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
// noop
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
ctx.globalAlpha = 1;
|
|
151
|
+
}
|
|
152
|
+
else if (textureType === TextureType.color && hasGradient) {
|
|
153
|
+
let endX = tx;
|
|
154
|
+
let endY = ty;
|
|
155
|
+
let endColor;
|
|
156
|
+
if (colorTl === colorTr) {
|
|
157
|
+
// vertical
|
|
158
|
+
endX = tx;
|
|
159
|
+
endY = ty + height;
|
|
160
|
+
endColor = parseColor(colorBr);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// horizontal
|
|
164
|
+
endX = tx + width;
|
|
165
|
+
endY = ty;
|
|
166
|
+
endColor = parseColor(colorTr);
|
|
167
|
+
}
|
|
168
|
+
const gradient = ctx.createLinearGradient(tx, ty, endX, endY);
|
|
169
|
+
gradient.addColorStop(0, formatRgba(color));
|
|
170
|
+
gradient.addColorStop(1, formatRgba(endColor));
|
|
171
|
+
ctx.fillStyle = gradient;
|
|
172
|
+
ctx.fillRect(tx, ty, width, height);
|
|
173
|
+
}
|
|
174
|
+
else if (textureType === TextureType.color) {
|
|
175
|
+
ctx.fillStyle = formatRgba(color);
|
|
176
|
+
ctx.fillRect(tx, ty, width, height);
|
|
177
|
+
}
|
|
178
|
+
if (border && border.width) {
|
|
179
|
+
const borderWidth = border.width;
|
|
180
|
+
const borderInnerWidth = border.width / 2;
|
|
181
|
+
const borderColor = formatRgba(parseColorRgba(border.color ?? 0));
|
|
182
|
+
ctx.beginPath();
|
|
183
|
+
ctx.lineWidth = borderWidth;
|
|
184
|
+
ctx.strokeStyle = borderColor;
|
|
185
|
+
ctx.globalAlpha = alpha;
|
|
186
|
+
if (radius) {
|
|
187
|
+
roundRect.call(ctx, tx + borderInnerWidth, ty + borderInnerWidth, width - borderWidth, height - borderWidth, radius);
|
|
188
|
+
ctx.stroke();
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
ctx.strokeRect(tx + borderInnerWidth, ty + borderInnerWidth, width - borderWidth, height - borderWidth);
|
|
192
|
+
}
|
|
193
|
+
ctx.globalAlpha = 1;
|
|
194
|
+
}
|
|
195
|
+
else if (hasQuadShader) {
|
|
196
|
+
const borderTop = getBorder(quad, 'Top');
|
|
197
|
+
const borderRight = getBorder(quad, 'Right');
|
|
198
|
+
const borderBottom = getBorder(quad, 'Bottom');
|
|
199
|
+
const borderLeft = getBorder(quad, 'Left');
|
|
200
|
+
if (borderTop) {
|
|
201
|
+
strokeLine(ctx, tx, ty, width, height, borderTop.width, borderTop.color, 'Top');
|
|
202
|
+
}
|
|
203
|
+
if (borderRight) {
|
|
204
|
+
strokeLine(ctx, tx, ty, width, height, borderRight.width, borderRight.color, 'Right');
|
|
205
|
+
}
|
|
206
|
+
if (borderBottom) {
|
|
207
|
+
strokeLine(ctx, tx, ty, width, height, borderBottom.width, borderBottom.color, 'Bottom');
|
|
208
|
+
}
|
|
209
|
+
if (borderLeft) {
|
|
210
|
+
strokeLine(ctx, tx, ty, width, height, borderLeft.width, borderLeft.color, 'Left');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (hasTransform || hasClipping || radius) {
|
|
214
|
+
ctx.restore();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
createCtxTexture(textureSource) {
|
|
218
|
+
return new CanvasCoreTexture(this.txMemManager, textureSource);
|
|
219
|
+
}
|
|
220
|
+
getShaderManager() {
|
|
221
|
+
return this.shManager;
|
|
222
|
+
}
|
|
223
|
+
getDefShaderCtr() {
|
|
224
|
+
return this.defShaderCtr;
|
|
225
|
+
}
|
|
226
|
+
renderRTTNodes() {
|
|
227
|
+
// noop
|
|
228
|
+
}
|
|
229
|
+
removeRTTNode(node) {
|
|
230
|
+
// noop
|
|
231
|
+
}
|
|
232
|
+
renderToTexture(node) {
|
|
233
|
+
// noop
|
|
234
|
+
}
|
|
235
|
+
getBufferInfo() {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
getQuadCount() {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Updates the clear color of the canvas renderer.
|
|
243
|
+
*
|
|
244
|
+
* @param color - The color to set as the clear color.
|
|
245
|
+
*/
|
|
246
|
+
updateClearColor(color) {
|
|
247
|
+
this.clearColor = color ? getRgbaComponents(color) : undefined;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=CanvasCoreRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasCoreRenderer.js","sourceRoot":"","sources":["../../../../../src/core/renderers/canvas/CanvasCoreRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
2
|
+
import { type IParsedColor } from './internal/ColorUtils.js';
|
|
3
|
+
export declare class CanvasCoreTexture extends CoreContextTexture {
|
|
4
|
+
protected image: ImageBitmap | HTMLCanvasElement | HTMLImageElement | undefined;
|
|
5
|
+
protected tintCache: {
|
|
6
|
+
key: string;
|
|
7
|
+
image: HTMLCanvasElement;
|
|
8
|
+
} | undefined;
|
|
9
|
+
load(): Promise<void>;
|
|
10
|
+
release(): void;
|
|
11
|
+
free(): void;
|
|
12
|
+
updateMemSize(): void;
|
|
13
|
+
hasImage(): boolean;
|
|
14
|
+
getImage(color: IParsedColor): ImageBitmap | HTMLCanvasElement | HTMLImageElement;
|
|
15
|
+
protected tintTexture(source: ImageBitmap | HTMLCanvasElement | HTMLImageElement, color: string): HTMLCanvasElement;
|
|
16
|
+
private onLoadRequest;
|
|
17
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
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 } from '../../../utils.js';
|
|
20
|
+
import { CoreContextTexture } from '../CoreContextTexture.js';
|
|
21
|
+
import { formatRgba } from './internal/ColorUtils.js';
|
|
22
|
+
export class CanvasCoreTexture extends CoreContextTexture {
|
|
23
|
+
image;
|
|
24
|
+
tintCache;
|
|
25
|
+
async load() {
|
|
26
|
+
this.textureSource.setState('loading');
|
|
27
|
+
try {
|
|
28
|
+
const size = await this.onLoadRequest();
|
|
29
|
+
this.textureSource.setState('loaded', size);
|
|
30
|
+
this.updateMemSize();
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
this.textureSource.setState('failed', err);
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
release() {
|
|
38
|
+
this.image = undefined;
|
|
39
|
+
this.tintCache = undefined;
|
|
40
|
+
}
|
|
41
|
+
free() {
|
|
42
|
+
this.release();
|
|
43
|
+
this.textureSource.setState('freed');
|
|
44
|
+
this.setTextureMemUse(0);
|
|
45
|
+
this.textureSource.freeTextureData();
|
|
46
|
+
}
|
|
47
|
+
updateMemSize() {
|
|
48
|
+
// Counting memory usage for:
|
|
49
|
+
// - main image
|
|
50
|
+
// - tinted image
|
|
51
|
+
const mult = this.tintCache ? 8 : 4;
|
|
52
|
+
if (this.textureSource.dimensions) {
|
|
53
|
+
const { width, height } = this.textureSource.dimensions;
|
|
54
|
+
this.setTextureMemUse(width * height * mult);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
hasImage() {
|
|
58
|
+
return this.image !== undefined;
|
|
59
|
+
}
|
|
60
|
+
getImage(color) {
|
|
61
|
+
const image = this.image;
|
|
62
|
+
assertTruthy(image, 'Attempt to get unloaded image texture');
|
|
63
|
+
if (color.isWhite) {
|
|
64
|
+
if (this.tintCache) {
|
|
65
|
+
this.tintCache = undefined;
|
|
66
|
+
this.updateMemSize();
|
|
67
|
+
}
|
|
68
|
+
return image;
|
|
69
|
+
}
|
|
70
|
+
const key = formatRgba(color);
|
|
71
|
+
if (this.tintCache?.key === key) {
|
|
72
|
+
return this.tintCache.image;
|
|
73
|
+
}
|
|
74
|
+
const tintedImage = this.tintTexture(image, key);
|
|
75
|
+
this.tintCache = {
|
|
76
|
+
key,
|
|
77
|
+
image: tintedImage,
|
|
78
|
+
};
|
|
79
|
+
this.updateMemSize();
|
|
80
|
+
return tintedImage;
|
|
81
|
+
}
|
|
82
|
+
tintTexture(source, color) {
|
|
83
|
+
const { width, height } = source;
|
|
84
|
+
const canvas = document.createElement('canvas');
|
|
85
|
+
canvas.width = width;
|
|
86
|
+
canvas.height = height;
|
|
87
|
+
const ctx = canvas.getContext('2d');
|
|
88
|
+
if (ctx) {
|
|
89
|
+
// fill with target color
|
|
90
|
+
ctx.fillStyle = color;
|
|
91
|
+
ctx.globalCompositeOperation = 'copy';
|
|
92
|
+
ctx.fillRect(0, 0, width, height);
|
|
93
|
+
// multiply with image, resulting in non-transparent tinted image
|
|
94
|
+
ctx.globalCompositeOperation = 'multiply';
|
|
95
|
+
ctx.drawImage(source, 0, 0, width, height, 0, 0, width, height);
|
|
96
|
+
// apply original image alpha
|
|
97
|
+
ctx.globalCompositeOperation = 'destination-in';
|
|
98
|
+
ctx.drawImage(source, 0, 0, width, height, 0, 0, width, height);
|
|
99
|
+
}
|
|
100
|
+
return canvas;
|
|
101
|
+
}
|
|
102
|
+
async onLoadRequest() {
|
|
103
|
+
assertTruthy(this.textureSource?.textureData?.data, 'Texture data is null');
|
|
104
|
+
const { data } = this.textureSource.textureData;
|
|
105
|
+
// TODO: canvas from text renderer should be able to provide the canvas directly
|
|
106
|
+
// instead of having to re-draw it into a new canvas...
|
|
107
|
+
if (data instanceof ImageData) {
|
|
108
|
+
const canvas = document.createElement('canvas');
|
|
109
|
+
canvas.width = data.width;
|
|
110
|
+
canvas.height = data.height;
|
|
111
|
+
const ctx = canvas.getContext('2d');
|
|
112
|
+
if (ctx)
|
|
113
|
+
ctx.putImageData(data, 0, 0);
|
|
114
|
+
this.image = canvas;
|
|
115
|
+
return { width: data.width, height: data.height };
|
|
116
|
+
}
|
|
117
|
+
else if ((typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
|
|
118
|
+
data instanceof HTMLImageElement) {
|
|
119
|
+
this.image = data;
|
|
120
|
+
return { width: data.width, height: data.height };
|
|
121
|
+
}
|
|
122
|
+
return { width: 0, height: 0 };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=CanvasCoreTexture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasCoreTexture.js","sourceRoot":"","sources":["../../../../../src/core/renderers/canvas/CanvasCoreTexture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QuadOptions } from '../../CoreRenderer.js';
|
|
2
|
+
import type { BorderEffectProps } from '../../webgl/shaders/effects/BorderEffect.js';
|
|
3
|
+
import type { RadiusEffectProps } from '../../webgl/shaders/effects/RadiusEffect.js';
|
|
4
|
+
type Direction = 'Top' | 'Right' | 'Bottom' | 'Left';
|
|
5
|
+
/**
|
|
6
|
+
* Extract `RoundedRectangle` shader radius to apply as a clipping
|
|
7
|
+
*/
|
|
8
|
+
export declare function getRadius(quad: QuadOptions): RadiusEffectProps['radius'];
|
|
9
|
+
/**
|
|
10
|
+
* Extract `RoundedRectangle` shader radius to apply as a clipping */
|
|
11
|
+
export declare function getBorder(quad: QuadOptions, direction?: '' | Direction): BorderEffectProps | undefined;
|
|
12
|
+
export declare function roundRect(this: CanvasRenderingContext2D | Path2D, x: number, y: number, width: number, height: number, radius: number | DOMPointInit | (number | DOMPointInit)[]): void;
|
|
13
|
+
export declare function strokeLine(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, lineWidth: number | undefined, color: number | undefined, direction: Direction): void;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
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 { ROUNDED_RECTANGLE_SHADER_TYPE, UnsupportedShader, } from '../shaders/UnsupportedShader.js';
|
|
20
|
+
import { formatRgba, parseColorRgba } from './ColorUtils.js';
|
|
21
|
+
/**
|
|
22
|
+
* Extract `RoundedRectangle` shader radius to apply as a clipping
|
|
23
|
+
*/
|
|
24
|
+
export function getRadius(quad) {
|
|
25
|
+
if (quad.shader instanceof UnsupportedShader) {
|
|
26
|
+
const shType = quad.shader.shType;
|
|
27
|
+
if (shType === ROUNDED_RECTANGLE_SHADER_TYPE) {
|
|
28
|
+
return quad.shaderProps?.radius ?? 0;
|
|
29
|
+
}
|
|
30
|
+
else if (shType === 'DynamicShader') {
|
|
31
|
+
const effects = quad.shaderProps?.effects;
|
|
32
|
+
if (effects) {
|
|
33
|
+
const effect = effects.find((effect) => {
|
|
34
|
+
return effect.type === 'radius' && effect?.props?.radius;
|
|
35
|
+
});
|
|
36
|
+
return (effect && effect.type === 'radius' && effect.props.radius) || 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract `RoundedRectangle` shader radius to apply as a clipping */
|
|
44
|
+
export function getBorder(quad, direction = '') {
|
|
45
|
+
if (quad.shader instanceof UnsupportedShader) {
|
|
46
|
+
const shType = quad.shader.shType;
|
|
47
|
+
if (shType === 'DynamicShader') {
|
|
48
|
+
const effects = quad.shaderProps?.effects;
|
|
49
|
+
if (effects && effects.length) {
|
|
50
|
+
const effect = effects.find((effect) => {
|
|
51
|
+
return (effect.type === `border${direction}` &&
|
|
52
|
+
effect.props &&
|
|
53
|
+
effect.props.width);
|
|
54
|
+
});
|
|
55
|
+
return effect && effect.props;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
export function roundRect(x, y, width, height, radius) {
|
|
62
|
+
const context = Object.getPrototypeOf(this);
|
|
63
|
+
if (!context.roundRect) {
|
|
64
|
+
const fixOverlappingCorners = (radii) => {
|
|
65
|
+
const maxRadius = Math.min(width / 2, height / 2);
|
|
66
|
+
const totalHorizontal = radii.topLeft + radii.topRight + radii.bottomRight + radii.bottomLeft;
|
|
67
|
+
if (totalHorizontal > width || totalHorizontal > height) {
|
|
68
|
+
const scale = maxRadius /
|
|
69
|
+
Math.max(radii.topLeft, radii.topRight, radii.bottomRight, radii.bottomLeft);
|
|
70
|
+
radii.topLeft *= scale;
|
|
71
|
+
radii.topRight *= scale;
|
|
72
|
+
radii.bottomRight *= scale;
|
|
73
|
+
radii.bottomLeft *= scale;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const radii = typeof radius === 'number'
|
|
77
|
+
? {
|
|
78
|
+
topLeft: radius,
|
|
79
|
+
topRight: radius,
|
|
80
|
+
bottomRight: radius,
|
|
81
|
+
bottomLeft: radius,
|
|
82
|
+
}
|
|
83
|
+
: { topLeft: 0, topRight: 0, bottomRight: 0, bottomLeft: 0, ...radius };
|
|
84
|
+
fixOverlappingCorners(radii);
|
|
85
|
+
this.moveTo(x + radii.topLeft, y);
|
|
86
|
+
this.lineTo(x + width - radii.topRight, y);
|
|
87
|
+
this.ellipse(x + width - radii.topRight, y + radii.topRight, radii.topRight, radii.topRight, 0, 1.5 * Math.PI, 2 * Math.PI);
|
|
88
|
+
this.lineTo(x + width, y + height - radii.bottomRight);
|
|
89
|
+
this.ellipse(x + width - radii.bottomRight, y + height - radii.bottomRight, radii.bottomRight, radii.bottomRight, 0, 0, 0.5 * Math.PI);
|
|
90
|
+
this.lineTo(x + radii.bottomLeft, y + height);
|
|
91
|
+
this.ellipse(x + radii.bottomLeft, y + height - radii.bottomLeft, radii.bottomLeft, radii.bottomLeft, 0, 0.5 * Math.PI, Math.PI);
|
|
92
|
+
this.lineTo(x, y + radii.topLeft);
|
|
93
|
+
this.ellipse(x + radii.topLeft, y + radii.topLeft, radii.topLeft, radii.topLeft, 0, Math.PI, 1.5 * Math.PI);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.roundRect(x, y, width, height, radius);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function strokeLine(ctx, x, y, width, height, lineWidth = 0, color, direction) {
|
|
100
|
+
if (!lineWidth) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
let sx, sy = 0;
|
|
104
|
+
let ex, ey = 0;
|
|
105
|
+
switch (direction) {
|
|
106
|
+
case 'Top':
|
|
107
|
+
sx = x;
|
|
108
|
+
sy = y;
|
|
109
|
+
ex = width + x;
|
|
110
|
+
ey = y;
|
|
111
|
+
break;
|
|
112
|
+
case 'Right':
|
|
113
|
+
sx = x + width;
|
|
114
|
+
sy = y;
|
|
115
|
+
ex = x + width;
|
|
116
|
+
ey = y + height;
|
|
117
|
+
break;
|
|
118
|
+
case 'Bottom':
|
|
119
|
+
sx = x;
|
|
120
|
+
sy = y + height;
|
|
121
|
+
ex = x + width;
|
|
122
|
+
ey = y + height;
|
|
123
|
+
break;
|
|
124
|
+
case 'Left':
|
|
125
|
+
sx = x;
|
|
126
|
+
sy = y;
|
|
127
|
+
ex = x;
|
|
128
|
+
ey = y + height;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
ctx.beginPath();
|
|
132
|
+
ctx.lineWidth = lineWidth;
|
|
133
|
+
ctx.strokeStyle = formatRgba(parseColorRgba(color ?? 0));
|
|
134
|
+
ctx.moveTo(sx, sy);
|
|
135
|
+
ctx.lineTo(ex, ey);
|
|
136
|
+
ctx.stroke();
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=C2DShaderUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C2DShaderUtils.js","sourceRoot":"","sources":["../../../../../../src/core/renderers/canvas/internal/C2DShaderUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface IParsedColor {
|
|
2
|
+
isWhite: boolean;
|
|
3
|
+
a: number;
|
|
4
|
+
r: number;
|
|
5
|
+
g: number;
|
|
6
|
+
b: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Extract color components
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseColor(abgr: number): IParsedColor;
|
|
12
|
+
/**
|
|
13
|
+
* Extract color components
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseColorRgba(rgba: number): IParsedColor;
|
|
16
|
+
/**
|
|
17
|
+
* Format a parsed color into a rgba CSS color
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatRgba({ a, r, g, b }: IParsedColor): string;
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
const WHITE = {
|
|
20
|
+
isWhite: true,
|
|
21
|
+
a: 1,
|
|
22
|
+
r: 0xff,
|
|
23
|
+
g: 0xff,
|
|
24
|
+
b: 0xff,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Extract color components
|
|
28
|
+
*/
|
|
29
|
+
export function parseColor(abgr) {
|
|
30
|
+
if (abgr === 0xffffffff) {
|
|
31
|
+
return WHITE;
|
|
32
|
+
}
|
|
33
|
+
const a = ((abgr >>> 24) & 0xff) / 255;
|
|
34
|
+
const b = (abgr >>> 16) & 0xff & 0xff;
|
|
35
|
+
const g = (abgr >>> 8) & 0xff & 0xff;
|
|
36
|
+
const r = abgr & 0xff & 0xff;
|
|
37
|
+
return { isWhite: false, a, r, g, b };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Extract color components
|
|
41
|
+
*/
|
|
42
|
+
export function parseColorRgba(rgba) {
|
|
43
|
+
if (rgba === 0xffffffff) {
|
|
44
|
+
return WHITE;
|
|
45
|
+
}
|
|
46
|
+
const r = (rgba >>> 24) & 0xff;
|
|
47
|
+
const g = (rgba >>> 16) & 0xff & 0xff;
|
|
48
|
+
const b = (rgba >>> 8) & 0xff & 0xff;
|
|
49
|
+
const a = (rgba & 0xff & 0xff) / 255;
|
|
50
|
+
return { isWhite: false, r, g, b, a };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Format a parsed color into a rgba CSS color
|
|
54
|
+
*/
|
|
55
|
+
export function formatRgba({ a, r, g, b }) {
|
|
56
|
+
return `rgba(${r},${g},${b},${a})`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ColorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorUtils.js","sourceRoot":"","sources":["../../../../../../src/core/renderers/canvas/internal/ColorUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,MAAM,KAAK,GAAiB;IAC1B,OAAO,EAAE,IAAI;IACb,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,IAAI;CACR,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAgB;IACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,CAAC"}
|