@swf2es/player-hosts 0.0.0-stage → 0.1.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.
Files changed (405) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +759 -0
  3. package/README.md +43 -2
  4. package/dist/indexeddb.d.ts +27 -0
  5. package/dist/indexeddb.d.ts.map +1 -0
  6. package/dist/indexeddb.js +170 -0
  7. package/dist/indexeddb.js.map +1 -0
  8. package/dist/node-worker.d.ts +2 -0
  9. package/dist/node-worker.d.ts.map +1 -0
  10. package/dist/node-worker.js +12 -0
  11. package/dist/node-worker.js.map +1 -0
  12. package/dist/node.d.ts +8 -0
  13. package/dist/node.d.ts.map +1 -0
  14. package/dist/node.js +43 -0
  15. package/dist/node.js.map +1 -0
  16. package/dist/precompiled.d.ts +31 -0
  17. package/dist/precompiled.d.ts.map +1 -0
  18. package/dist/precompiled.js +125 -0
  19. package/dist/precompiled.js.map +1 -0
  20. package/dist/stage3d.d.ts +13 -0
  21. package/dist/stage3d.d.ts.map +1 -0
  22. package/dist/stage3d.js +61 -0
  23. package/dist/stage3d.js.map +1 -0
  24. package/dist/thread/codegen/codegen.js +308 -0
  25. package/dist/thread/codegen/index.js +405 -0
  26. package/dist/thread/format/abc-names.js +126 -0
  27. package/dist/thread/format/actions.js +222 -0
  28. package/dist/thread/format/air-descriptor.js +63 -0
  29. package/dist/thread/format/api-versions.js +22 -0
  30. package/dist/thread/format/bitmap.js +199 -0
  31. package/dist/thread/format/button.js +60 -0
  32. package/dist/thread/format/compression.js +200 -0
  33. package/dist/thread/format/display.js +305 -0
  34. package/dist/thread/format/filters.js +136 -0
  35. package/dist/thread/format/font.js +168 -0
  36. package/dist/thread/format/index.js +26 -0
  37. package/dist/thread/format/pbj.js +484 -0
  38. package/dist/thread/format/shape.js +411 -0
  39. package/dist/thread/format/sound.js +91 -0
  40. package/dist/thread/format/swf.js +163 -0
  41. package/dist/thread/format/tags.js +58 -0
  42. package/dist/thread/format/text.js +135 -0
  43. package/dist/thread/format/zip.js +91 -0
  44. package/dist/thread/native/audio/binary.js +3 -0
  45. package/dist/thread/native/audio/index.js +72 -0
  46. package/dist/thread/native/base64.js +9 -0
  47. package/dist/thread/native/compress/binary.js +3 -0
  48. package/dist/thread/native/compress/index.js +145 -0
  49. package/dist/thread/native/instance.js +49 -0
  50. package/dist/thread/native/mp3/binary.js +3 -0
  51. package/dist/thread/native/mp3/index.js +48 -0
  52. package/dist/thread/native/render/binary.js +3 -0
  53. package/dist/thread/native/render/bitmap-kernel.js +591 -0
  54. package/dist/thread/native/render/draw-kernel.js +204 -0
  55. package/dist/thread/native/render/dxt-encoder.js +94 -0
  56. package/dist/thread/native/render/index.js +10 -0
  57. package/dist/thread/native/render/lines.js +122 -0
  58. package/dist/thread/native/render/module.js +26 -0
  59. package/dist/thread/native/render/pixel-ops.js +235 -0
  60. package/dist/thread/native/render/tessellator.js +250 -0
  61. package/dist/thread/player/avm1/amf.js +507 -0
  62. package/dist/thread/player/avm1/avm1.js +1304 -0
  63. package/dist/thread/player/avm1/bindings.js +214 -0
  64. package/dist/thread/player/avm1/classes.js +75 -0
  65. package/dist/thread/player/avm1/clips.js +229 -0
  66. package/dist/thread/player/avm1/compile.js +140 -0
  67. package/dist/thread/player/avm1/external.js +79 -0
  68. package/dist/thread/player/avm1/focus.js +278 -0
  69. package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
  70. package/dist/thread/player/avm1/globals/Button.js +31 -0
  71. package/dist/thread/player/avm1/globals/Color.js +115 -0
  72. package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
  73. package/dist/thread/player/avm1/globals/FileReference.js +217 -0
  74. package/dist/thread/player/avm1/globals/Key.js +60 -0
  75. package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
  76. package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
  77. package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
  78. package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
  79. package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
  80. package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
  81. package/dist/thread/player/avm1/globals/Selection.js +62 -0
  82. package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
  83. package/dist/thread/player/avm1/globals/Sound.js +238 -0
  84. package/dist/thread/player/avm1/globals/Stage.js +12 -0
  85. package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
  86. package/dist/thread/player/avm1/globals/TextField.js +396 -0
  87. package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
  88. package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
  89. package/dist/thread/player/avm1/globals/XML.js +396 -0
  90. package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
  91. package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
  92. package/dist/thread/player/avm1/globals/drawing.js +202 -0
  93. package/dist/thread/player/avm1/globals/filters.js +635 -0
  94. package/dist/thread/player/avm1/globals/geom.js +600 -0
  95. package/dist/thread/player/avm1/input.js +483 -0
  96. package/dist/thread/player/avm1/keyboard.js +113 -0
  97. package/dist/thread/player/avm1/loads.js +352 -0
  98. package/dist/thread/player/avm1/net.js +219 -0
  99. package/dist/thread/player/avm1/paths.js +104 -0
  100. package/dist/thread/player/avm1/pointer.js +512 -0
  101. package/dist/thread/player/avm1/queue.js +303 -0
  102. package/dist/thread/player/avm1/sound.js +106 -0
  103. package/dist/thread/player/avm1/swf.js +141 -0
  104. package/dist/thread/player/avm1/timers.js +113 -0
  105. package/dist/thread/player/bitmap/bitmap.js +627 -0
  106. package/dist/thread/player/bitmap/draw.js +68 -0
  107. package/dist/thread/player/bitmap/dxt.js +11 -0
  108. package/dist/thread/player/bitmap/filters.js +656 -0
  109. package/dist/thread/player/bitmap/images.js +240 -0
  110. package/dist/thread/player/bitmap/kernel.js +65 -0
  111. package/dist/thread/player/bitmap/ops.js +1239 -0
  112. package/dist/thread/player/bitmap/pixel-bender.js +911 -0
  113. package/dist/thread/player/bitmap/png.js +139 -0
  114. package/dist/thread/player/bitmap/turbulence.js +89 -0
  115. package/dist/thread/player/clock.js +182 -0
  116. package/dist/thread/player/display/bitmapobject.js +25 -0
  117. package/dist/thread/player/display/bounds.js +520 -0
  118. package/dist/thread/player/display/buttonobject.js +305 -0
  119. package/dist/thread/player/display/color.js +40 -0
  120. package/dist/thread/player/display/container.js +150 -0
  121. package/dist/thread/player/display/display.js +14 -0
  122. package/dist/thread/player/display/displayobject.js +664 -0
  123. package/dist/thread/player/display/drawing.js +613 -0
  124. package/dist/thread/player/display/filters.js +285 -0
  125. package/dist/thread/player/display/geometry.js +189 -0
  126. package/dist/thread/player/display/gradients.js +117 -0
  127. package/dist/thread/player/display/graphicsdata.js +592 -0
  128. package/dist/thread/player/display/instantiate.js +71 -0
  129. package/dist/thread/player/display/matrix3d.js +373 -0
  130. package/dist/thread/player/display/morph.js +226 -0
  131. package/dist/thread/player/display/movieclip.js +680 -0
  132. package/dist/thread/player/display/perspective.js +193 -0
  133. package/dist/thread/player/display/scale9.js +236 -0
  134. package/dist/thread/player/display/shapeobject.js +131 -0
  135. package/dist/thread/player/display/shapes.js +407 -0
  136. package/dist/thread/player/display/textobjects.js +222 -0
  137. package/dist/thread/player/display/timeline.js +471 -0
  138. package/dist/thread/player/display/value-lists.js +40 -0
  139. package/dist/thread/player/display/videoobject.js +6 -0
  140. package/dist/thread/player/display/walk.js +127 -0
  141. package/dist/thread/player/files.js +334 -0
  142. package/dist/thread/player/hosts.js +207 -0
  143. package/dist/thread/player/input/avm1.js +82 -0
  144. package/dist/thread/player/input/context-menu.js +63 -0
  145. package/dist/thread/player/input/keyboard.js +458 -0
  146. package/dist/thread/player/input/pointer.js +863 -0
  147. package/dist/thread/player/input/text-editor.js +319 -0
  148. package/dist/thread/player/input/touch.js +209 -0
  149. package/dist/thread/player/localconnection.js +90 -0
  150. package/dist/thread/player/media/audio.js +376 -0
  151. package/dist/thread/player/media/dynamic-sound.js +90 -0
  152. package/dist/thread/player/media/extract.js +135 -0
  153. package/dist/thread/player/media/mp3.js +152 -0
  154. package/dist/thread/player/media/sounds.js +507 -0
  155. package/dist/thread/player/media/streaming-audio.js +133 -0
  156. package/dist/thread/player/player.js +616 -0
  157. package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
  158. package/dist/thread/player/playerglobal/air-library.js +8 -0
  159. package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
  160. package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
  161. package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
  162. package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
  163. package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
  164. package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
  165. package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
  166. package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
  167. package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
  168. package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
  169. package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
  170. package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
  171. package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
  172. package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
  173. package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
  174. package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
  175. package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
  176. package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
  177. package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
  178. package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
  179. package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
  180. package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
  181. package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
  182. package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
  183. package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
  184. package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
  185. package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
  186. package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
  187. package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
  188. package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
  189. package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
  190. package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
  191. package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
  192. package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
  193. package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
  194. package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
  195. package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
  196. package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
  197. package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
  198. package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
  199. package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
  200. package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
  201. package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
  202. package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
  203. package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
  204. package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
  205. package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
  206. package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
  207. package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
  208. package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
  209. package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
  210. package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
  211. package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
  212. package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
  213. package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
  214. package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
  215. package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
  216. package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
  217. package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
  218. package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
  219. package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
  220. package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
  221. package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
  222. package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
  223. package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
  224. package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
  225. package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
  226. package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
  227. package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
  228. package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
  229. package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
  230. package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
  231. package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
  232. package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
  233. package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
  234. package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
  235. package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
  236. package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
  237. package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
  238. package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
  239. package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
  240. package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
  241. package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
  242. package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
  243. package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
  244. package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
  245. package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
  246. package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
  247. package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
  248. package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
  249. package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
  250. package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
  251. package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
  252. package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
  253. package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
  254. package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
  255. package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
  256. package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
  257. package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
  258. package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
  259. package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
  260. package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
  261. package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
  262. package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
  263. package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
  264. package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
  265. package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
  266. package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
  267. package/dist/thread/player/playerglobal/index.js +224 -0
  268. package/dist/thread/player/playerglobal/libraries.js +10 -0
  269. package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
  270. package/dist/thread/player/playerglobal/toplevel.js +122 -0
  271. package/dist/thread/player/scripting/clipboard.js +146 -0
  272. package/dist/thread/player/scripting/code.js +900 -0
  273. package/dist/thread/player/scripting/evaluate.js +144 -0
  274. package/dist/thread/player/scripting/events.js +172 -0
  275. package/dist/thread/player/scripting/handover.js +182 -0
  276. package/dist/thread/player/scripting/lazy.js +38 -0
  277. package/dist/thread/player/scripting/lifecycle.js +272 -0
  278. package/dist/thread/player/scripting/loads.js +860 -0
  279. package/dist/thread/player/scripting/sha256.js +95 -0
  280. package/dist/thread/player/scripting/symbols.js +348 -0
  281. package/dist/thread/player/scripting/timers.js +434 -0
  282. package/dist/thread/player/scripting/workers.js +923 -0
  283. package/dist/thread/player/scripting.js +1018 -0
  284. package/dist/thread/player/stage.js +4 -0
  285. package/dist/thread/player/text/csm.js +113 -0
  286. package/dist/thread/player/text/css.js +167 -0
  287. package/dist/thread/player/text/fonts.js +97 -0
  288. package/dist/thread/player/text/layout.js +393 -0
  289. package/dist/thread/player/text/static.js +109 -0
  290. package/dist/thread/player/text/text.js +431 -0
  291. package/dist/thread/player/workers/thread.js +159 -0
  292. package/dist/thread/player/workers/wire.js +198 -0
  293. package/dist/thread/player-hosts/web-worker.js +19 -0
  294. package/dist/thread/runtime/avm1/activation.js +89 -0
  295. package/dist/thread/runtime/avm1/case.js +249 -0
  296. package/dist/thread/runtime/avm1/clips.js +334 -0
  297. package/dist/thread/runtime/avm1/control.js +280 -0
  298. package/dist/thread/runtime/avm1/errors.js +50 -0
  299. package/dist/thread/runtime/avm1/functions.js +249 -0
  300. package/dist/thread/runtime/avm1/globals/array.js +549 -0
  301. package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
  302. package/dist/thread/runtime/avm1/globals/date.js +436 -0
  303. package/dist/thread/runtime/avm1/globals/global.js +344 -0
  304. package/dist/thread/runtime/avm1/globals/math.js +139 -0
  305. package/dist/thread/runtime/avm1/globals/number.js +93 -0
  306. package/dist/thread/runtime/avm1/globals/string.js +201 -0
  307. package/dist/thread/runtime/avm1/globals/timers.js +129 -0
  308. package/dist/thread/runtime/avm1/host.js +5 -0
  309. package/dist/thread/runtime/avm1/index.js +14 -0
  310. package/dist/thread/runtime/avm1/inheritance.js +132 -0
  311. package/dist/thread/runtime/avm1/numbers.js +298 -0
  312. package/dist/thread/runtime/avm1/objects.js +896 -0
  313. package/dist/thread/runtime/avm1/operators.js +170 -0
  314. package/dist/thread/runtime/avm1/realm.js +529 -0
  315. package/dist/thread/runtime/avm1/runtime.js +882 -0
  316. package/dist/thread/runtime/avm1/scope.js +385 -0
  317. package/dist/thread/runtime/avm1/urls.js +180 -0
  318. package/dist/thread/runtime/avm1/values.js +97 -0
  319. package/dist/thread/runtime/avm2/amf-classes.js +66 -0
  320. package/dist/thread/runtime/avm2/amf.js +801 -0
  321. package/dist/thread/runtime/avm2/array-conversion.js +100 -0
  322. package/dist/thread/runtime/avm2/builtin-library.js +21 -0
  323. package/dist/thread/runtime/avm2/cache-fill.js +86 -0
  324. package/dist/thread/runtime/avm2/classes.js +211 -0
  325. package/dist/thread/runtime/avm2/definitions.js +69 -0
  326. package/dist/thread/runtime/avm2/descriptors.js +5 -0
  327. package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
  328. package/dist/thread/runtime/avm2/domain-memory.js +75 -0
  329. package/dist/thread/runtime/avm2/domain.js +280 -0
  330. package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
  331. package/dist/thread/runtime/avm2/enumeration.js +393 -0
  332. package/dist/thread/runtime/avm2/errors.js +45 -0
  333. package/dist/thread/runtime/avm2/float-library.js +66 -0
  334. package/dist/thread/runtime/avm2/float.js +26 -0
  335. package/dist/thread/runtime/avm2/hooks.js +19 -0
  336. package/dist/thread/runtime/avm2/index.js +38 -0
  337. package/dist/thread/runtime/avm2/messages.js +177 -0
  338. package/dist/thread/runtime/avm2/method-factories.js +95 -0
  339. package/dist/thread/runtime/avm2/modules.js +105 -0
  340. package/dist/thread/runtime/avm2/names.js +248 -0
  341. package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
  342. package/dist/thread/runtime/avm2/natives/array.js +390 -0
  343. package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
  344. package/dist/thread/runtime/avm2/natives/case.js +88 -0
  345. package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
  346. package/dist/thread/runtime/avm2/natives/date.js +581 -0
  347. package/dist/thread/runtime/avm2/natives/define.js +130 -0
  348. package/dist/thread/runtime/avm2/natives/describe.js +351 -0
  349. package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
  350. package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
  351. package/dist/thread/runtime/avm2/natives/float.js +96 -0
  352. package/dist/thread/runtime/avm2/natives/index.js +64 -0
  353. package/dist/thread/runtime/avm2/natives/json.js +514 -0
  354. package/dist/thread/runtime/avm2/natives/number.js +162 -0
  355. package/dist/thread/runtime/avm2/natives/object.js +237 -0
  356. package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
  357. package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
  358. package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
  359. package/dist/thread/runtime/avm2/natives/shell.js +557 -0
  360. package/dist/thread/runtime/avm2/natives/sort.js +377 -0
  361. package/dist/thread/runtime/avm2/natives/string.js +132 -0
  362. package/dist/thread/runtime/avm2/natives/sync.js +821 -0
  363. package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
  364. package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
  365. package/dist/thread/runtime/avm2/natives/vector.js +406 -0
  366. package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
  367. package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
  368. package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
  369. package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
  370. package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
  371. package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
  372. package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
  373. package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
  374. package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
  375. package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
  376. package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
  377. package/dist/thread/runtime/avm2/number-strings.js +110 -0
  378. package/dist/thread/runtime/avm2/numbers.js +558 -0
  379. package/dist/thread/runtime/avm2/options.js +16 -0
  380. package/dist/thread/runtime/avm2/player-messages.js +550 -0
  381. package/dist/thread/runtime/avm2/property-cache.js +135 -0
  382. package/dist/thread/runtime/avm2/runtime.js +2644 -0
  383. package/dist/thread/runtime/avm2/traits.js +509 -0
  384. package/dist/thread/runtime/index.js +7 -0
  385. package/dist/web-worker.d.ts +2 -0
  386. package/dist/web-worker.d.ts.map +1 -0
  387. package/dist/web-worker.js +20 -0
  388. package/dist/web-worker.js.map +1 -0
  389. package/dist/websocket.d.ts +4 -0
  390. package/dist/websocket.d.ts.map +1 -0
  391. package/dist/websocket.js +27 -0
  392. package/dist/websocket.js.map +1 -0
  393. package/dist/workers.d.ts +35 -0
  394. package/dist/workers.d.ts.map +1 -0
  395. package/dist/workers.js +171 -0
  396. package/dist/workers.js.map +1 -0
  397. package/package.json +62 -3
  398. package/src/indexeddb.ts +227 -0
  399. package/src/node-worker.ts +13 -0
  400. package/src/node.ts +49 -0
  401. package/src/precompiled.ts +166 -0
  402. package/src/stage3d.ts +76 -0
  403. package/src/web-worker.ts +24 -0
  404. package/src/websocket.ts +32 -0
  405. package/src/workers.ts +255 -0
