@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.
- package/dist/src/common/CommonTypes.d.ts +11 -0
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +171 -0
- package/dist/src/core/AutosizeManager.js.map +1 -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 +13 -0
- package/dist/src/core/CoreTextNode.js +68 -17
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/Stage.js +4 -2
- 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/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/renderers/webgl/WebGlCoreRenderer.js +13 -9
- package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
- package/dist/src/core/shaders/canvas/RadialGradient.js +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +6 -4
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +2 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +8 -7
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +4 -4
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +3 -3
- 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 +239 -181
- 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/main-api/Renderer.js +4 -3
- 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 +78 -17
- package/src/core/Stage.ts +5 -2
- package/src/core/platforms/Platform.ts +6 -0
- package/src/core/platforms/web/WebPlatform.ts +11 -0
- package/src/core/shaders/canvas/RadialGradient.ts +1 -1
- package/src/core/shaders/templates/RadialGradientTemplate.ts +6 -4
- package/src/core/shaders/webgl/LinearGradient.ts +2 -1
- package/src/core/shaders/webgl/RadialGradient.ts +8 -7
- package/src/core/text-rendering/CanvasFontHandler.ts +1 -7
- package/src/core/text-rendering/CanvasTextRenderer.ts +3 -5
- package/src/core/text-rendering/SdfTextRenderer.ts +2 -3
- package/src/core/text-rendering/TextLayoutEngine.ts +393 -223
- 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/Renderer.ts +4 -3
- package/dist/src/core/text-rendering/CanvasFont.d.ts +0 -14
- package/dist/src/core/text-rendering/CanvasFont.js +0 -111
- package/dist/src/core/text-rendering/CanvasFont.js.map +0 -1
- package/dist/src/core/text-rendering/CoreFont.d.ts +0 -33
- package/dist/src/core/text-rendering/CoreFont.js +0 -48
- package/dist/src/core/text-rendering/CoreFont.js.map +0 -1
- package/dist/src/core/text-rendering/FontManager.d.ts +0 -11
- package/dist/src/core/text-rendering/FontManager.js +0 -42
- package/dist/src/core/text-rendering/FontManager.js.map +0 -1
- package/dist/src/core/text-rendering/SdfFont.d.ts +0 -29
- package/dist/src/core/text-rendering/SdfFont.js +0 -142
- package/dist/src/core/text-rendering/SdfFont.js.map +0 -1
- 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)
|
|
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
|
-
*
|
|
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
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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[
|
|
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 {
|
|
@@ -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);
|