@lightningjs/renderer 3.0.0-beta15 → 3.0.0-beta17
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/src/common/CommonTypes.d.ts +11 -0
- package/dist/src/core/CoreNode.js +8 -0
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +14 -0
- package/dist/src/core/CoreTextNode.js +90 -5
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/Stage.js +2 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +16 -0
- package/dist/src/core/animations/Animation.js +111 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
- package/dist/src/core/animations/CoreAnimation.js +0 -1
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreTransition.d.ts +24 -0
- package/dist/src/core/animations/CoreTransition.js +63 -0
- package/dist/src/core/animations/CoreTransition.js.map +1 -0
- package/dist/src/core/animations/Playback.d.ts +62 -0
- package/dist/src/core/animations/Playback.js +155 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +25 -0
- package/dist/src/core/animations/Transition.js +63 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +137 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +100 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +5 -0
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
- package/dist/src/core/platforms/web/WebPlatform.js +3 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js +4 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +7 -7
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.js +3 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +5 -5
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +12 -13
- package/dist/src/core/text-rendering/TextLayoutEngine.js +242 -186
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
- package/dist/src/core/text-rendering/TextRenderer.d.ts +22 -7
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/main-api/Inspector.js +9 -5
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.js +3 -2
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/common/CommonTypes.ts +16 -0
- package/src/core/CoreNode.test.ts +50 -1
- package/src/core/CoreNode.ts +11 -0
- package/src/core/CoreTextNode.ts +112 -5
- package/src/core/Stage.ts +2 -1
- package/src/core/animations/CoreAnimation.ts +0 -2
- package/src/core/platforms/Platform.ts +6 -0
- package/src/core/platforms/web/WebPlatform.ts +11 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +4 -7
- package/src/core/text-rendering/CanvasTextRenderer.ts +6 -8
- package/src/core/text-rendering/SdfFontHandler.ts +3 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +4 -5
- package/src/core/text-rendering/TextLayoutEngine.ts +396 -226
- package/src/core/text-rendering/TextRenderer.ts +22 -7
- package/src/core/text-rendering/tests/{SdfTests.test.ts → TextLayoutEngine.test.ts} +103 -64
- package/src/main-api/Inspector.ts +9 -5
- package/src/main-api/Renderer.ts +3 -2
- package/dist/src/core/TextureError.d.ts +0 -11
- package/dist/src/core/TextureError.js +0 -37
- package/dist/src/core/TextureError.js.map +0 -1
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -81
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/CoreShader.d.ts +0 -9
- package/dist/src/core/renderers/CoreShader.js +0 -28
- package/dist/src/core/renderers/CoreShader.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
- package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
- package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
- package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
- package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
- package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -65
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -269
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
- package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
- package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
- package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
- package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
- package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
- package/dist/src/main-api/DynamicShaderController.js +0 -58
- package/dist/src/main-api/DynamicShaderController.js.map +0 -1
- package/dist/src/main-api/ShaderController.d.ts +0 -31
- package/dist/src/main-api/ShaderController.js +0 -37
- package/dist/src/main-api/ShaderController.js.map +0 -1
- package/src/core/text-rendering/tests/Canvas.test.ts +0 -378
package/src/core/CoreNode.ts
CHANGED
|
@@ -37,6 +37,7 @@ import type {
|
|
|
37
37
|
NodeTextureFailedPayload,
|
|
38
38
|
NodeTextureFreedPayload,
|
|
39
39
|
NodeTextureLoadedPayload,
|
|
40
|
+
NodeRenderablePayload,
|
|
40
41
|
} from '../common/CommonTypes.js';
|
|
41
42
|
import { EventEmitter } from '../common/EventEmitter.js';
|
|
42
43
|
import {
|
|
@@ -1486,7 +1487,17 @@ export class CoreNode extends EventEmitter {
|
|
|
1486
1487
|
* @param isRenderable - The new renderable state
|
|
1487
1488
|
*/
|
|
1488
1489
|
setRenderable(isRenderable: boolean) {
|
|
1490
|
+
const previousIsRenderable = this.isRenderable;
|
|
1489
1491
|
this.isRenderable = isRenderable;
|
|
1492
|
+
|
|
1493
|
+
// Emit event if renderable status has changed
|
|
1494
|
+
if (previousIsRenderable !== isRenderable) {
|
|
1495
|
+
this.emit('renderable', {
|
|
1496
|
+
type: 'renderable',
|
|
1497
|
+
isRenderable,
|
|
1498
|
+
} satisfies NodeRenderablePayload);
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1490
1501
|
if (
|
|
1491
1502
|
isRenderable === true &&
|
|
1492
1503
|
this.stage.calculateTextureCoord === true &&
|
package/src/core/CoreTextNode.ts
CHANGED
|
@@ -39,6 +39,7 @@ import type {
|
|
|
39
39
|
import type { RectWithValid } from './lib/utils.js';
|
|
40
40
|
import type { CoreRenderer } from './renderers/CoreRenderer.js';
|
|
41
41
|
import type { TextureLoadedEventHandler } from './textures/Texture.js';
|
|
42
|
+
import { Matrix3d } from './lib/Matrix3d.js';
|
|
42
43
|
export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
|
|
43
44
|
/**
|
|
44
45
|
* Force Text Node to use a specific Text Renderer
|
|
@@ -47,12 +48,20 @@ export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
|
|
|
47
48
|
forceLoad: boolean;
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
export enum TextConstraint {
|
|
52
|
+
'none' = 0,
|
|
53
|
+
'width' = 1,
|
|
54
|
+
'height' = 2,
|
|
55
|
+
'both' = 4,
|
|
56
|
+
}
|
|
57
|
+
|
|
50
58
|
export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
51
59
|
private textRenderer: TextRenderer;
|
|
52
60
|
private fontHandler: FontHandler;
|
|
53
61
|
|
|
54
62
|
private _layoutGenerated = false;
|
|
55
63
|
private _waitingForFont = false;
|
|
64
|
+
private _containType: TextConstraint = TextConstraint.none;
|
|
56
65
|
|
|
57
66
|
// SDF layout caching for performance
|
|
58
67
|
private _cachedLayout: TextLayout | null = null;
|
|
@@ -81,6 +90,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
81
90
|
// Initialize text properties from props
|
|
82
91
|
// Props are guaranteed to have all defaults resolved by Stage.createTextNode
|
|
83
92
|
this.textProps = props;
|
|
93
|
+
this._containType = TextConstraint[props.contain];
|
|
84
94
|
|
|
85
95
|
this.setUpdateType(UpdateType.All);
|
|
86
96
|
}
|
|
@@ -100,8 +110,6 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
100
110
|
dimensions,
|
|
101
111
|
} satisfies NodeTextureLoadedPayload);
|
|
102
112
|
}
|
|
103
|
-
this.w = this._renderInfo.width;
|
|
104
|
-
this.h = this._renderInfo.height;
|
|
105
113
|
this.setUpdateType(UpdateType.IsRenderable);
|
|
106
114
|
};
|
|
107
115
|
|
|
@@ -116,6 +124,74 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
116
124
|
return false;
|
|
117
125
|
}
|
|
118
126
|
|
|
127
|
+
override updateLocalTransform() {
|
|
128
|
+
const p = this.props;
|
|
129
|
+
let { x, y, w, h } = p;
|
|
130
|
+
const mountX = p.mountX;
|
|
131
|
+
const mountY = p.mountY;
|
|
132
|
+
let mountTranslateX = p.mountX * w;
|
|
133
|
+
let mountTranslateY = p.mountY * h;
|
|
134
|
+
|
|
135
|
+
let localTextTransform: Matrix3d | null = null;
|
|
136
|
+
|
|
137
|
+
const tProps = this.textProps;
|
|
138
|
+
const { textAlign, verticalAlign, maxWidth, maxHeight } = tProps;
|
|
139
|
+
const contain = this._containType;
|
|
140
|
+
|
|
141
|
+
const hasMaxWidth = maxWidth > 0;
|
|
142
|
+
const hasMaxHeight = maxHeight > 0;
|
|
143
|
+
|
|
144
|
+
if (contain > 0 && (hasMaxWidth || hasMaxHeight)) {
|
|
145
|
+
let containX = 0;
|
|
146
|
+
let containY = 0;
|
|
147
|
+
if (contain & TextConstraint.width && hasMaxWidth === true) {
|
|
148
|
+
if (textAlign === 'right') {
|
|
149
|
+
containX = maxWidth - w;
|
|
150
|
+
} else if (textAlign === 'center') {
|
|
151
|
+
containX = (maxWidth - w) * 0.5;
|
|
152
|
+
}
|
|
153
|
+
mountTranslateX = mountX * maxWidth;
|
|
154
|
+
}
|
|
155
|
+
if (contain & TextConstraint.height && maxHeight > 0) {
|
|
156
|
+
if (verticalAlign === 'bottom') {
|
|
157
|
+
containY = maxHeight - h;
|
|
158
|
+
} else if (verticalAlign === 'middle') {
|
|
159
|
+
containY = (maxHeight - h) * 0.5;
|
|
160
|
+
}
|
|
161
|
+
mountTranslateY = mountY * maxHeight;
|
|
162
|
+
}
|
|
163
|
+
localTextTransform = Matrix3d.translate(containX, containY);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
|
|
167
|
+
const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
|
|
168
|
+
const pivotW =
|
|
169
|
+
contain & TextConstraint.width && maxWidth > 0 ? maxWidth : w;
|
|
170
|
+
const pivotH =
|
|
171
|
+
contain & TextConstraint.height && maxHeight > 0 ? maxHeight : h;
|
|
172
|
+
const pivotTranslateX = p.pivotX * pivotW;
|
|
173
|
+
const pivotTranslateY = p.pivotY * pivotH;
|
|
174
|
+
|
|
175
|
+
this.localTransform = Matrix3d.translate(
|
|
176
|
+
x - mountTranslateX + pivotTranslateX,
|
|
177
|
+
y - mountTranslateY + pivotTranslateY,
|
|
178
|
+
this.localTransform,
|
|
179
|
+
)
|
|
180
|
+
.multiply(scaleRotate)
|
|
181
|
+
.translate(-pivotTranslateX, -pivotTranslateY);
|
|
182
|
+
} else {
|
|
183
|
+
this.localTransform = Matrix3d.translate(
|
|
184
|
+
x - mountTranslateX,
|
|
185
|
+
y - mountTranslateY,
|
|
186
|
+
this.localTransform,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (localTextTransform !== null) {
|
|
191
|
+
this.localTransform = this.localTransform.multiply(localTextTransform);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
119
195
|
/**
|
|
120
196
|
* Override CoreNode's update method to handle text-specific updates
|
|
121
197
|
*/
|
|
@@ -192,12 +268,13 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
192
268
|
}
|
|
193
269
|
}
|
|
194
270
|
|
|
271
|
+
this._cachedLayout = result.layout || null;
|
|
272
|
+
this.props.w = width;
|
|
273
|
+
this.props.h = height;
|
|
274
|
+
|
|
195
275
|
// Handle SDF renderer (uses layout caching)
|
|
196
276
|
if (textRendererType === 'sdf') {
|
|
197
|
-
this._cachedLayout = result.layout || null;
|
|
198
277
|
this.setRenderable(true);
|
|
199
|
-
this.props.w = width;
|
|
200
|
-
this.props.h = height;
|
|
201
278
|
this.setUpdateType(UpdateType.Local);
|
|
202
279
|
}
|
|
203
280
|
|
|
@@ -276,6 +353,24 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
276
353
|
super.destroy();
|
|
277
354
|
}
|
|
278
355
|
|
|
356
|
+
override set w(value: number) {
|
|
357
|
+
// dont allow direct setting of width on text nodes, handled by text layout generation
|
|
358
|
+
console.warn('Cannot directly set w on CoreTextNode');
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
override get w(): number {
|
|
362
|
+
return this.props.w;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
override set h(value: number) {
|
|
366
|
+
// dont allow direct setting of height on text nodes, handled by text layout generation
|
|
367
|
+
console.warn('Cannot directly set h on CoreTextNode');
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
override get h(): number {
|
|
371
|
+
return this.props.h;
|
|
372
|
+
}
|
|
373
|
+
|
|
279
374
|
get maxWidth() {
|
|
280
375
|
return this.textProps.maxWidth;
|
|
281
376
|
}
|
|
@@ -301,6 +396,18 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
|
|
|
301
396
|
}
|
|
302
397
|
}
|
|
303
398
|
|
|
399
|
+
get contain(): TrProps['contain'] {
|
|
400
|
+
return this.textProps.contain;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
set contain(value: TrProps['contain']) {
|
|
404
|
+
if (this.textProps.contain !== value) {
|
|
405
|
+
this.textProps.contain = value;
|
|
406
|
+
this._containType = TextConstraint[value];
|
|
407
|
+
this.setUpdateType(UpdateType.Local);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
304
411
|
get text(): string {
|
|
305
412
|
return this.textProps.text;
|
|
306
413
|
}
|
package/src/core/Stage.ts
CHANGED
|
@@ -682,7 +682,8 @@ export class Stage {
|
|
|
682
682
|
maxLines: props.maxLines || 0,
|
|
683
683
|
verticalAlign: props.verticalAlign || 'top',
|
|
684
684
|
overflowSuffix: props.overflowSuffix || '...',
|
|
685
|
-
wordBreak: props.wordBreak || '
|
|
685
|
+
wordBreak: props.wordBreak || 'break-word',
|
|
686
|
+
contain: props.contain || 'none',
|
|
686
687
|
maxWidth: props.maxWidth || 0,
|
|
687
688
|
maxHeight: props.maxHeight || 0,
|
|
688
689
|
forceLoad: props.forceLoad || false,
|
|
@@ -28,7 +28,6 @@ export interface AnimationSettings {
|
|
|
28
28
|
easing: string | TimingFunction;
|
|
29
29
|
loop: boolean;
|
|
30
30
|
repeat: number;
|
|
31
|
-
repeatDelay: number;
|
|
32
31
|
stopMethod: 'reverse' | 'reset' | false;
|
|
33
32
|
}
|
|
34
33
|
|
|
@@ -89,7 +88,6 @@ export class CoreAnimation extends EventEmitter {
|
|
|
89
88
|
easing,
|
|
90
89
|
loop: settings.loop ?? false,
|
|
91
90
|
repeat: settings.repeat ?? 0,
|
|
92
|
-
repeatDelay: settings.repeatDelay ?? 0,
|
|
93
91
|
stopMethod: settings.stopMethod ?? false,
|
|
94
92
|
};
|
|
95
93
|
this.timingFunction =
|
|
@@ -74,4 +74,10 @@ export abstract class Platform {
|
|
|
74
74
|
* @returns The current timestamp.
|
|
75
75
|
*/
|
|
76
76
|
abstract getTimeStamp(): number;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Adds a FontFace to the platforms FontFaceSet
|
|
80
|
+
* @param font - The FontFace to add
|
|
81
|
+
*/
|
|
82
|
+
abstract addFont(font: FontFace): void;
|
|
77
83
|
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { Platform } from '../Platform.js';
|
|
2
2
|
import type { Stage } from '../../Stage.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* make fontface add not show errors
|
|
6
|
+
*/
|
|
7
|
+
interface FontFaceSetWithAdd extends FontFaceSet {
|
|
8
|
+
add(font: FontFace): void;
|
|
9
|
+
}
|
|
10
|
+
|
|
4
11
|
export class WebPlatform extends Platform {
|
|
5
12
|
////////////////////////
|
|
6
13
|
// Platform-specific methods
|
|
@@ -118,4 +125,8 @@ export class WebPlatform extends Platform {
|
|
|
118
125
|
getTimeStamp(): number {
|
|
119
126
|
return performance ? performance.now() : Date.now();
|
|
120
127
|
}
|
|
128
|
+
|
|
129
|
+
override addFont(font: FontFace): void {
|
|
130
|
+
(document.fonts as FontFaceSetWithAdd).add(font);
|
|
131
|
+
}
|
|
121
132
|
}
|
|
@@ -59,12 +59,6 @@ let context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
|
|
|
59
59
|
let measureContext:
|
|
60
60
|
| CanvasRenderingContext2D
|
|
61
61
|
| OffscreenCanvasRenderingContext2D;
|
|
62
|
-
/**
|
|
63
|
-
* make fontface add not show errors
|
|
64
|
-
*/
|
|
65
|
-
interface FontFaceSetWithAdd extends FontFaceSet {
|
|
66
|
-
add(font: FontFace): void;
|
|
67
|
-
}
|
|
68
62
|
|
|
69
63
|
/**
|
|
70
64
|
* Check if a font can be rendered
|
|
@@ -112,7 +106,7 @@ export const loadFont = async (
|
|
|
112
106
|
const loadPromise = new FontFace(fontFamily, `url(${fontUrl})`)
|
|
113
107
|
.load()
|
|
114
108
|
.then((loadedFont) => {
|
|
115
|
-
|
|
109
|
+
stage.platform.addFont(loadedFont);
|
|
116
110
|
processFontData(fontFamily, loadedFont, metrics);
|
|
117
111
|
fontLoadPromises.delete(fontFamily);
|
|
118
112
|
for (let key in nwff) {
|
|
@@ -185,6 +179,9 @@ export const isFontLoaded = (fontFamily: string): boolean => {
|
|
|
185
179
|
* @param node
|
|
186
180
|
*/
|
|
187
181
|
export const waitingForFont = (fontFamily: string, node: CoreTextNode) => {
|
|
182
|
+
if (nodesWaitingForFont[fontFamily] === undefined) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
188
185
|
nodesWaitingForFont[fontFamily]![node.id] = node;
|
|
189
186
|
};
|
|
190
187
|
|
|
@@ -134,7 +134,6 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
134
134
|
metrics,
|
|
135
135
|
text,
|
|
136
136
|
textAlign,
|
|
137
|
-
verticalAlign,
|
|
138
137
|
fontFamily,
|
|
139
138
|
lineHeight,
|
|
140
139
|
overflowSuffix,
|
|
@@ -144,10 +143,9 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
144
143
|
maxWidth,
|
|
145
144
|
maxHeight,
|
|
146
145
|
);
|
|
147
|
-
|
|
148
146
|
const lineAmount = lines.length;
|
|
149
|
-
const canvasW = Math.ceil(
|
|
150
|
-
const canvasH = Math.ceil(
|
|
147
|
+
const canvasW = Math.ceil(effectiveWidth);
|
|
148
|
+
const canvasH = Math.ceil(effectiveHeight);
|
|
151
149
|
|
|
152
150
|
canvas.width = canvasW;
|
|
153
151
|
canvas.height = canvasH;
|
|
@@ -165,8 +163,8 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
165
163
|
for (let i = 0; i < lineAmount; i++) {
|
|
166
164
|
const line = lines[i] as TextLineStruct;
|
|
167
165
|
const textLine = line[0];
|
|
168
|
-
let currentX = Math.ceil(line[
|
|
169
|
-
const currentY = Math.ceil(line[
|
|
166
|
+
let currentX = Math.ceil(line[3]);
|
|
167
|
+
const currentY = Math.ceil(line[4]);
|
|
170
168
|
if (letterSpacing === 0) {
|
|
171
169
|
context.fillText(textLine, currentX, currentY);
|
|
172
170
|
} else {
|
|
@@ -193,8 +191,8 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
|
|
|
193
191
|
}
|
|
194
192
|
return {
|
|
195
193
|
imageData,
|
|
196
|
-
width:
|
|
197
|
-
height:
|
|
194
|
+
width: effectiveWidth,
|
|
195
|
+
height: effectiveHeight,
|
|
198
196
|
remainingLines,
|
|
199
197
|
hasRemainingText,
|
|
200
198
|
};
|
|
@@ -377,6 +377,9 @@ export const loadFont = async (
|
|
|
377
377
|
* @param {CoreTextNode} node - Node that was waiting for the font
|
|
378
378
|
*/
|
|
379
379
|
export const waitingForFont = (fontFamily: string, node: CoreTextNode) => {
|
|
380
|
+
if (nodesWaitingForFont[fontFamily] === undefined) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
380
383
|
nodesWaitingForFont[fontFamily]![node.id] = node;
|
|
381
384
|
};
|
|
382
385
|
|
|
@@ -308,7 +308,6 @@ const generateTextLayout = (
|
|
|
308
308
|
metrics,
|
|
309
309
|
props.text,
|
|
310
310
|
props.textAlign,
|
|
311
|
-
verticalAlign,
|
|
312
311
|
fontFamily,
|
|
313
312
|
lineHeight,
|
|
314
313
|
props.overflowSuffix,
|
|
@@ -329,9 +328,9 @@ const generateTextLayout = (
|
|
|
329
328
|
const textLine = line[0];
|
|
330
329
|
const textLineLength = textLine.length;
|
|
331
330
|
let prevCodepoint = 0;
|
|
332
|
-
currentX = line[
|
|
331
|
+
currentX = line[3];
|
|
333
332
|
//convert Y coord to vertex value
|
|
334
|
-
currentY = line[
|
|
333
|
+
currentY = line[4] / fontScale;
|
|
335
334
|
|
|
336
335
|
for (let j = 0; j < textLineLength; j++) {
|
|
337
336
|
const char = textLine.charAt(j);
|
|
@@ -389,8 +388,8 @@ const generateTextLayout = (
|
|
|
389
388
|
return {
|
|
390
389
|
glyphs,
|
|
391
390
|
distanceRange: fontScale * fontData.distanceField.distanceRange,
|
|
392
|
-
width:
|
|
393
|
-
height:
|
|
391
|
+
width: effectiveWidth * fontScale,
|
|
392
|
+
height: effectiveHeight,
|
|
394
393
|
fontScale: fontScale,
|
|
395
394
|
lineHeight: lineHeightPx,
|
|
396
395
|
fontFamily,
|