@swf2es/player-hosts 0.0.0-stage → 0.1.1
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/LICENSE.third-party +759 -0
- package/README.md +43 -2
- package/dist/indexeddb.d.ts +27 -0
- package/dist/indexeddb.d.ts.map +1 -0
- package/dist/indexeddb.js +170 -0
- package/dist/indexeddb.js.map +1 -0
- package/dist/node-worker.d.ts +2 -0
- package/dist/node-worker.d.ts.map +1 -0
- package/dist/node-worker.js +12 -0
- package/dist/node-worker.js.map +1 -0
- package/dist/node.d.ts +8 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +43 -0
- package/dist/node.js.map +1 -0
- package/dist/precompiled.d.ts +31 -0
- package/dist/precompiled.d.ts.map +1 -0
- package/dist/precompiled.js +125 -0
- package/dist/precompiled.js.map +1 -0
- package/dist/stage3d.d.ts +13 -0
- package/dist/stage3d.d.ts.map +1 -0
- package/dist/stage3d.js +61 -0
- package/dist/stage3d.js.map +1 -0
- package/dist/thread/codegen/codegen.js +308 -0
- package/dist/thread/codegen/index.js +405 -0
- package/dist/thread/format/abc-names.js +126 -0
- package/dist/thread/format/actions.js +222 -0
- package/dist/thread/format/air-descriptor.js +63 -0
- package/dist/thread/format/api-versions.js +22 -0
- package/dist/thread/format/bitmap.js +199 -0
- package/dist/thread/format/button.js +60 -0
- package/dist/thread/format/compression.js +200 -0
- package/dist/thread/format/display.js +305 -0
- package/dist/thread/format/filters.js +136 -0
- package/dist/thread/format/font.js +168 -0
- package/dist/thread/format/index.js +26 -0
- package/dist/thread/format/pbj.js +484 -0
- package/dist/thread/format/shape.js +411 -0
- package/dist/thread/format/sound.js +91 -0
- package/dist/thread/format/swf.js +163 -0
- package/dist/thread/format/tags.js +58 -0
- package/dist/thread/format/text.js +135 -0
- package/dist/thread/format/zip.js +91 -0
- package/dist/thread/native/audio/binary.js +3 -0
- package/dist/thread/native/audio/index.js +72 -0
- package/dist/thread/native/base64.js +9 -0
- package/dist/thread/native/compress/binary.js +3 -0
- package/dist/thread/native/compress/index.js +145 -0
- package/dist/thread/native/instance.js +49 -0
- package/dist/thread/native/mp3/binary.js +3 -0
- package/dist/thread/native/mp3/index.js +48 -0
- package/dist/thread/native/render/binary.js +3 -0
- package/dist/thread/native/render/bitmap-kernel.js +591 -0
- package/dist/thread/native/render/draw-kernel.js +204 -0
- package/dist/thread/native/render/dxt-encoder.js +94 -0
- package/dist/thread/native/render/index.js +10 -0
- package/dist/thread/native/render/lines.js +122 -0
- package/dist/thread/native/render/module.js +26 -0
- package/dist/thread/native/render/pixel-ops.js +235 -0
- package/dist/thread/native/render/tessellator.js +250 -0
- package/dist/thread/player/avm1/amf.js +507 -0
- package/dist/thread/player/avm1/avm1.js +1304 -0
- package/dist/thread/player/avm1/bindings.js +214 -0
- package/dist/thread/player/avm1/classes.js +75 -0
- package/dist/thread/player/avm1/clips.js +229 -0
- package/dist/thread/player/avm1/compile.js +140 -0
- package/dist/thread/player/avm1/external.js +79 -0
- package/dist/thread/player/avm1/focus.js +278 -0
- package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
- package/dist/thread/player/avm1/globals/Button.js +31 -0
- package/dist/thread/player/avm1/globals/Color.js +115 -0
- package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
- package/dist/thread/player/avm1/globals/FileReference.js +217 -0
- package/dist/thread/player/avm1/globals/Key.js +60 -0
- package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
- package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
- package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
- package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
- package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
- package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
- package/dist/thread/player/avm1/globals/Selection.js +62 -0
- package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
- package/dist/thread/player/avm1/globals/Sound.js +238 -0
- package/dist/thread/player/avm1/globals/Stage.js +12 -0
- package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
- package/dist/thread/player/avm1/globals/TextField.js +396 -0
- package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
- package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
- package/dist/thread/player/avm1/globals/XML.js +396 -0
- package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
- package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
- package/dist/thread/player/avm1/globals/drawing.js +202 -0
- package/dist/thread/player/avm1/globals/filters.js +635 -0
- package/dist/thread/player/avm1/globals/geom.js +600 -0
- package/dist/thread/player/avm1/input.js +483 -0
- package/dist/thread/player/avm1/keyboard.js +113 -0
- package/dist/thread/player/avm1/loads.js +352 -0
- package/dist/thread/player/avm1/net.js +219 -0
- package/dist/thread/player/avm1/paths.js +104 -0
- package/dist/thread/player/avm1/pointer.js +512 -0
- package/dist/thread/player/avm1/queue.js +303 -0
- package/dist/thread/player/avm1/sound.js +106 -0
- package/dist/thread/player/avm1/swf.js +141 -0
- package/dist/thread/player/avm1/timers.js +113 -0
- package/dist/thread/player/bitmap/bitmap.js +627 -0
- package/dist/thread/player/bitmap/draw.js +68 -0
- package/dist/thread/player/bitmap/dxt.js +11 -0
- package/dist/thread/player/bitmap/filters.js +656 -0
- package/dist/thread/player/bitmap/images.js +240 -0
- package/dist/thread/player/bitmap/kernel.js +65 -0
- package/dist/thread/player/bitmap/ops.js +1239 -0
- package/dist/thread/player/bitmap/pixel-bender.js +911 -0
- package/dist/thread/player/bitmap/png.js +139 -0
- package/dist/thread/player/bitmap/turbulence.js +89 -0
- package/dist/thread/player/clock.js +182 -0
- package/dist/thread/player/display/bitmapobject.js +25 -0
- package/dist/thread/player/display/bounds.js +520 -0
- package/dist/thread/player/display/buttonobject.js +305 -0
- package/dist/thread/player/display/color.js +40 -0
- package/dist/thread/player/display/container.js +150 -0
- package/dist/thread/player/display/display.js +14 -0
- package/dist/thread/player/display/displayobject.js +664 -0
- package/dist/thread/player/display/drawing.js +613 -0
- package/dist/thread/player/display/filters.js +285 -0
- package/dist/thread/player/display/geometry.js +189 -0
- package/dist/thread/player/display/gradients.js +117 -0
- package/dist/thread/player/display/graphicsdata.js +592 -0
- package/dist/thread/player/display/instantiate.js +71 -0
- package/dist/thread/player/display/matrix3d.js +373 -0
- package/dist/thread/player/display/morph.js +226 -0
- package/dist/thread/player/display/movieclip.js +680 -0
- package/dist/thread/player/display/perspective.js +193 -0
- package/dist/thread/player/display/scale9.js +236 -0
- package/dist/thread/player/display/shapeobject.js +131 -0
- package/dist/thread/player/display/shapes.js +407 -0
- package/dist/thread/player/display/textobjects.js +222 -0
- package/dist/thread/player/display/timeline.js +471 -0
- package/dist/thread/player/display/value-lists.js +40 -0
- package/dist/thread/player/display/videoobject.js +6 -0
- package/dist/thread/player/display/walk.js +127 -0
- package/dist/thread/player/files.js +334 -0
- package/dist/thread/player/hosts.js +207 -0
- package/dist/thread/player/input/avm1.js +82 -0
- package/dist/thread/player/input/context-menu.js +63 -0
- package/dist/thread/player/input/keyboard.js +458 -0
- package/dist/thread/player/input/pointer.js +863 -0
- package/dist/thread/player/input/text-editor.js +319 -0
- package/dist/thread/player/input/touch.js +209 -0
- package/dist/thread/player/localconnection.js +90 -0
- package/dist/thread/player/media/audio.js +376 -0
- package/dist/thread/player/media/dynamic-sound.js +90 -0
- package/dist/thread/player/media/extract.js +135 -0
- package/dist/thread/player/media/mp3.js +152 -0
- package/dist/thread/player/media/sounds.js +507 -0
- package/dist/thread/player/media/streaming-audio.js +133 -0
- package/dist/thread/player/player.js +616 -0
- package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
- package/dist/thread/player/playerglobal/air-library.js +8 -0
- package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
- package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
- package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
- package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
- package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
- package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
- package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
- package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
- package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
- package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
- package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
- package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
- package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
- package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
- package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
- package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
- package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
- package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
- package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
- package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
- package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
- package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
- package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
- package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
- package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
- package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
- package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
- package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
- package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
- package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
- package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
- package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
- package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
- package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
- package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
- package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
- package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
- package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
- package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
- package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
- package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
- package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
- package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
- package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
- package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
- package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
- package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
- package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
- package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
- package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
- package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
- package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
- package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
- package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
- package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
- package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
- package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
- package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
- package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
- package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
- package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
- package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
- package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
- package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
- package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
- package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
- package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
- package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
- package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
- package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
- package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
- package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
- package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
- package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
- package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
- package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
- package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
- package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
- package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
- package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
- package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
- package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
- package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
- package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
- package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
- package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
- package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
- package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
- package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
- package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
- package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
- package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
- package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
- package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
- package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
- package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
- package/dist/thread/player/playerglobal/index.js +224 -0
- package/dist/thread/player/playerglobal/libraries.js +10 -0
- package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
- package/dist/thread/player/playerglobal/toplevel.js +122 -0
- package/dist/thread/player/scripting/clipboard.js +146 -0
- package/dist/thread/player/scripting/code.js +900 -0
- package/dist/thread/player/scripting/evaluate.js +144 -0
- package/dist/thread/player/scripting/events.js +172 -0
- package/dist/thread/player/scripting/handover.js +182 -0
- package/dist/thread/player/scripting/lazy.js +38 -0
- package/dist/thread/player/scripting/lifecycle.js +272 -0
- package/dist/thread/player/scripting/loads.js +860 -0
- package/dist/thread/player/scripting/sha256.js +95 -0
- package/dist/thread/player/scripting/symbols.js +348 -0
- package/dist/thread/player/scripting/timers.js +434 -0
- package/dist/thread/player/scripting/workers.js +923 -0
- package/dist/thread/player/scripting.js +1018 -0
- package/dist/thread/player/stage.js +4 -0
- package/dist/thread/player/text/csm.js +113 -0
- package/dist/thread/player/text/css.js +167 -0
- package/dist/thread/player/text/fonts.js +97 -0
- package/dist/thread/player/text/layout.js +393 -0
- package/dist/thread/player/text/static.js +109 -0
- package/dist/thread/player/text/text.js +431 -0
- package/dist/thread/player/workers/thread.js +159 -0
- package/dist/thread/player/workers/wire.js +198 -0
- package/dist/thread/player-hosts/web-worker.js +19 -0
- package/dist/thread/runtime/avm1/activation.js +89 -0
- package/dist/thread/runtime/avm1/case.js +249 -0
- package/dist/thread/runtime/avm1/clips.js +334 -0
- package/dist/thread/runtime/avm1/control.js +280 -0
- package/dist/thread/runtime/avm1/errors.js +50 -0
- package/dist/thread/runtime/avm1/functions.js +249 -0
- package/dist/thread/runtime/avm1/globals/array.js +549 -0
- package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
- package/dist/thread/runtime/avm1/globals/date.js +436 -0
- package/dist/thread/runtime/avm1/globals/global.js +344 -0
- package/dist/thread/runtime/avm1/globals/math.js +139 -0
- package/dist/thread/runtime/avm1/globals/number.js +93 -0
- package/dist/thread/runtime/avm1/globals/string.js +201 -0
- package/dist/thread/runtime/avm1/globals/timers.js +129 -0
- package/dist/thread/runtime/avm1/host.js +5 -0
- package/dist/thread/runtime/avm1/index.js +14 -0
- package/dist/thread/runtime/avm1/inheritance.js +132 -0
- package/dist/thread/runtime/avm1/numbers.js +298 -0
- package/dist/thread/runtime/avm1/objects.js +896 -0
- package/dist/thread/runtime/avm1/operators.js +170 -0
- package/dist/thread/runtime/avm1/realm.js +529 -0
- package/dist/thread/runtime/avm1/runtime.js +882 -0
- package/dist/thread/runtime/avm1/scope.js +385 -0
- package/dist/thread/runtime/avm1/urls.js +180 -0
- package/dist/thread/runtime/avm1/values.js +97 -0
- package/dist/thread/runtime/avm2/amf-classes.js +66 -0
- package/dist/thread/runtime/avm2/amf.js +801 -0
- package/dist/thread/runtime/avm2/array-conversion.js +100 -0
- package/dist/thread/runtime/avm2/builtin-library.js +21 -0
- package/dist/thread/runtime/avm2/cache-fill.js +86 -0
- package/dist/thread/runtime/avm2/classes.js +211 -0
- package/dist/thread/runtime/avm2/definitions.js +69 -0
- package/dist/thread/runtime/avm2/descriptors.js +5 -0
- package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
- package/dist/thread/runtime/avm2/domain-memory.js +75 -0
- package/dist/thread/runtime/avm2/domain.js +280 -0
- package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
- package/dist/thread/runtime/avm2/enumeration.js +393 -0
- package/dist/thread/runtime/avm2/errors.js +45 -0
- package/dist/thread/runtime/avm2/float-library.js +66 -0
- package/dist/thread/runtime/avm2/float.js +26 -0
- package/dist/thread/runtime/avm2/hooks.js +19 -0
- package/dist/thread/runtime/avm2/index.js +38 -0
- package/dist/thread/runtime/avm2/messages.js +177 -0
- package/dist/thread/runtime/avm2/method-factories.js +95 -0
- package/dist/thread/runtime/avm2/modules.js +105 -0
- package/dist/thread/runtime/avm2/names.js +248 -0
- package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
- package/dist/thread/runtime/avm2/natives/array.js +390 -0
- package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
- package/dist/thread/runtime/avm2/natives/case.js +88 -0
- package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
- package/dist/thread/runtime/avm2/natives/date.js +581 -0
- package/dist/thread/runtime/avm2/natives/define.js +130 -0
- package/dist/thread/runtime/avm2/natives/describe.js +351 -0
- package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
- package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
- package/dist/thread/runtime/avm2/natives/float.js +96 -0
- package/dist/thread/runtime/avm2/natives/index.js +64 -0
- package/dist/thread/runtime/avm2/natives/json.js +514 -0
- package/dist/thread/runtime/avm2/natives/number.js +162 -0
- package/dist/thread/runtime/avm2/natives/object.js +237 -0
- package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
- package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
- package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
- package/dist/thread/runtime/avm2/natives/shell.js +557 -0
- package/dist/thread/runtime/avm2/natives/sort.js +377 -0
- package/dist/thread/runtime/avm2/natives/string.js +132 -0
- package/dist/thread/runtime/avm2/natives/sync.js +821 -0
- package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
- package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
- package/dist/thread/runtime/avm2/natives/vector.js +406 -0
- package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
- package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
- package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
- package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
- package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
- package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
- package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
- package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
- package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
- package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
- package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
- package/dist/thread/runtime/avm2/number-strings.js +110 -0
- package/dist/thread/runtime/avm2/numbers.js +558 -0
- package/dist/thread/runtime/avm2/options.js +16 -0
- package/dist/thread/runtime/avm2/player-messages.js +550 -0
- package/dist/thread/runtime/avm2/property-cache.js +135 -0
- package/dist/thread/runtime/avm2/runtime.js +2644 -0
- package/dist/thread/runtime/avm2/traits.js +509 -0
- package/dist/thread/runtime/index.js +7 -0
- package/dist/web-worker.d.ts +2 -0
- package/dist/web-worker.d.ts.map +1 -0
- package/dist/web-worker.js +20 -0
- package/dist/web-worker.js.map +1 -0
- package/dist/websocket.d.ts +4 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +27 -0
- package/dist/websocket.js.map +1 -0
- package/dist/workers.d.ts +35 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +171 -0
- package/dist/workers.js.map +1 -0
- package/package.json +62 -3
- package/src/indexeddb.ts +227 -0
- package/src/node-worker.ts +13 -0
- package/src/node.ts +49 -0
- package/src/precompiled.ts +166 -0
- package/src/stage3d.ts +76 -0
- package/src/web-worker.ts +24 -0
- package/src/websocket.ts +32 -0
- package/src/workers.ts +255 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
const IDENTITY_MATRIX = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
|
|
2
|
+
/**
|
|
3
|
+
* A kind's values as a new filter object of it has them in adl: made for
|
|
4
|
+
* the kind alone, as a timeline that writes a filter on each frame asks
|
|
5
|
+
* for one each time.
|
|
6
|
+
*/
|
|
7
|
+
export function filterDefaults(kind) {
|
|
8
|
+
return { kind, ...kindDefaults(kind) };
|
|
9
|
+
}
|
|
10
|
+
function kindDefaults(kind) {
|
|
11
|
+
const shadow = () => ({
|
|
12
|
+
angle: 45,
|
|
13
|
+
blurX: 4,
|
|
14
|
+
blurY: 4,
|
|
15
|
+
distance: 4,
|
|
16
|
+
knockout: false,
|
|
17
|
+
quality: 1,
|
|
18
|
+
});
|
|
19
|
+
switch (kind) {
|
|
20
|
+
case "blur":
|
|
21
|
+
return { blurX: 4, blurY: 4, quality: 1 };
|
|
22
|
+
case "glow":
|
|
23
|
+
return {
|
|
24
|
+
alpha: 1,
|
|
25
|
+
blurX: 6,
|
|
26
|
+
blurY: 6,
|
|
27
|
+
color: 0xff0000,
|
|
28
|
+
inner: false,
|
|
29
|
+
knockout: false,
|
|
30
|
+
quality: 1,
|
|
31
|
+
strength: 2,
|
|
32
|
+
};
|
|
33
|
+
case "dropShadow":
|
|
34
|
+
return {
|
|
35
|
+
...shadow(),
|
|
36
|
+
alpha: 1,
|
|
37
|
+
color: 0,
|
|
38
|
+
hideObject: false,
|
|
39
|
+
inner: false,
|
|
40
|
+
strength: 1,
|
|
41
|
+
};
|
|
42
|
+
case "bevel":
|
|
43
|
+
return {
|
|
44
|
+
...shadow(),
|
|
45
|
+
highlightAlpha: 1,
|
|
46
|
+
highlightColor: 0xffffff,
|
|
47
|
+
shadowAlpha: 1,
|
|
48
|
+
shadowColor: 0,
|
|
49
|
+
strength: 1,
|
|
50
|
+
type: "inner",
|
|
51
|
+
};
|
|
52
|
+
case "gradientGlow":
|
|
53
|
+
case "gradientBevel":
|
|
54
|
+
return { ...shadow(), strength: 1, type: "inner", colors: [], alphas: [], ratios: [] };
|
|
55
|
+
case "colorMatrix":
|
|
56
|
+
return { matrix: [...IDENTITY_MATRIX] };
|
|
57
|
+
case "convolution":
|
|
58
|
+
return {
|
|
59
|
+
alpha: 0,
|
|
60
|
+
bias: 0,
|
|
61
|
+
clamp: true,
|
|
62
|
+
color: 0,
|
|
63
|
+
divisor: 1,
|
|
64
|
+
matrix: [],
|
|
65
|
+
matrixX: 0,
|
|
66
|
+
matrixY: 0,
|
|
67
|
+
preserveAlpha: true,
|
|
68
|
+
};
|
|
69
|
+
case "displacementMap":
|
|
70
|
+
return {
|
|
71
|
+
alpha: 0,
|
|
72
|
+
color: 0,
|
|
73
|
+
componentX: 0,
|
|
74
|
+
componentY: 0,
|
|
75
|
+
mapBitmap: null,
|
|
76
|
+
mapPoint: [0, 0],
|
|
77
|
+
mode: "wrap",
|
|
78
|
+
scaleX: 0,
|
|
79
|
+
scaleY: 0,
|
|
80
|
+
};
|
|
81
|
+
case "shader":
|
|
82
|
+
return { shader: null, extensions: [0, 0, 0, 0] };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** A copy of a record, its lists its own. */
|
|
86
|
+
export function copyFilter(f) {
|
|
87
|
+
const copy = { ...f };
|
|
88
|
+
for (const key of ["colors", "alphas", "ratios", "matrix", "mapPoint", "extensions"]) {
|
|
89
|
+
if (key in f) {
|
|
90
|
+
copy[key] = [...f[key]];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return copy;
|
|
94
|
+
}
|
|
95
|
+
const DEGREES = 180 / Math.PI;
|
|
96
|
+
/** A PlaceObject3 filter as the record its object reads back. */
|
|
97
|
+
export function filterOfSwf(f) {
|
|
98
|
+
switch (f.type) {
|
|
99
|
+
case "blur":
|
|
100
|
+
return { ...filterDefaults("blur"), blurX: f.blurX, blurY: f.blurY, quality: f.passes };
|
|
101
|
+
case "glow":
|
|
102
|
+
return {
|
|
103
|
+
...filterDefaults("glow"),
|
|
104
|
+
color: f.color.rgb,
|
|
105
|
+
alpha: f.color.alpha / 255,
|
|
106
|
+
blurX: f.blurX,
|
|
107
|
+
blurY: f.blurY,
|
|
108
|
+
strength: f.strength,
|
|
109
|
+
inner: f.inner,
|
|
110
|
+
knockout: f.knockout,
|
|
111
|
+
quality: f.passes,
|
|
112
|
+
};
|
|
113
|
+
case "dropShadow":
|
|
114
|
+
return {
|
|
115
|
+
...filterDefaults("dropShadow"),
|
|
116
|
+
color: f.color.rgb,
|
|
117
|
+
alpha: f.color.alpha / 255,
|
|
118
|
+
blurX: f.blurX,
|
|
119
|
+
blurY: f.blurY,
|
|
120
|
+
angle: f.angle * DEGREES,
|
|
121
|
+
distance: f.distance,
|
|
122
|
+
strength: f.strength,
|
|
123
|
+
inner: f.inner,
|
|
124
|
+
knockout: f.knockout,
|
|
125
|
+
hideObject: !f.composite,
|
|
126
|
+
quality: f.passes,
|
|
127
|
+
};
|
|
128
|
+
case "bevel":
|
|
129
|
+
case "gradientGlow":
|
|
130
|
+
case "gradientBevel": {
|
|
131
|
+
const shared = {
|
|
132
|
+
blurX: f.blurX,
|
|
133
|
+
blurY: f.blurY,
|
|
134
|
+
angle: f.angle * DEGREES,
|
|
135
|
+
distance: f.distance,
|
|
136
|
+
strength: f.strength,
|
|
137
|
+
knockout: f.knockout,
|
|
138
|
+
quality: f.passes,
|
|
139
|
+
type: f.inner ? "inner" : f.onTop ? "full" : "outer",
|
|
140
|
+
};
|
|
141
|
+
if (f.type === "bevel") {
|
|
142
|
+
const [shadow, highlight] = f.colors;
|
|
143
|
+
return {
|
|
144
|
+
...filterDefaults("bevel"),
|
|
145
|
+
...shared,
|
|
146
|
+
shadowColor: shadow.rgb,
|
|
147
|
+
shadowAlpha: shadow.alpha / 255,
|
|
148
|
+
highlightColor: highlight.rgb,
|
|
149
|
+
highlightAlpha: highlight.alpha / 255,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
...filterDefaults(f.type),
|
|
154
|
+
...shared,
|
|
155
|
+
colors: f.colors.map((c) => c.rgb),
|
|
156
|
+
alphas: f.colors.map((c) => c.alpha / 255),
|
|
157
|
+
ratios: [...f.ratios],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
case "convolution":
|
|
161
|
+
return {
|
|
162
|
+
...filterDefaults("convolution"),
|
|
163
|
+
matrixX: f.matrixX,
|
|
164
|
+
matrixY: f.matrixY,
|
|
165
|
+
divisor: f.divisor,
|
|
166
|
+
bias: f.bias,
|
|
167
|
+
matrix: [...f.matrix],
|
|
168
|
+
color: f.color.rgb,
|
|
169
|
+
alpha: f.color.alpha / 255,
|
|
170
|
+
clamp: f.clamp,
|
|
171
|
+
preserveAlpha: f.preserveAlpha,
|
|
172
|
+
};
|
|
173
|
+
case "colorMatrix":
|
|
174
|
+
return { ...filterDefaults("colorMatrix"), matrix: [...f.matrix] };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Whether two lists of filter records hold the same values, which draw the
|
|
179
|
+
* same: a timeline's tween writes its filters again on each frame, and a
|
|
180
|
+
* script may set them from their own. A map is the same only as the same
|
|
181
|
+
* object, so that a displacement's map taken anew is drawn anew.
|
|
182
|
+
*/
|
|
183
|
+
export function sameFilterRecords(a, b) {
|
|
184
|
+
if (a.length !== b.length) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
// Compared each frame for every object a tween filters, so without allocating.
|
|
188
|
+
for (let i = 0; i < a.length; i++) {
|
|
189
|
+
const x = a[i];
|
|
190
|
+
const y = b[i];
|
|
191
|
+
let keys = 0;
|
|
192
|
+
for (const key in x) {
|
|
193
|
+
keys++;
|
|
194
|
+
if (!(key in y) || !sameValue(x[key], y[key])) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
for (const _ in y) {
|
|
199
|
+
keys--;
|
|
200
|
+
}
|
|
201
|
+
if (keys !== 0) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
function sameValue(u, v) {
|
|
208
|
+
if (!Array.isArray(u) || !Array.isArray(v)) {
|
|
209
|
+
return Object.is(u, v);
|
|
210
|
+
}
|
|
211
|
+
if (u.length !== v.length) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
for (let k = 0; k < u.length; k++) {
|
|
215
|
+
if (!Object.is(u[k], v[k])) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* A convolution with no taps as adl draws it, a copy moved up and left by
|
|
223
|
+
* the half of the other size: one tap there, of 1, the edges transparent.
|
|
224
|
+
*/
|
|
225
|
+
export function emptyKernel(f) {
|
|
226
|
+
const hx = f.matrixX >> 1;
|
|
227
|
+
const hy = f.matrixY >> 1;
|
|
228
|
+
const matrixX = 2 * hx + 1;
|
|
229
|
+
const matrixY = 2 * hy + 1;
|
|
230
|
+
const matrix = new Array(matrixX * matrixY).fill(0);
|
|
231
|
+
matrix[matrix.length - 1] = 1;
|
|
232
|
+
return {
|
|
233
|
+
...f,
|
|
234
|
+
matrixX,
|
|
235
|
+
matrixY,
|
|
236
|
+
matrix,
|
|
237
|
+
divisor: 1,
|
|
238
|
+
bias: 0,
|
|
239
|
+
clamp: false,
|
|
240
|
+
color: 0,
|
|
241
|
+
alpha: 0,
|
|
242
|
+
preserveAlpha: false,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/** A filter's offset into `out`, `distance` stage pixels at its angle, in `units` a stage pixel. */
|
|
246
|
+
export function filterOffset(out, f, distance, units) {
|
|
247
|
+
const radians = ((f.angle || 0) * Math.PI) / 180;
|
|
248
|
+
out[0] = distance * Math.cos(radians) * units;
|
|
249
|
+
out[1] = distance * Math.sin(radians) * units;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* How far either side of a display object its filters may pad, in the
|
|
253
|
+
* target's units: what a texture `limit` texels a side holds at
|
|
254
|
+
* `resolution` texels a unit, past the object's area on the target
|
|
255
|
+
* (`width` by `height` units, cut to it) and a little.
|
|
256
|
+
*/
|
|
257
|
+
export function filterRoom(limit, resolution, width, height) {
|
|
258
|
+
return Math.floor((limit / resolution - Math.max(width, height, 0)) / 2) - 2;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The most any one filter pads, where their paddings as their reach asks
|
|
262
|
+
* (`wanted`) together pass `room`: cut alike from the furthest reaching
|
|
263
|
+
* down to what fits, as a shadow cast 1e9 away, or Infinity, asks;
|
|
264
|
+
* Infinity where they fit. What is cut lies past the screen, but for an
|
|
265
|
+
* object off it whose shadow is not.
|
|
266
|
+
*/
|
|
267
|
+
export function paddingCap(wanted, room) {
|
|
268
|
+
let total = 0;
|
|
269
|
+
for (const p of wanted) {
|
|
270
|
+
total += p;
|
|
271
|
+
}
|
|
272
|
+
if (total <= room) {
|
|
273
|
+
return Number.POSITIVE_INFINITY;
|
|
274
|
+
}
|
|
275
|
+
const sorted = [...wanted].sort((a, b) => a - b);
|
|
276
|
+
let below = 0;
|
|
277
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
278
|
+
const level = Math.floor((Math.max(0, room) - below) / (sorted.length - i));
|
|
279
|
+
if (level <= sorted[i]) {
|
|
280
|
+
return Math.max(0, level);
|
|
281
|
+
}
|
|
282
|
+
below += sorted[i];
|
|
283
|
+
}
|
|
284
|
+
return 0;
|
|
285
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
export function isProjective(m) {
|
|
2
|
+
return m.w !== undefined;
|
|
3
|
+
}
|
|
4
|
+
/** `m` then `p`, either projective. */
|
|
5
|
+
function concatProjective(m, p) {
|
|
6
|
+
const [mu, mv, mw] = isProjective(m) ? [m.u, m.v, m.w] : [0, 0, 1];
|
|
7
|
+
const [pu, pv, pw] = isProjective(p) ? [p.u, p.v, p.w] : [0, 0, 1];
|
|
8
|
+
return {
|
|
9
|
+
a: p.a * m.a + p.c * m.b + p.tx * mu,
|
|
10
|
+
b: p.b * m.a + p.d * m.b + p.ty * mu,
|
|
11
|
+
c: p.a * m.c + p.c * m.d + p.tx * mv,
|
|
12
|
+
d: p.b * m.c + p.d * m.d + p.ty * mv,
|
|
13
|
+
tx: p.a * m.tx + p.c * m.ty + p.tx * mw,
|
|
14
|
+
ty: p.b * m.tx + p.d * m.ty + p.ty * mw,
|
|
15
|
+
u: pu * m.a + pv * m.b + pw * mu,
|
|
16
|
+
v: pu * m.c + pv * m.d + pw * mv,
|
|
17
|
+
w: pu * m.tx + pv * m.ty + pw * mw,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** The inverse of a projective matrix, by its adjugate, or null for one that flattens the plane. */
|
|
21
|
+
function invertProjective(m) {
|
|
22
|
+
const { a, b, c, d, tx, ty, u, v, w } = m;
|
|
23
|
+
const A = d * w - ty * v;
|
|
24
|
+
const B = -(b * w - ty * u);
|
|
25
|
+
const C = b * v - d * u;
|
|
26
|
+
const det = a * A + c * B + tx * C;
|
|
27
|
+
if (det === 0 || !Number.isFinite(det)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
a: A / det,
|
|
32
|
+
b: B / det,
|
|
33
|
+
u: C / det,
|
|
34
|
+
c: -(c * w - tx * v) / det,
|
|
35
|
+
d: (a * w - tx * u) / det,
|
|
36
|
+
v: -(a * v - c * u) / det,
|
|
37
|
+
tx: (c * ty - tx * d) / det,
|
|
38
|
+
ty: -(a * ty - tx * b) / det,
|
|
39
|
+
w: (a * d - c * b) / det,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** `m` then `p`: the matrix that applies `m` and then `p`, as a child's in its parent's. */
|
|
43
|
+
export function concat(m, p) {
|
|
44
|
+
if (isProjective(m) || isProjective(p)) {
|
|
45
|
+
return concatProjective(m, p);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
a: m.a * p.a + m.b * p.c,
|
|
49
|
+
b: m.a * p.b + m.b * p.d,
|
|
50
|
+
c: m.c * p.a + m.d * p.c,
|
|
51
|
+
d: m.c * p.b + m.d * p.d,
|
|
52
|
+
tx: m.tx * p.a + m.ty * p.c + p.tx,
|
|
53
|
+
ty: m.tx * p.b + m.ty * p.d + p.ty,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** The inverse, or null for a matrix that flattens the plane. */
|
|
57
|
+
export function invert(m) {
|
|
58
|
+
if (isProjective(m)) {
|
|
59
|
+
return invertProjective(m);
|
|
60
|
+
}
|
|
61
|
+
const det = m.a * m.d - m.b * m.c;
|
|
62
|
+
if (det === 0) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
a: m.d / det,
|
|
67
|
+
b: -m.b / det,
|
|
68
|
+
c: -m.c / det,
|
|
69
|
+
d: m.a / det,
|
|
70
|
+
tx: (m.c * m.ty - m.d * m.tx) / det,
|
|
71
|
+
ty: (m.b * m.tx - m.a * m.ty) / det,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function apply(m, x, y) {
|
|
75
|
+
if (isProjective(m)) {
|
|
76
|
+
const q = m.u * x + m.v * y + m.w;
|
|
77
|
+
return [(m.a * x + m.c * y + m.tx) / q, (m.b * x + m.d * y + m.ty) / q];
|
|
78
|
+
}
|
|
79
|
+
return [m.a * x + m.c * y + m.tx, m.b * x + m.d * y + m.ty];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The rectangle around `r`'s four corners through `m`. Through a
|
|
83
|
+
* projective one, out to whole pixels, as Flash reports a 3D object's;
|
|
84
|
+
* and a point at the origin where a corner is behind the eye, where Flash
|
|
85
|
+
* draws nothing.
|
|
86
|
+
*/
|
|
87
|
+
export function transformRect(r, m) {
|
|
88
|
+
if (isProjective(m)) {
|
|
89
|
+
return projectRect(r, m);
|
|
90
|
+
}
|
|
91
|
+
// The corners as apply places them, without its arrays: every bounds, width and hitTest asks.
|
|
92
|
+
const x0 = m.a * r.xMin + m.c * r.yMin + m.tx;
|
|
93
|
+
const y0 = m.b * r.xMin + m.d * r.yMin + m.ty;
|
|
94
|
+
const x1 = m.a * r.xMax + m.c * r.yMin + m.tx;
|
|
95
|
+
const y1 = m.b * r.xMax + m.d * r.yMin + m.ty;
|
|
96
|
+
const x2 = m.a * r.xMin + m.c * r.yMax + m.tx;
|
|
97
|
+
const y2 = m.b * r.xMin + m.d * r.yMax + m.ty;
|
|
98
|
+
const x3 = m.a * r.xMax + m.c * r.yMax + m.tx;
|
|
99
|
+
const y3 = m.b * r.xMax + m.d * r.yMax + m.ty;
|
|
100
|
+
return {
|
|
101
|
+
xMin: Math.min(x0, x1, x2, x3),
|
|
102
|
+
yMin: Math.min(y0, y1, y2, y3),
|
|
103
|
+
xMax: Math.max(x0, x1, x2, x3),
|
|
104
|
+
yMax: Math.max(y0, y1, y2, y3),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** How far past a whole pixel a projected edge may go and still be bounded by it. */
|
|
108
|
+
const SLACK = 0.125;
|
|
109
|
+
function projectRect(r, m) {
|
|
110
|
+
let xMin = Number.POSITIVE_INFINITY;
|
|
111
|
+
let yMin = Number.POSITIVE_INFINITY;
|
|
112
|
+
let xMax = Number.NEGATIVE_INFINITY;
|
|
113
|
+
let yMax = Number.NEGATIVE_INFINITY;
|
|
114
|
+
for (let i = 0; i < 4; i++) {
|
|
115
|
+
const x = i & 1 ? r.xMax : r.xMin;
|
|
116
|
+
const y = i & 2 ? r.yMax : r.yMin;
|
|
117
|
+
const q = m.u * x + m.v * y + m.w;
|
|
118
|
+
if (!(q > 0)) {
|
|
119
|
+
return { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };
|
|
120
|
+
}
|
|
121
|
+
const px = (m.a * x + m.c * y + m.tx) / q;
|
|
122
|
+
const py = (m.b * x + m.d * y + m.ty) / q;
|
|
123
|
+
xMin = Math.min(xMin, px);
|
|
124
|
+
yMin = Math.min(yMin, py);
|
|
125
|
+
xMax = Math.max(xMax, px);
|
|
126
|
+
yMax = Math.max(yMax, py);
|
|
127
|
+
}
|
|
128
|
+
// Out to whole pixels, but for an eighth of one: an edge that passes a pixel by less is not
|
|
129
|
+
// counted to the next, as adl reports (the `three-d-bounds` case).
|
|
130
|
+
return {
|
|
131
|
+
xMin: Math.floor(xMin + SLACK),
|
|
132
|
+
yMin: Math.floor(yMin + SLACK),
|
|
133
|
+
xMax: Math.ceil(xMax - SLACK),
|
|
134
|
+
yMax: Math.ceil(yMax - SLACK),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/** The rectangle around `r`'s four corners through `m`, each divided where `m` is projective: not out to whole pixels. */
|
|
138
|
+
export function boxThrough(r, m) {
|
|
139
|
+
let xMin = Number.POSITIVE_INFINITY;
|
|
140
|
+
let yMin = Number.POSITIVE_INFINITY;
|
|
141
|
+
let xMax = Number.NEGATIVE_INFINITY;
|
|
142
|
+
let yMax = Number.NEGATIVE_INFINITY;
|
|
143
|
+
for (let i = 0; i < 4; i++) {
|
|
144
|
+
const [x, y] = apply(m, i & 1 ? r.xMax : r.xMin, i & 2 ? r.yMax : r.yMin);
|
|
145
|
+
xMin = Math.min(xMin, x);
|
|
146
|
+
yMin = Math.min(yMin, y);
|
|
147
|
+
xMax = Math.max(xMax, x);
|
|
148
|
+
yMax = Math.max(yMax, y);
|
|
149
|
+
}
|
|
150
|
+
return { xMin, yMin, xMax, yMax };
|
|
151
|
+
}
|
|
152
|
+
/** Whether a corner of `r` goes behind the eye through `m`, or onto its plane: Flash then draws none of it. */
|
|
153
|
+
export function behindEye(r, m) {
|
|
154
|
+
if (!isProjective(m)) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
for (let i = 0; i < 4; i++) {
|
|
158
|
+
const q = m.u * (i & 1 ? r.xMax : r.xMin) + m.v * (i & 2 ? r.yMax : r.yMin) + m.w;
|
|
159
|
+
if (!(q > 0)) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
export function union(a, b) {
|
|
166
|
+
if (!a || !b) {
|
|
167
|
+
return a ?? b;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
xMin: Math.min(a.xMin, b.xMin),
|
|
171
|
+
yMin: Math.min(a.yMin, b.yMin),
|
|
172
|
+
xMax: Math.max(a.xMax, b.xMax),
|
|
173
|
+
yMax: Math.max(a.yMax, b.yMax),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export function contains(r, x, y) {
|
|
177
|
+
return x >= r.xMin && x <= r.xMax && y >= r.yMin && y <= r.yMax;
|
|
178
|
+
}
|
|
179
|
+
export function overlaps(a, b) {
|
|
180
|
+
return a.xMin <= b.xMax && b.xMin <= a.xMax && a.yMin <= b.yMax && b.yMin <= a.yMax;
|
|
181
|
+
}
|
|
182
|
+
/** `m` after a shift of (-left, -top) of `r`: a scrolled object's, its scroll's corner at its origin. */
|
|
183
|
+
export function shifted(m, r) {
|
|
184
|
+
return {
|
|
185
|
+
...m,
|
|
186
|
+
tx: m.tx - m.a * r.xMin - m.c * r.yMin,
|
|
187
|
+
ty: m.ty - m.b * r.xMin - m.d * r.yMin,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/** A ramp's stops in order of use: Flash fills the ramp from each stop to the next, skipping any that go back. */
|
|
2
|
+
export function ramp(stops, linearRgb) {
|
|
3
|
+
const out = new Uint32Array(256);
|
|
4
|
+
if (stops.length === 0) {
|
|
5
|
+
out.fill(0xff000000);
|
|
6
|
+
return out;
|
|
7
|
+
}
|
|
8
|
+
// The first colour up to the first stop, each stop's span after it in
|
|
9
|
+
// order (none for a stop before where the ramp has got to), the last
|
|
10
|
+
// colour on to the end. In linear RGB the ends go through linear light
|
|
11
|
+
// too, which takes 255 to 254 as Flash does.
|
|
12
|
+
let at = 0;
|
|
13
|
+
const first = premultiplied(mix(stops[0].color, stops[0].color, 0, linearRgb));
|
|
14
|
+
for (; at <= stops[0].ratio && at < 256; at++) {
|
|
15
|
+
out[at] = first;
|
|
16
|
+
}
|
|
17
|
+
for (let k = 1; k < stops.length; k++) {
|
|
18
|
+
const from = stops[k - 1];
|
|
19
|
+
const to = stops[k];
|
|
20
|
+
for (; at <= to.ratio && at < 256; at++) {
|
|
21
|
+
const f = (at - from.ratio) / (to.ratio - from.ratio);
|
|
22
|
+
out[at] = premultiplied(mix(from.color, to.color, f, linearRgb));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const lastStop = stops[stops.length - 1].color;
|
|
26
|
+
const last = premultiplied(mix(lastStop, lastStop, 0, linearRgb));
|
|
27
|
+
for (; at < 256; at++) {
|
|
28
|
+
out[at] = last;
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
/** Straight ARGB premultiplied, each channel times alpha + 1 over 256. */
|
|
33
|
+
function premultiplied(argb) {
|
|
34
|
+
const a = argb >>> 24;
|
|
35
|
+
const r = (((argb >>> 16) & 0xff) * (a + 1)) >> 8;
|
|
36
|
+
const g = (((argb >>> 8) & 0xff) * (a + 1)) >> 8;
|
|
37
|
+
const b = ((argb & 0xff) * (a + 1)) >> 8;
|
|
38
|
+
return ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;
|
|
39
|
+
}
|
|
40
|
+
/** a to b by f, each channel truncated; colours in linear light for linear RGB, alpha straight. */
|
|
41
|
+
function mix(a, b, f, linearRgb) {
|
|
42
|
+
return (((channel(a, b, f, 24, false) << 24) |
|
|
43
|
+
(channel(a, b, f, 16, linearRgb) << 16) |
|
|
44
|
+
(channel(a, b, f, 8, linearRgb) << 8) |
|
|
45
|
+
channel(a, b, f, 0, linearRgb)) >>>
|
|
46
|
+
0);
|
|
47
|
+
}
|
|
48
|
+
/** The channel at `shift` of a to b by f, truncated, through linear light if `light`. */
|
|
49
|
+
function channel(a, b, f, shift, light) {
|
|
50
|
+
const x = (a >>> shift) & 0xff;
|
|
51
|
+
const y = (b >>> shift) & 0xff;
|
|
52
|
+
if (!light) {
|
|
53
|
+
return Math.floor(x + (y - x) * f);
|
|
54
|
+
}
|
|
55
|
+
const l = (1 - f) * toLinear(x / 255) + f * toLinear(y / 255);
|
|
56
|
+
return Math.floor(255 * toSrgb(l));
|
|
57
|
+
}
|
|
58
|
+
function toLinear(c) {
|
|
59
|
+
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
60
|
+
}
|
|
61
|
+
function toSrgb(l) {
|
|
62
|
+
return l <= 0.0031308 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
63
|
+
}
|
|
64
|
+
/** The most texels a radial gradient's texture has a side; a larger region is sampled more coarsely. */
|
|
65
|
+
export const RADIAL_MAX = 512;
|
|
66
|
+
/**
|
|
67
|
+
* A radial gradient over `region` of the shape, `columns` by `rows` texels,
|
|
68
|
+
* as premultiplied ARGB: each texel the ramp's entry at its top left
|
|
69
|
+
* corner, where Flash samples a pixel, so that a texel of an unscaled
|
|
70
|
+
* shape is its pixel exactly. `m` maps the gradient square to the shape.
|
|
71
|
+
*/
|
|
72
|
+
export function radialPixels(colors, m, focal, spread, region, columns, rows) {
|
|
73
|
+
const out = new Uint32Array(columns * rows);
|
|
74
|
+
const f = Math.max(-1, Math.min(1, focal));
|
|
75
|
+
// The inverse, from the shape to the unit circle (the square is 819.2 a half side).
|
|
76
|
+
const det = m.a * m.d - m.b * m.c;
|
|
77
|
+
const ia = m.d / det / 819.2;
|
|
78
|
+
const ib = -m.b / det / 819.2;
|
|
79
|
+
const ic = -m.c / det / 819.2;
|
|
80
|
+
const id = m.a / det / 819.2;
|
|
81
|
+
for (let j = 0; j < rows; j++) {
|
|
82
|
+
for (let i = 0; i < columns; i++) {
|
|
83
|
+
const x = region.x + (i * region.width) / columns - m.tx;
|
|
84
|
+
const y = region.y + (j * region.height) / rows - m.ty;
|
|
85
|
+
out[j * columns + i] = colors[index(place(ia * x + ic * y, ib * x + id * y, f), spread)];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
/** Where (px, py) lies from the focal point (f, 0) to the unit circle along the ray through it: 0 at the focus, 1 on the circle. */
|
|
91
|
+
function place(px, py, f) {
|
|
92
|
+
const dx = px - f;
|
|
93
|
+
const dy = py;
|
|
94
|
+
const dd = dx * dx + dy * dy;
|
|
95
|
+
// At a focal point off the centre Flash draws the last stop, as though it
|
|
96
|
+
// were on the circle; at the centre of one centred, the first. Within
|
|
97
|
+
// rounding, as the point comes through the matrix's inverse.
|
|
98
|
+
if (dd < 1e-12) {
|
|
99
|
+
return f !== 0 ? 1 : 0;
|
|
100
|
+
}
|
|
101
|
+
// The ray f + s (p - f) meets the circle where s solves |f + s d|^2 = 1.
|
|
102
|
+
const fd = f * dx;
|
|
103
|
+
const s = (-fd + Math.sqrt(fd * fd - dd * (f * f - 1))) / dd;
|
|
104
|
+
return s > 0 ? 1 / s : 1;
|
|
105
|
+
}
|
|
106
|
+
/** The ramp's entry for place t, spread: 0 pad, 1 reflect, 2 repeat. */
|
|
107
|
+
export function index(t, spread) {
|
|
108
|
+
const p = Math.floor(t * 256);
|
|
109
|
+
if (spread === 2) {
|
|
110
|
+
return ((p % 256) + 256) % 256;
|
|
111
|
+
}
|
|
112
|
+
if (spread === 1) {
|
|
113
|
+
const m = ((p % 512) + 512) % 512;
|
|
114
|
+
return m < 256 ? m : 511 - m;
|
|
115
|
+
}
|
|
116
|
+
return Math.max(0, Math.min(255, p));
|
|
117
|
+
}
|