@solidtv/renderer 1.0.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/LICENSE +202 -0
- package/NOTICE +7 -0
- package/README.md +137 -0
- package/dist/exports/canvas-shaders.d.ts +10 -0
- package/dist/exports/canvas-shaders.js +11 -0
- package/dist/exports/canvas-shaders.js.map +1 -0
- package/dist/exports/canvas.d.ts +26 -0
- package/dist/exports/canvas.js +27 -0
- package/dist/exports/canvas.js.map +1 -0
- package/dist/exports/index.d.ts +50 -0
- package/dist/exports/index.js +40 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/exports/inspector.d.ts +4 -0
- package/dist/exports/inspector.js +5 -0
- package/dist/exports/inspector.js.map +1 -0
- package/dist/exports/utils.d.ts +27 -0
- package/dist/exports/utils.js +28 -0
- package/dist/exports/utils.js.map +1 -0
- package/dist/exports/webgl-shaders.d.ts +11 -0
- package/dist/exports/webgl-shaders.js +12 -0
- package/dist/exports/webgl-shaders.js.map +1 -0
- package/dist/exports/webgl.d.ts +28 -0
- package/dist/exports/webgl.js +29 -0
- package/dist/exports/webgl.js.map +1 -0
- package/dist/src/common/CommonTypes.d.ts +110 -0
- package/dist/src/common/CommonTypes.js +2 -0
- package/dist/src/common/CommonTypes.js.map +1 -0
- package/dist/src/common/EventEmitter.d.ts +12 -0
- package/dist/src/common/EventEmitter.js +48 -0
- package/dist/src/common/EventEmitter.js.map +1 -0
- package/dist/src/common/IAnimationController.d.ts +58 -0
- package/dist/src/common/IAnimationController.js +2 -0
- package/dist/src/common/IAnimationController.js.map +1 -0
- package/dist/src/common/IEventEmitter.d.ts +8 -0
- package/dist/src/common/IEventEmitter.js +2 -0
- package/dist/src/common/IEventEmitter.js.map +1 -0
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +908 -0
- package/dist/src/core/CoreNode.js +1837 -0
- package/dist/src/core/CoreNode.js.map +1 -0
- package/dist/src/core/CoreShaderManager.d.ts +38 -0
- package/dist/src/core/CoreShaderManager.js +123 -0
- package/dist/src/core/CoreShaderManager.js.map +1 -0
- package/dist/src/core/CoreTextNode.d.ts +91 -0
- package/dist/src/core/CoreTextNode.js +440 -0
- package/dist/src/core/CoreTextNode.js.map +1 -0
- package/dist/src/core/CoreTextureManager.d.ts +264 -0
- package/dist/src/core/CoreTextureManager.js +318 -0
- package/dist/src/core/CoreTextureManager.js.map +1 -0
- package/dist/src/core/Stage.d.ts +238 -0
- package/dist/src/core/Stage.js +804 -0
- package/dist/src/core/Stage.js.map +1 -0
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +150 -0
- package/dist/src/core/TextureMemoryManager.js +239 -0
- package/dist/src/core/TextureMemoryManager.js.map +1 -0
- package/dist/src/core/animations/AnimationManager.d.ts +33 -0
- package/dist/src/core/animations/AnimationManager.js +137 -0
- package/dist/src/core/animations/AnimationManager.js.map +1 -0
- package/dist/src/core/animations/CoreAnimation.d.ts +12 -0
- package/dist/src/core/animations/CoreAnimation.js +107 -0
- package/dist/src/core/animations/CoreAnimation.js.map +1 -0
- package/dist/src/core/lib/ContextSpy.d.ts +12 -0
- package/dist/src/core/lib/ContextSpy.js +20 -0
- package/dist/src/core/lib/ContextSpy.js.map +1 -0
- package/dist/src/core/lib/ImageWorker.d.ts +16 -0
- package/dist/src/core/lib/ImageWorker.js +202 -0
- package/dist/src/core/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/lib/Matrix3d.d.ts +74 -0
- package/dist/src/core/lib/Matrix3d.js +218 -0
- package/dist/src/core/lib/Matrix3d.js.map +1 -0
- package/dist/src/core/lib/RenderCoords.d.ts +12 -0
- package/dist/src/core/lib/RenderCoords.js +35 -0
- package/dist/src/core/lib/RenderCoords.js.map +1 -0
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +782 -0
- package/dist/src/core/lib/WebGlContextWrapper.js +1143 -0
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/lib/colorParser.d.ts +21 -0
- package/dist/src/core/lib/colorParser.js +54 -0
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +28 -0
- package/dist/src/core/lib/textureCompression.js +363 -0
- package/dist/src/core/lib/textureCompression.js.map +1 -0
- package/dist/src/core/lib/textureSvg.d.ts +16 -0
- package/dist/src/core/lib/textureSvg.js +45 -0
- package/dist/src/core/lib/textureSvg.js.map +1 -0
- package/dist/src/core/lib/utils.d.ts +66 -0
- package/dist/src/core/lib/utils.js +268 -0
- package/dist/src/core/lib/utils.js.map +1 -0
- package/dist/src/core/lib/validateImageBitmap.d.ts +7 -0
- package/dist/src/core/lib/validateImageBitmap.js +68 -0
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/core/platforms/Platform.js +4 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
- package/dist/src/core/platforms/web/WebPlatform.js +90 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +13 -0
- package/dist/src/core/renderers/CoreContextTexture.js +16 -0
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
- package/dist/src/core/renderers/CoreRenderOp.js +3 -0
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderer.d.ts +81 -0
- package/dist/src/core/renderers/CoreRenderer.js +14 -0
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderNode.d.ts +69 -0
- package/dist/src/core/renderers/CoreShaderNode.js +130 -0
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
- package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
- package/dist/src/core/renderers/CoreShaderProgram.js +2 -0
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +221 -0
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +42 -0
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +17 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js +110 -0
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +41 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +88 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +14 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +45 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +49 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +67 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +259 -0
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +221 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +1015 -0
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +213 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +240 -0
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +28 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +39 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +88 -0
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +83 -0
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +13 -0
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
- package/dist/src/core/shaders/canvas/Border.d.ts +15 -0
- package/dist/src/core/shaders/canvas/Border.js +83 -0
- package/dist/src/core/shaders/canvas/Border.js.map +1 -0
- package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
- package/dist/src/core/shaders/canvas/HolePunch.js +22 -0
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js +32 -0
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js +54 -0
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/canvas/Rounded.js +17 -0
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +10 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +57 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +61 -0
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +26 -0
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
- package/dist/src/core/shaders/canvas/Shadow.js +15 -0
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
- package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
- package/dist/src/core/shaders/canvas/utils/render.js +81 -0
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +47 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js +77 -0
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +19 -0
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +31 -0
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +33 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +33 -0
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js +51 -0
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +8 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +8 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +9 -0
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +7 -0
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js +50 -0
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
- package/dist/src/core/shaders/utils.d.ts +5 -0
- package/dist/src/core/shaders/utils.js +25 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Border.js +153 -0
- package/dist/src/core/shaders/webgl/Border.js.map +1 -0
- package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
- package/dist/src/core/shaders/webgl/Default.js +51 -0
- package/dist/src/core/shaders/webgl/Default.js.map +1 -0
- package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
- package/dist/src/core/shaders/webgl/HolePunch.js +49 -0
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
- package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js +114 -0
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js +81 -0
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
- package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
- package/dist/src/core/shaders/webgl/Rounded.js +88 -0
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +202 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +223 -0
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +123 -0
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +13 -0
- package/dist/src/core/shaders/webgl/SdfShader.js +72 -0
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
- package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
- package/dist/src/core/shaders/webgl/Shadow.js +115 -0
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +249 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +406 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +36 -0
- package/dist/src/core/textures/ColorTexture.js +57 -0
- package/dist/src/core/textures/ColorTexture.js.map +1 -0
- package/dist/src/core/textures/ImageTexture.d.ts +131 -0
- package/dist/src/core/textures/ImageTexture.js +211 -0
- package/dist/src/core/textures/ImageTexture.js.map +1 -0
- package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
- package/dist/src/core/textures/NoiseTexture.js +50 -0
- package/dist/src/core/textures/NoiseTexture.js.map +1 -0
- package/dist/src/core/textures/RenderTexture.d.ts +29 -0
- package/dist/src/core/textures/RenderTexture.js +36 -0
- package/dist/src/core/textures/RenderTexture.js.map +1 -0
- package/dist/src/core/textures/SubTexture.d.ts +61 -0
- package/dist/src/core/textures/SubTexture.js +99 -0
- package/dist/src/core/textures/SubTexture.js.map +1 -0
- package/dist/src/core/textures/Texture.d.ts +275 -0
- package/dist/src/core/textures/Texture.js +326 -0
- package/dist/src/core/textures/Texture.js.map +1 -0
- package/dist/src/core/utils.d.ts +23 -0
- package/dist/src/core/utils.js +155 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/main-api/INode.d.ts +65 -0
- package/dist/src/main-api/INode.js +2 -0
- package/dist/src/main-api/INode.js.map +1 -0
- package/dist/src/main-api/Inspector.d.ts +154 -0
- package/dist/src/main-api/Inspector.js +844 -0
- package/dist/src/main-api/Inspector.js.map +1 -0
- package/dist/src/main-api/Renderer.d.ts +629 -0
- package/dist/src/main-api/Renderer.js +471 -0
- package/dist/src/main-api/Renderer.js.map +1 -0
- package/dist/src/main-api/utils.d.ts +2 -0
- package/dist/src/main-api/utils.js +34 -0
- package/dist/src/main-api/utils.js.map +1 -0
- package/dist/src/utils.d.ts +123 -0
- package/dist/src/utils.js +234 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/tsconfig.dist.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +11 -0
- package/exports/canvas.ts +27 -0
- package/exports/index.ts +69 -0
- package/exports/inspector.ts +5 -0
- package/exports/utils.ts +32 -0
- package/exports/webgl-shaders.ts +12 -0
- package/exports/webgl.ts +33 -0
- package/package.json +99 -0
- package/src/common/CommonTypes.ts +145 -0
- package/src/common/EventEmitter.ts +58 -0
- package/src/common/IAnimationController.ts +65 -0
- package/src/common/IEventEmitter.ts +11 -0
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +535 -0
- package/src/core/CoreNode.ts +2883 -0
- package/src/core/CoreShaderManager.ts +170 -0
- package/src/core/CoreTextNode.ts +573 -0
- package/src/core/CoreTextureManager.ts +552 -0
- package/src/core/Stage.ts +1037 -0
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +378 -0
- package/src/core/animations/AnimationManager.ts +178 -0
- package/src/core/animations/CoreAnimation.ts +138 -0
- package/src/core/lib/ContextSpy.ts +22 -0
- package/src/core/lib/ImageWorker.ts +292 -0
- package/src/core/lib/Matrix3d.ts +231 -0
- package/src/core/lib/RenderCoords.ts +55 -0
- package/src/core/lib/WebGlContextWrapper.ts +1448 -0
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/lib/colorParser.ts +66 -0
- package/src/core/lib/textureCompression.ts +492 -0
- package/src/core/lib/textureSvg.ts +59 -0
- package/src/core/lib/utils.ts +400 -0
- package/src/core/lib/validateImageBitmap.ts +87 -0
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +25 -0
- package/src/core/renderers/CoreRenderOp.ts +3 -0
- package/src/core/renderers/CoreRenderer.ts +101 -0
- package/src/core/renderers/CoreShaderNode.ts +202 -0
- package/src/core/renderers/CoreShaderProgram.ts +4 -0
- package/src/core/renderers/canvas/CanvasRenderer.ts +274 -0
- package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
- package/src/core/renderers/canvas/CanvasTexture.ts +141 -0
- package/src/core/renderers/webgl/SdfRenderOp.ts +103 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +70 -0
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +332 -0
- package/src/core/renderers/webgl/WebGlRenderer.ts +1323 -0
- package/src/core/renderers/webgl/WebGlShaderNode.ts +423 -0
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +346 -0
- package/src/core/renderers/webgl/internal/BufferCollection.ts +46 -0
- package/src/core/renderers/webgl/internal/RendererUtils.ts +136 -0
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +262 -0
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +16 -0
- package/src/core/shaders/canvas/Border.ts +119 -0
- package/src/core/shaders/canvas/HolePunch.ts +38 -0
- package/src/core/shaders/canvas/LinearGradient.ts +54 -0
- package/src/core/shaders/canvas/RadialGradient.ts +82 -0
- package/src/core/shaders/canvas/Rounded.ts +38 -0
- package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
- package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
- package/src/core/shaders/canvas/Shadow.ts +35 -0
- package/src/core/shaders/canvas/utils/render.ts +143 -0
- package/src/core/shaders/templates/BorderTemplate.ts +128 -0
- package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
- package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
- package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
- package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
- package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +158 -0
- package/src/core/shaders/webgl/Default.ts +52 -0
- package/src/core/shaders/webgl/HolePunch.ts +58 -0
- package/src/core/shaders/webgl/LinearGradient.ts +119 -0
- package/src/core/shaders/webgl/RadialGradient.ts +91 -0
- package/src/core/shaders/webgl/Rounded.ts +97 -0
- package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +235 -0
- package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
- package/src/core/shaders/webgl/SdfShader.ts +73 -0
- package/src/core/shaders/webgl/Shadow.ts +119 -0
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +352 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +449 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +85 -0
- package/src/core/textures/ImageTexture.ts +394 -0
- package/src/core/textures/NoiseTexture.ts +87 -0
- package/src/core/textures/RenderTexture.ts +68 -0
- package/src/core/textures/SubTexture.ts +165 -0
- package/src/core/textures/Texture.ts +505 -0
- package/src/core/utils.ts +210 -0
- package/src/env.d.ts +7 -0
- package/src/main-api/INode.ts +92 -0
- package/src/main-api/Inspector.ts +1267 -0
- package/src/main-api/Renderer.ts +1011 -0
- package/src/main-api/utils.ts +45 -0
- package/src/utils.ts +302 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { assertTruthy } from '../../utils.js';
|
|
2
|
+
import { type TextureData } from '../textures/Texture.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Tests if the given location is a SVG
|
|
6
|
+
* @param url
|
|
7
|
+
* @remarks
|
|
8
|
+
* This function is used to determine if the given image url is a SVG
|
|
9
|
+
* image
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export function isSvgImage(url: string): boolean {
|
|
13
|
+
return /\.(svg)(\?.*)?$/.test(url);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Loads a SVG image
|
|
18
|
+
* @param url
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
export const loadSvg = (
|
|
22
|
+
url: string,
|
|
23
|
+
width: number | null,
|
|
24
|
+
height: number | null,
|
|
25
|
+
sx: number | null,
|
|
26
|
+
sy: number | null,
|
|
27
|
+
sw: number | null,
|
|
28
|
+
sh: number | null,
|
|
29
|
+
): Promise<TextureData> => {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const canvas = document.createElement('canvas');
|
|
32
|
+
const ctx = canvas.getContext('2d');
|
|
33
|
+
assertTruthy(ctx);
|
|
34
|
+
|
|
35
|
+
ctx.imageSmoothingEnabled = true;
|
|
36
|
+
const img = new Image();
|
|
37
|
+
img.onload = () => {
|
|
38
|
+
const x = sx ?? 0;
|
|
39
|
+
const y = sy ?? 0;
|
|
40
|
+
const w = width || img.width;
|
|
41
|
+
const h = height || img.height;
|
|
42
|
+
|
|
43
|
+
canvas.width = w;
|
|
44
|
+
canvas.height = h;
|
|
45
|
+
ctx.drawImage(img, 0, 0, w, h);
|
|
46
|
+
|
|
47
|
+
resolve({
|
|
48
|
+
data: ctx.getImageData(x, y, sw ?? w, sh ?? h),
|
|
49
|
+
premultiplyAlpha: false,
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
img.onerror = (err) => {
|
|
54
|
+
reject(err);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
img.src = url;
|
|
58
|
+
});
|
|
59
|
+
};
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import type { Vec4 } from '../renderers/webgl/internal/ShaderUtils.js';
|
|
2
|
+
|
|
3
|
+
export const PROTOCOL_REGEX = /^(data|ftps?|https?):/;
|
|
4
|
+
|
|
5
|
+
export type RGBA = [r: number, g: number, b: number, a: number];
|
|
6
|
+
|
|
7
|
+
export const getNormalizedRgbaComponents = (rgba: number): RGBA => {
|
|
8
|
+
const r = rgba >>> 24;
|
|
9
|
+
const g = (rgba >>> 16) & 0xff;
|
|
10
|
+
const b = (rgba >>> 8) & 0xff;
|
|
11
|
+
const a = rgba & 0xff;
|
|
12
|
+
return [r / 255, g / 255, b / 255, a / 255];
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export const getRgbaComponents = (rgba: number): RGBA => {
|
|
16
|
+
const r = rgba >>> 24;
|
|
17
|
+
const g = (rgba >>> 16) & 0xff;
|
|
18
|
+
const b = (rgba >>> 8) & 0xff;
|
|
19
|
+
const a = rgba & 0xff;
|
|
20
|
+
return [r, g, b, a];
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const norm = (rgba: number): number => {
|
|
24
|
+
const r = rgba >>> 24;
|
|
25
|
+
const g = (rgba >>> 16) & 0xff;
|
|
26
|
+
const b = (rgba >>> 8) & 0xff;
|
|
27
|
+
const a = rgba & 0xff;
|
|
28
|
+
const rgbaArr: RGBA = [r / 255, g / 255, b / 255, a / 255];
|
|
29
|
+
|
|
30
|
+
rgbaArr[0] = Math.max(0, Math.min(255, rgbaArr[0]));
|
|
31
|
+
rgbaArr[1] = Math.max(0, Math.min(255, rgbaArr[1]));
|
|
32
|
+
rgbaArr[2] = Math.max(0, Math.min(255, rgbaArr[2]));
|
|
33
|
+
rgbaArr[3] = Math.max(0, Math.min(255, rgbaArr[3]));
|
|
34
|
+
let v =
|
|
35
|
+
((rgbaArr[3] | 0) << 24) +
|
|
36
|
+
((rgbaArr[0] | 0) << 16) +
|
|
37
|
+
((rgbaArr[1] | 0) << 8) +
|
|
38
|
+
(rgbaArr[2] | 0);
|
|
39
|
+
if (v < 0) {
|
|
40
|
+
v = 0xffffffff + v + 1;
|
|
41
|
+
}
|
|
42
|
+
return v;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export function getNormalizedAlphaComponent(rgba: number): number {
|
|
46
|
+
return (rgba & 0xff) / 255.0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get a CSS color string from a RGBA color
|
|
51
|
+
*
|
|
52
|
+
* @param color
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
export function getRgbaString(color: RGBA) {
|
|
56
|
+
const r = Math.floor(color[0] * 255.0);
|
|
57
|
+
const g = Math.floor(color[1] * 255.0);
|
|
58
|
+
const b = Math.floor(color[2] * 255.0);
|
|
59
|
+
const a = Math.floor(color[3] * 255.0);
|
|
60
|
+
return `rgba(${r},${g},${b},${a.toFixed(4)})`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface Rect {
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
width: number;
|
|
67
|
+
height: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface RectWithValid extends Rect {
|
|
71
|
+
valid: boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface Bound {
|
|
75
|
+
x1: number;
|
|
76
|
+
y1: number;
|
|
77
|
+
x2: number;
|
|
78
|
+
y2: number;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface Coord {
|
|
82
|
+
x: number;
|
|
83
|
+
y: number;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface BoundWithValid extends Bound {
|
|
87
|
+
valid: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function createBound<T extends Bound = Bound>(
|
|
91
|
+
x1: number,
|
|
92
|
+
y1: number,
|
|
93
|
+
x2: number,
|
|
94
|
+
y2: number,
|
|
95
|
+
out?: T,
|
|
96
|
+
): T {
|
|
97
|
+
if (out) {
|
|
98
|
+
out.x1 = x1;
|
|
99
|
+
out.y1 = y1;
|
|
100
|
+
out.x2 = x2;
|
|
101
|
+
out.y2 = y2;
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
x1,
|
|
106
|
+
y1,
|
|
107
|
+
x2,
|
|
108
|
+
y2,
|
|
109
|
+
} as T;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function intersectBound<T extends Bound = Bound>(
|
|
113
|
+
a: Bound,
|
|
114
|
+
b: Bound,
|
|
115
|
+
out?: T,
|
|
116
|
+
): T {
|
|
117
|
+
const intersection = createBound(
|
|
118
|
+
Math.max(a.x1, b.x1),
|
|
119
|
+
Math.max(a.y1, b.y1),
|
|
120
|
+
Math.min(a.x2, b.x2),
|
|
121
|
+
Math.min(a.y2, b.y2),
|
|
122
|
+
out,
|
|
123
|
+
);
|
|
124
|
+
if (intersection.x1 < intersection.x2 && intersection.y1 < intersection.y2) {
|
|
125
|
+
return intersection;
|
|
126
|
+
}
|
|
127
|
+
return createBound(0, 0, 0, 0, intersection);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function boundsOverlap(a: Bound, b: Bound): boolean {
|
|
131
|
+
return a.x1 < b.x2 && a.x2 > b.x1 && a.y1 < b.y2 && a.y2 > b.y1;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function convertBoundToRect(bound: Bound): Rect;
|
|
135
|
+
export function convertBoundToRect<T extends Rect = Rect>(
|
|
136
|
+
bound: Bound,
|
|
137
|
+
out: T,
|
|
138
|
+
): T;
|
|
139
|
+
export function convertBoundToRect(bound: Bound, out?: Rect): Rect {
|
|
140
|
+
if (out) {
|
|
141
|
+
out.x = bound.x1;
|
|
142
|
+
out.y = bound.y1;
|
|
143
|
+
out.width = bound.x2 - bound.x1;
|
|
144
|
+
out.height = bound.y2 - bound.y1;
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
x: bound.x1,
|
|
149
|
+
y: bound.y1,
|
|
150
|
+
width: bound.x2 - bound.x1,
|
|
151
|
+
height: bound.y2 - bound.y1,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function intersectRect(a: Rect, b: Rect): Rect;
|
|
156
|
+
export function intersectRect<T extends Rect = Rect>(
|
|
157
|
+
a: Rect,
|
|
158
|
+
b: Rect,
|
|
159
|
+
out: T,
|
|
160
|
+
): T;
|
|
161
|
+
export function intersectRect(a: Rect, b: Rect, out?: Rect): Rect {
|
|
162
|
+
const x = Math.max(a.x, b.x);
|
|
163
|
+
const y = Math.max(a.y, b.y);
|
|
164
|
+
const width = Math.min(a.x + a.width, b.x + b.width) - x;
|
|
165
|
+
const height = Math.min(a.y + a.height, b.y + b.height) - y;
|
|
166
|
+
if (width > 0 && height > 0) {
|
|
167
|
+
if (out) {
|
|
168
|
+
out.x = x;
|
|
169
|
+
out.y = y;
|
|
170
|
+
out.width = width;
|
|
171
|
+
out.height = height;
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
x,
|
|
176
|
+
y,
|
|
177
|
+
width,
|
|
178
|
+
height,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
if (out) {
|
|
182
|
+
out.x = 0;
|
|
183
|
+
out.y = 0;
|
|
184
|
+
out.width = 0;
|
|
185
|
+
out.height = 0;
|
|
186
|
+
return out;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
x: 0,
|
|
190
|
+
y: 0,
|
|
191
|
+
width: 0,
|
|
192
|
+
height: 0,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export function copyRect(a: Rect): Rect;
|
|
197
|
+
export function copyRect<T extends Rect = Rect>(a: Rect, out: T): T;
|
|
198
|
+
export function copyRect(a: Rect, out?: Rect): Rect {
|
|
199
|
+
if (out) {
|
|
200
|
+
out.x = a.x;
|
|
201
|
+
out.y = a.y;
|
|
202
|
+
out.width = a.width;
|
|
203
|
+
out.height = a.height;
|
|
204
|
+
return out;
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
x: a.x,
|
|
208
|
+
y: a.y,
|
|
209
|
+
width: a.width,
|
|
210
|
+
height: a.height,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function compareRect(a: Rect | null, b: Rect | null): boolean {
|
|
215
|
+
if (a === b) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
if (a === null || b === null) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return (
|
|
222
|
+
a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export function boundInsideBound(bound1: Bound, bound2: Bound) {
|
|
227
|
+
return (
|
|
228
|
+
bound1.x1 <= bound2.x2 &&
|
|
229
|
+
bound1.y1 <= bound2.y2 &&
|
|
230
|
+
bound1.x2 >= bound2.x1 &&
|
|
231
|
+
bound1.y2 >= bound2.y1
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function boundLargeThanBound(bound1: Bound, bound2: Bound) {
|
|
236
|
+
return (
|
|
237
|
+
bound1.x1 < bound2.x1 &&
|
|
238
|
+
bound1.x2 > bound2.x2 &&
|
|
239
|
+
bound1.y1 < bound2.y1 &&
|
|
240
|
+
bound1.y2 > bound2.y2
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export function pointInBound(x: number, y: number, bound: Bound) {
|
|
245
|
+
return !(x < bound.x1 || x > bound.x2 || y < bound.y1 || y > bound.y2);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export function isBoundPositive(bound: Bound): boolean {
|
|
249
|
+
return bound.x1 < bound.x2 && bound.y1 < bound.y2;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function isRectPositive(rect: Rect): boolean {
|
|
253
|
+
return rect.width > 0 && rect.height > 0;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Create a preload bounds from a strict bound
|
|
258
|
+
*
|
|
259
|
+
* @param strictBound The strict boundary of the node
|
|
260
|
+
* @param boundsMargin Boundary margin to apply to the strictBound
|
|
261
|
+
* @returns
|
|
262
|
+
*/
|
|
263
|
+
export function createPreloadBounds(
|
|
264
|
+
strictBound: Bound,
|
|
265
|
+
boundsMargin: [number, number, number, number],
|
|
266
|
+
out?: Bound,
|
|
267
|
+
): Bound {
|
|
268
|
+
return createBound(
|
|
269
|
+
strictBound.x1 - boundsMargin[3],
|
|
270
|
+
strictBound.y1 - boundsMargin[0],
|
|
271
|
+
strictBound.x2 + boundsMargin[1],
|
|
272
|
+
strictBound.y2 + boundsMargin[2],
|
|
273
|
+
out,
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export function convertUrlToAbsolute(url: string): string {
|
|
278
|
+
// handle local file imports if the url isn't remote resource or data blob
|
|
279
|
+
if (self.location.protocol === 'file:' && !PROTOCOL_REGEX.test(url)) {
|
|
280
|
+
const path = self.location.pathname.split('/');
|
|
281
|
+
path.pop();
|
|
282
|
+
const basePath = path.join('/');
|
|
283
|
+
const baseUrl = self.location.protocol + '//' + basePath;
|
|
284
|
+
|
|
285
|
+
// check if url has a leading dot
|
|
286
|
+
if (url.charAt(0) === '.') {
|
|
287
|
+
url = url.slice(1);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// check if url has a leading slash
|
|
291
|
+
if (url.charAt(0) === '/') {
|
|
292
|
+
url = url.slice(1);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return baseUrl + '/' + url;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
const absoluteUrl = new URL(url, self.location.href);
|
|
299
|
+
return absoluteUrl.href;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export function isBase64Image(src: string) {
|
|
303
|
+
return src.startsWith('data:') === true;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
export function calcFactoredRadius(
|
|
307
|
+
radius: number,
|
|
308
|
+
width: number,
|
|
309
|
+
height: number,
|
|
310
|
+
): number {
|
|
311
|
+
return radius * Math.min(Math.min(width, height) / (2.0 * radius), 1);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export function valuesAreEqual(values: number[]) {
|
|
315
|
+
let prevValue = values[0];
|
|
316
|
+
for (let i = 1; i < values.length; i++) {
|
|
317
|
+
if (prevValue !== values[i]) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function calcFactoredRadiusArray(
|
|
325
|
+
radius: Vec4,
|
|
326
|
+
width: number,
|
|
327
|
+
height: number,
|
|
328
|
+
): [number, number, number, number] {
|
|
329
|
+
const result: [number, number, number, number] = [
|
|
330
|
+
radius[0],
|
|
331
|
+
radius[1],
|
|
332
|
+
radius[2],
|
|
333
|
+
radius[3],
|
|
334
|
+
];
|
|
335
|
+
const factor = Math.min(
|
|
336
|
+
Math.min(
|
|
337
|
+
Math.min(
|
|
338
|
+
width / Math.max(width, radius[0] + radius[1]),
|
|
339
|
+
width / Math.max(width, radius[2] + radius[3]),
|
|
340
|
+
),
|
|
341
|
+
Math.min(
|
|
342
|
+
height / Math.max(height, radius[0] + radius[3]),
|
|
343
|
+
height / Math.max(height, radius[1] + radius[2]),
|
|
344
|
+
),
|
|
345
|
+
),
|
|
346
|
+
1,
|
|
347
|
+
);
|
|
348
|
+
result[0] *= factor;
|
|
349
|
+
result[1] *= factor;
|
|
350
|
+
result[2] *= factor;
|
|
351
|
+
result[3] *= factor;
|
|
352
|
+
return result;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export function dataURIToBlob(dataURI: string): Blob {
|
|
356
|
+
dataURI = dataURI.replace(/^data:/, '');
|
|
357
|
+
|
|
358
|
+
const type = dataURI.match(/image\/[^;]+/)?.[0] || '';
|
|
359
|
+
const base64 = dataURI.replace(/^[^,]+,/, '');
|
|
360
|
+
|
|
361
|
+
const sliceSize = 1024;
|
|
362
|
+
const byteCharacters = atob(base64);
|
|
363
|
+
const bytesLength = byteCharacters.length;
|
|
364
|
+
const slicesCount = Math.ceil(bytesLength / sliceSize);
|
|
365
|
+
const byteArrays = new Array(slicesCount);
|
|
366
|
+
|
|
367
|
+
for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
|
|
368
|
+
const begin = sliceIndex * sliceSize;
|
|
369
|
+
const end = Math.min(begin + sliceSize, bytesLength);
|
|
370
|
+
|
|
371
|
+
const bytes = new Array(end - begin);
|
|
372
|
+
for (let offset = begin, i = 0; offset < end; ++i, ++offset) {
|
|
373
|
+
bytes[i] = byteCharacters[offset]?.charCodeAt(0);
|
|
374
|
+
}
|
|
375
|
+
byteArrays[sliceIndex] = new Uint8Array(bytes);
|
|
376
|
+
}
|
|
377
|
+
return new Blob(byteArrays, { type });
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export function fetchJson(
|
|
381
|
+
url: string,
|
|
382
|
+
responseType: XMLHttpRequestResponseType = '',
|
|
383
|
+
): Promise<unknown> {
|
|
384
|
+
return new Promise((resolve, reject) => {
|
|
385
|
+
const xhr = new XMLHttpRequest();
|
|
386
|
+
xhr.responseType = responseType;
|
|
387
|
+
xhr.onreadystatechange = function () {
|
|
388
|
+
if (xhr.readyState == XMLHttpRequest.DONE) {
|
|
389
|
+
// On most devices like WebOS and Tizen, the file protocol returns 0 while http(s) protocol returns 200
|
|
390
|
+
if (xhr.status === 0 || xhr.status === 200) {
|
|
391
|
+
resolve(xhr.response);
|
|
392
|
+
} else {
|
|
393
|
+
reject(xhr.statusText);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
xhr.open('GET', url, true);
|
|
398
|
+
xhr.send(null);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Platform } from '../platforms/Platform.js';
|
|
2
|
+
|
|
3
|
+
export interface CreateImageBitmapSupport {
|
|
4
|
+
basic: boolean; // Supports createImageBitmap(image)
|
|
5
|
+
options: boolean; // Supports createImageBitmap(image, options)
|
|
6
|
+
full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export async function validateCreateImageBitmap(
|
|
10
|
+
platform: Platform,
|
|
11
|
+
): Promise<CreateImageBitmapSupport> {
|
|
12
|
+
// Test if createImageBitmap is supported using a simple 1x1 PNG image
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
const pngBinaryData = new Uint8Array([
|
|
15
|
+
0x89, 0x50, 0x4e, 0x47,
|
|
16
|
+
0x0d, 0x0a, 0x1a, 0x0a, // PNG signature
|
|
17
|
+
0x00, 0x00, 0x00, 0x0d, // IHDR chunk length
|
|
18
|
+
0x49, 0x48, 0x44, 0x52, // "IHDR" chunk type
|
|
19
|
+
0x00, 0x00, 0x00, 0x01, // Width: 1
|
|
20
|
+
0x00, 0x00, 0x00, 0x01, // Height: 1
|
|
21
|
+
0x01, // Bit depth: 1
|
|
22
|
+
0x03, // Color type: Indexed
|
|
23
|
+
0x00, // Compression method: Deflate
|
|
24
|
+
0x00, // Filter method: None
|
|
25
|
+
0x00, // Interlace method: None
|
|
26
|
+
0x25, 0xdb, 0x56, 0xca, // CRC for IHDR
|
|
27
|
+
0x00, 0x00, 0x00, 0x03, // PLTE chunk length
|
|
28
|
+
0x50, 0x4c, 0x54, 0x45, // "PLTE" chunk type
|
|
29
|
+
0x00, 0x00, 0x00, // Palette entry: Black
|
|
30
|
+
0xa7, 0x7a, 0x3d, 0xda, // CRC for PLTE
|
|
31
|
+
0x00, 0x00, 0x00, 0x01, // tRNS chunk length
|
|
32
|
+
0x74, 0x52, 0x4e, 0x53, // "tRNS" chunk type
|
|
33
|
+
0x00, // Transparency for black: Fully transparent
|
|
34
|
+
0x40, 0xe6, 0xd8, 0x66, // CRC for tRNS
|
|
35
|
+
0x00, 0x00, 0x00, 0x0a, // IDAT chunk length
|
|
36
|
+
0x49, 0x44, 0x41, 0x54, // "IDAT" chunk type
|
|
37
|
+
0x08, 0xd7, // Deflate header
|
|
38
|
+
0x63, 0x60, 0x00, 0x00,
|
|
39
|
+
0x00, 0x02, 0x00, 0x01, // Zlib-compressed data
|
|
40
|
+
0xe2, 0x21, 0xbc, 0x33, // CRC for IDAT
|
|
41
|
+
0x00, 0x00, 0x00, 0x00, // IEND chunk length
|
|
42
|
+
0x49, 0x45, 0x4e, 0x44, // "IEND" chunk type
|
|
43
|
+
0xae, 0x42, 0x60, 0x82, // CRC for IEND
|
|
44
|
+
]);
|
|
45
|
+
|
|
46
|
+
const support: CreateImageBitmapSupport = {
|
|
47
|
+
basic: false,
|
|
48
|
+
options: false,
|
|
49
|
+
full: false,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Test basic createImageBitmap support
|
|
53
|
+
const blob = new Blob([pngBinaryData], { type: 'image/png' });
|
|
54
|
+
const bitmap = await platform.createImageBitmap(blob);
|
|
55
|
+
bitmap.close?.();
|
|
56
|
+
support.basic = true;
|
|
57
|
+
|
|
58
|
+
// Test createImageBitmap with options support
|
|
59
|
+
try {
|
|
60
|
+
const options = { premultiplyAlpha: 'none' as const };
|
|
61
|
+
const bitmapWithOptions = await platform.createImageBitmap(blob, options);
|
|
62
|
+
bitmapWithOptions.close?.();
|
|
63
|
+
support.options = true;
|
|
64
|
+
} catch (e) {
|
|
65
|
+
/* ignore */
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Test createImageBitmap with full options support
|
|
69
|
+
try {
|
|
70
|
+
const bitmapWithFullOptions = await platform.createImageBitmap(
|
|
71
|
+
blob,
|
|
72
|
+
0,
|
|
73
|
+
0,
|
|
74
|
+
1,
|
|
75
|
+
1,
|
|
76
|
+
{
|
|
77
|
+
premultiplyAlpha: 'none',
|
|
78
|
+
},
|
|
79
|
+
);
|
|
80
|
+
bitmapWithFullOptions.close?.();
|
|
81
|
+
support.full = true;
|
|
82
|
+
} catch (e) {
|
|
83
|
+
/* ignore */
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return support;
|
|
87
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type Stage } from '../Stage.js';
|
|
2
|
+
|
|
3
|
+
export abstract class Platform {
|
|
4
|
+
/**
|
|
5
|
+
* Creates a new canvas element.
|
|
6
|
+
* @returns The created HTMLCanvasElement.
|
|
7
|
+
*/
|
|
8
|
+
abstract createCanvas(): HTMLCanvasElement;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Get a DOM element by ID
|
|
12
|
+
* @returns The DOM element (or null)
|
|
13
|
+
*/
|
|
14
|
+
abstract getElementById(id: string): HTMLElement | null;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Starts the main rendering loop, calling the provided update function every frame.
|
|
18
|
+
* @param Stage - The stage for rendering
|
|
19
|
+
*/
|
|
20
|
+
abstract startLoop(stage: Stage): void;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Abstracted createImageBitmap method.
|
|
24
|
+
* @param blob - The image source to create the ImageBitmap from.
|
|
25
|
+
* @param sxOrOptions - The source rectangle x coordinate or ImageBitmapOptions.
|
|
26
|
+
* @param sy - The source rectangle y coordinate.
|
|
27
|
+
* @param sw - The source rectangle width.
|
|
28
|
+
* @param sh - The source rectangle height.
|
|
29
|
+
* @param options - The ImageBitmapOptions.
|
|
30
|
+
* @returns A promise that resolves with the created ImageBitmap.
|
|
31
|
+
*/
|
|
32
|
+
abstract createImageBitmap(blob: ImageBitmapSource): Promise<ImageBitmap>;
|
|
33
|
+
abstract createImageBitmap(
|
|
34
|
+
blob: ImageBitmapSource,
|
|
35
|
+
options: ImageBitmapOptions,
|
|
36
|
+
): Promise<ImageBitmap>;
|
|
37
|
+
abstract createImageBitmap(
|
|
38
|
+
blob: ImageBitmapSource,
|
|
39
|
+
sx: number,
|
|
40
|
+
sy: number,
|
|
41
|
+
sw: number,
|
|
42
|
+
sh: number,
|
|
43
|
+
): Promise<ImageBitmap>;
|
|
44
|
+
abstract createImageBitmap(
|
|
45
|
+
blob: ImageBitmapSource,
|
|
46
|
+
sx: number,
|
|
47
|
+
sy: number,
|
|
48
|
+
sw: number,
|
|
49
|
+
sh: number,
|
|
50
|
+
options: ImageBitmapOptions,
|
|
51
|
+
): Promise<ImageBitmap>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Retrieves the current timestamp.
|
|
55
|
+
* @returns The current timestamp.
|
|
56
|
+
*/
|
|
57
|
+
abstract getTimeStamp(): number;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Adds a FontFace to the platforms FontFaceSet
|
|
61
|
+
* @param font - The FontFace to add
|
|
62
|
+
*/
|
|
63
|
+
abstract addFont(font: FontFace): void;
|
|
64
|
+
}
|