@lightningjs/renderer 0.9.4 → 1.0.0-rc.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/README.md +0 -82
- package/dist/exports/index.d.ts +40 -3
- package/dist/exports/index.js +35 -3
- package/dist/exports/index.js.map +1 -1
- package/dist/src/core/CoreNode.d.ts +462 -46
- package/dist/src/core/CoreNode.js +171 -103
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +16 -6
- package/dist/src/core/CoreShaderManager.js +20 -20
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +30 -4
- package/dist/src/core/CoreTextNode.js +24 -1
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +31 -82
- package/dist/src/core/CoreTextureManager.js +39 -126
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +67 -9
- package/dist/src/core/Stage.js +174 -30
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureMemoryManager.d.ts +97 -8
- package/dist/src/core/TextureMemoryManager.js +142 -19
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +14 -6
- package/dist/src/core/animations/CoreAnimation.js +136 -44
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.js +59 -52
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platform.js +7 -1
- package/dist/src/core/platform.js.map +1 -1
- package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
- package/dist/src/core/renderers/CoreContextTexture.js +7 -1
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
- package/dist/src/core/renderers/CoreRenderer.js +0 -1
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
- 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 +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
- package/dist/src/core/textures/NoiseTexture.js +3 -0
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +2 -2
- package/dist/src/core/textures/SubTexture.js +5 -1
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +23 -2
- package/dist/src/core/textures/Texture.js +32 -3
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +7 -0
- package/dist/src/core/utils.js +12 -10
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +3 -9
- package/dist/src/main-api/DynamicShaderController.js +18 -17
- package/dist/src/main-api/DynamicShaderController.js.map +1 -1
- package/dist/src/main-api/INode.d.ts +43 -463
- package/dist/src/main-api/INode.js +1 -19
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +10 -10
- package/dist/src/main-api/Inspector.js +18 -15
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +27 -21
- package/dist/src/main-api/Renderer.js +38 -107
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/main-api/ShaderController.d.ts +3 -8
- package/dist/src/main-api/ShaderController.js +8 -3
- package/dist/src/main-api/ShaderController.js.map +1 -1
- package/dist/src/utils.d.ts +1 -0
- package/dist/src/utils.js +7 -0
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/index.ts +60 -3
- package/package.json +8 -7
- package/src/core/CoreNode.test.ts +93 -0
- package/src/core/CoreNode.ts +675 -187
- package/src/core/CoreShaderManager.ts +56 -29
- package/src/core/CoreTextNode.ts +41 -9
- package/src/core/CoreTextureManager.ts +55 -175
- package/src/core/Stage.ts +199 -43
- package/src/core/TextureMemoryManager.ts +231 -22
- package/src/core/animations/CoreAnimation.ts +193 -68
- package/src/core/lib/ImageWorker.ts +79 -52
- package/src/core/lib/utils.ts +1 -0
- package/src/core/platform.ts +8 -1
- package/src/core/renderers/CoreContextTexture.ts +9 -2
- package/src/core/renderers/CoreRenderer.ts +5 -2
- package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
- package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
- package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
- package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
- package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
- package/src/core/textures/ColorTexture.ts +1 -1
- package/src/core/textures/ImageTexture.ts +1 -1
- package/src/core/textures/NoiseTexture.ts +4 -1
- package/src/core/textures/SubTexture.ts +7 -7
- package/src/core/textures/Texture.ts +46 -3
- package/src/core/utils.ts +12 -11
- package/src/main-api/DynamicShaderController.ts +97 -0
- package/src/main-api/INode.ts +56 -479
- package/src/main-api/Inspector.ts +37 -39
- package/src/main-api/Renderer.ts +543 -0
- package/src/main-api/ShaderController.ts +81 -0
- package/src/main-api/utils.ts +45 -0
- package/src/utils.ts +8 -0
- package/dist/exports/core-api.d.ts +0 -74
- package/dist/exports/core-api.js +0 -96
- package/dist/exports/core-api.js.map +0 -1
- package/dist/exports/main-api.d.ts +0 -30
- package/dist/exports/main-api.js +0 -45
- package/dist/exports/main-api.js.map +0 -1
- package/dist/src/core/CoreExtension.d.ts +0 -12
- package/dist/src/core/CoreExtension.js +0 -29
- package/dist/src/core/CoreExtension.js.map +0 -1
- package/dist/src/core/renderers/SpecificNode.d.ts +0 -1
- package/dist/src/core/renderers/SpecificNode.js +0 -19
- package/dist/src/core/renderers/SpecificNode.js.map +0 -1
- package/dist/src/core/renderers/webgl/newShader/effectsMock.d.ts +0 -13
- package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -62
- package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
- package/dist/src/main-api/ICoreDriver.d.ts +0 -24
- package/dist/src/main-api/ICoreDriver.js +0 -20
- package/dist/src/main-api/ICoreDriver.js.map +0 -1
- package/dist/src/main-api/RendererMain.d.ts +0 -378
- package/dist/src/main-api/RendererMain.js +0 -367
- package/dist/src/main-api/RendererMain.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
- package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
- package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
- package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
- package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
- package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
- package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
- package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
- package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
- package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
- package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
- package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
- package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
- package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
- package/dist/src/render-drivers/utils.d.ts +0 -12
- package/dist/src/render-drivers/utils.js +0 -74
- package/dist/src/render-drivers/utils.js.map +0 -1
- package/exports/core-api.ts +0 -102
- package/exports/main-api.ts +0 -62
- package/src/core/CoreExtension.ts +0 -32
- package/src/main-api/ICoreDriver.ts +0 -68
- package/src/main-api/RendererMain.ts +0 -685
- package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
- package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
- package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
- package/src/render-drivers/main/MainCoreDriver.ts +0 -159
- package/src/render-drivers/main/MainOnlyNode.ts +0 -553
- package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
- package/src/render-drivers/threadx/NodeStruct.ts +0 -320
- package/src/render-drivers/threadx/SharedNode.ts +0 -101
- package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
- package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
- package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
- package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
- package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
- package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
- package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
- package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
- package/src/render-drivers/threadx/worker/renderer.ts +0 -156
- package/src/render-drivers/utils.ts +0 -102
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import type { CoreNode } from '../../CoreNode.js';
|
|
2
|
+
import type { CoreTextNode } from '../../CoreTextNode.js';
|
|
1
3
|
import type { Stage } from '../../Stage.js';
|
|
2
|
-
import type { Matrix3d } from '../../lib/Matrix3d.js';
|
|
3
|
-
import { type Bound, type BoundWithValid, type RectWithValid } from '../../lib/utils.js';
|
|
4
|
-
import type { ImageTexture } from '../../textures/ImageTexture.js';
|
|
5
4
|
import type { TrFontFace } from '../font-face-types/TrFontFace.js';
|
|
6
5
|
import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
|
|
7
6
|
import { LightningTextTextureRenderer, type RenderInfo } from './LightningTextTextureRenderer.js';
|
|
@@ -11,30 +10,21 @@ declare module './TextRenderer.js' {
|
|
|
11
10
|
canvas: CanvasTextRenderer;
|
|
12
11
|
}
|
|
13
12
|
}
|
|
14
|
-
interface CanvasPageInfo {
|
|
15
|
-
texture: ImageTexture | undefined;
|
|
16
|
-
lineNumStart: number;
|
|
17
|
-
lineNumEnd: number;
|
|
18
|
-
valid: boolean;
|
|
19
|
-
}
|
|
20
13
|
export interface CanvasTextRendererState extends TextRendererState {
|
|
14
|
+
node: CoreTextNode;
|
|
21
15
|
props: TrProps;
|
|
22
|
-
fontFaceLoadedHandler: (() => void) | undefined;
|
|
23
16
|
fontInfo: {
|
|
24
17
|
fontFace: WebTrFontFace;
|
|
25
18
|
cssString: string;
|
|
26
19
|
loaded: boolean;
|
|
27
20
|
} | undefined;
|
|
28
|
-
|
|
21
|
+
textureNode: CoreNode | undefined;
|
|
29
22
|
lightning2TextRenderer: LightningTextTextureRenderer;
|
|
30
23
|
renderInfo: RenderInfo | undefined;
|
|
31
|
-
renderWindow: Bound | undefined;
|
|
32
|
-
visibleWindow: BoundWithValid;
|
|
33
24
|
}
|
|
34
25
|
export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
|
|
35
26
|
protected canvas: OffscreenCanvas | HTMLCanvasElement;
|
|
36
27
|
protected context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
|
|
37
|
-
private rendererBounds;
|
|
38
28
|
/**
|
|
39
29
|
* Font family map used to store web font faces that were added to the
|
|
40
30
|
* canvas text renderer.
|
|
@@ -46,21 +36,16 @@ export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererS
|
|
|
46
36
|
canRenderFont(props: TrFontProps): boolean;
|
|
47
37
|
isFontFaceSupported(fontFace: TrFontFace): boolean;
|
|
48
38
|
addFontFace(fontFace: TrFontFace): void;
|
|
49
|
-
createState(props: TrProps): CanvasTextRendererState;
|
|
39
|
+
createState(props: TrProps, node: CoreTextNode): CanvasTextRendererState;
|
|
50
40
|
updateState(state: CanvasTextRendererState): void;
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
renderSingleCanvasPage(state: CanvasTextRendererState): void;
|
|
42
|
+
loadFont: (state: CanvasTextRendererState) => void;
|
|
43
|
+
calculateRenderInfo(state: CanvasTextRendererState): RenderInfo;
|
|
44
|
+
renderQuads(): void;
|
|
53
45
|
destroyState(state: CanvasTextRendererState): void;
|
|
54
|
-
/**
|
|
55
|
-
* Invalidate the visible window stored in the state. This will cause a new
|
|
56
|
-
* visible window to be calculated on the next update.
|
|
57
|
-
*
|
|
58
|
-
* @param state
|
|
59
|
-
*/
|
|
60
|
-
protected invalidateVisibleWindowCache(state: CanvasTextRendererState): void;
|
|
61
46
|
/**
|
|
62
47
|
* Invalidate the layout cache stored in the state. This will cause the text
|
|
63
|
-
* to be re-
|
|
48
|
+
* to be re-rendered on the next update.
|
|
64
49
|
*
|
|
65
50
|
* @remarks
|
|
66
51
|
* This also invalidates the visible window cache.
|
|
@@ -71,4 +56,3 @@ export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererS
|
|
|
71
56
|
private onFontLoaded;
|
|
72
57
|
private onFontLoadError;
|
|
73
58
|
}
|
|
74
|
-
export {};
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import { EventEmitter } from '../../../common/EventEmitter.js';
|
|
20
|
-
import { assertTruthy
|
|
21
|
-
import {
|
|
20
|
+
import { assertTruthy } from '../../../utils.js';
|
|
21
|
+
import { getNormalizedRgbaComponents, getNormalizedAlphaComponent, } from '../../lib/utils.js';
|
|
22
22
|
import { TrFontManager } from '../TrFontManager.js';
|
|
23
23
|
import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
|
|
24
24
|
import { LightningTextTextureRenderer, } from './LightningTextTextureRenderer.js';
|
|
@@ -33,18 +33,9 @@ function getFontCssString(props) {
|
|
|
33
33
|
const { fontFamily, fontStyle, fontWeight, fontStretch, fontSize } = props;
|
|
34
34
|
return [fontStyle, fontWeight, fontStretch, `${fontSize}px`, fontFamily].join(' ');
|
|
35
35
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Ephemeral bounds object used for intersection calculations
|
|
38
|
-
*
|
|
39
|
-
* @remarks
|
|
40
|
-
* Used to avoid creating a new object every time we need to intersect
|
|
41
|
-
* element bounds.
|
|
42
|
-
*/
|
|
43
|
-
const tmpElementBounds = createBound(0, 0, 0, 0);
|
|
44
36
|
export class CanvasTextRenderer extends TextRenderer {
|
|
45
37
|
canvas;
|
|
46
38
|
context;
|
|
47
|
-
rendererBounds;
|
|
48
39
|
/**
|
|
49
40
|
* Font family map used to store web font faces that were added to the
|
|
50
41
|
* canvas text renderer.
|
|
@@ -60,22 +51,20 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
60
51
|
this.canvas = document.createElement('canvas');
|
|
61
52
|
}
|
|
62
53
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
63
|
-
let context = this.canvas.getContext('2d'
|
|
54
|
+
let context = this.canvas.getContext('2d', {
|
|
55
|
+
willReadFrequently: true,
|
|
56
|
+
});
|
|
64
57
|
if (!context) {
|
|
65
58
|
// A browser may appear to support OffscreenCanvas but not actually support the Canvas '2d' context
|
|
66
59
|
// Here we try getting the context again after falling back to an HTMLCanvasElement.
|
|
67
60
|
// See: https://github.com/lightning-js/renderer/issues/26#issuecomment-1750438486
|
|
68
61
|
this.canvas = document.createElement('canvas');
|
|
69
|
-
context = this.canvas.getContext('2d'
|
|
62
|
+
context = this.canvas.getContext('2d', {
|
|
63
|
+
willReadFrequently: true,
|
|
64
|
+
});
|
|
70
65
|
}
|
|
71
66
|
assertTruthy(context);
|
|
72
67
|
this.context = context;
|
|
73
|
-
this.rendererBounds = {
|
|
74
|
-
x1: 0,
|
|
75
|
-
y1: 0,
|
|
76
|
-
x2: this.stage.options.appWidth,
|
|
77
|
-
y2: this.stage.options.appHeight,
|
|
78
|
-
};
|
|
79
68
|
// Install the default 'san-serif' font face
|
|
80
69
|
this.addFontFace(new WebTrFontFace({
|
|
81
70
|
fontFamily: 'sans-serif',
|
|
@@ -125,11 +114,9 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
125
114
|
},
|
|
126
115
|
x: (state, value) => {
|
|
127
116
|
state.props.x = value;
|
|
128
|
-
this.invalidateVisibleWindowCache(state);
|
|
129
117
|
},
|
|
130
118
|
y: (state, value) => {
|
|
131
119
|
state.props.y = value;
|
|
132
|
-
this.invalidateVisibleWindowCache(state);
|
|
133
120
|
},
|
|
134
121
|
contain: (state, value) => {
|
|
135
122
|
state.props.contain = value;
|
|
@@ -180,9 +167,6 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
180
167
|
state.props.overflowSuffix = value;
|
|
181
168
|
this.invalidateLayoutCache(state);
|
|
182
169
|
},
|
|
183
|
-
// debug: (state, value) => {
|
|
184
|
-
// state.props.debug = value;
|
|
185
|
-
// },
|
|
186
170
|
};
|
|
187
171
|
}
|
|
188
172
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -216,28 +200,20 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
216
200
|
}
|
|
217
201
|
faceSet.add(fontFace);
|
|
218
202
|
}
|
|
219
|
-
createState(props) {
|
|
203
|
+
createState(props, node) {
|
|
220
204
|
return {
|
|
205
|
+
node,
|
|
221
206
|
props,
|
|
222
207
|
status: 'initialState',
|
|
223
208
|
updateScheduled: false,
|
|
224
209
|
emitter: new EventEmitter(),
|
|
225
|
-
|
|
210
|
+
textureNode: undefined,
|
|
226
211
|
lightning2TextRenderer: new LightningTextTextureRenderer(this.canvas, this.context),
|
|
227
|
-
renderWindow: undefined,
|
|
228
|
-
visibleWindow: {
|
|
229
|
-
x1: 0,
|
|
230
|
-
y1: 0,
|
|
231
|
-
x2: 0,
|
|
232
|
-
y2: 0,
|
|
233
|
-
valid: false,
|
|
234
|
-
},
|
|
235
212
|
renderInfo: undefined,
|
|
236
213
|
forceFullLayoutCalc: false,
|
|
237
214
|
textW: 0,
|
|
238
215
|
textH: 0,
|
|
239
216
|
fontInfo: undefined,
|
|
240
|
-
fontFaceLoadedHandler: undefined,
|
|
241
217
|
isRenderable: false,
|
|
242
218
|
debugData: {
|
|
243
219
|
updateCount: 0,
|
|
@@ -254,363 +230,139 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
254
230
|
// On the first update call we need to set the status to loading
|
|
255
231
|
if (state.status === 'initialState') {
|
|
256
232
|
this.setStatus(state, 'loading');
|
|
233
|
+
// check if we're on screen
|
|
234
|
+
// if (this.isValidOnScreen(state) === true) {
|
|
235
|
+
// this.setStatus(state, 'loading');
|
|
236
|
+
// }
|
|
237
|
+
}
|
|
238
|
+
if (state.status === 'loaded') {
|
|
239
|
+
// If we're loaded, we don't need to do anything
|
|
240
|
+
return;
|
|
257
241
|
}
|
|
258
242
|
// If fontInfo is invalid, we need to establish it
|
|
259
243
|
if (!state.fontInfo) {
|
|
260
|
-
|
|
261
|
-
const trFontFace = TrFontManager.resolveFontFace(this.fontFamilyArray, state.props);
|
|
262
|
-
assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
|
|
263
|
-
state.fontInfo = {
|
|
264
|
-
fontFace: trFontFace,
|
|
265
|
-
cssString: cssString,
|
|
266
|
-
// TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
|
|
267
|
-
loaded: false,
|
|
268
|
-
};
|
|
269
|
-
// If font is not loaded, set up a handler to update the font info when the font loads
|
|
270
|
-
if (!state.fontInfo.loaded) {
|
|
271
|
-
globalFontSet
|
|
272
|
-
.load(cssString)
|
|
273
|
-
.then(this.onFontLoaded.bind(this, state, cssString))
|
|
274
|
-
.catch(this.onFontLoadError.bind(this, state, cssString));
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
244
|
+
return this.loadFont(state);
|
|
277
245
|
}
|
|
278
246
|
// If we're waiting for a font face to load, don't render anything
|
|
279
247
|
if (!state.fontInfo.loaded) {
|
|
280
248
|
return;
|
|
281
249
|
}
|
|
282
250
|
if (!state.renderInfo) {
|
|
283
|
-
state.
|
|
284
|
-
text: state.props.text,
|
|
285
|
-
textAlign: state.props.textAlign,
|
|
286
|
-
fontFamily: state.props.fontFamily,
|
|
287
|
-
trFontFace: state.fontInfo.fontFace,
|
|
288
|
-
fontSize: state.props.fontSize,
|
|
289
|
-
fontStyle: [
|
|
290
|
-
state.props.fontStretch,
|
|
291
|
-
state.props.fontStyle,
|
|
292
|
-
state.props.fontWeight,
|
|
293
|
-
].join(' '),
|
|
294
|
-
textColor: getNormalizedRgbaComponents(state.props.color),
|
|
295
|
-
offsetY: state.props.offsetY,
|
|
296
|
-
wordWrap: state.props.contain !== 'none',
|
|
297
|
-
wordWrapWidth: state.props.contain === 'none' ? undefined : state.props.width,
|
|
298
|
-
letterSpacing: state.props.letterSpacing,
|
|
299
|
-
lineHeight: state.props.lineHeight ?? null,
|
|
300
|
-
maxLines: state.props.maxLines,
|
|
301
|
-
maxHeight: state.props.contain === 'both'
|
|
302
|
-
? state.props.height - state.props.offsetY
|
|
303
|
-
: null,
|
|
304
|
-
textBaseline: state.props.textBaseline,
|
|
305
|
-
verticalAlign: state.props.verticalAlign,
|
|
306
|
-
overflowSuffix: state.props.overflowSuffix,
|
|
307
|
-
w: state.props.contain !== 'none' ? state.props.width : undefined,
|
|
308
|
-
};
|
|
309
|
-
// const renderInfoCalculateTime = performance.now();
|
|
310
|
-
state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
|
|
311
|
-
// console.log(
|
|
312
|
-
// 'Render info calculated in',
|
|
313
|
-
// performance.now() - renderInfoCalculateTime,
|
|
314
|
-
// 'ms',
|
|
315
|
-
// );
|
|
251
|
+
state.renderInfo = this.calculateRenderInfo(state);
|
|
316
252
|
state.textH = state.renderInfo.lineHeight * state.renderInfo.lines.length;
|
|
317
253
|
state.textW = state.renderInfo.width;
|
|
318
|
-
|
|
319
|
-
state.renderWindow = undefined;
|
|
320
|
-
}
|
|
321
|
-
const { x, y, width, height, scrollY, contain } = state.props;
|
|
322
|
-
const { visibleWindow } = state;
|
|
323
|
-
let { renderWindow, canvasPages } = state;
|
|
324
|
-
if (!visibleWindow.valid) {
|
|
325
|
-
// Figure out whats actually in the bounds of the renderer/canvas (visibleWindow)
|
|
326
|
-
const elementBounds = createBound(x, y, contain !== 'none' ? x + width : Infinity, contain === 'both' ? y + height : Infinity, tmpElementBounds);
|
|
327
|
-
/**
|
|
328
|
-
* Area that is visible on the screen.
|
|
329
|
-
*/
|
|
330
|
-
intersectBound(this.rendererBounds, elementBounds, visibleWindow);
|
|
331
|
-
visibleWindow.valid = true;
|
|
332
|
-
}
|
|
333
|
-
const visibleWindowHeight = visibleWindow.y2 - visibleWindow.y1;
|
|
334
|
-
const maxLinesPerCanvasPage = Math.ceil(visibleWindowHeight / state.renderInfo.lineHeight);
|
|
335
|
-
if (visibleWindowHeight === 0) {
|
|
336
|
-
// Nothing to render. Clear any canvasPages and existing renderWindow
|
|
337
|
-
// Return early.
|
|
338
|
-
canvasPages = undefined;
|
|
339
|
-
renderWindow = undefined;
|
|
340
|
-
this.setStatus(state, 'loaded');
|
|
341
|
-
return;
|
|
254
|
+
this.renderSingleCanvasPage(state);
|
|
342
255
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
else if (renderWindowScreenY1 > visibleWindow.y1) {
|
|
370
|
-
// We've scrolled down, so we need to render the previous page
|
|
371
|
-
renderWindow.y1 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
|
|
372
|
-
renderWindow.y2 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
|
|
373
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
374
|
-
canvasPages.unshift(canvasPages.pop());
|
|
375
|
-
canvasPages[0].lineNumStart =
|
|
376
|
-
canvasPages[1].lineNumStart - maxLinesPerCanvasPage;
|
|
377
|
-
canvasPages[0].lineNumEnd =
|
|
378
|
-
canvasPages[0].lineNumStart + maxLinesPerCanvasPage;
|
|
379
|
-
canvasPages[0].valid = false;
|
|
380
|
-
}
|
|
256
|
+
// handle scrollable text !!!
|
|
257
|
+
// if (state.isScrollable === true) {
|
|
258
|
+
// return this.renderScrollableCanvasPages(state);
|
|
259
|
+
// }
|
|
260
|
+
// handle single page text
|
|
261
|
+
}
|
|
262
|
+
renderSingleCanvasPage(state) {
|
|
263
|
+
assertTruthy(state.renderInfo);
|
|
264
|
+
const node = state.node;
|
|
265
|
+
const texture = this.stage.txManager.loadTexture('ImageTexture', {
|
|
266
|
+
src: function (lightning2TextRenderer, renderInfo) {
|
|
267
|
+
// load the canvas texture
|
|
268
|
+
assertTruthy(renderInfo);
|
|
269
|
+
lightning2TextRenderer.draw(renderInfo, {
|
|
270
|
+
lines: renderInfo.lines,
|
|
271
|
+
lineWidths: renderInfo.lineWidths,
|
|
272
|
+
});
|
|
273
|
+
if (this.canvas.width === 0 || this.canvas.height === 0) {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
return this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
|
|
277
|
+
}.bind(this, state.lightning2TextRenderer, state.renderInfo),
|
|
278
|
+
});
|
|
279
|
+
if (state.textureNode) {
|
|
280
|
+
// Use the existing texture node
|
|
281
|
+
state.textureNode.texture = texture;
|
|
381
282
|
}
|
|
382
283
|
else {
|
|
383
|
-
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
{
|
|
392
|
-
texture: canvasPages?.[0].texture,
|
|
393
|
-
lineNumStart: page0LineStart,
|
|
394
|
-
lineNumEnd: page0LineStart + maxLinesPerCanvasPage,
|
|
395
|
-
valid: false,
|
|
396
|
-
},
|
|
397
|
-
{
|
|
398
|
-
texture: canvasPages?.[1].texture,
|
|
399
|
-
lineNumStart: page1LineStart,
|
|
400
|
-
lineNumEnd: page1LineStart + maxLinesPerCanvasPage,
|
|
401
|
-
valid: false,
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
texture: canvasPages?.[2].texture,
|
|
405
|
-
lineNumStart: page2LineStart,
|
|
406
|
-
lineNumEnd: page2LineStart + maxLinesPerCanvasPage,
|
|
407
|
-
valid: false,
|
|
408
|
-
},
|
|
409
|
-
];
|
|
410
|
-
state.canvasPages = canvasPages;
|
|
411
|
-
const scrollYNearestPage = page1Block * pageHeight;
|
|
412
|
-
renderWindow = {
|
|
413
|
-
x1: 0,
|
|
414
|
-
y1: scrollYNearestPage - pageHeight,
|
|
415
|
-
x2: width,
|
|
416
|
-
y2: scrollYNearestPage + pageHeight * 2,
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
state.renderWindow = renderWindow;
|
|
420
|
-
const pageDrawTime = performance.now();
|
|
421
|
-
for (const pageInfo of canvasPages) {
|
|
422
|
-
if (pageInfo.valid)
|
|
423
|
-
continue;
|
|
424
|
-
if (pageInfo.lineNumStart < 0) {
|
|
425
|
-
pageInfo.texture?.setRenderableOwner(state, false);
|
|
426
|
-
pageInfo.texture = this.stage.txManager.loadTexture('ImageTexture', {
|
|
427
|
-
src: '',
|
|
428
|
-
});
|
|
429
|
-
pageInfo.texture.setRenderableOwner(state, state.isRenderable);
|
|
430
|
-
pageInfo.valid = true;
|
|
431
|
-
continue;
|
|
432
|
-
}
|
|
433
|
-
state.lightning2TextRenderer.draw(state.renderInfo, {
|
|
434
|
-
lines: state.renderInfo.lines.slice(pageInfo.lineNumStart, pageInfo.lineNumEnd),
|
|
435
|
-
lineWidths: state.renderInfo.lineWidths.slice(pageInfo.lineNumStart, pageInfo.lineNumEnd),
|
|
284
|
+
// Create a new texture node
|
|
285
|
+
const textureNode = this.stage.createNode({
|
|
286
|
+
parent: node,
|
|
287
|
+
texture,
|
|
288
|
+
autosize: true,
|
|
289
|
+
// The alpha channel of the color is ignored when rasterizing the text
|
|
290
|
+
// texture so we need to pass it directly to the texture node.
|
|
291
|
+
alpha: getNormalizedAlphaComponent(state.props.color),
|
|
436
292
|
});
|
|
437
|
-
|
|
438
|
-
pageInfo.texture?.setRenderableOwner(state, false);
|
|
439
|
-
pageInfo.texture = this.stage.txManager.loadTexture('ImageTexture', {
|
|
440
|
-
src: this.context.getImageData(0, 0, this.canvas.width, this.canvas.height),
|
|
441
|
-
}, {
|
|
442
|
-
preload: true,
|
|
443
|
-
});
|
|
444
|
-
pageInfo.texture.setRenderableOwner(state, state.isRenderable);
|
|
445
|
-
}
|
|
446
|
-
pageInfo.valid = true;
|
|
293
|
+
state.textureNode = textureNode;
|
|
447
294
|
}
|
|
448
|
-
// console.log('pageDrawTime', performance.now() - pageDrawTime, 'ms');
|
|
449
|
-
// Report final status
|
|
450
295
|
this.setStatus(state, 'loaded');
|
|
451
296
|
}
|
|
452
|
-
|
|
453
|
-
const
|
|
454
|
-
const
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
width: contain !== 'none' ? width : textW,
|
|
462
|
-
height: contain === 'both' ? height : textH,
|
|
297
|
+
loadFont = (state) => {
|
|
298
|
+
const cssString = getFontCssString(state.props);
|
|
299
|
+
const trFontFace = TrFontManager.resolveFontFace(this.fontFamilyArray, state.props);
|
|
300
|
+
assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
|
|
301
|
+
state.fontInfo = {
|
|
302
|
+
fontFace: trFontFace,
|
|
303
|
+
cssString: cssString,
|
|
304
|
+
// TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
|
|
305
|
+
loaded: false,
|
|
463
306
|
};
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
// renderer.enableScissor(
|
|
472
|
-
// visibleRect.x,
|
|
473
|
-
// visibleRect.y,
|
|
474
|
-
// visibleRect.w,
|
|
475
|
-
// visibleRect.h,
|
|
476
|
-
// );
|
|
477
|
-
// }
|
|
478
|
-
assertTruthy(canvasPages, 'canvasPages is not defined');
|
|
479
|
-
assertTruthy(renderWindow, 'renderWindow is not defined');
|
|
480
|
-
const renderWindowHeight = renderWindow.y2 - renderWindow.y1;
|
|
481
|
-
const pageSize = renderWindowHeight / 3.0;
|
|
482
|
-
const { zIndex, color } = state.props;
|
|
483
|
-
// Color alpha of text is not properly rendered to the Canvas texture, so we
|
|
484
|
-
// need to apply it here.
|
|
485
|
-
const combinedAlpha = alpha * getNormalizedAlphaComponent(color);
|
|
486
|
-
const quadColor = mergeColorAlphaPremultiplied(0xffffffff, combinedAlpha);
|
|
487
|
-
if (canvasPages[0].valid) {
|
|
488
|
-
this.stage.renderer.addQuad({
|
|
489
|
-
alpha: combinedAlpha,
|
|
490
|
-
clippingRect,
|
|
491
|
-
colorBl: quadColor,
|
|
492
|
-
colorBr: quadColor,
|
|
493
|
-
colorTl: quadColor,
|
|
494
|
-
colorTr: quadColor,
|
|
495
|
-
width: canvasPages[0].texture?.dimensions?.width || 0,
|
|
496
|
-
height: canvasPages[0].texture?.dimensions?.height || 0,
|
|
497
|
-
texture: canvasPages[0].texture,
|
|
498
|
-
textureOptions: {},
|
|
499
|
-
shader: null,
|
|
500
|
-
shaderProps: null,
|
|
501
|
-
zIndex,
|
|
502
|
-
tx: transform.tx,
|
|
503
|
-
ty: transform.ty - scrollY + renderWindow.y1,
|
|
504
|
-
ta: transform.ta,
|
|
505
|
-
tb: transform.tb,
|
|
506
|
-
tc: transform.tc,
|
|
507
|
-
td: transform.td,
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
if (canvasPages[1].valid) {
|
|
511
|
-
this.stage.renderer.addQuad({
|
|
512
|
-
alpha: combinedAlpha,
|
|
513
|
-
clippingRect,
|
|
514
|
-
colorBl: quadColor,
|
|
515
|
-
colorBr: quadColor,
|
|
516
|
-
colorTl: quadColor,
|
|
517
|
-
colorTr: quadColor,
|
|
518
|
-
width: canvasPages[1].texture?.dimensions?.width || 0,
|
|
519
|
-
height: canvasPages[1].texture?.dimensions?.height || 0,
|
|
520
|
-
texture: canvasPages[1].texture,
|
|
521
|
-
textureOptions: {},
|
|
522
|
-
shader: null,
|
|
523
|
-
shaderProps: null,
|
|
524
|
-
zIndex,
|
|
525
|
-
tx: transform.tx,
|
|
526
|
-
ty: transform.ty - scrollY + renderWindow.y1 + pageSize,
|
|
527
|
-
ta: transform.ta,
|
|
528
|
-
tb: transform.tb,
|
|
529
|
-
tc: transform.tc,
|
|
530
|
-
td: transform.td,
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
if (canvasPages[2].valid) {
|
|
534
|
-
this.stage.renderer.addQuad({
|
|
535
|
-
alpha: combinedAlpha,
|
|
536
|
-
clippingRect,
|
|
537
|
-
colorBl: quadColor,
|
|
538
|
-
colorBr: quadColor,
|
|
539
|
-
colorTl: quadColor,
|
|
540
|
-
colorTr: quadColor,
|
|
541
|
-
width: canvasPages[2].texture?.dimensions?.width || 0,
|
|
542
|
-
height: canvasPages[2].texture?.dimensions?.height || 0,
|
|
543
|
-
texture: canvasPages[2].texture,
|
|
544
|
-
textureOptions: {},
|
|
545
|
-
shader: null,
|
|
546
|
-
shaderProps: null,
|
|
547
|
-
zIndex,
|
|
548
|
-
tx: transform.tx,
|
|
549
|
-
ty: transform.ty - scrollY + renderWindow.y1 + pageSize + pageSize,
|
|
550
|
-
ta: transform.ta,
|
|
551
|
-
tb: transform.tb,
|
|
552
|
-
tc: transform.tc,
|
|
553
|
-
td: transform.td,
|
|
554
|
-
});
|
|
307
|
+
// If font is not loaded, set up a handler to update the font info when the font loads
|
|
308
|
+
if (!state.fontInfo.loaded) {
|
|
309
|
+
globalFontSet
|
|
310
|
+
.load(cssString)
|
|
311
|
+
.then(this.onFontLoaded.bind(this, state, cssString))
|
|
312
|
+
.catch(this.onFontLoadError.bind(this, state, cssString));
|
|
313
|
+
return;
|
|
555
314
|
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
315
|
+
};
|
|
316
|
+
calculateRenderInfo(state) {
|
|
317
|
+
state.lightning2TextRenderer.settings = {
|
|
318
|
+
text: state.props.text,
|
|
319
|
+
textAlign: state.props.textAlign,
|
|
320
|
+
fontFamily: state.props.fontFamily,
|
|
321
|
+
trFontFace: state.fontInfo?.fontFace,
|
|
322
|
+
fontSize: state.props.fontSize,
|
|
323
|
+
fontStyle: [
|
|
324
|
+
state.props.fontStretch,
|
|
325
|
+
state.props.fontStyle,
|
|
326
|
+
state.props.fontWeight,
|
|
327
|
+
].join(' '),
|
|
328
|
+
textColor: getNormalizedRgbaComponents(state.props.color),
|
|
329
|
+
offsetY: state.props.offsetY,
|
|
330
|
+
wordWrap: state.props.contain !== 'none',
|
|
331
|
+
wordWrapWidth: state.props.contain === 'none' ? undefined : state.props.width,
|
|
332
|
+
letterSpacing: state.props.letterSpacing,
|
|
333
|
+
lineHeight: state.props.lineHeight ?? null,
|
|
334
|
+
maxLines: state.props.maxLines,
|
|
335
|
+
maxHeight: state.props.contain === 'both'
|
|
336
|
+
? state.props.height - state.props.offsetY
|
|
337
|
+
: null,
|
|
338
|
+
textBaseline: state.props.textBaseline,
|
|
339
|
+
verticalAlign: state.props.verticalAlign,
|
|
340
|
+
overflowSuffix: state.props.overflowSuffix,
|
|
341
|
+
w: state.props.contain !== 'none' ? state.props.width : undefined,
|
|
342
|
+
};
|
|
343
|
+
state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
|
|
344
|
+
return state.renderInfo;
|
|
584
345
|
}
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
//
|
|
588
|
-
|
|
589
|
-
pageInfo.texture?.setRenderableOwner(state, renderable);
|
|
590
|
-
});
|
|
346
|
+
renderQuads() {
|
|
347
|
+
// Do nothing. The renderer will render the child node(s) that were created
|
|
348
|
+
// in the state update.
|
|
349
|
+
return;
|
|
591
350
|
}
|
|
592
351
|
destroyState(state) {
|
|
352
|
+
if (state.status === 'destroyed') {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
593
355
|
super.destroyState(state);
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
}
|
|
356
|
+
if (state.textureNode) {
|
|
357
|
+
state.textureNode.destroy();
|
|
358
|
+
delete state.textureNode;
|
|
359
|
+
}
|
|
360
|
+
delete state.renderInfo;
|
|
598
361
|
}
|
|
599
362
|
//#endregion Overrides
|
|
600
|
-
/**
|
|
601
|
-
* Invalidate the visible window stored in the state. This will cause a new
|
|
602
|
-
* visible window to be calculated on the next update.
|
|
603
|
-
*
|
|
604
|
-
* @param state
|
|
605
|
-
*/
|
|
606
|
-
invalidateVisibleWindowCache(state) {
|
|
607
|
-
state.visibleWindow.valid = false;
|
|
608
|
-
this.setStatus(state, 'loading');
|
|
609
|
-
this.scheduleUpdateState(state);
|
|
610
|
-
}
|
|
611
363
|
/**
|
|
612
364
|
* Invalidate the layout cache stored in the state. This will cause the text
|
|
613
|
-
* to be re-
|
|
365
|
+
* to be re-rendered on the next update.
|
|
614
366
|
*
|
|
615
367
|
* @remarks
|
|
616
368
|
* This also invalidates the visible window cache.
|
|
@@ -619,7 +371,6 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
619
371
|
*/
|
|
620
372
|
invalidateLayoutCache(state) {
|
|
621
373
|
state.renderInfo = undefined;
|
|
622
|
-
state.visibleWindow.valid = false;
|
|
623
374
|
this.setStatus(state, 'loading');
|
|
624
375
|
this.scheduleUpdateState(state);
|
|
625
376
|
}
|