@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.
Files changed (59) hide show
  1. package/dist/src/core/lib/Matrix3d.d.ts +38 -24
  2. package/dist/src/core/lib/Matrix3d.js +143 -166
  3. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  4. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +19 -0
  5. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +61 -0
  6. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  7. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +8 -2
  8. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +24 -3
  9. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  10. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +2 -0
  11. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
  12. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +72 -1
  13. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +11 -1
  14. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  15. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +5 -2
  16. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +4 -3
  17. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  18. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +8 -0
  19. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +42 -16
  20. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  21. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +7 -1
  22. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +42 -11
  23. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  24. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +4 -0
  25. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +26 -9
  26. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  27. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +2 -1
  28. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +32 -5
  29. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
  30. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +2 -1
  31. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -1
  32. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  33. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +8 -4
  34. package/dist/src/core/text-rendering/renderers/TextRenderer.js +6 -5
  35. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  36. package/dist/src/main-api/RendererMain.js +2 -2
  37. package/dist/src/main-api/RendererMain.js.map +1 -1
  38. package/dist/src/render-drivers/main/MainOnlyTextNode.js +1 -3
  39. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  40. package/dist/src/render-drivers/threadx/TextNodeStruct.js +3 -1
  41. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
  42. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  43. package/package.json +2 -2
  44. package/src/core/lib/Matrix3d.ts +144 -190
  45. package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
  46. package/src/core/text-rendering/TextTextureRendererUtils.ts +74 -0
  47. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +41 -12
  48. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +2 -0
  49. package/src/core/text-rendering/font-face-types/TrFontFace.ts +86 -1
  50. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +13 -7
  51. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +52 -20
  52. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +59 -13
  53. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +30 -9
  54. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +38 -5
  55. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +5 -2
  56. package/src/core/text-rendering/renderers/TextRenderer.ts +14 -10
  57. package/src/main-api/RendererMain.ts +2 -2
  58. package/src/render-drivers/main/MainOnlyTextNode.ts +1 -3
  59. 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: TrProps['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 + vertexLineHeight >= rwSdf.y1;
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
- * @default 0
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
- const stateEvents = ['loading', 'loaded', 'failed'];
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 ?? fontSize,
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 ?? 'top',
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
- if (value) {
212
- this.coreNode.lineHeight = value;
213
- }
211
+ this.coreNode.lineHeight = value;
214
212
  }
215
213
 
216
214
  get maxLines(): ITextNode['maxLines'] {
@@ -164,7 +164,9 @@ export class TextNodeStruct
164
164
  // Decorator will handle this
165
165
  }
166
166
 
167
- @structProp('number')
167
+ @structProp('number', {
168
+ allowUndefined: true,
169
+ })
168
170
  get lineHeight(): TextNodeStructWritableProps['lineHeight'] {
169
171
  return 0;
170
172
  }