@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
|
@@ -1,37 +1,142 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import type {
|
|
2
|
+
FontMetrics,
|
|
3
|
+
MeasureTextFn,
|
|
4
|
+
NormalizedFontMetrics,
|
|
5
|
+
TextLayoutStruct,
|
|
6
|
+
TextLineStruct,
|
|
7
|
+
WrappedLinesStruct,
|
|
8
|
+
} from './TextRenderer.js';
|
|
9
|
+
|
|
10
|
+
export const defaultFontMetrics: FontMetrics = {
|
|
11
|
+
ascender: 800,
|
|
12
|
+
descender: -200,
|
|
13
|
+
lineGap: 200,
|
|
14
|
+
unitsPerEm: 1000,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const normalizeFontMetrics = (
|
|
18
|
+
metrics: FontMetrics,
|
|
19
|
+
fontSize: number,
|
|
20
|
+
): NormalizedFontMetrics => {
|
|
21
|
+
const scale = fontSize / metrics.unitsPerEm;
|
|
22
|
+
return {
|
|
23
|
+
ascender: metrics.ascender * scale,
|
|
24
|
+
descender: metrics.descender * scale,
|
|
25
|
+
lineGap: metrics.lineGap * scale,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const mapTextLayout = (
|
|
30
|
+
measureText: MeasureTextFn,
|
|
31
|
+
metrics: NormalizedFontMetrics,
|
|
32
|
+
text: string,
|
|
33
|
+
textAlign: string,
|
|
34
|
+
verticalAlign: string,
|
|
35
|
+
fontFamily: string,
|
|
36
|
+
lineHeight: number,
|
|
37
|
+
overflowSuffix: string,
|
|
38
|
+
wordBreak: string,
|
|
39
|
+
letterSpacing: number,
|
|
40
|
+
maxLines: number,
|
|
41
|
+
maxWidth: number,
|
|
42
|
+
maxHeight: number,
|
|
43
|
+
): TextLayoutStruct => {
|
|
44
|
+
const ascPx = metrics.ascender;
|
|
45
|
+
const descPx = metrics.descender;
|
|
46
|
+
|
|
47
|
+
const bareLineHeight = ascPx - descPx;
|
|
48
|
+
const lineHeightPx =
|
|
49
|
+
lineHeight <= 3 ? lineHeight * bareLineHeight : lineHeight;
|
|
50
|
+
const lineHeightDelta = lineHeightPx - bareLineHeight;
|
|
51
|
+
const halfDelta = lineHeightDelta * 0.5;
|
|
52
|
+
|
|
53
|
+
let effectiveMaxLines = maxLines;
|
|
54
|
+
if (maxHeight > 0) {
|
|
55
|
+
const maxFromHeight = Math.floor(maxHeight / lineHeightPx);
|
|
56
|
+
if (effectiveMaxLines === 0 || maxFromHeight < effectiveMaxLines) {
|
|
57
|
+
effectiveMaxLines = maxFromHeight;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const wrappedText = maxWidth > 0;
|
|
62
|
+
//wrapText or just measureLines based on maxWidth
|
|
63
|
+
const [lines, remainingLines, remainingText] =
|
|
64
|
+
wrappedText === true
|
|
65
|
+
? wrapText(
|
|
66
|
+
measureText,
|
|
67
|
+
text,
|
|
68
|
+
fontFamily,
|
|
69
|
+
maxWidth,
|
|
70
|
+
letterSpacing,
|
|
71
|
+
overflowSuffix,
|
|
72
|
+
wordBreak,
|
|
73
|
+
maxLines,
|
|
74
|
+
)
|
|
75
|
+
: measureLines(
|
|
76
|
+
measureText,
|
|
77
|
+
text.split('\n'),
|
|
78
|
+
fontFamily,
|
|
79
|
+
letterSpacing,
|
|
80
|
+
maxLines,
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
let effectiveLineAmount = lines.length;
|
|
84
|
+
let effectiveMaxWidth = lines[0]![1];
|
|
85
|
+
|
|
86
|
+
//check for longest line
|
|
87
|
+
if (effectiveLineAmount > 1) {
|
|
88
|
+
for (let i = 1; i < effectiveLineAmount; i++) {
|
|
89
|
+
effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i]![1]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//update line x offsets
|
|
94
|
+
if (textAlign !== 'left') {
|
|
95
|
+
const maxW = wrappedText === true ? maxWidth : effectiveMaxWidth;
|
|
96
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
97
|
+
const line = lines[i]!;
|
|
98
|
+
const w = line[1];
|
|
99
|
+
line[2] = textAlign === 'right' ? maxW - w : (maxW - w) / 2;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
|
|
104
|
+
|
|
105
|
+
let firstBaseLine = halfDelta;
|
|
106
|
+
if (maxHeight > 0 && verticalAlign !== 'top') {
|
|
107
|
+
if (verticalAlign === 'middle') {
|
|
108
|
+
firstBaseLine += (maxHeight - effectiveMaxHeight) / 2;
|
|
109
|
+
} else {
|
|
110
|
+
firstBaseLine += maxHeight - effectiveMaxHeight;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const startY = firstBaseLine;
|
|
115
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
116
|
+
const line = lines[i] as TextLineStruct;
|
|
117
|
+
line[3] = startY + lineHeightPx * i;
|
|
118
|
+
}
|
|
19
119
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
120
|
+
return [
|
|
121
|
+
lines,
|
|
122
|
+
remainingLines,
|
|
123
|
+
remainingText,
|
|
124
|
+
bareLineHeight,
|
|
125
|
+
lineHeightPx,
|
|
126
|
+
effectiveMaxWidth,
|
|
127
|
+
effectiveMaxHeight,
|
|
128
|
+
];
|
|
129
|
+
};
|
|
23
130
|
|
|
24
131
|
export const measureLines = (
|
|
132
|
+
measureText: MeasureTextFn,
|
|
25
133
|
lines: string[],
|
|
26
134
|
fontFamily: string,
|
|
27
135
|
letterSpacing: number,
|
|
28
|
-
fontScale: number,
|
|
29
136
|
maxLines: number,
|
|
30
|
-
hasMaxLines: boolean,
|
|
31
137
|
): WrappedLinesStruct => {
|
|
32
138
|
const measuredLines: TextLineStruct[] = [];
|
|
33
|
-
|
|
34
|
-
let remainingLines = hasMaxLines === true ? maxLines : lines.length;
|
|
139
|
+
let remainingLines = maxLines > 0 ? maxLines : lines.length;
|
|
35
140
|
let i = 0;
|
|
36
141
|
|
|
37
142
|
while (remainingLines > 0) {
|
|
@@ -41,71 +146,90 @@ export const measureLines = (
|
|
|
41
146
|
if (line === undefined) {
|
|
42
147
|
continue;
|
|
43
148
|
}
|
|
44
|
-
const width = measureText(line, fontFamily,
|
|
45
|
-
measuredLines.push([line, width]);
|
|
149
|
+
const width = measureText(line, fontFamily, letterSpacing);
|
|
150
|
+
measuredLines.push([line, width, 0, 0]);
|
|
46
151
|
}
|
|
47
152
|
|
|
48
153
|
return [
|
|
49
154
|
measuredLines,
|
|
50
155
|
remainingLines,
|
|
51
|
-
|
|
156
|
+
maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
|
|
52
157
|
];
|
|
53
158
|
};
|
|
54
|
-
|
|
55
|
-
* Wrap text for SDF rendering with proper width constraints
|
|
56
|
-
*/
|
|
159
|
+
|
|
57
160
|
export const wrapText = (
|
|
161
|
+
measureText: MeasureTextFn,
|
|
58
162
|
text: string,
|
|
59
163
|
fontFamily: string,
|
|
60
|
-
fontScale: number,
|
|
61
164
|
maxWidth: number,
|
|
62
165
|
letterSpacing: number,
|
|
63
166
|
overflowSuffix: string,
|
|
64
167
|
wordBreak: string,
|
|
65
168
|
maxLines: number,
|
|
66
|
-
hasMaxLines: boolean,
|
|
67
169
|
): WrappedLinesStruct => {
|
|
68
170
|
const lines = text.split('\n');
|
|
69
171
|
const wrappedLines: TextLineStruct[] = [];
|
|
70
|
-
const maxWidthInDesignUnits = maxWidth / fontScale;
|
|
71
|
-
const designLetterSpacing = letterSpacing * fontScale;
|
|
72
172
|
|
|
73
173
|
// Calculate space width for line wrapping
|
|
74
|
-
const spaceWidth = measureText(' ', fontFamily,
|
|
174
|
+
const spaceWidth = measureText(' ', fontFamily, letterSpacing);
|
|
75
175
|
|
|
76
176
|
let wrappedLine: TextLineStruct[] = [];
|
|
77
177
|
let remainingLines = maxLines;
|
|
78
178
|
let hasRemainingText = true;
|
|
179
|
+
let hasMaxLines = maxLines > 0;
|
|
79
180
|
|
|
80
181
|
for (let i = 0; i < lines.length; i++) {
|
|
81
|
-
const line = lines[i]
|
|
182
|
+
const line = lines[i];
|
|
183
|
+
if (line === undefined) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
82
186
|
|
|
83
|
-
[wrappedLine, remainingLines, hasRemainingText] =
|
|
84
|
-
line
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
187
|
+
[wrappedLine, remainingLines, hasRemainingText] =
|
|
188
|
+
line.length > 0
|
|
189
|
+
? wrapLine(
|
|
190
|
+
measureText,
|
|
191
|
+
line,
|
|
192
|
+
fontFamily,
|
|
193
|
+
maxWidth,
|
|
194
|
+
letterSpacing,
|
|
195
|
+
spaceWidth,
|
|
196
|
+
overflowSuffix,
|
|
197
|
+
wordBreak,
|
|
198
|
+
remainingLines,
|
|
199
|
+
hasMaxLines,
|
|
200
|
+
)
|
|
201
|
+
: [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
|
|
94
202
|
|
|
203
|
+
remainingLines--;
|
|
95
204
|
wrappedLines.push(...wrappedLine);
|
|
205
|
+
|
|
206
|
+
if (hasMaxLines === true && remainingLines <= 0) {
|
|
207
|
+
const lastLine = wrappedLines[wrappedLines.length - 1]!;
|
|
208
|
+
if (i < lines.length - 1) {
|
|
209
|
+
if (lastLine[0].endsWith(overflowSuffix) === false) {
|
|
210
|
+
lastLine[0] = truncateLineWithSuffix(
|
|
211
|
+
measureText,
|
|
212
|
+
lastLine[0],
|
|
213
|
+
fontFamily,
|
|
214
|
+
maxWidth,
|
|
215
|
+
letterSpacing,
|
|
216
|
+
overflowSuffix,
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
96
222
|
}
|
|
97
223
|
|
|
98
224
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
99
225
|
};
|
|
100
226
|
|
|
101
|
-
/**
|
|
102
|
-
* Wrap a single line of text for SDF rendering
|
|
103
|
-
*/
|
|
104
227
|
export const wrapLine = (
|
|
228
|
+
measureText: MeasureTextFn,
|
|
105
229
|
line: string,
|
|
106
230
|
fontFamily: string,
|
|
107
231
|
maxWidth: number,
|
|
108
|
-
|
|
232
|
+
letterSpacing: number,
|
|
109
233
|
spaceWidth: number,
|
|
110
234
|
overflowSuffix: string,
|
|
111
235
|
wordBreak: string,
|
|
@@ -129,7 +253,7 @@ export const wrapLine = (
|
|
|
129
253
|
continue;
|
|
130
254
|
}
|
|
131
255
|
const space = spaces[i - 1] || '';
|
|
132
|
-
const wordWidth = measureText(word, fontFamily,
|
|
256
|
+
const wordWidth = measureText(word, fontFamily, letterSpacing);
|
|
133
257
|
// For width calculation, treat ZWSP as having 0 width but regular space functionality
|
|
134
258
|
const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
|
|
135
259
|
const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
|
|
@@ -165,25 +289,23 @@ export const wrapLine = (
|
|
|
165
289
|
}
|
|
166
290
|
|
|
167
291
|
if (wordBreak !== 'break-all' && currentLine.length > 0) {
|
|
168
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
169
|
-
currentLine = '';
|
|
170
|
-
currentLineWidth = 0;
|
|
171
|
-
remainingLines--;
|
|
292
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
172
293
|
}
|
|
173
294
|
|
|
174
295
|
if (wordBreak !== 'break-all') {
|
|
296
|
+
remainingLines--;
|
|
175
297
|
currentLine = word;
|
|
176
298
|
currentLineWidth = wordWidth;
|
|
177
299
|
}
|
|
178
300
|
|
|
179
301
|
if (wordBreak === 'break-word') {
|
|
180
302
|
const [lines, rl, rt] = breakWord(
|
|
303
|
+
measureText,
|
|
181
304
|
word,
|
|
182
305
|
fontFamily,
|
|
183
306
|
maxWidth,
|
|
184
|
-
|
|
307
|
+
letterSpacing,
|
|
185
308
|
remainingLines,
|
|
186
|
-
hasMaxLines,
|
|
187
309
|
);
|
|
188
310
|
remainingLines = rl;
|
|
189
311
|
hasRemainingText = rt;
|
|
@@ -198,16 +320,17 @@ export const wrapLine = (
|
|
|
198
320
|
}
|
|
199
321
|
}
|
|
200
322
|
} else if (wordBreak === 'break-all') {
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
323
|
+
const firstLetterWidth = measureText(
|
|
324
|
+
word.charAt(0),
|
|
325
|
+
fontFamily,
|
|
326
|
+
letterSpacing,
|
|
327
|
+
);
|
|
205
328
|
let linebreak = false;
|
|
206
329
|
if (
|
|
207
330
|
currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
|
|
208
331
|
maxWidth
|
|
209
332
|
) {
|
|
210
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
333
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
211
334
|
remainingLines -= 1;
|
|
212
335
|
currentLine = '';
|
|
213
336
|
currentLineWidth = 0;
|
|
@@ -215,13 +338,13 @@ export const wrapLine = (
|
|
|
215
338
|
}
|
|
216
339
|
const initial = maxWidth - currentLineWidth;
|
|
217
340
|
const [lines, rl, rt] = breakAll(
|
|
341
|
+
measureText,
|
|
218
342
|
word,
|
|
219
343
|
fontFamily,
|
|
220
344
|
initial,
|
|
221
345
|
maxWidth,
|
|
222
|
-
|
|
346
|
+
letterSpacing,
|
|
223
347
|
remainingLines,
|
|
224
|
-
hasMaxLines,
|
|
225
348
|
);
|
|
226
349
|
remainingLines = rl;
|
|
227
350
|
hasRemainingText = rt;
|
|
@@ -229,13 +352,13 @@ export const wrapLine = (
|
|
|
229
352
|
const [text, width] = lines[0]!;
|
|
230
353
|
currentLine += ' ' + text;
|
|
231
354
|
currentLineWidth = width;
|
|
232
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
355
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
233
356
|
}
|
|
234
357
|
|
|
235
358
|
for (let j = 1; j < lines.length; j++) {
|
|
236
359
|
[currentLine, currentLineWidth] = lines[j]!;
|
|
237
360
|
if (j < lines.length - 1) {
|
|
238
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
361
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
239
362
|
}
|
|
240
363
|
}
|
|
241
364
|
}
|
|
@@ -243,81 +366,35 @@ export const wrapLine = (
|
|
|
243
366
|
}
|
|
244
367
|
|
|
245
368
|
// Add the last line if it has content
|
|
246
|
-
if (currentLine.length > 0 && remainingLines === 0) {
|
|
369
|
+
if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
|
|
247
370
|
currentLine = truncateLineWithSuffix(
|
|
371
|
+
measureText,
|
|
248
372
|
currentLine,
|
|
249
373
|
fontFamily,
|
|
250
374
|
maxWidth,
|
|
251
|
-
|
|
375
|
+
letterSpacing,
|
|
252
376
|
overflowSuffix,
|
|
253
377
|
);
|
|
254
378
|
}
|
|
255
379
|
|
|
256
380
|
if (currentLine.length > 0) {
|
|
257
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
258
|
-
} else {
|
|
259
|
-
wrappedLines.push(['', 0]);
|
|
381
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
260
382
|
}
|
|
261
383
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
262
384
|
};
|
|
263
385
|
|
|
264
|
-
/**
|
|
265
|
-
* Measure the width of text in SDF design units
|
|
266
|
-
*/
|
|
267
|
-
export const measureText = (
|
|
268
|
-
text: string,
|
|
269
|
-
fontFamily: string,
|
|
270
|
-
designLetterSpacing: number,
|
|
271
|
-
): number => {
|
|
272
|
-
let width = 0;
|
|
273
|
-
let prevCodepoint = 0;
|
|
274
|
-
for (let i = 0; i < text.length; i++) {
|
|
275
|
-
const char = text.charAt(i);
|
|
276
|
-
const codepoint = text.codePointAt(i);
|
|
277
|
-
if (codepoint === undefined) continue;
|
|
278
|
-
|
|
279
|
-
// Skip zero-width spaces in width calculations
|
|
280
|
-
if (isZeroWidthSpace(char)) {
|
|
281
|
-
continue;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
285
|
-
if (glyph === null) continue;
|
|
286
|
-
|
|
287
|
-
let advance = glyph.xadvance;
|
|
288
|
-
|
|
289
|
-
// Add kerning if there's a previous character
|
|
290
|
-
if (prevCodepoint !== 0) {
|
|
291
|
-
const kerning = SdfFontHandler.getKerning(
|
|
292
|
-
fontFamily,
|
|
293
|
-
prevCodepoint,
|
|
294
|
-
codepoint,
|
|
295
|
-
);
|
|
296
|
-
advance += kerning;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
width += advance + designLetterSpacing;
|
|
300
|
-
prevCodepoint = codepoint;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return width;
|
|
304
|
-
};
|
|
305
|
-
|
|
306
386
|
/**
|
|
307
387
|
* Truncate a line with overflow suffix to fit within width
|
|
308
388
|
*/
|
|
309
389
|
export const truncateLineWithSuffix = (
|
|
390
|
+
measureText: MeasureTextFn,
|
|
310
391
|
line: string,
|
|
311
392
|
fontFamily: string,
|
|
312
393
|
maxWidth: number,
|
|
313
|
-
|
|
394
|
+
letterSpacing: number,
|
|
314
395
|
overflowSuffix: string,
|
|
315
396
|
): string => {
|
|
316
|
-
const suffixWidth = measureText(
|
|
317
|
-
overflowSuffix,
|
|
318
|
-
fontFamily,
|
|
319
|
-
designLetterSpacing,
|
|
320
|
-
);
|
|
397
|
+
const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
|
|
321
398
|
|
|
322
399
|
if (suffixWidth >= maxWidth) {
|
|
323
400
|
return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
|
|
@@ -325,11 +402,7 @@ export const truncateLineWithSuffix = (
|
|
|
325
402
|
|
|
326
403
|
let truncatedLine = line;
|
|
327
404
|
while (truncatedLine.length > 0) {
|
|
328
|
-
const lineWidth = measureText(
|
|
329
|
-
truncatedLine,
|
|
330
|
-
fontFamily,
|
|
331
|
-
designLetterSpacing,
|
|
332
|
-
);
|
|
405
|
+
const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
|
|
333
406
|
if (lineWidth + suffixWidth <= maxWidth) {
|
|
334
407
|
return truncatedLine + overflowSuffix;
|
|
335
408
|
}
|
|
@@ -343,12 +416,12 @@ export const truncateLineWithSuffix = (
|
|
|
343
416
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
344
417
|
*/
|
|
345
418
|
export const breakWord = (
|
|
419
|
+
measureText: MeasureTextFn,
|
|
346
420
|
word: string,
|
|
347
421
|
fontFamily: string,
|
|
348
422
|
maxWidth: number,
|
|
349
|
-
|
|
423
|
+
letterSpacing: number,
|
|
350
424
|
remainingLines: number,
|
|
351
|
-
hasMaxLines: boolean,
|
|
352
425
|
): WrappedLinesStruct => {
|
|
353
426
|
const lines: TextLineStruct[] = [];
|
|
354
427
|
let currentPart = '';
|
|
@@ -360,17 +433,14 @@ export const breakWord = (
|
|
|
360
433
|
const codepoint = char.codePointAt(0);
|
|
361
434
|
if (codepoint === undefined) continue;
|
|
362
435
|
|
|
363
|
-
const
|
|
364
|
-
if (glyph === null) continue;
|
|
365
|
-
|
|
366
|
-
const charWidth = glyph.xadvance + designLetterSpacing;
|
|
436
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
367
437
|
|
|
368
438
|
if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
|
|
369
439
|
remainingLines--;
|
|
370
440
|
if (remainingLines === 0) {
|
|
371
441
|
break;
|
|
372
442
|
}
|
|
373
|
-
lines.push([currentPart, currentWidth]);
|
|
443
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
374
444
|
currentPart = char;
|
|
375
445
|
currentWidth = charWidth;
|
|
376
446
|
} else {
|
|
@@ -380,7 +450,7 @@ export const breakWord = (
|
|
|
380
450
|
}
|
|
381
451
|
|
|
382
452
|
if (currentPart.length > 0) {
|
|
383
|
-
lines.push([currentPart, currentWidth]);
|
|
453
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
384
454
|
}
|
|
385
455
|
|
|
386
456
|
return [lines, remainingLines, i < word.length - 1];
|
|
@@ -390,13 +460,13 @@ export const breakWord = (
|
|
|
390
460
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
391
461
|
*/
|
|
392
462
|
export const breakAll = (
|
|
463
|
+
measureText: MeasureTextFn,
|
|
393
464
|
word: string,
|
|
394
465
|
fontFamily: string,
|
|
395
466
|
initial: number,
|
|
396
467
|
maxWidth: number,
|
|
397
|
-
|
|
468
|
+
letterSpacing: number,
|
|
398
469
|
remainingLines: number,
|
|
399
|
-
hasMaxLines: boolean,
|
|
400
470
|
): WrappedLinesStruct => {
|
|
401
471
|
const lines: TextLineStruct[] = [];
|
|
402
472
|
let currentPart = '';
|
|
@@ -411,13 +481,9 @@ export const breakAll = (
|
|
|
411
481
|
break;
|
|
412
482
|
}
|
|
413
483
|
const char = word.charAt(i);
|
|
414
|
-
const
|
|
415
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
416
|
-
if (glyph === null) continue;
|
|
417
|
-
|
|
418
|
-
const charWidth = glyph.xadvance + designLetterSpacing;
|
|
484
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
419
485
|
if (currentWidth + charWidth > max && currentPart.length > 0) {
|
|
420
|
-
lines.push([currentPart, currentWidth]);
|
|
486
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
421
487
|
currentPart = char;
|
|
422
488
|
currentWidth = charWidth;
|
|
423
489
|
max = maxWidth;
|
|
@@ -429,7 +495,7 @@ export const breakAll = (
|
|
|
429
495
|
}
|
|
430
496
|
|
|
431
497
|
if (currentPart.length > 0) {
|
|
432
|
-
lines.push([currentPart, currentWidth]);
|
|
498
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
433
499
|
}
|
|
434
500
|
|
|
435
501
|
return [lines, remainingLines, hasRemainingText];
|
|
@@ -198,16 +198,6 @@ export interface TrProps extends TrFontProps {
|
|
|
198
198
|
* @default 0
|
|
199
199
|
*/
|
|
200
200
|
maxLines: number;
|
|
201
|
-
/**
|
|
202
|
-
* Baseline for text
|
|
203
|
-
*
|
|
204
|
-
* @remarks
|
|
205
|
-
* This property sets the text baseline used when drawing text.
|
|
206
|
-
* Not yet implemented in the SDF renderer.
|
|
207
|
-
*
|
|
208
|
-
* @default alphabetic
|
|
209
|
-
*/
|
|
210
|
-
textBaseline: TextBaseline;
|
|
211
201
|
/**
|
|
212
202
|
* Vertical Align for text when lineHeight > fontSize
|
|
213
203
|
*
|
|
@@ -335,6 +325,15 @@ export interface FontLoadOptions {
|
|
|
335
325
|
atlasDataUrl?: string;
|
|
336
326
|
}
|
|
337
327
|
|
|
328
|
+
/**
|
|
329
|
+
* Measure Width of Text function to be defined in font handlers, used in TextLayoutEngine
|
|
330
|
+
*/
|
|
331
|
+
export type MeasureTextFn = (
|
|
332
|
+
text: string,
|
|
333
|
+
fontFamily: string,
|
|
334
|
+
letterSpacing: number,
|
|
335
|
+
) => number;
|
|
336
|
+
|
|
338
337
|
export interface FontHandler {
|
|
339
338
|
init: (
|
|
340
339
|
c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
|
|
@@ -350,7 +349,7 @@ export interface FontHandler {
|
|
|
350
349
|
fontFamily: string,
|
|
351
350
|
fontSize: number,
|
|
352
351
|
) => NormalizedFontMetrics;
|
|
353
|
-
|
|
352
|
+
measureText: MeasureTextFn;
|
|
354
353
|
}
|
|
355
354
|
|
|
356
355
|
export interface TextRenderProps {
|
|
@@ -371,6 +370,8 @@ export interface TextRenderProps {
|
|
|
371
370
|
export interface TextRenderInfo {
|
|
372
371
|
width: number;
|
|
373
372
|
height: number;
|
|
373
|
+
hasRemainingText?: boolean;
|
|
374
|
+
remainingLines?: number;
|
|
374
375
|
imageData?: ImageData | null; // Image data for Canvas Text Renderer
|
|
375
376
|
layout?: TextLayout; // Layout data for SDF renderer caching
|
|
376
377
|
}
|
|
@@ -378,7 +379,7 @@ export interface TextRenderInfo {
|
|
|
378
379
|
export interface TextRenderer {
|
|
379
380
|
type: 'canvas' | 'sdf';
|
|
380
381
|
font: FontHandler;
|
|
381
|
-
renderText: (
|
|
382
|
+
renderText: (props: CoreTextNodeProps) => TextRenderInfo;
|
|
382
383
|
// Updated to accept layout data and return vertex buffer for performance
|
|
383
384
|
addQuads: (layout?: TextLayout) => Float32Array | null;
|
|
384
385
|
renderQuads: (
|
|
@@ -394,8 +395,10 @@ export interface TextRenderer {
|
|
|
394
395
|
* Text line struct for text mapping
|
|
395
396
|
* 0 - text
|
|
396
397
|
* 1 - width
|
|
398
|
+
* 2 - line offset x
|
|
399
|
+
* 3 - line offset y
|
|
397
400
|
*/
|
|
398
|
-
export type TextLineStruct = [string, number];
|
|
401
|
+
export type TextLineStruct = [string, number, number, number];
|
|
399
402
|
|
|
400
403
|
/**
|
|
401
404
|
* Wrapped lines struct for text mapping
|
|
@@ -404,3 +407,23 @@ export type TextLineStruct = [string, number];
|
|
|
404
407
|
* 2 - remaining text
|
|
405
408
|
*/
|
|
406
409
|
export type WrappedLinesStruct = [TextLineStruct[], number, boolean];
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Wrapped lines struct for text mapping
|
|
413
|
+
* 0 - line structs
|
|
414
|
+
* 1 - remaining lines
|
|
415
|
+
* 2 - remaining text
|
|
416
|
+
* 3 - bare line height
|
|
417
|
+
* 4 - line height pixels
|
|
418
|
+
* 5 - effective width
|
|
419
|
+
* 6 - effective height
|
|
420
|
+
*/
|
|
421
|
+
export type TextLayoutStruct = [
|
|
422
|
+
TextLineStruct[],
|
|
423
|
+
number,
|
|
424
|
+
boolean,
|
|
425
|
+
number,
|
|
426
|
+
number,
|
|
427
|
+
number,
|
|
428
|
+
number,
|
|
429
|
+
];
|