@lightningjs/renderer 0.8.4 → 0.9.0
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/core/lib/Matrix3d.d.ts +38 -24
- package/dist/src/core/lib/Matrix3d.js +143 -166
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +19 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +61 -0
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +8 -2
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +24 -3
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +2 -0
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +72 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +11 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +5 -2
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +4 -3
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +8 -0
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +42 -16
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +7 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +42 -11
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +4 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +26 -9
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +32 -5
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +8 -4
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +6 -5
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/main-api/RendererMain.js +2 -2
- package/dist/src/main-api/RendererMain.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyTextNode.js +1 -3
- package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js +3 -1
- package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/core/lib/Matrix3d.ts +144 -190
- package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
- package/src/core/text-rendering/TextTextureRendererUtils.ts +74 -0
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +41 -12
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +2 -0
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +86 -1
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +13 -7
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +52 -20
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +59 -13
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +30 -9
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +38 -5
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +5 -2
- package/src/core/text-rendering/renderers/TextRenderer.ts +14 -10
- package/src/main-api/RendererMain.ts +2 -2
- package/src/render-drivers/main/MainOnlyTextNode.ts +1 -3
- package/src/render-drivers/threadx/TextNodeStruct.ts +3 -1
|
@@ -39,7 +39,7 @@ export function layoutText(
|
|
|
39
39
|
width: TrProps['width'],
|
|
40
40
|
height: TrProps['height'],
|
|
41
41
|
fontSize: TrProps['fontSize'],
|
|
42
|
-
lineHeight:
|
|
42
|
+
lineHeight: number,
|
|
43
43
|
letterSpacing: TrProps['letterSpacing'],
|
|
44
44
|
/**
|
|
45
45
|
* Mutated
|
|
@@ -63,6 +63,7 @@ export function layoutText(
|
|
|
63
63
|
fullyProcessed: boolean;
|
|
64
64
|
maxX: number;
|
|
65
65
|
maxY: number;
|
|
66
|
+
numLines: number;
|
|
66
67
|
} {
|
|
67
68
|
assertTruthy(trFontFace, 'Font face must be loaded');
|
|
68
69
|
assertTruthy(trFontFace.loaded, 'Font face must be loaded');
|
|
@@ -82,6 +83,7 @@ export function layoutText(
|
|
|
82
83
|
* See above
|
|
83
84
|
*/
|
|
84
85
|
const fontSizeRatio = fontSize / trFontFace.data.info.size;
|
|
86
|
+
|
|
85
87
|
/**
|
|
86
88
|
* `lineHeight` in vertex coordinates
|
|
87
89
|
*/
|
|
@@ -170,7 +172,7 @@ export function layoutText(
|
|
|
170
172
|
*/
|
|
171
173
|
let xStartLastWordBoundary = 0;
|
|
172
174
|
|
|
173
|
-
const lineIsBelowWindowTop = curY +
|
|
175
|
+
const lineIsBelowWindowTop = curY + trFontFace.maxCharHeight >= rwSdf.y1;
|
|
174
176
|
const lineIsAboveWindowBottom = curY <= rwSdf.y2;
|
|
175
177
|
const lineIsWithinWindow = lineIsBelowWindowTop && lineIsAboveWindowBottom;
|
|
176
178
|
// Layout glyphs in this line
|
|
@@ -390,5 +392,6 @@ export function layoutText(
|
|
|
390
392
|
fullyProcessed: !!glyphResult.done,
|
|
391
393
|
maxX,
|
|
392
394
|
maxY,
|
|
395
|
+
numLines: lineCache.length,
|
|
393
396
|
};
|
|
394
397
|
}
|
|
@@ -53,7 +53,7 @@ export interface TextRendererState {
|
|
|
53
53
|
* via queueMicrotask.
|
|
54
54
|
*/
|
|
55
55
|
updateScheduled: boolean;
|
|
56
|
-
status: 'initialState' | 'loading' | 'loaded' | 'failed';
|
|
56
|
+
status: 'initialState' | 'loading' | 'loaded' | 'failed' | 'destroyed';
|
|
57
57
|
/**
|
|
58
58
|
* Event emitter for the text renderer
|
|
59
59
|
*/
|
|
@@ -267,11 +267,15 @@ export interface TrProps extends TrFontProps {
|
|
|
267
267
|
* Line height for text (in pixels)
|
|
268
268
|
*
|
|
269
269
|
* @remarks
|
|
270
|
-
* This property sets the height of each line.
|
|
270
|
+
* This property sets the height of each line. If set to `undefined`, the
|
|
271
|
+
* line height will be calculated based on the font and font size to be the
|
|
272
|
+
* minimal height required to completely contain a line of text.
|
|
271
273
|
*
|
|
272
|
-
*
|
|
274
|
+
* See: https://github.com/lightning-js/renderer/issues/170
|
|
275
|
+
*
|
|
276
|
+
* @default `undefined`
|
|
273
277
|
*/
|
|
274
|
-
lineHeight: number;
|
|
278
|
+
lineHeight: number | undefined;
|
|
275
279
|
/**
|
|
276
280
|
* Max lines for text
|
|
277
281
|
*
|
|
@@ -509,12 +513,8 @@ export abstract class TextRenderer<
|
|
|
509
513
|
* @param state
|
|
510
514
|
*/
|
|
511
515
|
destroyState(state: StateT) {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
// Remove the old event listeners from previous state obj there was one
|
|
515
|
-
stateEvents.forEach((eventName) => {
|
|
516
|
-
state.emitter.off(eventName);
|
|
517
|
-
});
|
|
516
|
+
this.setStatus(state, 'destroyed');
|
|
517
|
+
state.emitter.removeAllListeners();
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
/**
|
|
@@ -533,6 +533,10 @@ export abstract class TextRenderer<
|
|
|
533
533
|
}
|
|
534
534
|
state.updateScheduled = true;
|
|
535
535
|
queueMicrotask(() => {
|
|
536
|
+
// If the state has been destroyed, don't update it
|
|
537
|
+
if (state.status === 'destroyed') {
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
536
540
|
state.updateScheduled = false;
|
|
537
541
|
this.updateState(state);
|
|
538
542
|
});
|
|
@@ -498,10 +498,10 @@ export class RendererMain extends EventEmitter {
|
|
|
498
498
|
scrollY: props.scrollY ?? 0,
|
|
499
499
|
offsetY: props.offsetY ?? 0,
|
|
500
500
|
letterSpacing: props.letterSpacing ?? 0,
|
|
501
|
-
lineHeight: props.lineHeight
|
|
501
|
+
lineHeight: props.lineHeight, // `undefined` is a valid value
|
|
502
502
|
maxLines: props.maxLines ?? 0,
|
|
503
503
|
textBaseline: props.textBaseline ?? 'alphabetic',
|
|
504
|
-
verticalAlign: props.verticalAlign ?? '
|
|
504
|
+
verticalAlign: props.verticalAlign ?? 'middle',
|
|
505
505
|
overflowSuffix: props.overflowSuffix ?? '...',
|
|
506
506
|
debug: props.debug ?? {},
|
|
507
507
|
};
|
|
@@ -208,9 +208,7 @@ export class MainOnlyTextNode extends MainOnlyNode implements ITextNode {
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
set lineHeight(value: ITextNode['lineHeight']) {
|
|
211
|
-
|
|
212
|
-
this.coreNode.lineHeight = value;
|
|
213
|
-
}
|
|
211
|
+
this.coreNode.lineHeight = value;
|
|
214
212
|
}
|
|
215
213
|
|
|
216
214
|
get maxLines(): ITextNode['maxLines'] {
|