@lightningjs/renderer 3.0.0-beta16 → 3.0.0-beta18

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 (90) hide show
  1. package/dist/src/common/CommonTypes.d.ts +11 -0
  2. package/dist/src/core/AutosizeManager.d.ts +29 -0
  3. package/dist/src/core/AutosizeManager.js +171 -0
  4. package/dist/src/core/AutosizeManager.js.map +1 -0
  5. package/dist/src/core/CoreNode.js +8 -0
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +13 -0
  8. package/dist/src/core/CoreTextNode.js +68 -17
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/Stage.js +4 -2
  11. package/dist/src/core/Stage.js.map +1 -1
  12. package/dist/src/core/animations/Animation.d.ts +16 -0
  13. package/dist/src/core/animations/Animation.js +111 -0
  14. package/dist/src/core/animations/Animation.js.map +1 -0
  15. package/dist/src/core/animations/CoreTransition.d.ts +24 -0
  16. package/dist/src/core/animations/CoreTransition.js +63 -0
  17. package/dist/src/core/animations/CoreTransition.js.map +1 -0
  18. package/dist/src/core/animations/Playback.d.ts +62 -0
  19. package/dist/src/core/animations/Playback.js +155 -0
  20. package/dist/src/core/animations/Playback.js.map +1 -0
  21. package/dist/src/core/animations/Transition.d.ts +25 -0
  22. package/dist/src/core/animations/Transition.js +63 -0
  23. package/dist/src/core/animations/Transition.js.map +1 -0
  24. package/dist/src/core/animations/utils.d.ts +2 -0
  25. package/dist/src/core/animations/utils.js +137 -0
  26. package/dist/src/core/animations/utils.js.map +1 -0
  27. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  28. package/dist/src/core/lib/collectionUtils.js +100 -0
  29. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  30. package/dist/src/core/platforms/Platform.d.ts +5 -0
  31. package/dist/src/core/platforms/Platform.js.map +1 -1
  32. package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
  33. package/dist/src/core/platforms/web/WebPlatform.js +3 -0
  34. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  35. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +13 -9
  36. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  38. package/dist/src/core/shaders/canvas/RadialGradient.js +1 -1
  39. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  40. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +6 -4
  41. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  42. package/dist/src/core/shaders/webgl/LinearGradient.js +2 -1
  43. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  44. package/dist/src/core/shaders/webgl/RadialGradient.js +8 -7
  45. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  46. package/dist/src/core/text-rendering/CanvasFontHandler.js +1 -1
  47. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  48. package/dist/src/core/text-rendering/CanvasTextRenderer.js +4 -4
  49. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  50. package/dist/src/core/text-rendering/SdfTextRenderer.js +3 -3
  51. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  52. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +12 -13
  53. package/dist/src/core/text-rendering/TextLayoutEngine.js +239 -181
  54. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
  55. package/dist/src/core/text-rendering/TextRenderer.d.ts +22 -7
  56. package/dist/src/main-api/Renderer.js +4 -3
  57. package/dist/src/main-api/Renderer.js.map +1 -1
  58. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  59. package/package.json +1 -1
  60. package/src/common/CommonTypes.ts +16 -0
  61. package/src/core/CoreNode.test.ts +50 -1
  62. package/src/core/CoreNode.ts +11 -0
  63. package/src/core/CoreTextNode.ts +78 -17
  64. package/src/core/Stage.ts +5 -2
  65. package/src/core/platforms/Platform.ts +6 -0
  66. package/src/core/platforms/web/WebPlatform.ts +11 -0
  67. package/src/core/shaders/canvas/RadialGradient.ts +1 -1
  68. package/src/core/shaders/templates/RadialGradientTemplate.ts +6 -4
  69. package/src/core/shaders/webgl/LinearGradient.ts +2 -1
  70. package/src/core/shaders/webgl/RadialGradient.ts +8 -7
  71. package/src/core/text-rendering/CanvasFontHandler.ts +1 -7
  72. package/src/core/text-rendering/CanvasTextRenderer.ts +3 -5
  73. package/src/core/text-rendering/SdfTextRenderer.ts +2 -3
  74. package/src/core/text-rendering/TextLayoutEngine.ts +393 -223
  75. package/src/core/text-rendering/TextRenderer.ts +22 -7
  76. package/src/core/text-rendering/tests/{SdfTests.test.ts → TextLayoutEngine.test.ts} +103 -64
  77. package/src/main-api/Renderer.ts +4 -3
  78. package/dist/src/core/text-rendering/CanvasFont.d.ts +0 -14
  79. package/dist/src/core/text-rendering/CanvasFont.js +0 -111
  80. package/dist/src/core/text-rendering/CanvasFont.js.map +0 -1
  81. package/dist/src/core/text-rendering/CoreFont.d.ts +0 -33
  82. package/dist/src/core/text-rendering/CoreFont.js +0 -48
  83. package/dist/src/core/text-rendering/CoreFont.js.map +0 -1
  84. package/dist/src/core/text-rendering/FontManager.d.ts +0 -11
  85. package/dist/src/core/text-rendering/FontManager.js +0 -42
  86. package/dist/src/core/text-rendering/FontManager.js.map +0 -1
  87. package/dist/src/core/text-rendering/SdfFont.d.ts +0 -29
  88. package/dist/src/core/text-rendering/SdfFont.js +0 -142
  89. package/dist/src/core/text-rendering/SdfFont.js.map +0 -1
  90. package/src/core/text-rendering/tests/Canvas.test.ts +0 -378