@@ -0,0 +1,224 @@
1
+ // flash.display.DisplayObjectContainer: children by index, as AS3 sees
2
+ // them, over the player's render-ordered list.
3
+ import { avm2 } from "../../../../runtime/index.js";
4
+ import { hitsOwnPoint } from "../../../display/bounds.js";
5
+ import { Container, MovieClip, pickWork } from "../../../display/display.js";
6
+ export function containerNatives(s) {
7
+ const natives = {};
8
+ // s.rt at call time: the natives are made before the runtime that holds them is.
9
+ const childOf = (v) => {
10
+ const d = v?.$display;
11
+ if (!d) {
12
+ throw s.rt.error("TypeError", 2007, "child");
13
+ }
14
+ return d;
15
+ };
16
+ const ownChild = (c, v) => {
17
+ const d = childOf(v);
18
+ if (d.parent !== c) {
19
+ throw s.rt.error("ArgumentError", 2025);
20
+ }
21
+ return d;
22
+ };
23
+ /**
24
+ * Where `d` is in `c`'s list, or -1. One the timeline is taking out is
25
+ * out of the list while its removal is told of, its parent still `c`.
26
+ */
27
+ const indexOf = (c, d) => d.parent === c ? c.children.indexOf(d) : -1;
28
+ const ownIndex = (c, d) => {
29
+ const i = indexOf(c, d);
30
+ if (i < 0) {
31
+ throw s.rt.error("ArgumentError", 2025);
32
+ }
33
+ return i;
34
+ };
35
+ const indexIn = (c, v, max = c.children.length - 1) => {
36
+ const i = s.rt.toInt(v);
37
+ if (i < 0 || i > max) {
38
+ throw s.rt.error("RangeError", 2006);
39
+ }
40
+ return i;
41
+ };
42
+ /** `d` put at `index` of `c`; `moved` if it is in `c`'s list already. */
43
+ const add = (c, v, d, index, moved) => {
44
+ // Adding an ancestor, or itself, would make a cycle.
45
+ for (let o = c; o; o = o.parent) {
46
+ if (o === d) {
47
+ throw s.rt.error("ArgumentError", 2150);
48
+ }
49
+ }
50
+ // Out of another parent first, with its events; within the same one, a move only. One the
51
+ // timeline is taking out of `c` is told of already.
52
+ if (d.parent && d.parent !== c) {
53
+ s.lifecycle.removing(d);
54
+ }
55
+ c.addChildAt(d, index);
56
+ if (!moved) {
57
+ s.lifecycle.added(d);
58
+ }
59
+ return v;
60
+ };
61
+ class DisplayObjectContainerNatives {
62
+ get numChildren() {
63
+ return this.$display.children.length;
64
+ }
65
+ /** Itself, if a clip, and every clip in it stopped, those not yet made alive too. */
66
+ stopAllMovieClips() {
67
+ const stop = (d) => {
68
+ if (d instanceof MovieClip) {
69
+ d.playing = false;
70
+ }
71
+ if (d instanceof Container) {
72
+ for (const child of d.children) {
73
+ stop(child);
74
+ }
75
+ }
76
+ };
77
+ stop(this.$display);
78
+ }
79
+ addChild(child) {
80
+ const c = this.$display;
81
+ const d = childOf(child);
82
+ // Already a child: moved to the top.
83
+ const moved = indexOf(c, d) >= 0;
84
+ return add(c, child, d, c.children.length - (moved ? 1 : 0), moved);
85
+ }
86
+ addChildAt(child, index) {
87
+ const c = this.$display;
88
+ const d = childOf(child);
89
+ const moved = indexOf(c, d) >= 0;
90
+ return add(c, child, d, indexIn(c, index, c.children.length - (moved ? 1 : 0)), moved);
91
+ }
92
+ removeChild(child) {
93
+ const c = this.$display;
94
+ s.lifecycle.remove(ownChild(c, child));
95
+ return child;
96
+ }
97
+ removeChildAt(index) {
98
+ const c = this.$display;
99
+ const d = c.children[indexIn(c, index)];
100
+ s.lifecycle.remove(d);
101
+ return d.object;
102
+ }
103
+ removeChildren(begin, end) {
104
+ const c = this.$display;
105
+ const n = c.children.length;
106
+ const from = begin === undefined ? 0 : s.rt.toInt(begin);
107
+ const to = end === undefined ? 0x7fffffff : s.rt.toInt(end);
108
+ // `end` is the last one removed. Its default, 0x7fffffff, stands for the last child, and
109
+ // with it a `begin` past the end removes nothing where Flash would otherwise throw.
110
+ const all = to === 0x7fffffff;
111
+ if (from < 0 || (!all && (to >= n || from > to))) {
112
+ throw s.rt.error("RangeError", 2006);
113
+ }
114
+ // Those there when it began, each from wherever a listener put it meanwhile, as Flash's
115
+ // are; one a listener took off already is left be.
116
+ for (const d of c.children.slice(from, all ? n : to + 1)) {
117
+ if (d.parent) {
118
+ s.lifecycle.remove(d);
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * What draws under a point of the stage, of this container's
124
+ * descendants: each visible one whose own drawing is there, within
125
+ * its masks, parents before their children, as the corpus's
126
+ * `displayobjectcontainer_getobjectsunderpoint` has Flash's; masks and
127
+ * objects without a face to a script are left out.
128
+ */
129
+ getObjectsUnderPoint(point) {
130
+ if (point === null || point === undefined) {
131
+ throw s.rt.error("TypeError", 2007, "point");
132
+ }
133
+ const x = s.rt.toNumber(s.rt.getProperty(point, s.rt.publicName("x")));
134
+ const y = s.rt.toNumber(s.rt.getProperty(point, s.rt.publicName("y")));
135
+ const found = [];
136
+ const stage = s.stage;
137
+ if (!stage) {
138
+ return s.rt.array(found);
139
+ }
140
+ const visit = (c) => {
141
+ for (const d of c.children) {
142
+ if (!d.visible || d.clipDepth > 0 || d.maskOf) {
143
+ continue;
144
+ }
145
+ if (d.object && hitsOwnPoint(d, x, y, stage)) {
146
+ found.push(d.object);
147
+ }
148
+ if (d instanceof Container) {
149
+ visit(d);
150
+ }
151
+ }
152
+ };
153
+ visit(this.$display);
154
+ return s.rt.array(found);
155
+ }
156
+ /** Whether a security sandbox hides any of them: the player has none. */
157
+ areInaccessibleObjectsUnderPoint(point) {
158
+ if (point === null || point === undefined) {
159
+ throw s.rt.error("TypeError", 2007, "point");
160
+ }
161
+ return false;
162
+ }
163
+ getChildAt(index) {
164
+ const c = this.$display;
165
+ return c.children[indexIn(c, index)].object;
166
+ }
167
+ getChildIndex(child) {
168
+ const c = this.$display;
169
+ return ownIndex(c, childOf(child));
170
+ }
171
+ setChildIndex(child, index) {
172
+ const c = this.$display;
173
+ const d = childOf(child);
174
+ ownIndex(c, d);
175
+ c.addChildAt(d, indexIn(c, index));
176
+ }
177
+ getChildByName(name) {
178
+ if (name === null || name === undefined) {
179
+ throw s.rt.error("TypeError", 2007, "name");
180
+ }
181
+ return this.$display.children.find((d) => d.name === name)?.object ?? null;
182
+ }
183
+ contains(child) {
184
+ const c = this.$display;
185
+ for (let o = child?.$display ?? null; o; o = o.parent) {
186
+ if (o === c) {
187
+ return true;
188
+ }
189
+ }
190
+ return false;
191
+ }
192
+ swapChildren(a, b) {
193
+ const c = this.$display;
194
+ const x = childOf(a);
195
+ ownIndex(c, x);
196
+ const y = childOf(b);
197
+ ownIndex(c, y);
198
+ c.swapChildren(x, y);
199
+ }
200
+ swapChildrenAt(a, b) {
201
+ const c = this.$display;
202
+ c.swapChildren(c.children[indexIn(c, a)], c.children[indexIn(c, b)]);
203
+ }
204
+ get mouseChildren() {
205
+ return this.$mouseChildren ?? true;
206
+ }
207
+ set mouseChildren(v) {
208
+ this.$mouseChildren = !!v;
209
+ pickWork.changes++;
210
+ }
211
+ // The stage's is always true: setting it sets the root's, removed or not, as Ruffle has it.
212
+ get tabChildren() {
213
+ return this === s.stage?.object ? true : (this.$tabChildren ?? true);
214
+ }
215
+ set tabChildren(v) {
216
+ const target = this === s.stage?.object ? s.root?.object : this;
217
+ if (target) {
218
+ target.$tabChildren = !!v;
219
+ }
220
+ }
221
+ }
222
+ avm2.registerNativeClass(natives, "flash.display::DisplayObjectContainer", DisplayObjectContainerNatives);
223
+ return natives;
224
+ }
@@ -0,0 +1,345 @@
1
+ import { avm2 } from "../../../../runtime/index.js";
2
+ import { BitmapStore } from "../../../bitmap/bitmap.js";
3
+ import { CONTENT, Container, ShapeObject } from "../../../display/display.js";
4
+ import { Drawing } from "../../../display/drawing.js";
5
+ import { concat } from "../../../display/geometry.js";
6
+ import { graphicsData } from "../../../display/graphicsdata.js";
7
+ import { CHECK, COPY, kernelOfShader, shaderUse } from "./shaders.js";
8
+ const TWIPS = 20;
9
+ const CAPS = { round: 0, none: 1, square: 2 };
10
+ const JOINTS = { round: 0, bevel: 1, miter: 2 };
11
+ /** Which way round a triangle drawTriangles drops: 1 clockwise on a y-down screen, -1 the other. */
12
+ const CULLING = { none: 0, positive: 1, negative: -1 };
13
+ const IDENTITY = { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 };
14
+ // Made once: a drawing may begin a bitmap fill for each triangle it draws on every frame.
15
+ const MATRIX_NAMES = ["a", "b", "c", "d", "tx", "ty"].map((k) => avm2.qname(avm2.publicNs, k));
16
+ /** The gradients begun with no matrix, which read back with Flash's default for one. */
17
+ const unplaced = new WeakSet();
18
+ /** A Graphics object for `display`, made once. */
19
+ export function graphicsOf(s, o) {
20
+ if (!o.$graphics) {
21
+ const g = s.rt.construct(s.rt.classNamed("flash.display::Graphics"));
22
+ g.$display = o.$display;
23
+ o.$graphics = g;
24
+ }
25
+ return o.$graphics;
26
+ }
27
+ /** 0xAARRGGBB of a color and an alpha in [0, 1], the alpha a byte floored as Flash stores it (0.5 is 127). */
28
+ function argb(color, alpha) {
29
+ const a = Math.floor(Math.max(0, Math.min(1, Number(alpha))) * 255);
30
+ return ((a << 24) | (Number(color) & 0xffffff)) >>> 0;
31
+ }
32
+ export function graphicsNatives(s) {
33
+ const natives = {};
34
+ const drawing = (o) => {
35
+ o.$display.drawing ??= new Drawing();
36
+ o.$display.invalidate(CONTENT);
37
+ return o.$display.drawing;
38
+ };
39
+ const num = (v, fallback = 0) => {
40
+ const n = Number(v);
41
+ return Number.isNaN(n) ? fallback : n;
42
+ };
43
+ /** A shader as a fill takes it: TypeError 2007 for null, 2171 for no kernel, its inputs set (2164). */
44
+ const shaderOf = (shader, how = COPY) => {
45
+ if (shader === null || shader === undefined) {
46
+ throw s.rt.error("TypeError", 2007, "shader");
47
+ }
48
+ if (!kernelOfShader(shader)) {
49
+ throw s.rt.error("ArgumentError", 2171);
50
+ }
51
+ return shaderUse(s, shader, 0, how);
52
+ };
53
+ /** A fill's matrix from an AS3 Matrix, or the identity for none. */
54
+ const matrixFrom = (matrix) => {
55
+ if (matrix === null || matrix === undefined) {
56
+ return { ...IDENTITY };
57
+ }
58
+ const rt = s.rt;
59
+ const m = matrix;
60
+ return {
61
+ a: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[0])),
62
+ b: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[1])),
63
+ c: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[2])),
64
+ d: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[3])),
65
+ tx: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[4])),
66
+ ty: rt.toNumber(rt.getProperty(m, MATRIX_NAMES[5])),
67
+ };
68
+ };
69
+ /** The data of `display`'s drawing, a timeline shape's too, and with `recurse` its children's, each through `m`. */
70
+ const gather = (display, m, recurse, out) => {
71
+ if (display instanceof ShapeObject) {
72
+ graphicsData(display.drawn()?.layers ?? [], m, unplaced, out);
73
+ }
74
+ graphicsData(display.drawing?.layers ?? [], m, unplaced, out);
75
+ if (recurse && display instanceof Container) {
76
+ for (const child of display.children) {
77
+ gather(child, concat(child.matrix, m), true, out);
78
+ }
79
+ }
80
+ };
81
+ const matrixOf = (m) => s.rt.construct(s.rt.classNamed("flash.geom::Matrix"), m.a, m.b, m.c, m.d, m.tx, m.ty);
82
+ const vectorOf = (type, values) => {
83
+ const o = s.rt.resolve(s.rt.vector(type)).$it.instance();
84
+ o.$a = values;
85
+ return o;
86
+ };
87
+ const objectOf = (datum) => {
88
+ const make = (name, ...args) => s.rt.construct(s.rt.classNamed(`flash.display::${name}`), ...args);
89
+ switch (datum.type) {
90
+ case "solid":
91
+ return make("GraphicsSolidFill", datum.color, datum.alpha);
92
+ case "gradient":
93
+ return make("GraphicsGradientFill", datum.radial ? "radial" : "linear", s.rt.array(datum.colors), s.rt.array(datum.alphas), s.rt.array(datum.ratios), matrixOf(datum.matrix), datum.spread, datum.linearRgb ? "linearRGB" : "rgb", datum.focal);
94
+ case "bitmap": {
95
+ // A copy of its pixels, not the BitmapData it was begun with, as adl gives.
96
+ const store = datum.image instanceof BitmapStore ? datum.image : null;
97
+ let bitmap = null;
98
+ if (store) {
99
+ bitmap = s.rt.construct(s.rt.classNamed("flash.display::BitmapData"), store.width, store.height, store.transparent, 0);
100
+ bitmap.$store = store.clone();
101
+ }
102
+ return make("GraphicsBitmapFill", bitmap, matrixOf(datum.matrix), true, false);
103
+ }
104
+ case "path":
105
+ return make("GraphicsPath", vectorOf("int", datum.commands), vectorOf("Number", datum.data), datum.winding);
106
+ default:
107
+ return make("GraphicsEndFill");
108
+ }
109
+ };
110
+ class GraphicsNatives {
111
+ /** readGraphicsData's: what the drawing holds, in Flash's form, onto `target`. */
112
+ "flash.display:Graphics::nativeGetGraphicsData"(target, recurse) {
113
+ const out = [];
114
+ gather(this.$display, IDENTITY, !!recurse, out);
115
+ const list = target.$a;
116
+ for (const datum of out) {
117
+ list.push(objectOf(datum));
118
+ }
119
+ }
120
+ clear() {
121
+ drawing(this).clear();
122
+ }
123
+ beginFill(color, alpha = 1) {
124
+ drawing(this).beginFill({ type: "solid", color: argb(color, alpha) });
125
+ }
126
+ /** Recorded as a shape's gradient is drawn: its first stop's color, until gradients draw. */
127
+ /**
128
+ * As adl draws one: arrays of different lengths, or a ratio outside 0
129
+ * to 255, draw nothing; no stops draw black; past 16 stops are left
130
+ * out; an unknown spread or interpolation is pad or RGB; null alphas
131
+ * and ratios are opaque and even, null colours TypeError 2007.
132
+ */
133
+ beginGradientFill(type, colors, alphas, ratios, matrix = null, spreadMethod = "pad", interpolationMethod = "rgb", focalPointRatio = 0) {
134
+ const kind = s.rt.toString(type);
135
+ if (kind !== "linear" && kind !== "radial") {
136
+ throw s.rt.error("ArgumentError", 2008, "type");
137
+ }
138
+ if (colors === null || colors === undefined) {
139
+ throw s.rt.error("TypeError", 2007, "colors");
140
+ }
141
+ // Null alphas are opaque, and null ratios spread evenly, floor(255 k / (n - 1)), as adl draws them.
142
+ const array = (v) => v.$a ?? [];
143
+ const c = array(colors);
144
+ const a = alphas === null || alphas === undefined ? c.map(() => 1) : array(alphas);
145
+ const r = ratios === null || ratios === undefined
146
+ ? c.map((_, k) => (c.length > 1 ? Math.floor((255 * k) / (c.length - 1)) : 0))
147
+ : array(ratios).map((v) => Math.trunc(s.rt.toNumber(v)));
148
+ if (a.length !== c.length || r.length !== c.length || r.some((v) => !(v >= 0 && v <= 255))) {
149
+ drawing(this).beginFill({ type: "solid", color: 0 });
150
+ return;
151
+ }
152
+ const spread = s.rt.toString(spreadMethod);
153
+ const fill = {
154
+ type: "gradient",
155
+ radial: kind === "radial",
156
+ focal: kind === "radial" ? num(focalPointRatio) : 0,
157
+ stops: c.slice(0, 16).map((color, i) => ({ ratio: r[i], color: argb(color, a[i]) })),
158
+ spread: spread === "reflect" ? 1 : spread === "repeat" ? 2 : 0,
159
+ linearRgb: s.rt.toString(interpolationMethod) === "linearRGB",
160
+ matrix: matrixFrom(matrix),
161
+ };
162
+ if (matrix === null || matrix === undefined) {
163
+ unplaced.add(fill);
164
+ }
165
+ drawing(this).beginFill(fill);
166
+ }
167
+ /** The BitmapData itself, not a copy: the fill shows its later changes, the shape a view of its store. */
168
+ beginBitmapFill(bitmap, matrix = null, repeat = true, smooth = false) {
169
+ if (bitmap === null || bitmap === undefined) {
170
+ throw s.rt.error("TypeError", 2007, "bitmap");
171
+ }
172
+ const store = bitmap.$store;
173
+ if (!store) {
174
+ throw s.rt.error("ArgumentError", 2015);
175
+ }
176
+ store.views.add(this.$display.ref);
177
+ drawing(this).beginFill({
178
+ type: "image",
179
+ image: store,
180
+ matrix: matrixFrom(matrix),
181
+ repeat: !!repeat,
182
+ smooth: !!smooth,
183
+ });
184
+ }
185
+ /**
186
+ * A fill of the kernel's pixels, its parameters and images taken as they
187
+ * are now: the shape's points through the matrix's inverse are its
188
+ * coordinates, a pixel's centre each, as adl draws it.
189
+ */
190
+ beginShaderFill(shader, matrix = null) {
191
+ drawing(this).beginFill({
192
+ type: "shader",
193
+ use: shaderOf(shader),
194
+ matrix: matrixFrom(matrix),
195
+ });
196
+ }
197
+ endFill() {
198
+ drawing(this).endFill();
199
+ }
200
+ lineStyle(thickness = Number.NaN, color = 0, alpha = 1, pixelHinting = false, scaleMode = "normal", caps = null, joints = null, miterLimit = 3) {
201
+ const t = Number(thickness);
202
+ if (Number.isNaN(t)) {
203
+ drawing(this).lineStyle(null);
204
+ return;
205
+ }
206
+ const cap = CAPS[String(caps ?? "round")] ?? 0;
207
+ const line = {
208
+ width: Math.round(Math.max(0, Math.min(255, t)) * TWIPS),
209
+ color: argb(color, alpha),
210
+ startCap: cap,
211
+ endCap: cap,
212
+ join: JOINTS[String(joints ?? "round")] ?? 0,
213
+ miterLimit: num(miterLimit, 3),
214
+ noHScale: scaleMode === "none" || scaleMode === "vertical",
215
+ noVScale: scaleMode === "none" || scaleMode === "horizontal",
216
+ pixelHinting: !!pixelHinting,
217
+ noClose: false,
218
+ fill: null,
219
+ };
220
+ drawing(this).lineStyle(line);
221
+ }
222
+ lineGradientStyle() {
223
+ // The line keeps the color lineStyle gave it, as a shape's gradient line does.
224
+ }
225
+ lineBitmapStyle() {
226
+ // As lineGradientStyle.
227
+ }
228
+ /** Checked as adl checks it; the line keeps its colour, as a gradient's does. */
229
+ lineShaderStyle(shader) {
230
+ shaderOf(shader, CHECK);
231
+ }
232
+ drawRect(x, y, w, h) {
233
+ drawing(this).drawRect(num(x), num(y), num(w), num(h));
234
+ }
235
+ drawRoundRect(x, y, w, h, ew, eh = Number.NaN) {
236
+ const e = num(ew);
237
+ drawing(this).drawRoundRect(num(x), num(y), num(w), num(h), e, num(eh, e));
238
+ }
239
+ drawRoundRectComplex(x, y, w, h, tl, tr, bl, br) {
240
+ const r = (v) => {
241
+ const c = Math.min(Math.abs(num(v)), Math.abs(num(w)) / 2, Math.abs(num(h)) / 2);
242
+ return [c, c];
243
+ };
244
+ drawing(this).drawRoundRectComplex(num(x), num(y), num(w), num(h), r(tl), r(tr), r(bl), r(br));
245
+ }
246
+ moveTo(x, y) {
247
+ drawing(this).moveTo(num(x), num(y));
248
+ }
249
+ lineTo(x, y) {
250
+ drawing(this).lineTo(num(x), num(y));
251
+ }
252
+ curveTo(cx, cy, x, y) {
253
+ drawing(this).curveTo(num(cx), num(cy), num(x), num(y));
254
+ }
255
+ cubicCurveTo(c1x, c1y, c2x, c2y, x, y) {
256
+ drawing(this).cubicCurveTo(num(c1x), num(c1y), num(c2x), num(c2y), num(x), num(y));
257
+ }
258
+ /** As Flash checks: the winding one of its two, and the data's count even when there are commands (ArgumentError #2008, #2004). */
259
+ drawPath(commands, data, winding = "evenOdd") {
260
+ if (winding !== "evenOdd" && winding !== "nonZero") {
261
+ throw s.rt.error("ArgumentError", 2008, "winding");
262
+ }
263
+ const c = (commands?.$a ?? []).map((v) => Number(v));
264
+ const d = (data?.$a ?? []).map((v) => Number(v));
265
+ if (c.length && d.length % 2) {
266
+ throw s.rt.error("ArgumentError", 2004);
267
+ }
268
+ drawing(this).drawPath(c, d, winding);
269
+ }
270
+ /**
271
+ * As Flash checks: the vertices in pairs, three of them a triangle
272
+ * without indices, indices in threes, and uvtData two or three a vertex,
273
+ * each ArgumentError #2004; then the culling one of its three, #2008.
274
+ * Null vertices draw nothing, and an index past the vertices ends the
275
+ * triangles there, without an error.
276
+ */
277
+ drawTriangles(vertices, indices = null, uvtData = null, culling = "none") {
278
+ if (vertices === null || vertices === undefined) {
279
+ return;
280
+ }
281
+ // The vectors' own storage, read, not copied: a Vector.<Number>'s and a Vector.<int>'s hold
282
+ // numbers alone, and a 3D engine passes thousands of them every frame.
283
+ const numbers = (v) => v.$a;
284
+ const given = numbers(vertices);
285
+ let coordinates = given;
286
+ // Flash keeps a point in twips as an int: NaN, or one past an int's range, is its least.
287
+ for (let i = 0; i < coordinates.length; i++) {
288
+ const x = coordinates[i] * TWIPS;
289
+ if (!(x >= -2147483648 && x <= 2147483647)) {
290
+ if (coordinates === given) {
291
+ coordinates = given.slice();
292
+ }
293
+ coordinates[i] = -2147483648 / TWIPS;
294
+ }
295
+ }
296
+ const n = coordinates.length / 2;
297
+ const order = indices === null || indices === undefined ? null : numbers(indices);
298
+ const uvt = uvtData === null || uvtData === undefined ? null : numbers(uvtData);
299
+ if (coordinates.length % 2 ||
300
+ (order ? order.length % 3 : n % 3) ||
301
+ (uvt && uvt.length !== n * 2 && uvt.length !== n * 3)) {
302
+ throw s.rt.error("ArgumentError", 2004);
303
+ }
304
+ const cull = typeof culling === "string" && Object.hasOwn(CULLING, culling)
305
+ ? CULLING[culling]
306
+ : undefined;
307
+ if (cull === undefined) {
308
+ throw s.rt.error("ArgumentError", 2008, "culling");
309
+ }
310
+ // Three a vertex, t 1 where Flash was given none.
311
+ let full = uvt;
312
+ if (uvt && uvt.length !== n * 3) {
313
+ full = new Array(n * 3);
314
+ for (let v = 0; v < n; v++) {
315
+ full[3 * v] = uvt[2 * v];
316
+ full[3 * v + 1] = uvt[2 * v + 1];
317
+ full[3 * v + 2] = 1;
318
+ }
319
+ }
320
+ drawing(this).drawTriangles(coordinates, order, full, cull);
321
+ }
322
+ copyFrom(other) {
323
+ const source = other?.$display?.drawing;
324
+ if (source) {
325
+ drawing(this).copyFrom(source);
326
+ // Its BitmapData fills watched as the other's are.
327
+ for (const layer of source.layers) {
328
+ for (const { fill } of layer.fills) {
329
+ if (fill.type === "image" && fill.image instanceof BitmapStore) {
330
+ fill.image.views.add(this.$display.ref);
331
+ }
332
+ }
333
+ for (const mesh of layer.meshes ?? []) {
334
+ mesh.image.views.add(this.$display.ref);
335
+ }
336
+ }
337
+ }
338
+ else {
339
+ drawing(this).clear();
340
+ }
341
+ }
342
+ }
343
+ avm2.registerNativeClass(natives, "flash.display::Graphics", GraphicsNatives);
344
+ return natives;
345
+ }
@@ -0,0 +1,87 @@
1
+ // flash.display.InteractiveObject: what it keeps about input, kept as
2
+ // fields with Flash's defaults until input reaches the player.
3
+ import { avm2 } from "../../../../runtime/index.js";
4
+ import { pickWork } from "../../../display/display.js";
5
+ import { tabEnabledDefault } from "../../../input/keyboard.js";
6
+ import { displayOf } from "./DisplayObject.js";
7
+ /**
8
+ * `v` as an instance of the class `qualified` names, as Flash coerces a
9
+ * native's argument to its declared type: null for null and undefined,
10
+ * TypeError #1034 for anything else that is not one.
11
+ */
12
+ export function coerceArgument(s, v, qualified) {
13
+ if (v === null || v === undefined) {
14
+ return null;
15
+ }
16
+ const cls = s.rt.classNamed(qualified);
17
+ if (s.rt.isInstance(v, cls)) {
18
+ return v;
19
+ }
20
+ throw s.rt.error("TypeError", 1034, s.rt.describe(v), cls.$it.name);
21
+ }
22
+ export function interactiveObjectNatives(s) {
23
+ const natives = {};
24
+ class InteractiveObjectNatives {
25
+ get tabEnabled() {
26
+ return this.$tabEnabled ?? tabEnabledDefault(displayOf(this));
27
+ }
28
+ set tabEnabled(v) {
29
+ this.$tabEnabled = !!v;
30
+ }
31
+ get tabIndex() {
32
+ return this.$tabIndex ?? -1;
33
+ }
34
+ set tabIndex(v) {
35
+ this.$tabIndex = Number(v) | 0;
36
+ }
37
+ get focusRect() {
38
+ return this.$focusRect ?? null;
39
+ }
40
+ set focusRect(v) {
41
+ this.$focusRect = v;
42
+ }
43
+ get mouseEnabled() {
44
+ return this.$mouseEnabled ?? true;
45
+ }
46
+ set mouseEnabled(v) {
47
+ this.$mouseEnabled = !!v;
48
+ pickWork.changes++;
49
+ }
50
+ get doubleClickEnabled() {
51
+ return this.$doubleClickEnabled ?? false;
52
+ }
53
+ set doubleClickEnabled(v) {
54
+ this.$doubleClickEnabled = !!v;
55
+ }
56
+ get accessibilityImplementation() {
57
+ return this.$accessibility ?? null;
58
+ }
59
+ set accessibilityImplementation(v) {
60
+ this.$accessibility = v;
61
+ }
62
+ get softKeyboardInputAreaOfInterest() {
63
+ return this.$softKeyboardArea ?? null;
64
+ }
65
+ set softKeyboardInputAreaOfInterest(v) {
66
+ this.$softKeyboardArea = v;
67
+ }
68
+ get needsSoftKeyboard() {
69
+ return this.$needsSoftKeyboard ?? false;
70
+ }
71
+ set needsSoftKeyboard(v) {
72
+ this.$needsSoftKeyboard = !!v;
73
+ }
74
+ /** Read when the host opens the SWF's context menu. */
75
+ get contextMenu() {
76
+ return this.$contextMenu ?? null;
77
+ }
78
+ set contextMenu(v) {
79
+ this.$contextMenu = coerceArgument(s, v, "flash.display::NativeMenu");
80
+ }
81
+ requestSoftKeyboard() {
82
+ return false;
83
+ }
84
+ }
85
+ avm2.registerNativeClass(natives, "flash.display::InteractiveObject", InteractiveObjectNatives);
86
+ return natives;
87
+ }