@lightningjs/renderer 0.7.4 → 0.7.6
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/LICENSE +202 -202
- package/NOTICE +3 -3
- package/README.md +229 -221
- package/dist/src/common/CommonTypes.d.ts +6 -0
- package/dist/src/core/CoreNode.d.ts +25 -4
- package/dist/src/core/CoreNode.js +158 -25
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +1 -1
- package/dist/src/core/CoreTextNode.js +18 -10
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +3 -1
- package/dist/src/core/CoreTextureManager.js +9 -2
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +2 -0
- package/dist/src/core/Stage.js +9 -1
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +0 -1
- package/dist/src/core/lib/ImageWorker.js +55 -40
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +13 -0
- package/dist/src/core/lib/RenderCoords.js +63 -0
- package/dist/src/core/lib/RenderCoords.js.map +1 -0
- package/dist/src/core/lib/WebGlContext.d.ts +414 -0
- package/dist/src/core/lib/WebGlContext.js +640 -0
- package/dist/src/core/lib/WebGlContext.js.map +1 -0
- package/dist/src/core/lib/utils.d.ts +1 -0
- package/dist/src/core/lib/utils.js +6 -0
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +4 -1
- package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +9 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +14 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +47 -47
- package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
- package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
- package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
- package/dist/src/core/renderers/webgl/shaders/SdfShader.js +49 -49
- package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +5 -5
- package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
- package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
- package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
- package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +31 -31
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +13 -13
- package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
- package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
- package/dist/src/core/scene/Scene.d.ts +59 -0
- package/dist/src/core/scene/Scene.js +106 -0
- package/dist/src/core/scene/Scene.js.map +1 -0
- package/dist/src/core/text-rendering/TrFontManager.js +76 -27
- package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +8 -2
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +13 -3
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.d.ts +8 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js +29 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.d.ts +19 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js +84 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.d.ts +8 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js +40 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.d.ts +2 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js +41 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.d.ts +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js +4 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.d.ts +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js +2 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +20 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +55 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.d.ts +9 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js +32 -0
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js.map +1 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +12 -0
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.js +16 -2
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +1 -1
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +1 -1
- package/dist/src/main-api/INode.d.ts +27 -0
- package/dist/src/main-api/Inspector.js +20 -15
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/RendererMain.d.ts +6 -0
- package/dist/src/main-api/RendererMain.js +4 -0
- package/dist/src/main-api/RendererMain.js.map +1 -1
- package/dist/src/render-drivers/main/MainCoreDriver.js +1 -0
- package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
- package/dist/src/render-drivers/main/MainOnlyNode.d.ts +8 -1
- package/dist/src/render-drivers/main/MainOnlyNode.js +32 -0
- package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +1 -0
- package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +4 -1
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js +8 -0
- package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +1 -0
- package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -1
- package/dist/src/render-drivers/threadx/worker/renderer.js +1 -0
- package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
- package/dist/src/render-drivers/utils.d.ts +2 -0
- package/dist/src/render-drivers/utils.js +28 -0
- package/dist/src/render-drivers/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/exports/core-api.ts +102 -102
- package/exports/main-api.ts +60 -60
- package/exports/utils.ts +41 -41
- package/package.json +1 -1
- package/scripts/please-use-pnpm.js +13 -13
- package/src/common/CommonTypes.ts +125 -113
- package/src/common/EventEmitter.ts +77 -77
- package/src/common/IAnimationController.ts +29 -29
- package/src/core/CoreExtension.ts +32 -32
- package/src/core/CoreNode.ts +1114 -926
- package/src/core/CoreShaderManager.ts +243 -243
- package/src/core/CoreTextNode.ts +399 -391
- package/src/core/CoreTextureManager.ts +337 -326
- package/src/core/Stage.ts +365 -354
- package/src/core/animations/AnimationManager.ts +38 -38
- package/src/core/animations/CoreAnimation.ts +181 -181
- package/src/core/animations/CoreAnimationController.ts +148 -148
- package/src/core/lib/ContextSpy.ts +41 -41
- package/src/core/lib/ImageWorker.ts +149 -135
- package/src/core/lib/Matrix3d.ts +290 -290
- package/src/core/lib/RenderCoords.ts +86 -0
- package/src/core/lib/WebGlContextWrapper.ts +992 -992
- package/src/core/lib/textureCompression.ts +152 -152
- package/src/core/lib/utils.ts +250 -241
- package/src/core/platform.ts +46 -46
- package/src/core/renderers/CoreContextTexture.ts +30 -30
- package/src/core/renderers/CoreRenderOp.ts +22 -22
- package/src/core/renderers/CoreRenderer.ts +63 -63
- package/src/core/renderers/CoreShader.ts +41 -41
- package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +37 -37
- package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +233 -230
- package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +107 -107
- package/src/core/renderers/webgl/WebGlCoreRenderer.ts +520 -520
- package/src/core/renderers/webgl/WebGlCoreShader.ts +337 -337
- package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
- package/src/core/renderers/webgl/internal/RendererUtils.ts +148 -131
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +136 -136
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
- package/src/core/renderers/webgl/shaders/DefaultShader.ts +95 -95
- package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
- package/src/core/renderers/webgl/shaders/DynamicShader.ts +474 -474
- package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +161 -161
- package/src/core/renderers/webgl/shaders/SdfShader.ts +174 -174
- package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +86 -86
- package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
- package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +33 -33
- package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +135 -135
- package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +145 -145
- package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
- package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +176 -176
- package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +159 -159
- package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +186 -186
- package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +121 -121
- package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +114 -114
- package/src/core/text-rendering/TextTextureRendererUtils.ts +189 -189
- package/src/core/text-rendering/TrFontManager.ts +170 -96
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +141 -141
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +169 -169
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +105 -105
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +77 -77
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +757 -751
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +741 -741
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +784 -775
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +84 -84
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +393 -393
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +51 -51
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +516 -504
- package/src/core/textures/ColorTexture.ts +86 -86
- package/src/core/textures/ImageTexture.ts +154 -140
- package/src/core/textures/NoiseTexture.ts +96 -96
- package/src/core/textures/SubTexture.ts +143 -143
- package/src/core/textures/Texture.ts +224 -218
- package/src/core/utils.ts +224 -224
- package/src/env.d.ts +7 -7
- package/src/main-api/ICoreDriver.ts +66 -66
- package/src/main-api/INode.ts +499 -470
- package/src/main-api/Inspector.ts +439 -432
- package/src/main-api/RendererMain.ts +659 -649
- package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +45 -45
- package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +154 -154
- package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +54 -54
- package/src/render-drivers/main/MainCoreDriver.ts +149 -148
- package/src/render-drivers/main/MainOnlyNode.ts +494 -453
- package/src/render-drivers/main/MainOnlyTextNode.ts +261 -261
- package/src/render-drivers/threadx/NodeStruct.ts +300 -300
- package/src/render-drivers/threadx/SharedNode.ts +97 -97
- package/src/render-drivers/threadx/TextNodeStruct.ts +211 -211
- package/src/render-drivers/threadx/ThreadXCoreDriver.ts +286 -285
- package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +99 -99
- package/src/render-drivers/threadx/ThreadXMainNode.ts +192 -178
- package/src/render-drivers/threadx/ThreadXMainTextNode.ts +85 -85
- package/src/render-drivers/threadx/ThreadXRendererMessage.ts +111 -110
- package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +238 -238
- package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +149 -149
- package/src/render-drivers/threadx/worker/renderer.ts +152 -151
- package/src/render-drivers/utils.ts +97 -57
- package/src/utils.ts +207 -207
- package/COPYING +0 -1
|
@@ -87,24 +87,24 @@ export class LinearGradientEffect extends ShaderEffect {
|
|
|
87
87
|
},
|
|
88
88
|
};
|
|
89
89
|
static methods = {
|
|
90
|
-
fromLinear: `
|
|
91
|
-
vec4 function(vec4 linearRGB) {
|
|
92
|
-
vec4 higher = vec4(1.055)*pow(linearRGB, vec4(1.0/2.4)) - vec4(0.055);
|
|
93
|
-
vec4 lower = linearRGB * vec4(12.92);
|
|
94
|
-
return mix(higher, lower, 1.0);
|
|
95
|
-
}
|
|
90
|
+
fromLinear: `
|
|
91
|
+
vec4 function(vec4 linearRGB) {
|
|
92
|
+
vec4 higher = vec4(1.055)*pow(linearRGB, vec4(1.0/2.4)) - vec4(0.055);
|
|
93
|
+
vec4 lower = linearRGB * vec4(12.92);
|
|
94
|
+
return mix(higher, lower, 1.0);
|
|
95
|
+
}
|
|
96
96
|
`,
|
|
97
|
-
toLinear: `
|
|
98
|
-
vec4 function(vec4 sRGB) {
|
|
99
|
-
vec4 higher = pow((sRGB + vec4(0.055))/vec4(1.055), vec4(2.4));
|
|
100
|
-
vec4 lower = sRGB/vec4(12.92);
|
|
101
|
-
return mix(higher, lower, 1.0);
|
|
102
|
-
}
|
|
97
|
+
toLinear: `
|
|
98
|
+
vec4 function(vec4 sRGB) {
|
|
99
|
+
vec4 higher = pow((sRGB + vec4(0.055))/vec4(1.055), vec4(2.4));
|
|
100
|
+
vec4 lower = sRGB/vec4(12.92);
|
|
101
|
+
return mix(higher, lower, 1.0);
|
|
102
|
+
}
|
|
103
103
|
`,
|
|
104
|
-
calcPoint: `
|
|
105
|
-
vec2 function(float d, float angle) {
|
|
106
|
-
return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
|
|
107
|
-
}
|
|
104
|
+
calcPoint: `
|
|
105
|
+
vec2 function(float d, float angle) {
|
|
106
|
+
return d * vec2(cos(angle), sin(angle)) + (u_dimensions * 0.5);
|
|
107
|
+
}
|
|
108
108
|
`,
|
|
109
109
|
};
|
|
110
110
|
static ColorLoop = (amount) => {
|
|
@@ -116,21 +116,21 @@ export class LinearGradientEffect extends ShaderEffect {
|
|
|
116
116
|
};
|
|
117
117
|
static onColorize = (props) => {
|
|
118
118
|
const colors = props.colors.length || 1;
|
|
119
|
-
return `
|
|
120
|
-
float a = angle - (PI / 180.0 * 90.0);
|
|
121
|
-
float lineDist = abs(u_dimensions.x * cos(a)) + abs(u_dimensions.y * sin(a));
|
|
122
|
-
vec2 f = $calcPoint(lineDist * 0.5, a);
|
|
123
|
-
vec2 t = $calcPoint(lineDist * 0.5, a + PI);
|
|
124
|
-
vec2 gradVec = t - f;
|
|
125
|
-
float dist = dot(v_textureCoordinate.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
|
|
126
|
-
|
|
127
|
-
float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
|
|
128
|
-
vec4 colorOut = $fromLinear(mix($toLinear(colors[0]), $toLinear(colors[1]), stopCalc));
|
|
129
|
-
for(int i = 1; i < ${colors}-1; i++) {
|
|
130
|
-
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
|
|
131
|
-
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
|
|
132
|
-
}
|
|
133
|
-
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
119
|
+
return `
|
|
120
|
+
float a = angle - (PI / 180.0 * 90.0);
|
|
121
|
+
float lineDist = abs(u_dimensions.x * cos(a)) + abs(u_dimensions.y * sin(a));
|
|
122
|
+
vec2 f = $calcPoint(lineDist * 0.5, a);
|
|
123
|
+
vec2 t = $calcPoint(lineDist * 0.5, a + PI);
|
|
124
|
+
vec2 gradVec = t - f;
|
|
125
|
+
float dist = dot(v_textureCoordinate.xy * u_dimensions - f, gradVec) / dot(gradVec, gradVec);
|
|
126
|
+
|
|
127
|
+
float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
|
|
128
|
+
vec4 colorOut = $fromLinear(mix($toLinear(colors[0]), $toLinear(colors[1]), stopCalc));
|
|
129
|
+
for(int i = 1; i < ${colors}-1; i++) {
|
|
130
|
+
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
|
|
131
|
+
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
|
|
132
|
+
}
|
|
133
|
+
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
134
134
|
`;
|
|
135
135
|
};
|
|
136
136
|
}
|
|
@@ -97,19 +97,19 @@ export class RadialGradientEffect extends ShaderEffect {
|
|
|
97
97
|
};
|
|
98
98
|
static onColorize = (props) => {
|
|
99
99
|
const colors = props.colors.length || 1;
|
|
100
|
-
return `
|
|
101
|
-
vec2 point = v_textureCoordinate.xy * u_dimensions;
|
|
102
|
-
vec2 projection = vec2(pivot.x * u_dimensions.x, pivot.y * u_dimensions.y);
|
|
103
|
-
|
|
104
|
-
float dist = length((point - projection) / vec2(width, height));
|
|
105
|
-
|
|
106
|
-
float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
|
|
107
|
-
vec4 colorOut = mix(colors[0], colors[1], stopCalc);
|
|
108
|
-
for(int i = 1; i < ${colors}-1; i++) {
|
|
109
|
-
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
|
|
110
|
-
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
|
|
111
|
-
}
|
|
112
|
-
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
100
|
+
return `
|
|
101
|
+
vec2 point = v_textureCoordinate.xy * u_dimensions;
|
|
102
|
+
vec2 projection = vec2(pivot.x * u_dimensions.x, pivot.y * u_dimensions.y);
|
|
103
|
+
|
|
104
|
+
float dist = length((point - projection) / vec2(width, height));
|
|
105
|
+
|
|
106
|
+
float stopCalc = (dist - stops[0]) / (stops[1] - stops[0]);
|
|
107
|
+
vec4 colorOut = mix(colors[0], colors[1], stopCalc);
|
|
108
|
+
for(int i = 1; i < ${colors}-1; i++) {
|
|
109
|
+
stopCalc = (dist - stops[i]) / (stops[i + 1] - stops[i]);
|
|
110
|
+
colorOut = mix(colorOut, colors[i + 1], clamp(stopCalc, 0.0, 1.0));
|
|
111
|
+
}
|
|
112
|
+
return mix(maskColor, colorOut, clamp(colorOut.a, 0.0, 1.0));
|
|
113
113
|
`;
|
|
114
114
|
};
|
|
115
115
|
}
|
|
@@ -80,47 +80,47 @@ export class RadialProgressEffect extends ShaderEffect {
|
|
|
80
80
|
},
|
|
81
81
|
};
|
|
82
82
|
static methods = {
|
|
83
|
-
rotateUV: `
|
|
84
|
-
vec2 function(vec2 uv, float d) {
|
|
85
|
-
float s = sin(d);
|
|
86
|
-
float c = cos(d);
|
|
87
|
-
mat2 rotMatrix = mat2(c, -s, s, c);
|
|
88
|
-
return uv * rotMatrix;
|
|
89
|
-
}
|
|
83
|
+
rotateUV: `
|
|
84
|
+
vec2 function(vec2 uv, float d) {
|
|
85
|
+
float s = sin(d);
|
|
86
|
+
float c = cos(d);
|
|
87
|
+
mat2 rotMatrix = mat2(c, -s, s, c);
|
|
88
|
+
return uv * rotMatrix;
|
|
89
|
+
}
|
|
90
90
|
`,
|
|
91
|
-
drawDot: `
|
|
92
|
-
float function(vec2 uv, vec2 p, float r) {
|
|
93
|
-
uv += p;
|
|
94
|
-
float circle = length(uv) - r;
|
|
95
|
-
return clamp(-circle, 0.0, 1.0);
|
|
96
|
-
}
|
|
91
|
+
drawDot: `
|
|
92
|
+
float function(vec2 uv, vec2 p, float r) {
|
|
93
|
+
uv += p;
|
|
94
|
+
float circle = length(uv) - r;
|
|
95
|
+
return clamp(-circle, 0.0, 1.0);
|
|
96
|
+
}
|
|
97
97
|
`,
|
|
98
98
|
};
|
|
99
|
-
static onEffectMask = `
|
|
100
|
-
float outerRadius = radius * u_dimensions.y * 0.5;
|
|
101
|
-
|
|
102
|
-
float endAngle = range * progress - 0.0005;
|
|
103
|
-
|
|
104
|
-
vec2 uv = v_textureCoordinate.xy * u_dimensions.xy - u_dimensions * 0.5;
|
|
105
|
-
|
|
106
|
-
uv = $rotateUV(uv, -(offset));
|
|
107
|
-
float linewidth = width * u_pixelRatio;
|
|
108
|
-
float circle = length(uv) - (outerRadius - linewidth) ;
|
|
109
|
-
circle = abs(circle) - linewidth;
|
|
110
|
-
circle = clamp(-circle, 0.0, 1.0);
|
|
111
|
-
|
|
112
|
-
float angle = (atan(uv.x, -uv.y) / 3.14159265359 * 0.5);
|
|
113
|
-
float p = endAngle / (PI * 2.);
|
|
114
|
-
|
|
115
|
-
circle *= step(fract(angle), fract(p));
|
|
116
|
-
|
|
117
|
-
circle = rounded < 1. ? circle : max(circle, $drawDot(uv, vec2(0, outerRadius - linewidth), linewidth));
|
|
118
|
-
circle = rounded < 1. ? circle : max(circle, $drawDot($rotateUV(uv, -(endAngle)), vec2(0, outerRadius - linewidth), linewidth));
|
|
119
|
-
|
|
120
|
-
return mix(shaderColor, maskColor, circle);
|
|
99
|
+
static onEffectMask = `
|
|
100
|
+
float outerRadius = radius * u_dimensions.y * 0.5;
|
|
101
|
+
|
|
102
|
+
float endAngle = range * progress - 0.0005;
|
|
103
|
+
|
|
104
|
+
vec2 uv = v_textureCoordinate.xy * u_dimensions.xy - u_dimensions * 0.5;
|
|
105
|
+
|
|
106
|
+
uv = $rotateUV(uv, -(offset));
|
|
107
|
+
float linewidth = width * u_pixelRatio;
|
|
108
|
+
float circle = length(uv) - (outerRadius - linewidth) ;
|
|
109
|
+
circle = abs(circle) - linewidth;
|
|
110
|
+
circle = clamp(-circle, 0.0, 1.0);
|
|
111
|
+
|
|
112
|
+
float angle = (atan(uv.x, -uv.y) / 3.14159265359 * 0.5);
|
|
113
|
+
float p = endAngle / (PI * 2.);
|
|
114
|
+
|
|
115
|
+
circle *= step(fract(angle), fract(p));
|
|
116
|
+
|
|
117
|
+
circle = rounded < 1. ? circle : max(circle, $drawDot(uv, vec2(0, outerRadius - linewidth), linewidth));
|
|
118
|
+
circle = rounded < 1. ? circle : max(circle, $drawDot($rotateUV(uv, -(endAngle)), vec2(0, outerRadius - linewidth), linewidth));
|
|
119
|
+
|
|
120
|
+
return mix(shaderColor, maskColor, circle);
|
|
121
121
|
`;
|
|
122
|
-
static onColorize = `
|
|
123
|
-
return color;
|
|
122
|
+
static onColorize = `
|
|
123
|
+
return color;
|
|
124
124
|
`;
|
|
125
125
|
}
|
|
126
126
|
//# sourceMappingURL=RadialProgressEffect.js.map
|
|
@@ -52,17 +52,17 @@ export class RadiusEffect extends ShaderEffect {
|
|
|
52
52
|
},
|
|
53
53
|
};
|
|
54
54
|
static methods = {
|
|
55
|
-
fillMask: `
|
|
56
|
-
float function(float dist) {
|
|
57
|
-
return clamp(-dist, 0.0, 1.0);
|
|
58
|
-
}
|
|
55
|
+
fillMask: `
|
|
56
|
+
float function(float dist) {
|
|
57
|
+
return clamp(-dist, 0.0, 1.0);
|
|
58
|
+
}
|
|
59
59
|
`,
|
|
60
|
-
boxDist: `
|
|
61
|
-
float function(vec2 p, vec2 size, float radius) {
|
|
62
|
-
size -= vec2(radius);
|
|
63
|
-
vec2 d = abs(p) - size;
|
|
64
|
-
return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)) - radius;
|
|
65
|
-
}
|
|
60
|
+
boxDist: `
|
|
61
|
+
float function(vec2 p, vec2 size, float radius) {
|
|
62
|
+
size -= vec2(radius);
|
|
63
|
+
vec2 d = abs(p) - size;
|
|
64
|
+
return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)) - radius;
|
|
65
|
+
}
|
|
66
66
|
`,
|
|
67
67
|
};
|
|
68
68
|
static resolveDefaults(props) {
|
|
@@ -70,16 +70,16 @@ export class RadiusEffect extends ShaderEffect {
|
|
|
70
70
|
radius: props.radius ?? 10,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
static onShaderMask = `
|
|
74
|
-
vec2 halfDimensions = u_dimensions * 0.5;
|
|
75
|
-
float r = radius[0] * step(v_textureCoordinate.x, 0.5) * step(v_textureCoordinate.y, 0.5);
|
|
76
|
-
r = r + radius[1] * step(0.5, v_textureCoordinate.x) * step(v_textureCoordinate.y, 0.5);
|
|
77
|
-
r = r + radius[2] * step(0.5, v_textureCoordinate.x) * step(0.5, v_textureCoordinate.y);
|
|
78
|
-
r = r + radius[3] * step(v_textureCoordinate.x, 0.5) * step(0.5, v_textureCoordinate.y);
|
|
79
|
-
return $boxDist(v_textureCoordinate.xy * u_dimensions - halfDimensions, halfDimensions, r);
|
|
73
|
+
static onShaderMask = `
|
|
74
|
+
vec2 halfDimensions = u_dimensions * 0.5;
|
|
75
|
+
float r = radius[0] * step(v_textureCoordinate.x, 0.5) * step(v_textureCoordinate.y, 0.5);
|
|
76
|
+
r = r + radius[1] * step(0.5, v_textureCoordinate.x) * step(v_textureCoordinate.y, 0.5);
|
|
77
|
+
r = r + radius[2] * step(0.5, v_textureCoordinate.x) * step(0.5, v_textureCoordinate.y);
|
|
78
|
+
r = r + radius[3] * step(v_textureCoordinate.x, 0.5) * step(0.5, v_textureCoordinate.y);
|
|
79
|
+
return $boxDist(v_textureCoordinate.xy * u_dimensions - halfDimensions, halfDimensions, r);
|
|
80
80
|
`;
|
|
81
|
-
static onEffectMask = `
|
|
82
|
-
return mix(vec4(0.0), maskColor, $fillMask(shaderMask));
|
|
81
|
+
static onEffectMask = `
|
|
82
|
+
return mix(vec4(0.0), maskColor, $fillMask(shaderMask));
|
|
83
83
|
`;
|
|
84
84
|
}
|
|
85
85
|
//# sourceMappingURL=RadiusEffect.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { CoreNode } from '../CoreNode.js';
|
|
2
|
+
export type NodeTypes = Node;
|
|
3
|
+
export declare class Scene {
|
|
4
|
+
/**
|
|
5
|
+
* Root node of the scene
|
|
6
|
+
*
|
|
7
|
+
* @type {Node}
|
|
8
|
+
* @memberof Scene
|
|
9
|
+
*/
|
|
10
|
+
root: CoreNode;
|
|
11
|
+
constructor(root: CoreNode);
|
|
12
|
+
/**
|
|
13
|
+
* Get all nodes of a specific type
|
|
14
|
+
* @param type
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
getNodeByType(type: string): Node[];
|
|
18
|
+
/**
|
|
19
|
+
* Find a node by id
|
|
20
|
+
* @param id
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
getNodeById(id: string): Node | null;
|
|
24
|
+
/**
|
|
25
|
+
* Create a new node
|
|
26
|
+
* @param parent
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* create a new RectangleNode
|
|
31
|
+
* @param w
|
|
32
|
+
* @param h
|
|
33
|
+
* @param parent
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Create a new CircleNode
|
|
38
|
+
* @param r
|
|
39
|
+
* @param parent
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Create a new TextNode
|
|
44
|
+
* @param text
|
|
45
|
+
* @param parent
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* Setup and attaching Node
|
|
50
|
+
* @param node
|
|
51
|
+
* @param parent
|
|
52
|
+
* @returns
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* Update the scene
|
|
56
|
+
* @param delta
|
|
57
|
+
*/
|
|
58
|
+
update(delta: number): void;
|
|
59
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* If not stated otherwise in this file or this component's LICENSE file the
|
|
3
|
+
* following copyright and licenses apply:
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the License);
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
export class Scene {
|
|
20
|
+
/**
|
|
21
|
+
* Root node of the scene
|
|
22
|
+
*
|
|
23
|
+
* @type {Node}
|
|
24
|
+
* @memberof Scene
|
|
25
|
+
*/
|
|
26
|
+
root;
|
|
27
|
+
constructor(root) {
|
|
28
|
+
this.root = root;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get all nodes of a specific type
|
|
32
|
+
* @param type
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
getNodeByType(type) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Find a node by id
|
|
40
|
+
* @param id
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
getNodeById(id) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a new node
|
|
48
|
+
* @param parent
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
// public createNode(settings: Partial<INodeWritableProps> = {}): NodeTypes {
|
|
52
|
+
// return createNode(settings);
|
|
53
|
+
// }
|
|
54
|
+
/**
|
|
55
|
+
* create a new RectangleNode
|
|
56
|
+
* @param w
|
|
57
|
+
* @param h
|
|
58
|
+
* @param parent
|
|
59
|
+
* @returns
|
|
60
|
+
*/
|
|
61
|
+
// public rectangle(w: number, h: number, parent: NodeTypes | null = null) {
|
|
62
|
+
// // TODO: Fix this
|
|
63
|
+
// // return this.create(new RectangleNode(w, h), parent);
|
|
64
|
+
// }
|
|
65
|
+
/**
|
|
66
|
+
* Create a new CircleNode
|
|
67
|
+
* @param r
|
|
68
|
+
* @param parent
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
// public circle(r: number, parent: NodeTypes | null = null) {
|
|
72
|
+
// // TODO: Fix this
|
|
73
|
+
// // return this.create(new CircleNode(r), parent);
|
|
74
|
+
// }
|
|
75
|
+
/**
|
|
76
|
+
* Create a new TextNode
|
|
77
|
+
* @param text
|
|
78
|
+
* @param parent
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
// public text(text = '', parent: NodeTypes | null = null) {
|
|
82
|
+
// // TODO: Fix this
|
|
83
|
+
// // return this.create(new TextNode(text), parent);
|
|
84
|
+
// }
|
|
85
|
+
/**
|
|
86
|
+
* Setup and attaching Node
|
|
87
|
+
* @param node
|
|
88
|
+
* @param parent
|
|
89
|
+
* @returns
|
|
90
|
+
*/
|
|
91
|
+
// private create(node: NodeTypes, parent: NodeTypes | null = null): NodeTypes {
|
|
92
|
+
// if (!parent) {
|
|
93
|
+
// parent = this.root;
|
|
94
|
+
// }
|
|
95
|
+
// node.parent = parent;
|
|
96
|
+
// return node;
|
|
97
|
+
// }
|
|
98
|
+
/**
|
|
99
|
+
* Update the scene
|
|
100
|
+
* @param delta
|
|
101
|
+
*/
|
|
102
|
+
update(delta) {
|
|
103
|
+
this.root.update(delta);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=Scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scene.js","sourceRoot":"","sources":["../../../../src/core/scene/Scene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,OAAO,KAAK;IAChB;;;;;OAKG;IACI,IAAI,CAAW;IAEtB,YAAY,IAAc;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,IAAY;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,EAAU;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,6EAA6E;IAC7E,iCAAiC;IACjC,IAAI;IAEJ;;;;;;OAMG;IACH,4EAA4E;IAC5E,sBAAsB;IACtB,4DAA4D;IAC5D,IAAI;IAEJ;;;;;OAKG;IACH,8DAA8D;IAC9D,sBAAsB;IACtB,sDAAsD;IACtD,IAAI;IAEJ;;;;;OAKG;IACH,4DAA4D;IAC5D,sBAAsB;IACtB,uDAAuD;IACvD,IAAI;IAEJ;;;;;OAKG;IACH,gFAAgF;IAChF,mBAAmB;IACnB,0BAA0B;IAC1B,MAAM;IAEN,0BAA0B;IAC1B,iBAAiB;IACjB,IAAI;IAEJ;;;OAGG;IACI,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -16,8 +16,80 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
import
|
|
20
|
-
|
|
19
|
+
import memize from 'memize';
|
|
20
|
+
const weightConversions = {
|
|
21
|
+
normal: 400,
|
|
22
|
+
bold: 700,
|
|
23
|
+
bolder: 900,
|
|
24
|
+
lighter: 100,
|
|
25
|
+
};
|
|
26
|
+
const fontWeightToNumber = (weight) => {
|
|
27
|
+
if (typeof weight === 'number') {
|
|
28
|
+
return weight;
|
|
29
|
+
}
|
|
30
|
+
return weightConversions[weight] || 400;
|
|
31
|
+
};
|
|
32
|
+
function rawResolveFontToUse(familyMapsByPriority, family, weightIn, style, stretch) {
|
|
33
|
+
let weight = fontWeightToNumber(weightIn);
|
|
34
|
+
for (const fontFamiles of familyMapsByPriority) {
|
|
35
|
+
const fontFaces = fontFamiles[family];
|
|
36
|
+
if (!fontFaces) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (fontFaces.size === 1) {
|
|
40
|
+
// No Exact match found, find nearest weight match
|
|
41
|
+
console.warn(`TrFontManager: Only one font face found for family: '${family}' - will be used for all weights and styles`);
|
|
42
|
+
return fontFaces.values().next().value;
|
|
43
|
+
}
|
|
44
|
+
const weightMap = new Map();
|
|
45
|
+
for (const fontFace of fontFaces) {
|
|
46
|
+
const fontFamilyWeight = fontWeightToNumber(fontFace.descriptors.weight);
|
|
47
|
+
if (fontFamilyWeight === weight &&
|
|
48
|
+
fontFace.descriptors.style === style &&
|
|
49
|
+
fontFace.descriptors.stretch === stretch) {
|
|
50
|
+
return fontFace;
|
|
51
|
+
}
|
|
52
|
+
weightMap.set(fontFamilyWeight, fontFace);
|
|
53
|
+
}
|
|
54
|
+
// No Exact match found, find nearest weight match
|
|
55
|
+
const msg = `TrFontManager: No exact match: '${family} Weight: ${weight} Style: ${style} Stretch: ${stretch}'`;
|
|
56
|
+
console.error(msg);
|
|
57
|
+
// Follow the CSS font-weight algorithm to find the nearest weight match
|
|
58
|
+
// https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/#font-matching-algorithm
|
|
59
|
+
if (weight === 400 && weightMap.has(500)) {
|
|
60
|
+
return weightMap.get(500);
|
|
61
|
+
}
|
|
62
|
+
if (weight === 500 && weightMap.has(400)) {
|
|
63
|
+
return weightMap.get(400);
|
|
64
|
+
}
|
|
65
|
+
if (weight < 400) {
|
|
66
|
+
while (weight > 0) {
|
|
67
|
+
if (weightMap.has(weight)) {
|
|
68
|
+
return weightMap.get(weight);
|
|
69
|
+
}
|
|
70
|
+
weight -= 100;
|
|
71
|
+
}
|
|
72
|
+
// reset back for the next loop
|
|
73
|
+
weight = 600;
|
|
74
|
+
}
|
|
75
|
+
while (weight < 1000) {
|
|
76
|
+
if (weightMap.has(weight)) {
|
|
77
|
+
return weightMap.get(weight);
|
|
78
|
+
}
|
|
79
|
+
weight += 100;
|
|
80
|
+
}
|
|
81
|
+
// finally check lower again
|
|
82
|
+
weight = 500;
|
|
83
|
+
while (weight > 0) {
|
|
84
|
+
if (weightMap.has(weight)) {
|
|
85
|
+
return weightMap.get(weight);
|
|
86
|
+
}
|
|
87
|
+
weight -= 100;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const resolveFontToUse = memize(rawResolveFontToUse);
|
|
21
93
|
export class TrFontManager {
|
|
22
94
|
textRenderers;
|
|
23
95
|
constructor(textRenderers) {
|
|
@@ -45,31 +117,8 @@ export class TrFontManager {
|
|
|
45
117
|
* @returns
|
|
46
118
|
*/
|
|
47
119
|
static resolveFontFace(familyMapsByPriority, props) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
if (prev) {
|
|
51
|
-
return prev;
|
|
52
|
-
}
|
|
53
|
-
const fontFaces = fontFamiles[props.fontFamily];
|
|
54
|
-
if (!fontFaces) {
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
const fontFacesCopy = new Set(fontFaces);
|
|
58
|
-
// Remove any font faces that don't match the style exactly
|
|
59
|
-
// TODO: In the future we may enhance this to find the best match
|
|
60
|
-
// based on font weight, style, etc.
|
|
61
|
-
// See https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/#font-matching-algorithm
|
|
62
|
-
for (const fontFace of fontFacesCopy) {
|
|
63
|
-
if (fontFace.descriptors.stretch !== props.fontStretch ||
|
|
64
|
-
fontFace.descriptors.style !== props.fontStyle ||
|
|
65
|
-
fontFace.descriptors.weight !== props.fontWeight) {
|
|
66
|
-
fontFacesCopy.delete(fontFace);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Return the first font face that matches the style exactly
|
|
70
|
-
return fontFacesCopy.values().next().value;
|
|
71
|
-
}, undefined);
|
|
72
|
-
return exactMatch || closeFaces[0];
|
|
120
|
+
const { fontFamily, fontWeight, fontStyle, fontStretch } = props;
|
|
121
|
+
return resolveFontToUse(familyMapsByPriority, fontFamily, fontWeight, fontStyle, fontStretch);
|
|
73
122
|
}
|
|
74
123
|
}
|
|
75
124
|
//# sourceMappingURL=TrFontManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrFontManager.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TrFontManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"TrFontManager.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TrFontManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,11 +124,17 @@ export class CanvasTextRenderer extends TextRenderer {
|
|
|
124
124
|
},
|
|
125
125
|
width: (state, value) => {
|
|
126
126
|
state.props.width = value;
|
|
127
|
-
|
|
127
|
+
// Only invalidate layout cache if we're containing in the horizontal direction
|
|
128
|
+
if (state.props.contain !== 'none') {
|
|
129
|
+
this.invalidateLayoutCache(state);
|
|
130
|
+
}
|
|
128
131
|
},
|
|
129
132
|
height: (state, value) => {
|
|
130
133
|
state.props.height = value;
|
|
131
|
-
|
|
134
|
+
// Only invalidate layout cache if we're containing in the vertical direction
|
|
135
|
+
if (state.props.contain === 'both') {
|
|
136
|
+
this.invalidateLayoutCache(state);
|
|
137
|
+
}
|
|
132
138
|
},
|
|
133
139
|
offsetY: (state, value) => {
|
|
134
140
|
state.props.offsetY = value;
|