@lightningjs/renderer 3.0.0-beta14 → 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 +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 +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/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/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 +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,27 +1,81 @@
|
|
|
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
|
+
const maxW = wrappedText === true ? maxWidth : effectiveMaxWidth;
|
|
45
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
46
|
+
const line = lines[i];
|
|
47
|
+
const w = line[1];
|
|
48
|
+
line[2] = textAlign === 'right' ? maxW - w : (maxW - w) / 2;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
|
|
52
|
+
let firstBaseLine = halfDelta;
|
|
53
|
+
if (maxHeight > 0 && verticalAlign !== 'top') {
|
|
54
|
+
if (verticalAlign === 'middle') {
|
|
55
|
+
firstBaseLine += (maxHeight - effectiveMaxHeight) / 2;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
firstBaseLine += maxHeight - effectiveMaxHeight;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const startY = firstBaseLine;
|
|
62
|
+
for (let i = 0; i < effectiveLineAmount; i++) {
|
|
63
|
+
const line = lines[i];
|
|
64
|
+
line[3] = startY + lineHeightPx * i;
|
|
65
|
+
}
|
|
66
|
+
return [
|
|
67
|
+
lines,
|
|
68
|
+
remainingLines,
|
|
69
|
+
remainingText,
|
|
70
|
+
bareLineHeight,
|
|
71
|
+
lineHeightPx,
|
|
72
|
+
effectiveMaxWidth,
|
|
73
|
+
effectiveMaxHeight,
|
|
74
|
+
];
|
|
75
|
+
};
|
|
76
|
+
export const measureLines = (measureText, lines, fontFamily, letterSpacing, maxLines) => {
|
|
22
77
|
const measuredLines = [];
|
|
23
|
-
|
|
24
|
-
let remainingLines = hasMaxLines === true ? maxLines : lines.length;
|
|
78
|
+
let remainingLines = maxLines > 0 ? maxLines : lines.length;
|
|
25
79
|
let i = 0;
|
|
26
80
|
while (remainingLines > 0) {
|
|
27
81
|
const line = lines[i];
|
|
@@ -30,39 +84,48 @@ export const measureLines = (lines, fontFamily, letterSpacing, fontScale, maxLin
|
|
|
30
84
|
if (line === undefined) {
|
|
31
85
|
continue;
|
|
32
86
|
}
|
|
33
|
-
const width = measureText(line, fontFamily,
|
|
34
|
-
measuredLines.push([line, width]);
|
|
87
|
+
const width = measureText(line, fontFamily, letterSpacing);
|
|
88
|
+
measuredLines.push([line, width, 0, 0]);
|
|
35
89
|
}
|
|
36
90
|
return [
|
|
37
91
|
measuredLines,
|
|
38
92
|
remainingLines,
|
|
39
|
-
|
|
93
|
+
maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
|
|
40
94
|
];
|
|
41
95
|
};
|
|
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) => {
|
|
96
|
+
export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines) => {
|
|
46
97
|
const lines = text.split('\n');
|
|
47
98
|
const wrappedLines = [];
|
|
48
|
-
const maxWidthInDesignUnits = maxWidth / fontScale;
|
|
49
|
-
const designLetterSpacing = letterSpacing * fontScale;
|
|
50
99
|
// Calculate space width for line wrapping
|
|
51
|
-
const spaceWidth = measureText(' ', fontFamily,
|
|
100
|
+
const spaceWidth = measureText(' ', fontFamily, letterSpacing);
|
|
52
101
|
let wrappedLine = [];
|
|
53
102
|
let remainingLines = maxLines;
|
|
54
103
|
let hasRemainingText = true;
|
|
104
|
+
let hasMaxLines = maxLines > 0;
|
|
55
105
|
for (let i = 0; i < lines.length; i++) {
|
|
56
106
|
const line = lines[i];
|
|
57
|
-
|
|
107
|
+
if (line === undefined) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
[wrappedLine, remainingLines, hasRemainingText] =
|
|
111
|
+
line.length > 0
|
|
112
|
+
? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
|
|
113
|
+
: [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
|
|
114
|
+
remainingLines--;
|
|
58
115
|
wrappedLines.push(...wrappedLine);
|
|
116
|
+
if (hasMaxLines === true && remainingLines <= 0) {
|
|
117
|
+
const lastLine = wrappedLines[wrappedLines.length - 1];
|
|
118
|
+
if (i < lines.length - 1) {
|
|
119
|
+
if (lastLine[0].endsWith(overflowSuffix) === false) {
|
|
120
|
+
lastLine[0] = truncateLineWithSuffix(measureText, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
59
125
|
}
|
|
60
126
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
61
127
|
};
|
|
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) => {
|
|
128
|
+
export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
|
|
66
129
|
// Use the same space regex as Canvas renderer to handle ZWSP
|
|
67
130
|
const spaceRegex = / |\u200B/g;
|
|
68
131
|
const words = line.split(spaceRegex);
|
|
@@ -78,7 +141,7 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
78
141
|
continue;
|
|
79
142
|
}
|
|
80
143
|
const space = spaces[i - 1] || '';
|
|
81
|
-
const wordWidth = measureText(word, fontFamily,
|
|
144
|
+
const wordWidth = measureText(word, fontFamily, letterSpacing);
|
|
82
145
|
// For width calculation, treat ZWSP as having 0 width but regular space functionality
|
|
83
146
|
const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
|
|
84
147
|
const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
|
|
@@ -111,17 +174,15 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
111
174
|
break;
|
|
112
175
|
}
|
|
113
176
|
if (wordBreak !== 'break-all' && currentLine.length > 0) {
|
|
114
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
115
|
-
currentLine = '';
|
|
116
|
-
currentLineWidth = 0;
|
|
117
|
-
remainingLines--;
|
|
177
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
118
178
|
}
|
|
119
179
|
if (wordBreak !== 'break-all') {
|
|
180
|
+
remainingLines--;
|
|
120
181
|
currentLine = word;
|
|
121
182
|
currentLineWidth = wordWidth;
|
|
122
183
|
}
|
|
123
184
|
if (wordBreak === 'break-word') {
|
|
124
|
-
const [lines, rl, rt] = breakWord(word, fontFamily, maxWidth,
|
|
185
|
+
const [lines, rl, rt] = breakWord(measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines);
|
|
125
186
|
remainingLines = rl;
|
|
126
187
|
hasRemainingText = rt;
|
|
127
188
|
if (lines.length === 1) {
|
|
@@ -137,89 +198,55 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
|
|
|
137
198
|
}
|
|
138
199
|
}
|
|
139
200
|
else if (wordBreak === 'break-all') {
|
|
140
|
-
const
|
|
141
|
-
const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
|
|
142
|
-
const firstLetterWidth = glyph !== null ? glyph.xadvance + designLetterSpacing : 0;
|
|
201
|
+
const firstLetterWidth = measureText(word.charAt(0), fontFamily, letterSpacing);
|
|
143
202
|
let linebreak = false;
|
|
144
203
|
if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
|
|
145
204
|
maxWidth) {
|
|
146
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
205
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
147
206
|
remainingLines -= 1;
|
|
148
207
|
currentLine = '';
|
|
149
208
|
currentLineWidth = 0;
|
|
150
209
|
linebreak = true;
|
|
151
210
|
}
|
|
152
211
|
const initial = maxWidth - currentLineWidth;
|
|
153
|
-
const [lines, rl, rt] = breakAll(word, fontFamily, initial, maxWidth,
|
|
212
|
+
const [lines, rl, rt] = breakAll(measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
|
|
154
213
|
remainingLines = rl;
|
|
155
214
|
hasRemainingText = rt;
|
|
156
215
|
if (linebreak === false) {
|
|
157
216
|
const [text, width] = lines[0];
|
|
158
217
|
currentLine += ' ' + text;
|
|
159
218
|
currentLineWidth = width;
|
|
160
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
219
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
161
220
|
}
|
|
162
221
|
for (let j = 1; j < lines.length; j++) {
|
|
163
222
|
[currentLine, currentLineWidth] = lines[j];
|
|
164
223
|
if (j < lines.length - 1) {
|
|
165
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
224
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
166
225
|
}
|
|
167
226
|
}
|
|
168
227
|
}
|
|
169
228
|
}
|
|
170
229
|
}
|
|
171
230
|
// Add the last line if it has content
|
|
172
|
-
if (currentLine.length > 0 && remainingLines === 0) {
|
|
173
|
-
currentLine = truncateLineWithSuffix(currentLine, fontFamily, maxWidth,
|
|
231
|
+
if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
|
|
232
|
+
currentLine = truncateLineWithSuffix(measureText, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
|
|
174
233
|
}
|
|
175
234
|
if (currentLine.length > 0) {
|
|
176
|
-
wrappedLines.push([currentLine, currentLineWidth]);
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
wrappedLines.push(['', 0]);
|
|
235
|
+
wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
|
|
180
236
|
}
|
|
181
237
|
return [wrappedLines, remainingLines, hasRemainingText];
|
|
182
238
|
};
|
|
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
239
|
/**
|
|
213
240
|
* Truncate a line with overflow suffix to fit within width
|
|
214
241
|
*/
|
|
215
|
-
export const truncateLineWithSuffix = (line, fontFamily, maxWidth,
|
|
216
|
-
const suffixWidth = measureText(overflowSuffix, fontFamily,
|
|
242
|
+
export const truncateLineWithSuffix = (measureText, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
|
|
243
|
+
const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
|
|
217
244
|
if (suffixWidth >= maxWidth) {
|
|
218
245
|
return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
|
|
219
246
|
}
|
|
220
247
|
let truncatedLine = line;
|
|
221
248
|
while (truncatedLine.length > 0) {
|
|
222
|
-
const lineWidth = measureText(truncatedLine, fontFamily,
|
|
249
|
+
const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
|
|
223
250
|
if (lineWidth + suffixWidth <= maxWidth) {
|
|
224
251
|
return truncatedLine + overflowSuffix;
|
|
225
252
|
}
|
|
@@ -230,7 +257,7 @@ export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterS
|
|
|
230
257
|
/**
|
|
231
258
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
232
259
|
*/
|
|
233
|
-
export const breakWord = (word, fontFamily, maxWidth,
|
|
260
|
+
export const breakWord = (measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
|
|
234
261
|
const lines = [];
|
|
235
262
|
let currentPart = '';
|
|
236
263
|
let currentWidth = 0;
|
|
@@ -240,16 +267,13 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
|
|
|
240
267
|
const codepoint = char.codePointAt(0);
|
|
241
268
|
if (codepoint === undefined)
|
|
242
269
|
continue;
|
|
243
|
-
const
|
|
244
|
-
if (glyph === null)
|
|
245
|
-
continue;
|
|
246
|
-
const charWidth = glyph.xadvance + designLetterSpacing;
|
|
270
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
247
271
|
if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
|
|
248
272
|
remainingLines--;
|
|
249
273
|
if (remainingLines === 0) {
|
|
250
274
|
break;
|
|
251
275
|
}
|
|
252
|
-
lines.push([currentPart, currentWidth]);
|
|
276
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
253
277
|
currentPart = char;
|
|
254
278
|
currentWidth = charWidth;
|
|
255
279
|
}
|
|
@@ -259,14 +283,14 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
|
|
|
259
283
|
}
|
|
260
284
|
}
|
|
261
285
|
if (currentPart.length > 0) {
|
|
262
|
-
lines.push([currentPart, currentWidth]);
|
|
286
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
263
287
|
}
|
|
264
288
|
return [lines, remainingLines, i < word.length - 1];
|
|
265
289
|
};
|
|
266
290
|
/**
|
|
267
291
|
* wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
|
|
268
292
|
*/
|
|
269
|
-
export const breakAll = (word, fontFamily, initial, maxWidth,
|
|
293
|
+
export const breakAll = (measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
|
|
270
294
|
const lines = [];
|
|
271
295
|
let currentPart = '';
|
|
272
296
|
let currentWidth = 0;
|
|
@@ -279,13 +303,9 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
|
|
|
279
303
|
break;
|
|
280
304
|
}
|
|
281
305
|
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;
|
|
306
|
+
const charWidth = measureText(char, fontFamily, letterSpacing);
|
|
287
307
|
if (currentWidth + charWidth > max && currentPart.length > 0) {
|
|
288
|
-
lines.push([currentPart, currentWidth]);
|
|
308
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
289
309
|
currentPart = char;
|
|
290
310
|
currentWidth = charWidth;
|
|
291
311
|
max = maxWidth;
|
|
@@ -297,8 +317,8 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
|
|
|
297
317
|
}
|
|
298
318
|
}
|
|
299
319
|
if (currentPart.length > 0) {
|
|
300
|
-
lines.push([currentPart, currentWidth]);
|
|
320
|
+
lines.push([currentPart, currentWidth, 0, 0]);
|
|
301
321
|
}
|
|
302
322
|
return [lines, remainingLines, hasRemainingText];
|
|
303
323
|
};
|
|
304
|
-
//# sourceMappingURL=
|
|
324
|
+
//# 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;
|