@lightningjs/renderer 3.0.0-beta13 → 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 +6 -6
- package/dist/src/core/lib/WebGlContextWrapper.js +2 -2
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- 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/WebGlShaderProgram.d.ts +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +4 -5
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +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/WebGlContextWrapper.ts +4 -3
- package/src/core/lib/textureCompression.ts +4 -2
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +5 -6
- 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
|
@@ -28,6 +28,8 @@ import type { ImageTexture } from '../textures/ImageTexture.js';
|
|
|
28
28
|
import type { Stage } from '../Stage.js';
|
|
29
29
|
import type { CoreTextNode } from '../CoreTextNode.js';
|
|
30
30
|
import { UpdateType } from '../CoreNode.js';
|
|
31
|
+
import { hasZeroWidthSpace } from './Utils.js';
|
|
32
|
+
import { normalizeFontMetrics } from './TextLayoutEngine.js';
|
|
31
33
|
|
|
32
34
|
/**
|
|
33
35
|
* SDF Font Data structure matching msdf-bmfont-xml output
|
|
@@ -115,31 +117,24 @@ type KerningTable = Record<
|
|
|
115
117
|
* @typedef {Object} SdfFontCache
|
|
116
118
|
* Cached font data for performance
|
|
117
119
|
*/
|
|
118
|
-
interface
|
|
120
|
+
export interface SdfFont {
|
|
119
121
|
data: SdfFontData;
|
|
120
122
|
glyphMap: Map<number, SdfFontData['chars'][0]>;
|
|
121
123
|
kernings: KerningTable;
|
|
122
124
|
atlasTexture: ImageTexture;
|
|
123
|
-
metrics:
|
|
125
|
+
metrics: FontMetrics;
|
|
124
126
|
maxCharHeight: number;
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
//global state variables for SdfFontHandler
|
|
128
|
-
const fontCache
|
|
129
|
-
const loadedFonts = new Set<string>();
|
|
130
|
+
const fontCache = new Map<string, SdfFont>();
|
|
130
131
|
const fontLoadPromises = new Map<string, Promise<void>>();
|
|
131
|
-
const
|
|
132
|
+
const normalizedMetrics = new Map<string, NormalizedFontMetrics>();
|
|
133
|
+
const nodesWaitingForFont: Record<string, CoreTextNode[]> = Object.create(
|
|
134
|
+
null,
|
|
135
|
+
) as Record<string, CoreTextNode[]>;
|
|
132
136
|
let initialized = false;
|
|
133
137
|
|
|
134
|
-
/**
|
|
135
|
-
* Normalize font metrics to be in the range of 0 to 1
|
|
136
|
-
*/
|
|
137
|
-
const normalizeMetrics = (metrics: FontMetrics): NormalizedFontMetrics => ({
|
|
138
|
-
ascender: metrics.ascender / metrics.unitsPerEm,
|
|
139
|
-
descender: metrics.descender / metrics.unitsPerEm,
|
|
140
|
-
lineGap: metrics.lineGap / metrics.unitsPerEm,
|
|
141
|
-
});
|
|
142
|
-
|
|
143
138
|
/**
|
|
144
139
|
* Build kerning lookup table for fast access
|
|
145
140
|
* @param {Array} kernings - Kerning data from font
|
|
@@ -236,35 +231,31 @@ const processFontData = (
|
|
|
236
231
|
i++;
|
|
237
232
|
}
|
|
238
233
|
|
|
239
|
-
|
|
240
|
-
let normalizedMetrics: NormalizedFontMetrics;
|
|
241
|
-
|
|
242
|
-
if (metrics !== undefined) {
|
|
243
|
-
normalizedMetrics = normalizeMetrics(metrics);
|
|
244
|
-
} else if (fontData.lightningMetrics !== undefined) {
|
|
245
|
-
normalizedMetrics = normalizeMetrics(fontData.lightningMetrics);
|
|
246
|
-
} else {
|
|
234
|
+
if (metrics === undefined && fontData.lightningMetrics === undefined) {
|
|
247
235
|
console.warn(
|
|
248
236
|
`Font metrics not found for SDF font ${fontFamily}. ` +
|
|
249
237
|
'Make sure you are using the latest version of the Lightning ' +
|
|
250
238
|
'3 msdf-generator tool to generate your SDF fonts. Using default metrics.',
|
|
251
239
|
);
|
|
252
|
-
// Use default metrics
|
|
253
|
-
normalizedMetrics = {
|
|
254
|
-
ascender: 0.8,
|
|
255
|
-
descender: -0.2,
|
|
256
|
-
lineGap: 0.2,
|
|
257
|
-
};
|
|
258
240
|
}
|
|
241
|
+
|
|
242
|
+
metrics = metrics ||
|
|
243
|
+
fontData.lightningMetrics || {
|
|
244
|
+
ascender: 800,
|
|
245
|
+
descender: -200,
|
|
246
|
+
lineGap: 200,
|
|
247
|
+
unitsPerEm: 1000,
|
|
248
|
+
};
|
|
249
|
+
|
|
259
250
|
// Cache processed data
|
|
260
|
-
fontCache
|
|
251
|
+
fontCache.set(fontFamily, {
|
|
261
252
|
data: fontData,
|
|
262
253
|
glyphMap,
|
|
263
254
|
kernings,
|
|
264
255
|
atlasTexture,
|
|
265
|
-
metrics
|
|
256
|
+
metrics,
|
|
266
257
|
maxCharHeight,
|
|
267
|
-
};
|
|
258
|
+
});
|
|
268
259
|
};
|
|
269
260
|
|
|
270
261
|
/**
|
|
@@ -292,7 +283,7 @@ export const loadFont = async (
|
|
|
292
283
|
): Promise<void> => {
|
|
293
284
|
const { fontFamily, atlasUrl, atlasDataUrl, metrics } = options;
|
|
294
285
|
// Early return if already loaded
|
|
295
|
-
if (
|
|
286
|
+
if (fontCache.get(fontFamily) !== undefined) {
|
|
296
287
|
return;
|
|
297
288
|
}
|
|
298
289
|
|
|
@@ -341,7 +332,6 @@ export const loadFont = async (
|
|
|
341
332
|
if (atlasTexture.state === 'loaded') {
|
|
342
333
|
// If already loaded, process immediately
|
|
343
334
|
processFontData(fontFamily, fontData, atlasTexture, metrics);
|
|
344
|
-
loadedFonts.add(fontFamily);
|
|
345
335
|
fontLoadPromises.delete(fontFamily);
|
|
346
336
|
|
|
347
337
|
for (let key in nwff) {
|
|
@@ -355,8 +345,7 @@ export const loadFont = async (
|
|
|
355
345
|
// Process and cache font data
|
|
356
346
|
processFontData(fontFamily, fontData, atlasTexture, metrics);
|
|
357
347
|
|
|
358
|
-
//
|
|
359
|
-
loadedFonts.add(fontFamily);
|
|
348
|
+
// remove from promises
|
|
360
349
|
fontLoadPromises.delete(fontFamily);
|
|
361
350
|
|
|
362
351
|
for (let key in nwff) {
|
|
@@ -435,7 +424,7 @@ export const type = 'sdf';
|
|
|
435
424
|
* Check if a font is already loaded by font family
|
|
436
425
|
*/
|
|
437
426
|
export const isFontLoaded = (fontFamily: string): boolean => {
|
|
438
|
-
return
|
|
427
|
+
return fontCache.has(fontFamily);
|
|
439
428
|
};
|
|
440
429
|
|
|
441
430
|
/**
|
|
@@ -443,24 +432,26 @@ export const isFontLoaded = (fontFamily: string): boolean => {
|
|
|
443
432
|
*/
|
|
444
433
|
export const getFontMetrics = (
|
|
445
434
|
fontFamily: string,
|
|
446
|
-
|
|
435
|
+
|
|
447
436
|
fontSize: number,
|
|
448
437
|
): NormalizedFontMetrics => {
|
|
449
|
-
const
|
|
450
|
-
|
|
438
|
+
const out = normalizedMetrics.get(fontFamily);
|
|
439
|
+
if (out !== undefined) {
|
|
440
|
+
return out;
|
|
441
|
+
}
|
|
442
|
+
let metrics = fontCache.get(fontFamily)!.metrics;
|
|
443
|
+
return processFontMetrics(fontFamily, fontSize, metrics);
|
|
451
444
|
};
|
|
452
445
|
|
|
453
|
-
|
|
454
|
-
* Set font metrics for a font family
|
|
455
|
-
*/
|
|
456
|
-
export const setFontMetrics = (
|
|
446
|
+
export const processFontMetrics = (
|
|
457
447
|
fontFamily: string,
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
448
|
+
fontSize: number,
|
|
449
|
+
metrics: FontMetrics,
|
|
450
|
+
): NormalizedFontMetrics => {
|
|
451
|
+
const label = fontFamily + fontSize;
|
|
452
|
+
const normalized = normalizeFontMetrics(metrics, fontSize);
|
|
453
|
+
normalizedMetrics.set(label, normalized);
|
|
454
|
+
return normalized;
|
|
464
455
|
};
|
|
465
456
|
|
|
466
457
|
/**
|
|
@@ -473,7 +464,7 @@ export const getGlyph = (
|
|
|
473
464
|
fontFamily: string,
|
|
474
465
|
codepoint: number,
|
|
475
466
|
): SdfFontData['chars'][0] | null => {
|
|
476
|
-
const cache = fontCache
|
|
467
|
+
const cache = fontCache.get(fontFamily);
|
|
477
468
|
if (cache === undefined) return null;
|
|
478
469
|
|
|
479
470
|
return cache.glyphMap.get(codepoint) || cache.glyphMap.get(63) || null; // 63 = '?'
|
|
@@ -491,7 +482,7 @@ export const getKerning = (
|
|
|
491
482
|
firstGlyph: number,
|
|
492
483
|
secondGlyph: number,
|
|
493
484
|
): number => {
|
|
494
|
-
const cache = fontCache
|
|
485
|
+
const cache = fontCache.get(fontFamily);
|
|
495
486
|
if (cache === undefined) return 0;
|
|
496
487
|
|
|
497
488
|
const seconds = cache.kernings[secondGlyph];
|
|
@@ -504,7 +495,7 @@ export const getKerning = (
|
|
|
504
495
|
* @returns {ImageTexture|null} Atlas texture or null
|
|
505
496
|
*/
|
|
506
497
|
export const getAtlas = (fontFamily: string): ImageTexture | null => {
|
|
507
|
-
const cache = fontCache
|
|
498
|
+
const cache = fontCache.get(fontFamily);
|
|
508
499
|
return cache !== undefined ? cache.atlasTexture : null;
|
|
509
500
|
};
|
|
510
501
|
|
|
@@ -513,9 +504,8 @@ export const getAtlas = (fontFamily: string): ImageTexture | null => {
|
|
|
513
504
|
* @param {string} fontFamily - Font family name
|
|
514
505
|
* @returns {SdfFontData|null} Font data or null
|
|
515
506
|
*/
|
|
516
|
-
export const getFontData = (fontFamily: string):
|
|
517
|
-
|
|
518
|
-
return cache !== undefined ? cache.data : null;
|
|
507
|
+
export const getFontData = (fontFamily: string): SdfFont | undefined => {
|
|
508
|
+
return fontCache.get(fontFamily);
|
|
519
509
|
};
|
|
520
510
|
|
|
521
511
|
/**
|
|
@@ -524,7 +514,7 @@ export const getFontData = (fontFamily: string): SdfFontData | null => {
|
|
|
524
514
|
* @returns {number} Max character height or 0
|
|
525
515
|
*/
|
|
526
516
|
export const getMaxCharHeight = (fontFamily: string): number => {
|
|
527
|
-
const cache = fontCache
|
|
517
|
+
const cache = fontCache.get(fontFamily);
|
|
528
518
|
return cache !== undefined ? cache.maxCharHeight : 0;
|
|
529
519
|
};
|
|
530
520
|
|
|
@@ -533,7 +523,7 @@ export const getMaxCharHeight = (fontFamily: string): number => {
|
|
|
533
523
|
* @returns {string[]} Array of font family names
|
|
534
524
|
*/
|
|
535
525
|
export const getLoadedFonts = (): string[] => {
|
|
536
|
-
return Array.from(
|
|
526
|
+
return Array.from(fontCache.keys());
|
|
537
527
|
};
|
|
538
528
|
|
|
539
529
|
/**
|
|
@@ -541,14 +531,58 @@ export const getLoadedFonts = (): string[] => {
|
|
|
541
531
|
* @param {string} fontFamily - Font family name
|
|
542
532
|
*/
|
|
543
533
|
export const unloadFont = (fontFamily: string): void => {
|
|
544
|
-
const cache = fontCache
|
|
534
|
+
const cache = fontCache.get(fontFamily);
|
|
545
535
|
if (cache !== undefined) {
|
|
546
536
|
// Free texture if needed
|
|
547
537
|
if (typeof cache.atlasTexture.free === 'function') {
|
|
548
538
|
cache.atlasTexture.free();
|
|
549
539
|
}
|
|
550
540
|
|
|
551
|
-
delete
|
|
552
|
-
|
|
541
|
+
fontCache.delete(fontFamily);
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
export const measureText = (
|
|
546
|
+
text: string,
|
|
547
|
+
fontFamily: string,
|
|
548
|
+
letterSpacing: number,
|
|
549
|
+
): number => {
|
|
550
|
+
if (text.length === 1) {
|
|
551
|
+
const char = text.charAt(0);
|
|
552
|
+
const codepoint = text.codePointAt(0);
|
|
553
|
+
if (codepoint === undefined) return 0;
|
|
554
|
+
if (hasZeroWidthSpace(char) === true) return 0;
|
|
555
|
+
|
|
556
|
+
const glyph = getGlyph(fontFamily, codepoint);
|
|
557
|
+
if (glyph === null) return 0;
|
|
558
|
+
return glyph.xadvance + letterSpacing;
|
|
559
|
+
}
|
|
560
|
+
let width = 0;
|
|
561
|
+
let prevCodepoint = 0;
|
|
562
|
+
for (let i = 0; i < text.length; i++) {
|
|
563
|
+
const char = text.charAt(i);
|
|
564
|
+
const codepoint = text.codePointAt(i);
|
|
565
|
+
if (codepoint === undefined) continue;
|
|
566
|
+
|
|
567
|
+
// Skip zero-width spaces in width calculations
|
|
568
|
+
if (hasZeroWidthSpace(char)) {
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
const glyph = getGlyph(fontFamily, codepoint);
|
|
573
|
+
if (glyph === null) continue;
|
|
574
|
+
|
|
575
|
+
let advance = glyph.xadvance;
|
|
576
|
+
|
|
577
|
+
// Add kerning if there's a previous character
|
|
578
|
+
if (prevCodepoint !== 0) {
|
|
579
|
+
const kerning = getKerning(fontFamily, prevCodepoint, codepoint);
|
|
580
|
+
advance += kerning;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
width += advance + letterSpacing;
|
|
584
|
+
prevCodepoint = codepoint;
|
|
553
585
|
}
|
|
586
|
+
|
|
587
|
+
return width;
|
|
554
588
|
};
|
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
import type { Stage } from '../Stage.js';
|
|
21
21
|
import type {
|
|
22
22
|
FontHandler,
|
|
23
|
+
TextLineStruct,
|
|
23
24
|
TextRenderInfo,
|
|
24
25
|
TextRenderProps,
|
|
25
26
|
} from './TextRenderer.js';
|
|
26
27
|
import type { CoreTextNodeProps } from '../CoreTextNode.js';
|
|
27
|
-
import {
|
|
28
|
+
import { hasZeroWidthSpace } from './Utils.js';
|
|
28
29
|
import * as SdfFontHandler from './SdfFontHandler.js';
|
|
29
30
|
import type { CoreRenderer } from '../renderers/CoreRenderer.js';
|
|
30
31
|
import { WebGlRenderer } from '../renderers/webgl/WebGlRenderer.js';
|
|
@@ -35,7 +36,7 @@ import type { WebGlCtxTexture } from '../renderers/webgl/WebGlCtxTexture.js';
|
|
|
35
36
|
import type { WebGlShaderNode } from '../renderers/webgl/WebGlShaderNode.js';
|
|
36
37
|
import { mergeColorAlpha } from '../../utils.js';
|
|
37
38
|
import type { TextLayout, GlyphLayout } from './TextRenderer.js';
|
|
38
|
-
import {
|
|
39
|
+
import { mapTextLayout } from './TextLayoutEngine.js';
|
|
39
40
|
|
|
40
41
|
// Each glyph requires 6 vertices (2 triangles) with 4 floats each (x, y, u, v)
|
|
41
42
|
const FLOATS_PER_VERTEX = 4;
|
|
@@ -64,7 +65,7 @@ const font: FontHandler = SdfFontHandler;
|
|
|
64
65
|
* @param props - Text rendering properties
|
|
65
66
|
* @returns Object containing ImageData and dimensions
|
|
66
67
|
*/
|
|
67
|
-
const renderText = (
|
|
68
|
+
const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
|
|
68
69
|
// Early return if no text
|
|
69
70
|
if (props.text.length === 0) {
|
|
70
71
|
return {
|
|
@@ -75,7 +76,7 @@ const renderText = (stage: Stage, props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
75
76
|
|
|
76
77
|
// Get font cache for this font family
|
|
77
78
|
const fontData = SdfFontHandler.getFontData(props.fontFamily);
|
|
78
|
-
if (fontData ===
|
|
79
|
+
if (fontData === undefined) {
|
|
79
80
|
// Font not loaded, return empty result
|
|
80
81
|
return {
|
|
81
82
|
width: 0,
|
|
@@ -88,6 +89,8 @@ const renderText = (stage: Stage, props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
88
89
|
|
|
89
90
|
// For SDF renderer, ImageData is null since we render via WebGL
|
|
90
91
|
return {
|
|
92
|
+
remainingLines: 0,
|
|
93
|
+
hasRemainingText: false,
|
|
91
94
|
width: layout.width,
|
|
92
95
|
height: layout.height,
|
|
93
96
|
layout, // Cache layout for addQuads
|
|
@@ -187,7 +190,6 @@ const renderQuads = (
|
|
|
187
190
|
): void => {
|
|
188
191
|
const fontFamily = renderProps.fontFamily;
|
|
189
192
|
const color = renderProps.color;
|
|
190
|
-
const offsetY = renderProps.offsetY;
|
|
191
193
|
const worldAlpha = renderProps.worldAlpha;
|
|
192
194
|
const globalTransform = renderProps.globalTransform;
|
|
193
195
|
|
|
@@ -243,9 +245,7 @@ const renderQuads = (
|
|
|
243
245
|
transform: globalTransform,
|
|
244
246
|
color: mergeColorAlpha(color, worldAlpha),
|
|
245
247
|
size: layout.fontScale, // Use proper font scaling in shader
|
|
246
|
-
scrollY: offsetY || 0,
|
|
247
248
|
distanceRange: layout.distanceRange,
|
|
248
|
-
debug: false, // Disable debug mode
|
|
249
249
|
} satisfies SdfShaderProps,
|
|
250
250
|
sdfBuffers: webGlBuffers,
|
|
251
251
|
shader: sdfShader,
|
|
@@ -274,132 +274,79 @@ const renderQuads = (
|
|
|
274
274
|
*/
|
|
275
275
|
const generateTextLayout = (
|
|
276
276
|
props: CoreTextNodeProps,
|
|
277
|
-
|
|
277
|
+
fontCache: SdfFontHandler.SdfFont,
|
|
278
278
|
): TextLayout => {
|
|
279
|
-
const commonFontData = fontData.common;
|
|
280
|
-
const text = props.text;
|
|
281
279
|
const fontSize = props.fontSize;
|
|
282
|
-
const letterSpacing = props.letterSpacing;
|
|
283
280
|
const fontFamily = props.fontFamily;
|
|
284
|
-
const
|
|
285
|
-
const
|
|
286
|
-
const
|
|
287
|
-
const maxLines = props.maxLines;
|
|
288
|
-
const overflowSuffix = props.overflowSuffix;
|
|
289
|
-
const wordBreak = props.wordBreak;
|
|
290
|
-
|
|
291
|
-
// Use the font's design size for proper scaling
|
|
292
|
-
const designLineHeight = commonFontData.lineHeight;
|
|
281
|
+
const lineHeight = props.lineHeight;
|
|
282
|
+
const metrics = SdfFontHandler.getFontMetrics(fontFamily, fontSize);
|
|
283
|
+
const verticalAlign = props.verticalAlign;
|
|
293
284
|
|
|
285
|
+
const fontData = fontCache.data;
|
|
286
|
+
const commonFontData = fontData.common;
|
|
294
287
|
const designFontSize = fontData.info.size;
|
|
295
288
|
|
|
296
|
-
const lineHeight =
|
|
297
|
-
props.lineHeight || (designLineHeight * fontSize) / designFontSize;
|
|
298
289
|
const atlasWidth = commonFontData.scaleW;
|
|
299
290
|
const atlasHeight = commonFontData.scaleH;
|
|
300
291
|
|
|
301
292
|
// Calculate the pixel scale from design units to pixels
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
const
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
293
|
+
const fontScale = fontSize / designFontSize;
|
|
294
|
+
const letterSpacing = props.letterSpacing / fontScale;
|
|
295
|
+
|
|
296
|
+
const maxWidth = props.maxWidth / fontScale;
|
|
297
|
+
const maxHeight = props.maxHeight;
|
|
298
|
+
const [
|
|
299
|
+
lines,
|
|
300
|
+
remainingLines,
|
|
301
|
+
hasRemainingText,
|
|
302
|
+
bareLineHeight,
|
|
303
|
+
lineHeightPx,
|
|
304
|
+
effectiveWidth,
|
|
305
|
+
effectiveHeight,
|
|
306
|
+
] = mapTextLayout(
|
|
307
|
+
SdfFontHandler.measureText,
|
|
308
|
+
metrics,
|
|
309
|
+
props.text,
|
|
310
|
+
props.textAlign,
|
|
311
|
+
verticalAlign,
|
|
312
|
+
fontFamily,
|
|
313
|
+
lineHeight,
|
|
314
|
+
props.overflowSuffix,
|
|
315
|
+
props.wordBreak,
|
|
316
|
+
letterSpacing,
|
|
317
|
+
props.maxLines,
|
|
318
|
+
maxWidth,
|
|
319
|
+
maxHeight,
|
|
320
|
+
);
|
|
321
321
|
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
// Split text into lines based on wrapping constraints
|
|
325
|
-
const [lines, remainingLines, remainingText] = shouldWrapText
|
|
326
|
-
? wrapText(
|
|
327
|
-
text,
|
|
328
|
-
fontFamily,
|
|
329
|
-
finalScale,
|
|
330
|
-
maxWidth,
|
|
331
|
-
letterSpacing,
|
|
332
|
-
overflowSuffix,
|
|
333
|
-
wordBreak,
|
|
334
|
-
effectiveMaxLines,
|
|
335
|
-
hasMaxLines,
|
|
336
|
-
)
|
|
337
|
-
: measureLines(
|
|
338
|
-
text.split('\n'),
|
|
339
|
-
fontFamily,
|
|
340
|
-
letterSpacing,
|
|
341
|
-
finalScale,
|
|
342
|
-
effectiveMaxLines,
|
|
343
|
-
hasMaxLines,
|
|
344
|
-
);
|
|
322
|
+
const lineAmount = lines.length;
|
|
345
323
|
|
|
346
324
|
const glyphs: GlyphLayout[] = [];
|
|
347
|
-
let
|
|
325
|
+
let currentX = 0;
|
|
348
326
|
let currentY = 0;
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// Second pass: Generate glyph layouts with proper alignment
|
|
357
|
-
let lineIndex = 0;
|
|
358
|
-
const linesLength = lines.length;
|
|
359
|
-
|
|
360
|
-
while (lineIndex < linesLength) {
|
|
361
|
-
const [line, lineWidth] = lines[lineIndex]!;
|
|
362
|
-
lineIndex++;
|
|
363
|
-
|
|
364
|
-
// Calculate line X offset based on text alignment
|
|
365
|
-
let lineXOffset = 0;
|
|
366
|
-
if (textAlign === 'center') {
|
|
367
|
-
const availableWidth = shouldWrapText
|
|
368
|
-
? maxWidth / finalScale
|
|
369
|
-
: maxWidthFound;
|
|
370
|
-
lineXOffset = (availableWidth - lineWidth) / 2;
|
|
371
|
-
} else if (textAlign === 'right') {
|
|
372
|
-
const availableWidth = shouldWrapText
|
|
373
|
-
? maxWidth / finalScale
|
|
374
|
-
: maxWidthFound;
|
|
375
|
-
lineXOffset = availableWidth - lineWidth;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
let currentX = lineXOffset;
|
|
379
|
-
let charIndex = 0;
|
|
380
|
-
const lineLength = line.length;
|
|
327
|
+
for (let i = 0; i < lineAmount; i++) {
|
|
328
|
+
const line = lines[i] as TextLineStruct;
|
|
329
|
+
const textLine = line[0];
|
|
330
|
+
const textLineLength = textLine.length;
|
|
381
331
|
let prevCodepoint = 0;
|
|
332
|
+
currentX = line[2];
|
|
333
|
+
//convert Y coord to vertex value
|
|
334
|
+
currentY = line[3] / fontScale;
|
|
382
335
|
|
|
383
|
-
|
|
384
|
-
const char =
|
|
385
|
-
|
|
386
|
-
charIndex++;
|
|
387
|
-
|
|
388
|
-
if (codepoint === undefined) {
|
|
336
|
+
for (let j = 0; j < textLineLength; j++) {
|
|
337
|
+
const char = textLine.charAt(j);
|
|
338
|
+
if (hasZeroWidthSpace(char) === true) {
|
|
389
339
|
continue;
|
|
390
340
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if (isZeroWidthSpace(char)) {
|
|
341
|
+
const codepoint = char.codePointAt(0);
|
|
342
|
+
if (codepoint === undefined) {
|
|
394
343
|
continue;
|
|
395
344
|
}
|
|
396
|
-
|
|
397
345
|
// Get glyph data from font handler
|
|
398
346
|
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
399
347
|
if (glyph === null) {
|
|
400
348
|
continue;
|
|
401
349
|
}
|
|
402
|
-
|
|
403
350
|
// Calculate advance with kerning (in design units)
|
|
404
351
|
let advance = glyph.xadvance;
|
|
405
352
|
|
|
@@ -432,21 +379,20 @@ const generateTextLayout = (
|
|
|
432
379
|
glyphs.push(glyphLayout);
|
|
433
380
|
|
|
434
381
|
// Advance position with letter spacing (in design units)
|
|
435
|
-
currentX += advance +
|
|
382
|
+
currentX += advance + letterSpacing;
|
|
436
383
|
prevCodepoint = codepoint;
|
|
437
384
|
}
|
|
438
|
-
|
|
439
|
-
currentY += designLineHeight;
|
|
385
|
+
currentY += lineHeightPx;
|
|
440
386
|
}
|
|
441
387
|
|
|
442
388
|
// Convert final dimensions to pixel space for the layout
|
|
443
389
|
return {
|
|
444
390
|
glyphs,
|
|
445
|
-
distanceRange:
|
|
446
|
-
width:
|
|
447
|
-
height:
|
|
448
|
-
fontScale:
|
|
449
|
-
lineHeight,
|
|
391
|
+
distanceRange: fontScale * fontData.distanceField.distanceRange,
|
|
392
|
+
width: maxWidth || effectiveWidth * fontScale,
|
|
393
|
+
height: maxHeight || effectiveHeight,
|
|
394
|
+
fontScale: fontScale,
|
|
395
|
+
lineHeight: lineHeightPx,
|
|
450
396
|
fontFamily,
|
|
451
397
|
};
|
|
452
398
|
};
|