Commit Graph

280 Commits

Author SHA1 Message Date
Aaron Hill f9fc4b3179
avm2: Store interfaces from superclases/superinterfaces in ClassObject (#9728) 2023-02-25 23:57:50 +00:00
Adrian Wielgosik 55c59da6ac avm2: Convert TextFormat to AS 2023-02-25 23:55:43 +01:00
Adrian Wielgosik 35120e9fdc avm2: Convert Graphics to AS 2023-02-25 23:55:43 +01:00
Aaron Hill 82a3f473d9
avm2: Move some class definitions after playerglobal is loaded 2023-02-24 16:08:29 -06:00
Aaron Hill 24e231ae06
avm2: Convert TextField to AS 2023-02-24 16:08:29 -06:00
Aaron Hill bc240db517
avm2: Convert SimpleButton to AS 2023-02-24 16:08:29 -06:00
Aaron Hill d31c686360
avm2: Convert MovieClip to AS 2023-02-24 16:08:29 -06:00
Aaron Hill aa7dc52b82
avm2: Convert Sprite to AS 2023-02-24 16:08:28 -06:00
Aaron Hill d996aecb04
avm2: Convert Shape to AS 2023-02-24 16:08:28 -06:00
Aaron Hill 8831042e8f
avm2: Convert LoaderInfo to AS 2023-02-24 16:08:28 -06:00
Aaron Hill be16286407
avm2: Convert several flash.display and flash.events classes to AS
These classes all reference each other, so it's difficult to convert
them individually.
2023-02-24 16:08:28 -06:00
Aaron Hill 6ce7bd3277
avm2: Convert EventDispatcher and IEventDispatcher to AS 2023-02-24 16:08:28 -06:00
EmperorBale 5bc3c696b5 avm2: Ignore duplicate definitions 2023-02-24 11:55:58 -08:00
Aaron Hill f1b0247de7 avm2: Remove install_trait_late 2023-02-22 14:41:01 -06:00
Aaron Hill c258423dc3 avm2: Allow resolving interfaces before ClassObjects are available
The Adobe Animate compiler can emit a 'newclass' opcode for
a concrete class before the 'newclass' opcodes for the interfaces
it implements. As a result, we cannot rely on looking up an interface
`ClassObject` when resolving a class's interfaces.

We now store a map of exported classes in `Domain`, and use this
to lookup interfaces before their `ClassObject`s have been created.

Additionally, `link_interfaces` was failing to consider superinterfaces,
which meant that methods from superinterfaces were not being copied
into the vtable. I've fixed this along with the other changes.
2023-02-22 14:41:01 -06:00
Lord-McSweeney 559ec8356d
Port Video to Actionscript 2023-02-16 22:46:11 +02:00
Nathan Adams 94fdc8bdb5 avm2: Support older DoAbc tag (72) 2023-02-14 08:51:45 +01:00
Nathan Adams 69f93f926e swf: Rename DoAbc to DoAbc2 2023-02-14 08:51:45 +01:00
Adrian Wielgosik e0e653e463 avm2: make Namespace a GC type 2023-02-12 17:49:14 +01:00
Aaron Hill 4b76d1b32a
core: Support using URLVariables as a POST request body (#9489)
This is needed by the Newgrounds API. We don't have the ability
to make fake requests to HTTP urls in our test frameworks,
so I haven't added any tests for this. However, I tested locally
that this allows the Newgrounds API to work (and got a medal
in Cloud Wars).
2023-02-11 00:18:10 +00:00
Nathan Adams ac9b6e3ecb avm2: Mark Dictionary(true) and TimerEvent.updateAfterEvent() as stubs 2023-02-07 20:34:59 +01:00
Nathan Adams bdbf54ecd4 core: Added ability to mark stubs inside actionscript 2023-02-07 20:34:59 +01:00
Aaron Hill 1b71e288fd Remove 'gc_context lifetime
The latest `gc-arena` makes this unnecessary - we can just
use our `'a` lifetime for `MutationContext`
2023-01-06 19:20:39 -05:00
Adrian Wielgosik 7a09dd5639 avm2: Convert FrameLabel to AS3, remove define_indirect_properties 2022-12-22 00:45:02 +01:00
Adrian Wielgosik e6e9c9edc2 avm2: Convert Dictionary to AS3 2022-12-21 23:56:48 +01:00
Adrian Wielgosik e90d595cb3 avm2: Convert SharedObject to AS3 2022-12-21 22:21:23 +01:00
Adrian Wielgosik f3ebb0c297 avm2: Convert JSON class to AS3 2022-12-21 22:21:23 +01:00
Adrian Wielgosik 24a6f74b3c avm2: Convert Proxy to AS3 2022-12-19 18:25:25 +01:00
relrelb bd9078addf chore: Fix `clippy::uninlined_format_args` lints 2022-12-15 08:59:38 +02:00
Adrian Wielgosik 92998e2c91 avm2: Translate ExternalInterface to AS 2022-12-14 17:57:45 +01:00
Adrian Wielgosik 5e115ed038 avm2: Stub more parts of LocalConnection and UrlRequest 2022-12-13 10:22:20 +01:00
Aaron Hill b8745f0ff1 avm2: Partially implement Stage3D for wgpu backend
This PR implements core 'stage3D' APIs. We are now able
to render at least two demos from the Context3D docs - a simple
triangle render, and a rotating cube.

Implemented in this PR:
* Stage3D access and Context3D creation
* IndexBuffer3D and VertexBuffer3D creation, uploading, and usage
* Program3D uploading and usage (via `naga-agal`)
* Context3D: configureBackBuffer, clear, drawTriangles, and present

Not yet implemented:
* Any 'dispose()' methods
* Depth and stencil buffers
* Context3D texture apis
* Scissor rectangle

General implementation strategy:

A new `Object` variant is added for each of the Stage3D objects
(VertexBuffer3D, Program3D, etc). This stores a handle to the
parent `Context3D`, and (depending on the object) a handle
to the underlying native resource, via `Rc<dyn
SomeRenderBackendTrait>`).

Calling methods on Context3D does not usually result in an immediate
call to a `wgpu` method. Instead, we queue up commands in our
`Context3D` instance, and execute them all on a call to `present`.
This avoids some nasty wgpu lifetime issues, and is very similar
to the approah we use for normal rendering.

The actual rendering happens on a `Texture`, with dimensions
determined by `createBackBuffer`. During 'Stage' rendering,
we render all of these Stage3D textures *behind* the normal
stage (but in front of the overall stage background color).
2022-11-25 21:43:00 -07:00
Aaron Hill 4b8cd45f4b
avm2: Partially implement StaticText (#8343)
This is linked to the legacy DisplayObject::Text, which can
only be created by Flash CS6 (but is allowed in AVM2 swfs).

The 'StaticText' class cannot be constructed from ActionScript.
To support this, I've added support for native initializers to
playerglobal. This allows us to throw an exception in the
ActionScript constructor in Test.as, and do nothing in the native
intiializer (so that we can construct it from a DisplayObject).

I've left StaticText.text unimplemented for now, since it will require
dealing with Glyphs

Co-authored-by: kmeisthax <dcrkid@yahoo.com>
2022-11-23 18:30:47 -05:00
David Wendt 1efa29baa6 core: Add methods for introspecting text metrics on an `EditText`. 2022-11-20 17:13:48 -07:00
Aaron Hill feda41d6c1 avm2: Add LoaderInfo.uncaughtErrorEvents
We don't currently fire any events, but we store the object
so that listeners will be correctly registered.
2022-10-12 17:26:14 -05:00
relrelb 5c94714363 avm2: Port `flash.ui.Keyboard` to ActionScript 2022-10-07 12:27:56 +03:00
Tal Hayon a8b96b676a avm2: Add More BitMapData methods
This also fixes a small bug in copyChannels
2022-10-06 18:53:06 -06:00
relrelb cc531ff7db avm2: `playerglobal.swf` should be valid 2022-09-26 19:51:38 +03:00
relrelb e3e4aeb248 avm2: Throw `flash.errors.IOError` from `ByteArray`
Instead of propagating the underlying compression library errors.

Also, make `ByteArray.deflate` and `ByteArray.inflate` pure-ActionScript
methods that call into the native `ByteArray.compress` and `ByteArray.uncompress`
native methods, respectively.
2022-09-26 19:51:38 +03:00
relrelb 95de87ad0a avm2: Throw `VerifyError` for invalid ABC files 2022-09-26 19:51:38 +03:00
relrelb c9ca7e2095 avm2: Port `flash.ui.Mouse` to ActionScript 2022-09-25 16:50:03 +03:00
relrelb c532d70844 avm2: Port `flash.net.ObjectEncoding` to ActionScript
Along with the `flash.net.IDynamicPropertyOutput` and `flash.net.IDynamicPropertyWriter`
interfaces.
2022-09-25 00:36:31 +03:00
EmperorBale a17352a01a avm2: Switch XML & XMLList to actionscript 2022-09-22 15:18:23 -07:00
EmperorBale 6dea1fa264 avm2: Implement TypeError 2022-09-22 15:18:23 -07:00
Aaron Hill 93b7de2fe6 avm2: Use custom Error instead of std::error::Error 2022-09-21 12:37:37 -05:00
EmperorBale e1eaa9770a avm2: Switch ByteArray to AS
avm2: Fix ByteArray

avm2: Implement ByteArray.defaultObjectEncoding

avm2: Rename ByteArray allocator
2022-09-17 12:31:43 -07:00
David Wendt 85cf383c84 core: Allow callers of `decode_tags` to flag when they would like decoding to stop 2022-09-15 19:14:41 -06:00
David Wendt 4e9bb3a173 core: Implement chunked decoding infrastructure.
We currently do not actually enforce a decoding limit; just add the functionality necessary to do so.
2022-09-15 19:14:41 -06:00
Aaron Hill 3e65a554fa avm2: Add 'gc lifetime parameter to avm2::Error 2022-09-13 18:55:08 -05:00
Adrian Wielgosik 1c940009a1 avm2: Convert Capabilities, System to AS 2022-09-12 02:03:34 +02:00