Commit Graph

6919 Commits

Author SHA1 Message Date
Aaron Hill 2ce6679643
avm2: Store PropertyClass in `VtableData`
Calling `get_trait` copies the returned `Property`, so the caching
we performed in `PropertyClass` was never actually getting used.

Instead, we now store our `PropertyClass` values in a `Vec`
indexed by slot id. `set_property` and `init_property` now perform
coercions by going through the `VTable,` which writes the updated
`PropertyClass` back into the array.
2022-07-30 17:58:50 -07:00
Calvin304 01a0d702af avm2: Fix parsing of methods with more than 127 arguments
this change follows section 4.5 of https://www.adobe.com/content/dam/acom/en/devnet/pdf/avm2overview.pdf (dead link, use an archive)
2022-07-30 16:52:56 -07:00
Adrian Wielgosik 5be7f425f0 avm2: Migrate all Events to AS, remove EventData. 2022-07-30 12:34:12 -07:00
Mike Welsh 9e96b075d1 ci: Build web tests with --all-features 2022-07-30 19:07:39 +02:00
Mike Welsh 8c4dcf29ee web: Rollback to web-sys 0.3.58 2022-07-30 19:07:39 +02:00
Mike Welsh d092861c15 chore: Appease clippy
Fix `assertions_on_result_states` lints.
2022-07-29 19:32:41 -07:00
relrelb e500885a37 tests: Add `biturshift`
Also add a SWF8 variant to test its special behavior.
2022-07-29 14:44:21 -07:00
relrelb d01a03b4ca avm1: Correct `ActionURShift`
In SWF8 and SWF9, unsigned right shift actually has a signed result.
2022-07-29 14:44:21 -07:00
Ali MJ Al-Nasrawy 67fbc84ba3 don't rely on a rustc bug
context: https://github.com/rust-lang/rust/pull/98835
2022-07-29 15:27:46 -05:00
Aaron Hill 0d3e046b0e
avm2: Allow classes to reference their own type from a static variable
FP allows code like
`class Foo { static var INSTANCE: Foo = new Foo(); }`

However, this breaks our current property type coercion setup -
we cannot resolve the type `Foo` when setting the property `INSTANCE`,
since `Foo` is still being constructed.

Fortunately, we can perform this 'coercion' by just checking if
the object's class name and domain match the type name and domain
of the property.
2022-07-29 13:24:37 -07:00
relrelb 286dccc274 wgpu: Introduce `create_shape_pipeline`
It is essentially a unification of `create_color_pipeline`, `create_bitmap_pipeline`
and `create_gradient_pipeline`.
2022-07-29 11:00:48 -07:00
relrelb 2827be1f80 web: Remove some unused dependencies
Both `byteorder` and `fnv` are no longer used since #4273.
2022-07-29 09:42:04 -07:00
relrelb 79f36964b4 web: Bump wasm-bindgen to 0.2.82
As usual, also bump its helper crates (`js-sys`, `web-sys` and
`wasm-bindgen-futures`) to the latest versions.
2022-07-29 09:40:14 -07:00
Mike Welsh 30b185cbd4 audio: Reset symphonia decoder on loop 2022-07-28 21:25:33 -07:00
TÖRÖK Attila 7249db9052 audio: Fix crash/gap at the end of MP3 loops 2022-07-28 21:25:33 -07:00
Mike Welsh ffb57467eb audio: Add `AudioBackend::position_resolution`
This returns the approximate interval that the audio backend
updates the sound position information. This is used for syncing
animation to embedded "stream" audio tracks, and fixes some
stuttering in cases where the syncing was being too strict.
2022-07-28 21:25:33 -07:00
Mike Welsh 405c7194b0 audio: Remove `AudioBackend::preload_sound_stream` fns
No longer necessary now that web audio mixing is done on Rust side.
2022-07-28 21:25:33 -07:00
Mike Welsh 9fb46c71ad web: Use `AudioBufferSourceNode` for web audio
On web:
 * Mix audio on the Rust side, piping to `AudioBufferSourceNode`.
 * Decode MP3 using `symphonia`.
2022-07-28 21:25:33 -07:00
Aaron Hill f2deeb4de8 Fix typo 2022-07-27 22:38:49 -07:00
Aaron Hill 49d1a985ca avm2: Store `LoaderInfo` object on `MovieClip` and `Stage`
Previously, we would create a fresh `LoaderInfo` object each
time the `loaderInfo` property was accessed. However, users can
add event handlers to a `LoaderInfo`, so we need to create and
store exactly one `LoaderInfo` object per movie (and stage).

