@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta16
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 +1 -2
- package/dist/src/core/CoreTextNode.js +43 -21
- 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 -3
- package/dist/src/core/animations/CoreAnimation.js +3 -3
- 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 +69 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +641 -0
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
- package/dist/src/core/shaders/canvas/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/CanvasFont.d.ts +14 -0
- package/dist/src/core/text-rendering/CanvasFont.js +111 -0
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
- package/dist/src/core/text-rendering/CanvasFontHandler.js +97 -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/CoreFont.d.ts +33 -0
- package/dist/src/core/text-rendering/CoreFont.js +48 -0
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
- package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
- package/dist/src/core/text-rendering/FontManager.js +42 -0
- package/dist/src/core/text-rendering/FontManager.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
- package/dist/src/core/text-rendering/SdfFont.js +142 -0
- package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
- package/dist/src/core/text-rendering/SdfFontHandler.js +79 -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 -107
- 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 +292 -13
- 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 +55 -27
- package/src/core/Stage.ts +2 -3
- package/src/core/animations/CoreAnimation.ts +8 -9
- 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 +139 -39
- package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
- package/src/core/text-rendering/SdfFontHandler.ts +97 -60
- package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
- package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +211 -145
- 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 +511 -17
- 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) {
|
|
@@ -388,6 +377,9 @@ export const loadFont = async (
|
|
|
388
377
|
* @param {CoreTextNode} node - Node that was waiting for the font
|
|
389
378
|
*/
|
|
390
379
|
export const waitingForFont = (fontFamily: string, node: CoreTextNode) => {
|
|
380
|
+
if (nodesWaitingForFont[fontFamily] === undefined) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
391
383
|
nodesWaitingForFont[fontFamily]![node.id] = node;
|
|
392
384
|
};
|
|
393
385
|
|
|
@@ -435,7 +427,7 @@ export const type = 'sdf';
|
|
|
435
427
|
* Check if a font is already loaded by font family
|
|
436
428
|
*/
|
|
437
429
|
export const isFontLoaded = (fontFamily: string): boolean => {
|
|
438
|
-
return
|
|
430
|
+
return fontCache.has(fontFamily);
|
|
439
431
|
};
|
|
440
432
|
|
|
441
433
|
/**
|
|
@@ -443,24 +435,26 @@ export const isFontLoaded = (fontFamily: string): boolean => {
|
|
|
443
435
|
*/
|
|
444
436
|
export const getFontMetrics = (
|
|
445
437
|
fontFamily: string,
|
|
446
|
-
|
|
438
|
+
|
|
447
439
|
fontSize: number,
|
|
448
440
|
): NormalizedFontMetrics => {
|
|
449
|
-
const
|
|
450
|
-
|
|
441
|
+
const out = normalizedMetrics.get(fontFamily);
|
|
442
|
+
if (out !== undefined) {
|
|
443
|
+
return out;
|
|
444
|
+
}
|
|
445
|
+
let metrics = fontCache.get(fontFamily)!.metrics;
|
|
446
|
+
return processFontMetrics(fontFamily, fontSize, metrics);
|
|
451
447
|
};
|
|
452
448
|
|
|
453
|
-
|
|
454
|
-
* Set font metrics for a font family
|
|
455
|
-
*/
|
|
456
|
-
export const setFontMetrics = (
|
|
449
|
+
export const processFontMetrics = (
|
|
457
450
|
fontFamily: string,
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
451
|
+
fontSize: number,
|
|
452
|
+
metrics: FontMetrics,
|
|
453
|
+
): NormalizedFontMetrics => {
|
|
454
|
+
const label = fontFamily + fontSize;
|
|
455
|
+
const normalized = normalizeFontMetrics(metrics, fontSize);
|
|
456
|
+
normalizedMetrics.set(label, normalized);
|
|
457
|
+
return normalized;
|
|
464
458
|
};
|
|
465
459
|
|
|
466
460
|
/**
|
|
@@ -473,7 +467,7 @@ export const getGlyph = (
|
|
|
473
467
|
fontFamily: string,
|
|
474
468
|
codepoint: number,
|
|
475
469
|
): SdfFontData['chars'][0] | null => {
|
|
476
|
-
const cache = fontCache
|
|
470
|
+
const cache = fontCache.get(fontFamily);
|
|
477
471
|
if (cache === undefined) return null;
|
|
478
472
|
|
|
479
473
|
return cache.glyphMap.get(codepoint) || cache.glyphMap.get(63) || null; // 63 = '?'
|
|
@@ -491,7 +485,7 @@ export const getKerning = (
|
|
|
491
485
|
firstGlyph: number,
|
|
492
486
|
secondGlyph: number,
|
|
493
487
|
): number => {
|
|
494
|
-
const cache = fontCache
|
|
488
|
+
const cache = fontCache.get(fontFamily);
|
|
495
489
|
if (cache === undefined) return 0;
|
|
496
490
|
|
|
497
491
|
const seconds = cache.kernings[secondGlyph];
|
|
@@ -504,7 +498,7 @@ export const getKerning = (
|
|
|
504
498
|
* @returns {ImageTexture|null} Atlas texture or null
|
|
505
499
|
*/
|
|
506
500
|
export const getAtlas = (fontFamily: string): ImageTexture | null => {
|
|
507
|
-
const cache = fontCache
|
|
501
|
+
const cache = fontCache.get(fontFamily);
|
|
508
502
|
return cache !== undefined ? cache.atlasTexture : null;
|
|
509
503
|
};
|
|
510
504
|
|
|
@@ -513,9 +507,8 @@ export const getAtlas = (fontFamily: string): ImageTexture | null => {
|
|
|
513
507
|
* @param {string} fontFamily - Font family name
|
|
514
508
|
* @returns {SdfFontData|null} Font data or null
|
|
515
509
|
*/
|
|
516
|
-
export const getFontData = (fontFamily: string):
|
|
517
|
-
|
|
518
|
-
return cache !== undefined ? cache.data : null;
|
|
510
|
+
export const getFontData = (fontFamily: string): SdfFont | undefined => {
|
|
511
|
+
return fontCache.get(fontFamily);
|
|
519
512
|
};
|
|
520
513
|
|
|
521
514
|
/**
|
|
@@ -524,7 +517,7 @@ export const getFontData = (fontFamily: string): SdfFontData | null => {
|
|
|
524
517
|
* @returns {number} Max character height or 0
|
|
525
518
|
*/
|
|
526
519
|
export const getMaxCharHeight = (fontFamily: string): number => {
|
|
527
|
-
const cache = fontCache
|
|
520
|
+
const cache = fontCache.get(fontFamily);
|
|
528
521
|
return cache !== undefined ? cache.maxCharHeight : 0;
|
|
529
522
|
};
|
|
530
523
|
|
|
@@ -533,7 +526,7 @@ export const getMaxCharHeight = (fontFamily: string): number => {
|
|
|
533
526
|
* @returns {string[]} Array of font family names
|
|
534
527
|
*/
|
|
535
528
|
export const getLoadedFonts = (): string[] => {
|
|
536
|
-
return Array.from(
|
|
529
|
+
return Array.from(fontCache.keys());
|
|
537
530
|
};
|
|
538
531
|
|
|
539
532
|
/**
|
|
@@ -541,14 +534,58 @@ export const getLoadedFonts = (): string[] => {
|
|
|
541
534
|
* @param {string} fontFamily - Font family name
|
|
542
535
|
*/
|
|
543
536
|
export const unloadFont = (fontFamily: string): void => {
|
|
544
|
-
const cache = fontCache
|
|
537
|
+
const cache = fontCache.get(fontFamily);
|
|
545
538
|
if (cache !== undefined) {
|
|
546
539
|
// Free texture if needed
|
|
547
540
|
if (typeof cache.atlasTexture.free === 'function') {
|
|
548
541
|
cache.atlasTexture.free();
|
|
549
542
|
}
|
|
550
543
|
|
|
551
|
-
delete
|
|
552
|
-
loadedFonts.delete(fontFamily);
|
|
544
|
+
fontCache.delete(fontFamily);
|
|
553
545
|
}
|
|
554
546
|
};
|
|
547
|
+
|
|
548
|
+
export const measureText = (
|
|
549
|
+
text: string,
|
|
550
|
+
fontFamily: string,
|
|
551
|
+
letterSpacing: number,
|
|
552
|
+
): number => {
|
|
553
|
+
if (text.length === 1) {
|
|
554
|
+
const char = text.charAt(0);
|
|
555
|
+
const codepoint = text.codePointAt(0);
|
|
556
|
+
if (codepoint === undefined) return 0;
|
|
557
|
+
if (hasZeroWidthSpace(char) === true) return 0;
|
|
558
|
+
|
|
559
|
+
const glyph = getGlyph(fontFamily, codepoint);
|
|
560
|
+
if (glyph === null) return 0;
|
|
561
|
+
return glyph.xadvance + letterSpacing;
|
|
562
|
+
}
|
|
563
|
+
let width = 0;
|
|
564
|
+
let prevCodepoint = 0;
|
|
565
|
+
for (let i = 0; i < text.length; i++) {
|
|
566
|
+
const char = text.charAt(i);
|
|
567
|
+
const codepoint = text.codePointAt(i);
|
|
568
|
+
if (codepoint === undefined) continue;
|
|
569
|
+
|
|
570
|
+
// Skip zero-width spaces in width calculations
|
|
571
|
+
if (hasZeroWidthSpace(char)) {
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
const glyph = getGlyph(fontFamily, codepoint);
|
|
576
|
+
if (glyph === null) continue;
|
|
577
|
+
|
|
578
|
+
let advance = glyph.xadvance;
|
|
579
|
+
|
|
580
|
+
// Add kerning if there's a previous character
|
|
581
|
+
if (prevCodepoint !== 0) {
|
|
582
|
+
const kerning = getKerning(fontFamily, prevCodepoint, codepoint);
|
|
583
|
+
advance += kerning;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
width += advance + letterSpacing;
|
|
587
|
+
prevCodepoint = codepoint;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return width;
|
|
591
|
+
};
|
|
@@ -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: effectiveWidth * fontScale,
|
|
393
|
+
height: effectiveHeight,
|
|
394
|
+
fontScale: fontScale,
|
|
395
|
+
lineHeight: lineHeightPx,
|
|
450
396
|
fontFamily,
|
|
451
397
|
};
|
|
452
398
|
};
|