@@ -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
  }
@@ -52,7 +52,7 @@ export const RadialGradient: CanvasShaderType<
52
52
  pivotY: props.pivot[1] * node.h,
53
53
  scaleX,
54
54
  scaleY,
55
- size: Math.min(pWidth, pHeight) * 0.5,
55
+ size: Math.min(pWidth, pHeight),
56
56
  colors: props.colors.map((value) => this.toColorString(value)),
57
57
  };
58
58
  },
@@ -32,13 +32,15 @@ export interface RadialGradientProps {
32
32
  */
33
33
  stops: number[];
34
34
  /**
35
- * Width of the RadialGradientEffect
35
+ * radial width of the RadialGradientEffect
36
+ *
37
+ * @remarks from the center to the outer edge of the gradient
36
38
  */
37
39
  w: number;
38
40
  /**
39
- * height of the RadialGradientEffect
40
- *
41
- * @remarks if not defined uses the width value
41
+ * radial height of the RadialGradientEffect
42
+ * if not defined uses the width value
43
+ * @remarks from the center to the outer edge of the gradient
42
44
  */
43
45
  h: number;
44
46
  /**
@@ -98,7 +98,8 @@ export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
98
98
  vec2 gradVec = t - f;
99
99
  float dist = dot(v_textureCoords.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
100
100
  vec4 colorOut = getGradientColor(dist);
101
- gl_FragColor = mix(color, colorOut, clamp(colorOut.a, 0.0, 1.0));
101
+ vec3 blendedRGB = mix(color.rgb, colorOut.rgb, clamp(colorOut.a, 0.0, 1.0));
102
+ gl_FragColor = vec4(blendedRGB, color.a);
102
103
  }
103
104
  `;
104
105
  },
@@ -33,7 +33,7 @@ export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
33
33
  props.pivot[0] * node.w,
34
34
  props.pivot[1] * node.h,
35
35
  );
36
- this.uniform2f('u_size', props.w * 0.5, props.h * 0.5);
36
+ this.uniform2f('u_size', props.w, props.h);
37
37
  this.uniform1fv('u_stops', new Float32Array(props.stops));
38
38
  const colors: number[] = [];
39
39
  for (let i = 0; i < props.colors.length; i++) {
@@ -63,15 +63,13 @@ export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
63
63
 
64
64
  uniform vec2 u_projection;
65
65
  uniform vec2 u_size;
66
+
66
67
  uniform float u_stops[MAX_STOPS];
67
68
  uniform vec4 u_colors[MAX_STOPS];
68
69
 
69
70
  varying vec4 v_color;
70
71
  varying vec2 v_textureCoords;
71
-
72
- vec2 calcPoint(float d, float angle) {
73
- return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
74
- }
72
+ varying vec2 v_nodeCoords;
75
73
 
76
74
  vec4 getGradientColor(float dist) {
77
75
  dist = clamp(dist, 0.0, 1.0);
@@ -92,15 +90,18 @@ export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
92
90
  return mix(u_colors[i], u_colors[i + 1], lDist);
93
91
  }
94
92
  }
93
+
94
+ return u_colors[LAST_STOP];
95
95
  }
96
96
 
97
97
  void main() {
98
98
  vec4 color = texture2D(u_texture, v_textureCoords) * v_color;
99
- vec2 point = v_textureCoords.xy * u_dimensions;
99
+ vec2 point = v_nodeCoords.xy * u_dimensions;
100
100
  float dist = length((point - u_projection) / u_size);
101
101
 
102
102
  vec4 colorOut = getGradientColor(dist);
103
- gl_FragColor = mix(color, colorOut, clamp(colorOut.a, 0.0, 1.0));
103
+ vec3 blendedRGB = mix(color.rgb, colorOut.rgb, clamp(colorOut.a, 0.0, 1.0));
104
+ gl_FragColor = vec4(blendedRGB, color.a);
104
105
  }
105
106
  `;
106
107
  },
@@ -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
- (document.fonts as FontFaceSetWithAdd).add(loadedFont);
109
+ stage.platform.addFont(loadedFont);
116
110
  processFontData(fontFamily, loadedFont, metrics);
117
111
  fontLoadPromises.delete(fontFamily);
118
112
  for (let key in nwff) {
@@ -56,7 +56,7 @@ const layoutCache = new Map<
56
56
 
57
57
  // Initialize the Text Renderer
58
58
  const init = (stage: Stage): void => {
59
- const dpr = window.devicePixelRatio || 1;
59
+ const dpr = stage.options.devicePhysicalPixelRatio;
60
60
 
61
61
  // Drawing canvas and context
62
62
  canvas = stage.platform.createCanvas() as HTMLCanvasElement | OffscreenCanvas;
@@ -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,7 +143,6 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
144
143
  maxWidth,
145
144
  maxHeight,
146
145
  );
147
-
148
146
  const lineAmount = lines.length;
149
147
  const canvasW = Math.ceil(effectiveWidth);
150
148
  const canvasH = Math.ceil(effectiveHeight);
@@ -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[2]);
169
- const currentY = Math.ceil(line[3]);
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 {
@@ -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[2];
331
+ currentX = line[3];
333
332
  //convert Y coord to vertex value
334
- currentY = line[3] / fontScale;
333
+ currentY = line[4] / fontScale;
335
334
 
336
335
  for (let j = 0; j < textLineLength; j++) {
337
336
  const char = textLine.charAt(j);