To verify that we're correctly handling the storage of `LoaderInfo`,
I've implemented firing the "init" event. This required a new
`on_frame_exit` hook, so that we can properly fire the "init"
event after the "exitFrame" for the initial frame but before
the "enterFrame" of the next frame.
2022-07-27 22:38:49 -07:00
dependabot[bot] df07f610e7 build(deps): bump clap from 3.2.14 to 3.2.15
Bumps [clap](https://github.com/clap-rs/clap) from 3.2.14 to 3.2.15.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/v3.2.15/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v3.2.14...v3.2.15)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 23:35:39 +03:00
dependabot[bot] 2d2dd17fab build(deps): bump embed-resource from 1.7.2 to 1.7.3
Bumps [embed-resource](https://github.com/nabijaczleweli/rust-embed-resource) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/nabijaczleweli/rust-embed-resource/releases)
- [Commits](https://github.com/nabijaczleweli/rust-embed-resource/compare/v1.7.2...v1.7.3)

---
updated-dependencies:
- dependency-name: embed-resource
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 23:35:27 +03:00
EmperorBale dde2895f98 wstr: Use `extend_from_slice` instead of manually pushing to output. 2022-07-25 10:52:56 -07:00
EmperorBale 026fcfff62 wstr: Ascii character detection in the UTF-8 decoder should use `<`, not `<=` 2022-07-25 10:52:56 -07:00
EmperorBale ae5e2be8a3 chore: Simplify code for UTF-8 decoding 2022-07-25 10:52:56 -07:00
EmperorBale df4e56f9dd chore: Appease clippy 2022-07-25 10:52:56 -07:00
EmperorBale 577f221db8 chore: Small cleanup 2022-07-25 10:52:56 -07:00
EmperorBale d14b868c4f core: Simplify new_utf8_bytes 2022-07-25 10:52:56 -07:00
EmperorBale ea79f98eb5 wstr: All characters should be decoded before being pushed to the wstring buffer 2022-07-25 10:52:56 -07:00
EmperorBale efa8dbbc40 chore: Rename AvmUtf8Decoder to DecodeAvmUtf8 2022-07-25 10:52:56 -07:00
EmperorBale dda97dbccb wstr: Fix small logic error when decoding UTF-8 2022-07-25 10:52:56 -07:00
EmperorBale bc31014f93 chore: Better organization 2022-07-25 10:52:56 -07:00
EmperorBale 67dd53ac9f chore: Clippy 2022-07-25 10:52:56 -07:00
EmperorBale 19605cff45 chore: Add more comments 2022-07-25 10:52:56 -07:00
EmperorBale 6968969381 tests: Add test for invalid UTF8 sequences 2022-07-25 10:52:56 -07:00
EmperorBale a2261cd556 chore: Formatting 2022-07-25 10:52:56 -07:00
EmperorBale ba2416c126 core: Multibyte codepoints cannot be in ascii range 2022-07-25 10:52:56 -07:00
EmperorBale d6604f538c wstr: Implement custom UTF-8 decoding routine 2022-07-25 10:52:56 -07:00
EmperorBale 6dab6ca557 avm2: Update set_data to convert bytes to string lossily 2022-07-25 10:52:56 -07:00
EmperorBale d79c68bbcd core: Implement AvmString::new_utf8_bytes_lossy 2022-07-25 10:52:56 -07:00
TÖRÖK Attila aae862e108 chore: Run `cargo update` 2022-07-25 10:52:37 -07:00
Aaron Hill 515c7bf518 Fix behavior when setting repeatCount, and improve tests 2022-07-24 20:43:00 -07:00
Aaron Hill b4f98190e9 avm2: Implement flash.utils.Timer and associated events
The current 'setInterval/setTimeout' implementation is
moved to 'core/src/timers.rs', and now works with both
AVM1 and AVM2 objects. The `flash.utils.Timer` class is implemented
mostly in ActionScript, with minimal modifications to the actual
Ruffle timer code.
2022-07-24 20:43:00 -07:00
relrelb 3bfe736262 core: Remove `From<Position<Twips>> for Transform`
Simply use `Matrix::translate` directly, which is more explicit and
intuitive.
2022-07-24 19:07:05 -07:00
relrelb afb9ecc4ab webgl: Avoid zeroing `renderbuffer_{width,height}`
This basically reverts #5737 and #6458 for the WebGL backend, which
regressed a bug where setting the style `display: none;` to a Ruffle
player logged many WebGL warnings to the console. This happened
because `renderbuffer_width` and `renderbuffer_height` were set to zero,
leading to problems when trying to pass them to WebGL APIs.

Avoid such situation by ensuring that `renderbuffer_width` and
`renderbuffer_height` are at least `1`, exactly as done before.
Also add a comment that explains why `.clamp()` isn't used.

Fixes #1264.
2022-07-24 23:37:54 +03:00
relrelb bbfd272c15 avm1: Use `Matrix::scale`
Instead of a directly initialzed `Matrix`.
2022-07-24 22:11:31 +03:00
relrelb fc87a35572 core: Remove some dead `DisplayObject` methods 2022-07-23 22:22:20 +03:00
relrelb 1accf2d8f9 web: Make `SourceAPI` a singleton
As a first step towards a simpler Web API, convert `SourceAPI` from
a class to a constant object, under the assumption that `SourceAPI`
isn't a public Ruffle API and as such is safe to be changed.

As a result the different `ruffle-core` users don't need to construct
a new `SourceAPI` instance before calling `PublicAPI.negotiate()`.
2022-07-23 10:37:33 -07:00
relrelb 8d30833d02 core: Don't use `saturating_sub` for `width` / `height`
Use regular subtraction, since it should never overflow.
Also remove `swf::Twips::saturating_sub`, which is now unused.
2022-07-23 10:33:12 -07:00
relrelb 29ae39a2d1 core: Remove unused parameter of `Avm1Button::from_swf_tag` 2022-07-23 10:18:53 -07:00