@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
|
@@ -1,27 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
export const defaultFontMetrics = {
|
|
2
|
+
ascender: 800,
|
|
3
|
+
descender: -200,
|
|
4
|
+
lineGap: 200,
|
|
5
|
+
unitsPerEm: 1000,
|
|
6
|
+
};
|
|
7
|
+
export const normalizeFontMetrics = (metrics, fontSize) => {
|
|
8
|
+
const scale = fontSize / metrics.unitsPerEm;
|
|
9
|
+
return {
|
|
10
|
+
ascender: metrics.ascender * scale,
|
|
11
|
+
descender: metrics.descender * scale,
|
|
12
|
+
lineGap: metrics.lineGap * scale,
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export const mapTextLayout = (measureText, metrics, text, textAlign, verticalAlign, fontFamily, lineHeight, overflowSuffix, wordBreak, letterSpacing, maxLines, maxWidth, maxHeight) => {
|
|
16
|
+
const ascPx = metrics.ascender;
|
|
17
|
+
const descPx = metrics.descender;
|
|
18
|
+
const bareLineHeight = ascPx - descPx;
|
|
19
|
+
const lineHeightPx = lineHeight <= 3 ? lineHeight * bareLineHeight : lineHeight;
|
|
20
|
+
const lineHeightDelta = lineHeightPx - bareLineHeight;
|
|
21
|
+
const halfDelta = lineHeightDelta * 0.5;
|
|
22
|
+
let effectiveMaxLines = maxLines;
|
|
23
|
+
if (maxHeight > 0) {
|
|
24
|
+
const maxFromHeight = Math.floor(maxHeight / lineHeightPx);
|
|
25
|
+
if (effectiveMaxLines === 0 || maxFromHeight < effectiveMaxLines) {
|
|
26
|
+
effectiveMaxLines = maxFromHeight;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const wrappedText = maxWidth > 0;
|
|
30
|
+
//wrapText or just measureLines based on maxWidth
|
|
31
|
+
const [lines, remainingLines, remainingText] = wrappedText === true
|
|
32
|
+
? wrapText(measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines)
|
|
33
|
+
: measureLines(measureText, text.split('\n'), fontFamily, letterSpacing, maxLines);
|
|
34
|
+
let effectiveLineAmount = lines.length;
|
|
35
|
+
let effectiveMaxWidth = lines[0][1];
|
|
36
|
+
//check for longest line
|
|
37
|
+
if (effectiveLineAmount > 1) {
|
|
38
|
+
for (let i = 1; i < effectiveLineAmount; i++) {
|
|
39
|
+
effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i][1]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//update line x offsets
|
|
43
|
+
if (textAlign !== 'left') {
|
|
44
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
45
|
+
const line = lines[i];
|
|
46
|
+
const w = line[1];
|
|
47
|
+
line[2] =
|
|
48
|
+
textAlign === 'right'
|
|
49
|
+
? effectiveMaxWidth - w
|
|
50
|
+
: (effectiveMaxWidth - w) / 2;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
|
|
54
|
+
let firstBaseLine = halfDelta;
|
|
55
|
+
const startY = firstBaseLine;
|
|
56
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
57
|
+
const line = lines[i];
|
|
58
|
+
line[3] = startY + lineHeightPx * i;
|
|
59
|
+
}
|
|
60
|
+
return [
|
|
61
|
+
lines,
|
|
62
|
+
remainingLines,
|
|
63
|
+
remainingText,
|
|
64
|
+
bareLineHeight,
|
|
65
|
+
lineHeightPx,
|
|
66
|
+
effectiveMaxWidth,
|
|
67
|
+
effectiveMaxHeight,
|
|
68
|
+
];
|
|
69
|
+
};
|
|
70
|
+
export const measureLines = (measureText, lines, fontFamily, letterSpacing, maxLines) => {
|
|
22
71
|
const measuredLines = [];
|
|
23
|
-
|
|
24
|
-
let remainingLines = hasMaxLines === true ? maxLines : lines.length;
|
|
72
|
+
let remainingLines = maxLines > 0 ? maxLines : lines.length;
|
|
25
73
|
let i = 0;
|
|
26
74
|
while (remainingLines > 0) {
|
|
27
75
|
const line = lines[i];
|
|
@@ -30,39 +78,48 @@ export const measureLines = (lines, fontFamily, letterSpacing, fontScale, maxLin
|
|
|
30
78
|
if (line === undefined) {
|
|
31
79
|
continue;
|
|
32
80
|
}
|
|
33
|
-
const width = measureText(line, fontFamily,
|
|
34
|
-
measuredLines.push([line, width]);
|
|
81
|
+
const width = measureText(line, fontFamily, letterSpacing);
|
|
82
|
+
measuredLines.push([line, width, 0, 0]);
|
|
35
83
|
}
|
|
36
84
|
return [
|
|
37
85
|
measuredLines,
|
|
38
86
|
remainingLines,
|
|
39
|
-
|
|
87
|
+
maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
|
|
40
88
|
];
|
|
41
89
|
};
|
|
42
|
-
|
|
43
|
-
* Wrap text for SDF rendering with proper width constraints
|
|
44
|
-
*/
|
|
45
|
-
export const wrapText = (text, fontFamily, fontScale, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines, hasMaxLines) => {
|
|
90
|
+
export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines) => {
|
|
46
91
|
const lines = text.split('\n');
|
|
47
92
|
const wrappedLines = [];
|
|
48
|
-
const maxWidthInDesignUnits = maxWidth / fontScale;
|
|
49
|
-
const designLetterSpacing = letterSpacing * fontScale;
|
|
50
93
|
// Calculate space width for line wrapping
|
|
51
|
-
const spaceWidth = measureText(' ', fontFamily,
|
|
94
|
+
const spaceWidth = measureText(' ', fontFamily, letterSpacing);
|
|
52
95
|
let wrappedLine = [];
|
|
53
96
|
let remainingLines = maxLines;
|
|
54
97
|
let hasRemainingText = true;
|
|
98
|
+
let hasMaxLines = maxLines > 0;
|
|
55
99
|
for (let i = 0; i < lines.length; i++) {
|
|
56
100
|
const line = lines[i];
|
|
57
|
-
|
|
101
|
+
if (line === undefined) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
[wrappedLine, remainingLines, hasRemainingText] =
|
|
105
|
+
line.length > 0
|
|
106
|
+
? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
|
|
107
|
+
: [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
|
|
108
|
+
remainingLines--;
|
|
58
109
|
wrappedLines.push(...wrappedLine);
|
|
110
|
+
if (hasMaxLines === true && remainingLines <= 0) {
|
|
111
|
+
const lastLine = wrappedLines[wrappedLines.length - 1];
|
|
112
|
+
if (i < lines.length - 1) {
|
|
113
|
+
if (lastLine[0].endsWith(overflowSuffix) === false) {
|
|
114
|
+
lastLine[0] = truncateLineWithSuffix(measureText, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
59
119
|
}
|
|
60
120
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
61
121
|
};
|
|
62
|
-
|
|
63
|
-
* Wrap a single line of text for SDF rendering
|
|
64
|
-
*/
|
|
65
|
-
export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
|
|
122
|
+
export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
|
|
66
123
|
// Use the same space regex as Canvas renderer to handle ZWSP
|
|
67
124
|
const spaceRegex = / |\u200B/g;
|
|
68
125
|
const words = line.split(spaceRegex);
|
|
@@ -78,7 +135,7 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
78
135
|
continue;
|
|
79
136
|
}
|
|
80
137
|
const space = spaces[i - 1] || '';
|
|
81
|
-
const wordWidth = measureText(word, fontFamily,
|
|
138
|
+
const wordWidth = measureText(word, fontFamily, letterSpacing);
|
|
82
139
|
// For width calculation, treat ZWSP as having 0 width but regular space functionality
|
|
83
140
|
const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
|
|
84
141
|
const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
|
|
@@ -111,17 +168,15 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
111
168
|
break;
|
|
112
169
|
}
|
|
113
170
|
if (wordBreak !== 'break-all' && currentLine.length > 0) {
|
|
114
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
115
|
-
currentLine = '';
|
|
116
|
-
currentLineWidth = 0;
|
|
117
|
-
remainingLines--;
|
|
171
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
118
172
|
}
|
|
119
173
|
if (wordBreak !== 'break-all') {
|
|
174
|
+
remainingLines--;
|
|
120
175
|
currentLine = word;
|
|
121
176
|
currentLineWidth = wordWidth;
|
|
122
177
|
}
|
|
123
178
|
if (wordBreak === 'break-word') {
|
|
124
|
-
const [lines, rl, rt] = breakWord(word, fontFamily, maxWidth,
|
|
179
|
+
const [lines, rl, rt] = breakWord(measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines);
|
|
125
180
|
remainingLines = rl;
|
|
126
181
|
hasRemainingText = rt;
|
|
127
182
|
if (lines.length === 1) {
|
|
@@ -137,89 +192,59 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
137
192
|
}
|
|
138
193
|
}
|
|
139
194
|
else if (wordBreak === 'break-all') {
|
|
140
|
-
const
|
|
141
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
142
|
-
const firstLetterWidth = glyph !== null ? glyph.xadvance + designLetterSpacing : 0;
|
|
195
|
+
const firstLetterWidth = measureText(word.charAt(0), fontFamily, letterSpacing);
|
|
143
196
|
let linebreak = false;
|
|
144
197
|
if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
|
|
145
198
|
maxWidth) {
|
|
146
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
199
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
147
200
|
remainingLines -= 1;
|
|
148
201
|
currentLine = '';
|
|
149
202
|
currentLineWidth = 0;
|
|
150
203
|
linebreak = true;
|
|
151
204
|
}
|
|
152
205
|
const initial = maxWidth - currentLineWidth;
|
|
153
|
-
const [lines, rl, rt] = breakAll(word, fontFamily, initial, maxWidth,
|
|
206
|
+
const [lines, rl, rt] = breakAll(measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
|
|
154
207
|
remainingLines = rl;
|
|
155
208
|
hasRemainingText = rt;
|
|
156
209
|
if (linebreak === false) {
|
|
157
210
|
const [text, width] = lines[0];
|
|
158
|
-
currentLine +=
|
|
159
|
-
currentLineWidth
|
|
160
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
211
|
+
currentLine += text;
|
|
212
|
+
currentLineWidth += width;
|
|
213
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
161
214
|
}
|
|
162
215
|
for (let j = 1; j < lines.length; j++) {
|
|
163
216
|
[currentLine, currentLineWidth] = lines[j];
|
|
164
217
|
if (j < lines.length - 1) {
|
|
165
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
218
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
166
219
|
}
|
|
167
220
|
}
|
|
221
|
+
if (i < words.length - 1 && currentLine.endsWith(' ') === false) {
|
|
222
|
+
currentLine += ' ';
|
|
223
|
+
currentLineWidth += effectiveSpaceWidth;
|
|
224
|
+
}
|
|
168
225
|
}
|
|
169
226
|
}
|
|
170
227
|
}
|
|
171
228
|
// Add the last line if it has content
|
|
172
|
-
if (currentLine.length > 0 && remainingLines === 0) {
|
|
173
|
-
currentLine = truncateLineWithSuffix(currentLine, fontFamily, maxWidth,
|
|
229
|
+
if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
|
|
230
|
+
currentLine = truncateLineWithSuffix(measureText, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
|
|
174
231
|
}
|
|
175
232
|
if (currentLine.length > 0) {
|
|
176
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
wrappedLines.push(['', 0]);
|
|
233
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
180
234
|
}
|
|
181
235
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
182
236
|
};
|
|
183
|
-
/**
|
|
184
|
-
* Measure the width of text in SDF design units
|
|
185
|
-
*/
|
|
186
|
-
export const measureText = (text, fontFamily, designLetterSpacing) => {
|
|
187
|
-
let width = 0;
|
|
188
|
-
let prevCodepoint = 0;
|
|
189
|
-
for (let i = 0; i < text.length; i++) {
|
|
190
|
-
const char = text.charAt(i);
|
|
191
|
-
const codepoint = text.codePointAt(i);
|
|
192
|
-
if (codepoint === undefined)
|
|
193
|
-
continue;
|
|
194
|
-
// Skip zero-width spaces in width calculations
|
|
195
|
-
if (isZeroWidthSpace(char)) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
199
|
-
if (glyph === null)
|
|
200
|
-
continue;
|
|
201
|
-
let advance = glyph.xadvance;
|
|
202
|
-
// Add kerning if there's a previous character
|
|
203
|
-
if (prevCodepoint !== 0) {
|
|
204
|
-
const kerning = SdfFontHandler.getKerning(fontFamily, prevCodepoint, codepoint);
|
|
205
|
-
advance += kerning;
|
|
206
|
-
}
|
|
207
|
-
width += advance + designLetterSpacing;
|
|
208
|
-
prevCodepoint = codepoint;
|
|
209
|
-
}
|
|
210
|
-
return width;
|
|
211
|
-
};
|
|
212
237
|
/**
|
|
213
238
|
* Truncate a line with overflow suffix to fit within width
|
|
214
239
|
*/
|
|
215
|
-
export const truncateLineWithSuffix = (line, fontFamily, maxWidth,
|
|
216
|
-
const suffixWidth = measureText(overflowSuffix, fontFamily,
|
|
240
|
+
export const truncateLineWithSuffix = (measureText, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
|
|
241
|
+
const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
|
|
217
242
|
if (suffixWidth >= maxWidth) {
|
|
218
243
|
return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
|
|
219
244
|
}
|
|
220
245
|
let truncatedLine = line;
|
|
221
246
|
while (truncatedLine.length > 0) {
|
|
222
|
-
const lineWidth = measureText(truncatedLine, fontFamily,
|
|
247
|
+
const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
|
|
223
248
|
if (lineWidth + suffixWidth <= maxWidth) {
|
|
224
249
|
return truncatedLine + overflowSuffix;
|
|
225
250
|
}
|
|
@@ -230,7 +255,7 @@ export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterS
|
|
|
230
255
|
/**
|
|
231
256
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
232
257
|
*/
|
|
233
|
-
export const breakWord = (word, fontFamily, maxWidth,
|
|
258
|
+
export const breakWord = (measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
|
|
234
259
|
const lines = [];
|
|
235
260
|
let currentPart = '';
|
|
236
261
|
let currentWidth = 0;
|
|
@@ -240,16 +265,13 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
|
|
|
240
265
|
const codepoint = char.codePointAt(0);
|
|
241
266
|
if (codepoint === undefined)
|
|
242
267
|
continue;
|
|
243
|
-
const
|
|
244
|
-
if (glyph === null)
|
|
245
|
-
continue;
|
|
246
|
-
const charWidth = glyph.xadvance + designLetterSpacing;
|
|
268
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
247
269
|
if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
|
|
248
270
|
remainingLines--;
|
|
249
271
|
if (remainingLines === 0) {
|
|
250
272
|
break;
|
|
251
273
|
}
|
|
252
|
-
lines.push([currentPart, currentWidth]);
|
|
274
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
253
275
|
currentPart = char;
|
|
254
276
|
currentWidth = charWidth;
|
|
255
277
|
}
|
|
@@ -259,14 +281,14 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
|
|
|
259
281
|
}
|
|
260
282
|
}
|
|
261
283
|
if (currentPart.length > 0) {
|
|
262
|
-
lines.push([currentPart, currentWidth]);
|
|
284
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
263
285
|
}
|
|
264
286
|
return [lines, remainingLines, i < word.length - 1];
|
|
265
287
|
};
|
|
266
288
|
/**
|
|
267
289
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
268
290
|
*/
|
|
269
|
-
export const breakAll = (word, fontFamily, initial, maxWidth,
|
|
291
|
+
export const breakAll = (measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
|
|
270
292
|
const lines = [];
|
|
271
293
|
let currentPart = '';
|
|
272
294
|
let currentWidth = 0;
|
|
@@ -279,13 +301,9 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
|
|
|
279
301
|
break;
|
|
280
302
|
}
|
|
281
303
|
const char = word.charAt(i);
|
|
282
|
-
const
|
|
283
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
284
|
-
if (glyph === null)
|
|
285
|
-
continue;
|
|
286
|
-
const charWidth = glyph.xadvance + designLetterSpacing;
|
|
304
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
287
305
|
if (currentWidth + charWidth > max && currentPart.length > 0) {
|
|
288
|
-
lines.push([currentPart, currentWidth]);
|
|
306
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
289
307
|
currentPart = char;
|
|
290
308
|
currentWidth = charWidth;
|
|
291
309
|
max = maxWidth;
|
|
@@ -297,8 +315,8 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
|
|
|
297
315
|
}
|
|
298
316
|
}
|
|
299
317
|
if (currentPart.length > 0) {
|
|
300
|
-
lines.push([currentPart, currentWidth]);
|
|
318
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
301
319
|
}
|
|
302
320
|
return [lines, remainingLines, hasRemainingText];
|
|
303
321
|
};
|
|
304
|
-
//# sourceMappingURL=
|
|
322
|
+
//# sourceMappingURL=TextLayoutEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextLayoutEngine.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextLayoutEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -167,16 +167,6 @@ export interface TrProps extends TrFontProps {
|
|
|
167
167
|
* @default 0
|
|
168
168
|
*/
|
|
169
169
|
maxLines: number;
|
|
170
|
-
/**
|
|
171
|
-
* Baseline for text
|
|
172
|
-
*
|
|
173
|
-
* @remarks
|
|
174
|
-
* This property sets the text baseline used when drawing text.
|
|
175
|
-
* Not yet implemented in the SDF renderer.
|
|
176
|
-
*
|
|
177
|
-
* @default alphabetic
|
|
178
|
-
*/
|
|
179
|
-
textBaseline: TextBaseline;
|
|
180
170
|
/**
|
|
181
171
|
* Vertical Align for text when lineHeight > fontSize
|
|
182
172
|
*
|
|
@@ -296,6 +286,10 @@ export interface FontLoadOptions {
|
|
|
296
286
|
atlasUrl?: string;
|
|
297
287
|
atlasDataUrl?: string;
|
|
298
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Measure Width of Text function to be defined in font handlers, used in TextLayoutEngine
|
|
291
|
+
*/
|
|
292
|
+
export type MeasureTextFn = (text: string, fontFamily: string, letterSpacing: number) => number;
|
|
299
293
|
export interface FontHandler {
|
|
300
294
|
init: (c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) => void;
|
|
301
295
|
type: 'canvas' | 'sdf';
|
|
@@ -306,7 +300,7 @@ export interface FontHandler {
|
|
|
306
300
|
getFontFamilies: () => FontFamilyMap;
|
|
307
301
|
canRenderFont: (trProps: TrProps) => boolean;
|
|
308
302
|
getFontMetrics: (fontFamily: string, fontSize: number) => NormalizedFontMetrics;
|
|
309
|
-
|
|
303
|
+
measureText: MeasureTextFn;
|
|
310
304
|
}
|
|
311
305
|
export interface TextRenderProps {
|
|
312
306
|
fontFamily: string;
|
|
@@ -325,13 +319,15 @@ export interface TextRenderProps {
|
|
|
325
319
|
export interface TextRenderInfo {
|
|
326
320
|
width: number;
|
|
327
321
|
height: number;
|
|
322
|
+
hasRemainingText?: boolean;
|
|
323
|
+
remainingLines?: number;
|
|
328
324
|
imageData?: ImageData | null;
|
|
329
325
|
layout?: TextLayout;
|
|
330
326
|
}
|
|
331
327
|
export interface TextRenderer {
|
|
332
328
|
type: 'canvas' | 'sdf';
|
|
333
329
|
font: FontHandler;
|
|
334
|
-
renderText: (
|
|
330
|
+
renderText: (props: CoreTextNodeProps) => TextRenderInfo;
|
|
335
331
|
addQuads: (layout?: TextLayout) => Float32Array | null;
|
|
336
332
|
renderQuads: (renderer: CoreRenderer, layout: TextLayout, vertexBuffer: Float32Array, renderProps: TextRenderProps) => void;
|
|
337
333
|
init: (stage: Stage) => void;
|
|
@@ -340,8 +336,10 @@ export interface TextRenderer {
|
|
|
340
336
|
* Text line struct for text mapping
|
|
341
337
|
* 0 - text
|
|
342
338
|
* 1 - width
|
|
339
|
+
* 2 - line offset x
|
|
340
|
+
* 3 - line offset y
|
|
343
341
|
*/
|
|
344
|
-
export type TextLineStruct = [string, number];
|
|
342
|
+
export type TextLineStruct = [string, number, number, number];
|
|
345
343
|
/**
|
|
346
344
|
* Wrapped lines struct for text mapping
|
|
347
345
|
* 0 - line structs
|
|
@@ -349,3 +347,22 @@ export type TextLineStruct = [string, number];
|
|
|
349
347
|
* 2 - remaining text
|
|
350
348
|
*/
|
|
351
349
|
export type WrappedLinesStruct = [TextLineStruct[], number, boolean];
|
|
350
|
+
/**
|
|
351
|
+
* Wrapped lines struct for text mapping
|
|
352
|
+
* 0 - line structs
|
|
353
|
+
* 1 - remaining lines
|
|
354
|
+
* 2 - remaining text
|
|
355
|
+
* 3 - bare line height
|
|
356
|
+
* 4 - line height pixels
|
|
357
|
+
* 5 - effective width
|
|
358
|
+
* 6 - effective height
|
|
359
|
+
*/
|
|
360
|
+
export type TextLayoutStruct = [
|
|
361
|
+
TextLineStruct[],
|
|
362
|
+
number,
|
|
363
|
+
boolean,
|
|
364
|
+
number,
|
|
365
|
+
number,
|
|
366
|
+
number,
|
|
367
|
+
number
|
|
368
|
+
];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NormalizedFontMetrics } from './font-face-types/TrFontFace.js';
|
|
2
|
+
/**
|
|
3
|
+
* Calculate the default line height given normalized font metrics
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This method may be used for both the WebTrFontFace and SdfTrFontFace font types.
|
|
7
|
+
*
|
|
8
|
+
* @param metrics
|
|
9
|
+
* @param fontSize
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function calcDefaultLineHeight(metrics: NormalizedFontMetrics, fontSize: number): number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate the default line height given normalized font metrics
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* This method may be used for both the WebTrFontFace and SdfTrFontFace font types.
|
|
6
|
+
*
|
|
7
|
+
* @param metrics
|
|
8
|
+
* @param fontSize
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
export function calcDefaultLineHeight(metrics, fontSize) {
|
|
12
|
+
return fontSize * (metrics.ascender - metrics.descender + metrics.lineGap);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=TextRenderingUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextRenderingUtils.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextRenderingUtils.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA8B,EAC9B,QAAgB;IAEhB,OAAO,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { NormalizedFontMetrics } from './font-face-types/TrFontFace.js';
|
|
2
|
+
import type { WebTrFontFace } from './font-face-types/WebTrFontFace.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns CSS font setting string for use in canvas context.
|
|
5
|
+
*
|
|
6
|
+
* @param fontFace
|
|
7
|
+
* @param fontStyle
|
|
8
|
+
* @param fontSize
|
|
9
|
+
* @param precision
|
|
10
|
+
* @param defaultFontFace
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
export declare function getFontSetting(fontFace: string | string[], fontStyle: string, fontSize: number, precision: number, defaultFontFace: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if the given character is a zero-width space.
|
|
16
|
+
*
|
|
17
|
+
* @param space
|
|
18
|
+
*/
|
|
19
|
+
export declare function isZeroWidthSpace(space: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the given character is a zero-width space or a regular space.
|
|
22
|
+
*
|
|
23
|
+
* @param space
|
|
24
|
+
*/
|
|
25
|
+
export declare function isSpace(space: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Converts a string into an array of tokens and the words between them.
|
|
28
|
+
*
|
|
29
|
+
* @param tokenRegex
|
|
30
|
+
* @param text
|
|
31
|
+
*/
|
|
32
|
+
export declare function tokenizeString(tokenRegex: RegExp, text: string): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Measure the width of a string accounting for letter spacing.
|
|
35
|
+
*
|
|
36
|
+
* @param context
|
|
37
|
+
* @param word
|
|
38
|
+
* @param space
|
|
39
|
+
*/
|
|
40
|
+
export declare function measureText(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, word: string, space?: number): number;
|
|
41
|
+
/**
|
|
42
|
+
* Get the font metrics for a font face.
|
|
43
|
+
*
|
|
44
|
+
* @remarks
|
|
45
|
+
* This function will attempt to grab the explicitly defined metrics from the
|
|
46
|
+
* font face first. If the font face does not have metrics defined, it will
|
|
47
|
+
* attempt to calculate the metrics using the browser's measureText method.
|
|
48
|
+
*
|
|
49
|
+
* If the browser does not support the font metrics API, it will use some
|
|
50
|
+
* default values.
|
|
51
|
+
*
|
|
52
|
+
* @param context
|
|
53
|
+
* @param fontFace
|
|
54
|
+
* @param fontSize
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
export declare function getWebFontMetrics(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, fontFace: WebTrFontFace, fontSize: number): NormalizedFontMetrics;
|
|
58
|
+
export interface WrapTextResult {
|
|
59
|
+
l: string[];
|
|
60
|
+
n: number[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Applies newlines to a string to have it optimally fit into the horizontal
|
|
64
|
+
* bounds set by the Text object's wordWrapWidth property.
|
|
65
|
+
*
|
|
66
|
+
* @param context
|
|
67
|
+
* @param text
|
|
68
|
+
* @param wordWrapWidth
|
|
69
|
+
* @param letterSpacing
|
|
70
|
+
* @param indent
|
|
71
|
+
*/
|
|
72
|
+
export declare function wrapText(context: CanvasRenderingContext2D, text: string, wordWrapWidth: number, letterSpacing: number, indent: number): WrapTextResult;
|