Commit Graph

4709 Commits

Author SHA1 Message Date
TÖRÖK Attila a9c94513a0 avm2,audio: Implement leftPeak and rightPeak in SoundChannel 2022-11-23 15:38:41 -07:00
michiel2005 50724448c8 Update array.rs 2022-11-23 15:19:07 -07:00
michiel2005 7c5f2805ef Avoid code duplication
Avoided code duplication in avm1 array.rs as asked
2022-11-23 15:19:07 -07:00
Moulins 2fa3d31732 Appease Clippy on nightly 2022-11-23 22:39:45 +01:00
Toad06 eb2ee06588 avm1: Fix `ExternalInterface.call` with blank strings in SWFv8 2022-11-22 16:51:59 -07:00
Aaron Hill bdadb17a95 render: Don't use BitmapHandle in tessellator
Currently, we rely on ShapeTessellator being able to get a BitmapHandle
without a RenderBackend. With the upcoming BitmapData refactor,
we will always need a RenderBackend to get a BitmapHandle, which creates
borrow-checker issues in ShapeTessellator (which is stored in a
RenderBackend).

To solve this, we split BitmapSource.bitmap into two methods -
BitmapSource.bitmap and BitmapSource.bitmap_handle. ShapeTessellator
continues to use BitmapSource.bitmap, and uses the u16 bitmap id
instead of a BitmapHandle. The BitmapSource.bitmap_handle method
is used inside each render backend to convert the id to a BitmapHandle,
avoiding borrow-checker issues.
2022-11-21 21:04:40 -07:00
David Wendt 0aec23b468 chore: Upgrade deprecated timezone code.
This doesn't actually add any new places for code to panic, since the deprecated functions all `unwrap`'d internally.
2022-11-21 18:50:46 -07:00
dependabot[bot] 1b6e91393e build(deps): bump indexmap from 1.9.1 to 1.9.2
Bumps [indexmap](https://github.com/bluss/indexmap) from 1.9.1 to 1.9.2.
- [Release notes](https://github.com/bluss/indexmap/releases)
- [Changelog](https://github.com/bluss/indexmap/blob/master/RELEASES.md)
- [Commits](https://github.com/bluss/indexmap/compare/1.9.1...1.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 18:27:58 -07:00
dependabot[bot] ccb1fa1b1b build(deps): bump clap from 4.0.24 to 4.0.26
Bumps [clap](https://github.com/clap-rs/clap) from 4.0.24 to 4.0.26.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.0.24...v4.0.26)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 18:07:28 -07:00
dependabot[bot] 25664778f3 build(deps): bump bitstream-io from 1.5.0 to 1.6.0
Bumps [bitstream-io](https://github.com/tuffy/bitstream-io) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/tuffy/bitstream-io/releases)
- [Commits](https://github.com/tuffy/bitstream-io/compare/v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: bitstream-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 17:16:38 -07:00
Toad06 caecc519cd avm1: Minimal implementation of `LoadVars.getBytesTotal` and `LoadVars.getBytesLoaded` 2022-11-20 22:00:36 -07:00
David Wendt ecdef4c6f4 core: Empty text lines should still have a height. 2022-11-20 17:13:48 -07:00
David Wendt 425bea45f8 avm1: `TextFormat.getTextExtent` uses the height of all boxes in the layout 2022-11-20 17:13:48 -07:00
David Wendt 66bf03908b avm1: Implement `TextFormat.getTextExtent` 2022-11-20 17:13:48 -07:00
David Wendt 83db53202e core: Add empty boxes for empty lines *without* breaking multiple-format lines. 2022-11-20 17:13:48 -07:00
David Wendt 88c3cf0c72 core: The leading for a given line is stated using the text format's leading, not the font's leading. 2022-11-20 17:13:48 -07:00
David Wendt 59f01a40f1 core: Empty lines should also generate a layout box. 2022-11-20 17:13:48 -07:00
David Wendt 5f7344259a avm2: Impl `TextField.numLines` and `.getLineMetrics` 2022-11-20 17:13:48 -07:00
David Wendt 1efa29baa6 core: Add methods for introspecting text metrics on an `EditText`. 2022-11-20 17:13:48 -07:00
Adrian Wielgosik 7e2b876ab3 avm2: Refactor context menu field bool checks into macro 2022-11-17 22:03:54 -05:00
Adrian Wielgosik e840d1f71c core: Support AVM2 context menu (sans callbacks) 2022-11-17 22:03:54 -05:00
Toad06 182c3b78e4 avm1: onData fails if the loaded data is an empty string 2022-11-17 20:51:11 -05:00
dependabot[bot] b3debc96af build(deps): bump clap from 4.0.22 to 4.0.24
Bumps [clap](https://github.com/clap-rs/clap) from 4.0.22 to 4.0.24.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.0.22...v4.0.24)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-15 09:33:20 +02:00
TÖRÖK Attila 08270efee7 avm2: Implement SoundMixer.computeSpectrum() 2022-11-10 19:11:29 -05:00
TÖRÖK Attila 2b4d8d9c6e core,desktop: Add and implement AudioBackend::get_sample_history() 2022-11-10 19:11:29 -05:00
Moulins fb8caad783 core: rename TInteractiveObject::{ibase => raw_interactive}(_mut)
To match with TDisplayObjectContainer::raw_container(_mut) introduced
in previous commit.
2022-11-09 23:39:15 -05:00
Moulins 0bc01c239f core: remove impl_display_object_container! macro
It is replaced by two accessor methods on the trait + default
implementations of all other methods.
2022-11-09 23:39:15 -05:00
dependabot[bot] 9303304e3b build(deps): bump clap from 4.0.18 to 4.0.22
Bumps [clap](https://github.com/clap-rs/clap) from 4.0.18 to 4.0.22.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.0.18...v4.0.22)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-08 00:25:12 +02:00
relrelb c516fef65d swf: Simplify read of `PlaceObject` tags
`tag_length` isn't really necessary since each tag is read using
a dedicated `swf::Reader`, which keeps track of the tag boundary
internally.

As a result, `tag_len` can be avoided passed around many times in
`movie_clip.rs`.
2022-11-08 00:05:41 +02:00
moulins 8cbd527e4c
avm1: Small cleanups in ActionQueue (#8486)
- Use a fixed-size array instead of a Vec for the queues
- Remove unwanted plurals in methods and types names
2022-11-06 07:39:11 +02:00
Moulins e121c82b10 avm1: remove manual bit-wrangling in declare_properties! macro
Now that the relevant compiler ICE is fixed, we can use the Attribute
constants directly
2022-11-03 09:19:11 +02:00
Adrian Wielgosik 3458cd92e4 avm2: Support DO.getBounds, (partial) getRect 2022-11-01 22:46:34 +01:00
relrelb 89f3445d62 swf: Introduce and use `Rectangle::width()` and `Rectangle::height()` 2022-11-01 09:49:04 +02:00
Aaron Hill 68471723b3 core: Fix clippy format string lint 2022-10-27 08:49:39 +03:00
relrelb fb7ba9c9a0 core: Extract `Graphic::drawing`
That returns a non-`Option` `Drawing`, and has no `.unwrap()`s.
2022-10-26 09:05:42 +03:00
relrelb 7dfc5b6e2e core: Extract `MovieClip::drawing`
That returns a non-`Option` `Drawing`. This avoids many `.unwrap()`s
in AVM1.
2022-10-26 09:05:42 +03:00
relrelb d3c6d9d148 avm1: Require a `MovieClip` in `MovieClip.duplicateMovie`
A `MovieClip` must be instantiated from an ID of a `MovieClip`.
2022-10-26 09:05:42 +03:00
dependabot[bot] d589130634 build(deps): bump serde from 1.0.145 to 1.0.147
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.145 to 1.0.147.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.145...v1.0.147)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-25 09:54:26 +03:00
dependabot[bot] 3c7e9235f6 build(deps): bump futures from 0.3.24 to 0.3.25
Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.24 to 0.3.25.
- [Release notes](https://github.com/rust-lang/futures-rs/releases)
- [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.24...0.3.25)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-25 09:19:27 +03:00
dependabot[bot] c9f5524748 build(deps): bump clap from 4.0.15 to 4.0.18
Bumps [clap](https://github.com/clap-rs/clap) from 4.0.15 to 4.0.18.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.0.15...v4.0.18)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-25 09:00:26 +03:00
dependabot[bot] 6cedd3c04d build(deps): bump syn from 1.0.102 to 1.0.103
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.102 to 1.0.103.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.102...1.0.103)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-25 01:14:33 +02:00
Aaron Hill 7dcb333991 avm2: Remove dead code from MovieClip constructor
The call to `super_init` will initialize a `DisplayObject` (if unset)
in the `Sprite` constructor, using exactly the same logic that we're
attempting to use. The code in `MovieClip` is unreachable, and can
be deleted.
2022-10-24 11:46:20 -05:00
DragonGamesStudios 84f3739ece
core: Fixed a typo in messages on pressing Ctrl+Alt+D (#8360) 2022-10-23 16:44:33 +03:00
Aaron Hill 919b38f20b avm2: Stub Graphics.beginGradientFill 2022-10-22 17:58:13 -05:00
Aaron Hill 9dd0914bda core: Add root movie URL spoofing (desktop only).
The desktop player now takes a `--spoof-url` argument, which overrides
the movie URL provided to ActionScript. This does not affect non-root
movies loaded through `Loader`.
2022-10-22 15:24:14 -05:00
Adrian Wielgosik 7ccf7a4c69 avm2: Add missing set_object2 impl to Bitmap 2022-10-22 19:42:24 +02:00
Aaron Hill 4cb122461e avm2: Implement DisplayObject.cacheAsBitmap
The underlying flag currently does nothing, but this allows
SWFs to continue executing.
2022-10-20 18:37:35 -05:00
David Wendt 058a7a8b66 desktop: Allow specifying the load behavior for desktop 2022-10-18 16:47:49 -06:00
David Wendt 74d77a3df0 core: Add a player setting for if movies are allowed to execute before loading finishes 2022-10-18 16:47:49 -06:00
dependabot[bot] 71a4f569af build(deps): bump proc-macro2 from 1.0.46 to 1.0.47
Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.46 to 1.0.47.
- [Release notes](https://github.com/dtolnay/proc-macro2/releases)
- [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.46...1.0.47)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-18 07:28:01 +03:00
Adrian Wielgosik bdc041677a render: Bail on attempts on panicking recursive render, part 2. 2022-10-17 18:02:21 -05:00
Aaron Hill 45515be0a3 render: Improve support for BitmapData.draw
This PR fixes a numbe of interconnected bugs:
* We weren't consistently uploading a dirty BitmapData to the render
  backend before drawing to/from it.
* BitmapData.draw should *not* add a fill color - it should draw over
  the current contents of the BitmapData
* After drawing to a non-transparent BitmapData, we need to manually
  set the opacity back to 255 for each pixel (the drawing process
  takes transparency into account, but the opacity information is
  thrown away at the end).
2022-10-17 12:53:38 -05:00
relrelb 86ef4bd7fe core: Simplify `Bitmap` creation
Change `Bitmap::new()` to accept a `ruffle_render::bitmap::Bitmap`
directly, instead of `width`, `height` and `bitmap_handle`. As a
consequence, all `RenderBackend::register_bitmap_*` methods are no
longer necessary - we can use `ruffle_redner::utils::*` to obtain
a `ruffle_render::bitmap::Bitmap` right before calling `Bitmap::new()`.
2022-10-17 20:05:30 +03:00
David Wendt 36844e5e2f chore: Use explicit `.clamp`
Also, update the tests to confirm that this doesn't break NaN handling.
2022-10-16 14:55:07 -06:00
David Wendt 10ad603566 avm1: Implement `TextField.antiAliasType`, `.gridFitType`, `.sharpness`, and `.thickness`.
Notably this required removing a few parameter checks from core that turned out to be AS3-only.
2022-10-16 14:55:07 -06:00
David Wendt 7155f88601 avm2: Implement `TextField.antiAliasType`, `.gridFitType`, `.sharpness`, and `.thickness`. 2022-10-16 14:55:07 -06:00
David Wendt b8693a3932 core: Retain Advanced render settings in Normal mode, even though they won't be used there. 2022-10-16 14:55:07 -06:00
relrelb 760f9e29df avm1: Migrate `BevelFilter` to `NativeObject` 2022-10-16 11:48:59 +03:00
relrelb 1cbc906b04 avm1: Migrate `BlurFilter` to `NativeObject` 2022-10-15 16:00:30 +03:00
relrelb 178bf4fe24 chore: Extract Cargo `edition` to `[workspace.package]`
This is possible since Rust 1.64.0: https://blog.rust-lang.org/2022/09/22/Rust-1.64.0.html#cargo-improvements-workspace-inheritance-and-multi-target-builds
2022-10-14 22:13:29 +03:00
relrelb dbfd28e708 web: Bump `wasm-bindgen` to 0.2.83
This restores commit 084b252030.

As usual, also bump its helper crates (`js-sys`, `web-sys` and
`wasm-bindgen-futures`) to the latest versions.
2022-10-14 21:49:40 +03:00
David Wendt 81ed624c26 avm2: Loaders should not be opaque to mouse events. 2022-10-14 12:27:31 -05:00
Tal Hayon 052ec75e2a avm2: BitmapData.perlinNoise and DisplacementMapFilter 2022-10-14 11:22:26 -05:00
relrelb bc73301592 avm1: Require some more prototypes
Since they are never `None`.
2022-10-14 00:23:12 +03: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 967ff56e3b avm1: Rewrite `Date` implementation
The new implementation is simpler, and supports many AVM1 quirks not
supported before.

In addition, migrate `Date` to `NativeObject`.
2022-10-13 00:49:50 +03:00
relrelb 21e24936b7 avm1: Correct `Number.toString` edge-case
`NaN` and large numbers are actually treated like `i32::MIN`. As described
in https://github.com/ruffle-rs/ruffle/issues/7772#issuecomment-1235977709,
Flash (at least 7+) fails to convert `i32::MIN` to a string due to a bug.
Since `i32::MIN` has no `i32` positive counterpart, digits extracted using
modulo are actually negative and characters before ASCII `'0'` are selected.

Flash 6- somehow return just `0` in those cases. This was Ruffle's behavior
up until this commit. This commit matches Ruffle behavior to latest Flash
Player, as we usually prefer. A `TODO` is still there in case we ever add
player version emulation.
2022-10-13 00:05:25 +03:00
relrelb f504804379 avm1: Require `fn_proto` in `FunctionObject::bare_function`
It was never `None`, except for 3 tests in `script_object.rs`,
which now use `activation.context.avm1.prototypes().function`.
2022-10-12 21:01:18 +03:00
dependabot[bot] 76f18cbc37 build(deps): bump clap from 4.0.9 to 4.0.12
Bumps [clap](https://github.com/clap-rs/clap) from 4.0.9 to 4.0.12.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v4.0.9...v4.0.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-11 00:32:53 +03:00
dependabot[bot] bdd7c27965 build(deps): bump syn from 1.0.101 to 1.0.102
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.101 to 1.0.102.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.101...1.0.102)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-10 23:42:49 +03:00
EmperorBale d72ef587f2 avm2: Add digest property to URLRequest 2022-10-10 12:48:35 -07:00
EmperorBale 5c9bf3ffc0 swf: Support SWZ files 2022-10-10 12:48:35 -07:00
Adrian Wielgosik 10c19fef57
render: Bail on attempts on panicking recursive render. (#8248) 2022-10-09 14:33:57 -05:00
relrelb bf0ace0b88 chore: Appease clippy 2022-10-09 13:46:28 +05:45
relrelb 5c94714363 avm2: Port `flash.ui.Keyboard` to ActionScript 2022-10-07 12:27:56 +03:00
David Wendt 23b5eb6d72 avm2: Implement `BitmapData.clone`. 2022-10-07 01:41:48 -05:00
David Wendt 1b0d23e569 core: Don't desync on frames with no audio blocks.
Fixes regression caused by me in 85cf383c84
2022-10-06 21:41:59 -06: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
Aaron Hill 4b2907ead5 avm2: Fix 'hasDefinition' and 'getDefinition' for ApplicationDomain
These methods were incorrectly treating the argument as a local name,
instead of a qualified name. Additionally, 'getDefinition' now throws
an AVM error.
2022-10-05 16:45:29 -05:00
relrelb a9dedf759a chore: Fix `clap` update
As described in https://github.com/clap-rs/clap/blob/master/CHANGELOG.md#400---2022-09-28.
2022-10-05 21:33:34 +03:00
dependabot[bot] 32a370f803 build(deps): bump clap from 3.2.20 to 4.0.9
Bumps [clap](https://github.com/clap-rs/clap) from 3.2.20 to 4.0.9.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v3.2.20...v4.0.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-05 21:33:34 +03:00
Aaron Hill 9b055645d3 avm2: Support calling 'new Function()' objects
This appears to create a dummy function, which ignores all
of its arguments and always returned `undefined`
2022-10-05 08:57:12 -05:00
Adrian Wielgosik 4745a897eb avm2: Add MovieClip::enabled 2022-10-04 20:14:09 +02:00
Adrian Wielgosik 0ac3341d57 avm2: Fix typing of add/removeChild methods 2022-10-04 19:51:26 +02:00
dependabot[bot] ac93f9d295 build(deps): bump serde from 1.0.144 to 1.0.145
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.144 to 1.0.145.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.144...v1.0.145)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 16:17:36 +03:00
dependabot[bot] 0547155749 build(deps): bump proc-macro2 from 1.0.43 to 1.0.46
Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.43 to 1.0.46.
- [Release notes](https://github.com/dtolnay/proc-macro2/releases)
- [Commits](https://github.com/dtolnay/proc-macro2/compare/1.0.43...1.0.46)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 14:14:35 +03:00
dependabot[bot] 356877c88e build(deps): bump enumset from 1.0.11 to 1.0.12
Bumps [enumset](https://github.com/Lymia/enumset) from 1.0.11 to 1.0.12.
- [Release notes](https://github.com/Lymia/enumset/releases)
- [Changelog](https://github.com/Lymia/enumset/blob/master/RELEASES.md)
- [Commits](https://github.com/Lymia/enumset/compare/v1.0.11...v1.0.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 12:52:47 +03:00
dependabot[bot] dbac0ca420 build(deps): bump syn from 1.0.99 to 1.0.101
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.99 to 1.0.101.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.99...1.0.101)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 12:22:45 +03:00
David Wendt 7861dfff79 avm2: Stub `tabChildren`, `tabIndex`, and `tabEnabled`. 2022-10-04 01:06:25 -05:00
dependabot[bot] a0ef304ae9 build(deps): bump smallvec from 1.9.0 to 1.10.0
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.9.0...v1.10.0)

---
updated-dependencies:
- dependency-name: smallvec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-04 01:44:21 +03:00
Aaron Hill 046ed2c0ba avm2: Stub Graphics.beginBitmapFill
This is needed by Pixel Legions
2022-10-03 15:01:01 -05:00
Adrian Wielgosik 286755962f avm2: Array push/unshift return new length, like Vector 2022-10-02 17:52:25 +02:00
Aaron Hill 8f72842b2f avm2: Stub LocalConnection 2022-09-28 13:46:25 -05:00
dowgird 5ac4f4358d avm2: Added flash.net.URLVariables 2022-09-27 13:43:30 -05:00
Aaron Hill 53f42e0bec avm2: Fix getQualifiedClassName for null and undefined 2022-09-27 00:05:06 -05:00
nosamu 66fa67cdcc Revert "avm1: Remove `Value::to_primitive_num`"
This reverts commit 2c50a04e37.
2022-09-26 18:40:39 -05:00
Aaron Hill f5b59f869c avm2: Show native method names in stack trace
Previously, we would display an empty string for the method name.

We can now store a `&'static str` again in `NativeMethod`,
instead of needing a `Cow`
2022-09-26 14:13:48 -05:00
relrelb 65ecb4fe8f avm2: Remove `From<Box<dyn std::error::Error>> for Error<'gc>` 2022-09-26 19:51:38 +03:00
relrelb cc531ff7db avm2: `playerglobal.swf` should be valid 2022-09-26 19:51:38 +03:00
relrelb 1f6368b946 avm2: Ignore `write!()` errors
As it cannot fail.
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 a894ec5ca8 avm2: JSON serialization cannot fail 2022-09-26 19:51:38 +03:00
relrelb a8f869329e web: Fix config with `serde-wasm-bindgen`
Since `serde-wasm-bindgen` doesn't support `#[serde(default)]` (https://github.com/cloudflare/serde-wasm-bindgen/issues/20),
we no longer able to deserialize a partial `Config` object. As a solution,
take care to pass a full object from the TypeScript side.
2022-09-26 17:23:32 +03:00
relrelb c9ca7e2095 avm2: Port `flash.ui.Mouse` to ActionScript 2022-09-25 16:50:03 +03:00
relrelb e1d01b0a5e swf: Extract `Rectangle` to a separate file
And make it generic, as a first step towards making it a general-purpose
data structure for the whole codebase. Some potential replacements are:
* `BoundingBox` in `render/src/bounding_box.rs`.
* `BoxBounds` in `core/src/html/dimensions.rs`.
* Parameters to a bunch of `BitmapData` methods in
  `core/src/bitmap/bitmap_data.rs`.
2022-09-25 10:37:56 +03:00
relrelb 898ccfba5d avm1: Migrate `ColorTransform` to `NativeObject` 2022-09-25 02:43:53 +03:00
golfinq ceb877c55f avm2: Implement error types for avm2 2022-09-25 02:27:59 +03:00
dowgird e448f5e027 avm2: implemented flash.utils.unescapeMultiByte 2022-09-25 01:19:11 +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 98edcc4dc0 avm2: Add non-debug version of ErrorObject::display_full 2022-09-24 22:29:55 +02:00
Aaron Hill 66df5ea3de avm2: Implement typed 'catch' blocks
Now that we have a custom `Error` enum, this is very straightforwawrd.
I've converted `getDefinitionByName` return an AVM error, since this
is commonly used by games to test for a class.
2022-09-24 13:03:29 -05:00
relrelb b5084eef25 Revert "web: Bump `wasm-bindgen` to 0.2.83"
This reverts commit 1954f6162f.
2022-09-24 09:52:25 +03:00
Aaron Hill b571b43375 avm2: Fix some `avm_debug!` calls.
These were debug-printing `Gc<Multiname>` instead of `Multiname`
2022-09-24 09:16:35 +03:00
Aaron Hill 7b0bc0fb74 avm2: Implement undocumented 'Function.length' property
This returns the function's parameter count, and is used by the Starling
framework to implement a custom event dispatcher.
2022-09-23 18:36:23 -05:00
Aaron Hill 25f176995a avm2: Stub flash.ui.Multitouch
This is needed by Starling
2022-09-23 16:04:30 -05:00
kmeisthax d09ea7514e chore: Oops, I meant to clamp to total frames.
Pointed out by @n0samu
2022-09-23 11:45:52 -06:00
David Wendt aca1c0fb50 avm1: Clamp `WaitForFrame` ops to the total frame count of the movie clip being tested. 2022-09-23 11:45:52 -06:00
relrelb 1954f6162f web: Bump `wasm-bindgen` to 0.2.83
This reverts commit cf721d45f9 and restores
commit 084b252030, this time without updating
`web-sys`, due to being coupled to `wgpu`.
2022-09-23 17:23:35 +03:00
relrelb 4828a9c5cf avm1: Remove `get_` prefix from `ColorTransformObject` getters
To match Rust naming conventions.
2022-09-23 11:10:12 +03:00
relrelb e7643c731b core: `ColorTransform` cleanup
Main changes:
* Merge `ColorTransformParams` into `ColorTransformObject`, as it's only relevant for AVM1.
* Make `BitmapData::color_transform` work with a generic `ColorTransform`, which uses fixed-point
arithmetic.

Note that Ruffle still calculates color transforms slightly different from Flash. This is probably
caused by inaccuracy of the current `ColorTransformObject` to `ColorTransform` conversion and/or the
`ColorTransform` application logic itself. Since this requires further research, it'll be fixed in a
future PR.
2022-09-23 11:10:12 +03:00
EmperorBale a17352a01a avm2: Switch XML & XMLList to actionscript 2022-09-22 15:18:23 -07:00
EmperorBale 1cc765d675 avm2: Implement checkfilter opcode 2022-09-22 15:18:23 -07:00
EmperorBale 6dea1fa264 avm2: Implement TypeError 2022-09-22 15:18:23 -07:00
relrelb 2c50a04e37 avm1: Remove `Value::to_primitive_num`
Use `Value::to_primitive` instead.
2022-09-22 22:40:07 +03:00
relrelb d5209c4c43 core: Refactor `Percent` type
Unconditionally represet percentages as `f64` between `0.0` and `100.0`.
2022-09-22 04:17:44 +03:00
relrelb 9d4ab37ef6 core: Replace consecutive `push`es with `extend`
This should be slightly more efficient.
2022-09-22 03:00:02 +03:00
EmperorBale fe951b4989 avm2: Implement ByteArray.writeObject
While doing this I also noticed that we were incorrectly producing AmfValue::Integer if our
target AMF version is AMF0. This is incorrect because AMF0 is based on AS2, which does not
recognise Integer as a valid type, and therefore must be represented with Number instead.
2022-09-21 13:39:58 -07:00
Daniel Jacobs eefaca1e05 avm2: Add a few missed ActionScript enums 2022-09-21 20:54:36 +02:00
Aaron Hill 6ad72d0ef9 avm2: Assign 'prototype.name' through class object
This makes the files compile under mxmlc
2022-09-21 12:37:37 -05:00
Aaron Hill e99c7fa4af Add size assertions for Result<Value, Error> and Value 2022-09-21 12:37:37 -05:00
Aaron Hill 93b7de2fe6 avm2: Use custom Error instead of std::error::Error 2022-09-21 12:37:37 -05:00
Adrian Wielgosik d1ffaad927 avm2: Support enumerating null/undefined 2022-09-21 00:03:44 +02:00
Aaron Hill 9b9c95bfe2 avm2: Add GameInput and GameInputEvent 2022-09-18 11:37:02 -05:00
EmperorBale bfca30fed7 avm2: Implement IDataOutput 2022-09-17 12:31:43 -07:00
EmperorBale b1aff49673 avm2: Implement IDataInput 2022-09-17 12:31:43 -07:00
EmperorBale 7aa821da4f core: Use class index for `class_id`, instead of slot_id 2022-09-17 12:31:43 -07: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 173b04cc5c avm2: Allow access to `Stage.loaderInfo.url` 2022-09-17 12:32:15 -06:00
David Wendt 0925412110 avm2: `LoaderInfo` needs to specifically know if it's the stage's loader or not. 2022-09-17 12:32:15 -06:00
David Wendt dbe6eb324c avm2: Explicitly delay all frame construction until the first frame is loaded.
This prevents the root from being constructed until we know its `SymbolClass`, and is roughly equivalent to delaying the work until `ShowFrame`. (We don't actually run any work on `ShowFrame` in our current movieclip impl.)
2022-09-16 21:44:11 -06:00
David Wendt 247a28d7e9 avm2: Impl `Sprite.useHandCursor` 2022-09-16 19:25:46 -06:00
David Wendt 6f1509d4cd avm2: Don't attempt to print registers that are out-of-bounds. 2022-09-16 15:46:36 -06:00
David Wendt 38c6369f6e avm2: Fix `avm_debug` not printing debugging information 2022-09-16 15:46:36 -06:00
David Wendt 187352b1db chore: Fix stubs to use the new `Error<'gc>` property 2022-09-15 20:25:21 -06:00
David Wendt e7379a26e9 docs: Mark `z` as needing a version-gate once we have that set up 2022-09-15 20:25:21 -06:00
David Wendt 2b2089e9cb docs: Bitmap subclasses tickle the "initialized by movie" code path because the DisplayObject code actually does its job here 2022-09-15 20:25:21 -06:00
David Wendt bd8ff4f024 avm2: Add support for Bitmaps being associated to subclasses of `flash.display.Bitmap` 2022-09-15 20:25:21 -06:00
David Wendt fc02715faa avm2: Stub `z`, `scaleZ`, and all 3D rotation properties 2022-09-15 20:25:21 -06:00
David Wendt 3c0b9b9f62 avm1: Implement `ActionWaitForFrame` and `ActionWaitForFrame2`. 2022-09-15 19:14:41 -06:00
David Wendt aa9e24fb9d core: Limit gotos to the currently loaded frame count 2022-09-15 19:14:41 -06:00
David Wendt c7e29e4173 chore: Various nitpicks and compilation fixes 2022-09-15 19:14:41 -06:00
David Wendt af9db3e9c7 docs: Drop "action" language for `ExecutionLimit` as that is confusable for AVM actions.
We now call them "operations" and clarify that they could be either AVM actions or SWF bytes.
2022-09-15 19:14:41 -06:00
David Wendt 44f1cdfdec avm2: `LoaderInfo` reports correct total size for SWFs loaded in-memory 2022-09-15 19:14:41 -06:00
David Wendt f3ca7f7673 avm2: Still-loading SWFs do not report a `url` 2022-09-15 19:14:41 -06:00
David Wendt 8f5afe09a1 core: Refactor `movie_loader` and its `loadBytes` variant to call into the same code. 2022-09-15 19:14:41 -06:00
David Wendt 86ecf6076e core: `loadBytes` does not emit `open` 2022-09-15 19:14:41 -06:00
TÖRÖK Attila d0277f7fe8 avm2: Add `Loader.loadBytes` 2022-09-15 19:14:41 -06:00
David Wendt 006269e1f8 core: Delay completion events until after the SWF is reported as fully loaded. 2022-09-15 19:14:41 -06:00
David Wendt 0a25f265d6 core: `LoaderInfo` now optionally contains a reference to the root clip in the not-loaded state so that things like `bytesLoaded` work 2022-09-15 19:14:41 -06:00
David Wendt 4976dc973d core: Emit a progress event after every preload tick.
This does not cover root movies, which already get progress events as part of a prior commit.
2022-09-15 19:14:41 -06:00
David Wendt e589df650f core: Centralize compressed length calculations into `movieclip.rs` 2022-09-15 19:14:41 -06:00
David Wendt 1323355a69 avm2: Fire progress events when the root movie is preloaded.
This is currently somewhat buggy, `homestuck_02791.swf` stops at 12% for some reason. I tried handing it both compressed and uncompressed lengths with no luck.
2022-09-15 19:14:41 -06:00
David Wendt 07bd7dda2e core: Do not overflow when querying loaded bytes on a fully-loaded movie. 2022-09-15 19:14:41 -06:00
David Wendt 029fecaa94 avm2: Implement `LoaderInfo.bytesLoaded`.
This requires estimating a count of bytes loaded of the original compressed stream, even though we only have uncompressed byte totals at this point. I instead rescale the uncompressed bytes by the compressed count to roughly estimate what would be the `bytesLoaded` had we been actually streaming bytes in and preloading them synchronously.
2022-09-15 19:14:41 -06:00
David Wendt bd08a6ebfe avm1: Expose preload progress to AVM1 via `getBytesLoaded` 2022-09-15 19:14:41 -06:00
David Wendt 0eff0bf91a core: Remove all synchronous preloading from core.
Backends that need synchronous preload behavior now explicitly ask for it as follows:

 * `tests` - repeatedly call `preload` in a loop with an exhausted execution limit to stress-test the chunked preload
 * `exporter`, `scanner` - synchronous/unlimited preload to match prior behavior

These may change in the future.
2022-09-15 19:14:41 -06:00
David Wendt 3d799acd96 core: Report to callers of preload if all preloading work was done or not. 2022-09-15 19:14:41 -06:00
David Wendt 10e944a911 core: Turns out this is NOT redundant, I just misread the loop points 2022-09-15 19:14:41 -06:00
David Wendt 15b781ff04 chore: Remove old version of code left behind during rebasing 2022-09-15 19:14:41 -06:00
David Wendt 89fcca4f0b core: Only mark the end of the frame if we hit the end of the tag stream. 2022-09-15 19:14:41 -06:00
David Wendt f272cba7e6 core: If we're marked as finished, set the preload position to `u64::MAX` so that the repeated call protection trips 2022-09-15 19:14:41 -06:00
David Wendt 31802ea96f chore: Reduce the number of necessary reads of the preload progress 2022-09-15 19:14:41 -06:00
David Wendt ea284ed6bf core: Preload should always start from the place we left off from. 2022-09-15 19:14:41 -06:00
David Wendt afd29d19a4 core: Don't do any work if a clip is preloaded after finishing preload. 2022-09-15 19:14:41 -06:00
David Wendt 86f9ee4821 core: Add a "preload everything we know about" method 2022-09-15 19:14:41 -06:00
David Wendt 940de4bb7e core: Add a special loader state for "downloaded but still parsing", and a function that ticks the preload.
Currently we do this automatically with no execution limit.
2022-09-15 19:14:41 -06:00
David Wendt 70e638b21f core: Actually decrease the current action limit correctly 2022-09-15 19:14:41 -06:00
David Wendt a05827eb90 core: Add a concept of an `ExecutionLimit` that checks both actions and runtime.
Actions are abstract; here we're using it to count bytes loaded (as a proxy for execution time). AVM code could potentially be adapted to count operations run instead.
2022-09-15 19:14:41 -06:00
David Wendt c80abff3a9 core: Allow chunked preloading within a `DefineSprite` tag 2022-09-15 19:14:41 -06:00
David Wendt 3a265adcc4 core: Ensure empty movie clips are born preloaded.
An "empty clip" is any clip created by the `new` or `new_with_avm2` function, intended for dynamically-created movie clips with no association to a movie symbol.
2022-09-15 19:14:41 -06:00
David Wendt f96017e6f3 avm2: Preload dynamically created movie clips
If we don't preload every movie clip we make, then they'll indicate themselves as not having been fully loaded yet, even though they are.
2022-09-15 19:14:41 -06:00
David Wendt 0f2237e171 core: Make frame loaded count no longer be off by one
The preload frame counting logic starts from one and continues to the end of the file, which results in a completely preloaded movie having one more frame "loaded" than there is in the file. This fixes that.
2022-09-15 19:14:41 -06:00
David Wendt 079b20a4f2 core: On unexpected EOF, mark the clip preload as completed 2022-09-15 19:14:41 -06: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 f7f5316b71 core: Prohibit playing movie clip frames that haven't been preloaded yet. 2022-09-15 19:14:41 -06:00
David Wendt 0ab10d9ab0 core: Make the preload chunk size configurable per caller.
Right now, we do not actually set a chunk limit, as we still need infrastructure for backgrounding the preload calls.
2022-09-15 19:14:41 -06:00
David Wendt b5cbfaf093 core: When preloading other movie clips, forcibly preload them synchronously. 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
golfinq c63f915ae2 avm2: Implement missing enums 2022-09-15 15:42:29 -07:00
Daniel Jacobs cf721d45f9 Revert "web: Bump `wasm-bindgen` to 0.2.83"
This reverts commit 084b252030.
2022-09-15 22:33:07 +02:00
relrelb 084b252030 web: Bump `wasm-bindgen` to 0.2.83
As usual, also bump its helper crates (`js-sys`, `web-sys` and
`wasm-bindgen-futures`) to the latest versions.

Due to https://github.com/rustwasm/wasm-bindgen/pull/3031, use the
`serde-wasm-bindgen` crate as a replacement to the deprecated
`JsValue::from_serde` function.
2022-09-14 09:03:31 +03:00
Aaron Hill e08f8d47ab Allow clippy::needless_lifetimes to keep explicit 'gc parameter
This makes it clear what the lifetime is used for.
2022-09-13 18:55:08 -05:00
Aaron Hill c4ce06a500 avm2: Use Box<dyn std::error::Error> for FromWStr impl
We don't currently have an `Activation` available in this
method, and we can't specify a 'gc lifetime without modifying
the trait itself.
2022-09-13 18:55:08 -05:00
Aaron Hill 3e65a554fa avm2: Add 'gc lifetime parameter to avm2::Error 2022-09-13 18:55:08 -05:00
relrelb b1760063ec avm2: Implement `flash.filters.DisplacementMapFilterMode` 2022-09-13 21:20:55 +03:00
relrelb 5d5093f0fd avm2: Implement `flash.filters.BitmapFilterType` 2022-09-13 21:20:55 +03:00
dependabot[bot] cf26158030 build(deps): bump url from 2.2.2 to 2.3.1
Bumps [url](https://github.com/servo/rust-url) from 2.2.2 to 2.3.1.
- [Release notes](https://github.com/servo/rust-url/releases)
- [Commits](https://github.com/servo/rust-url/compare/v2.2.2...v2.3.1)

---
updated-dependencies:
- dependency-name: url
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 09:42:27 +03:00
dependabot[bot] 69a43297df build(deps): bump convert_case from 0.5.0 to 0.6.0
Bumps [convert_case](https://github.com/rutrum/convert-case) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/rutrum/convert-case/releases)
- [Commits](https://github.com/rutrum/convert-case/commits)

---
updated-dependencies:
- dependency-name: convert_case
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 09:20:12 +03:00
dependabot[bot] e86b3f0efb build(deps): bump percent-encoding from 2.1.0 to 2.2.0
Bumps [percent-encoding](https://github.com/servo/rust-url) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/servo/rust-url/releases)
- [Commits](https://github.com/servo/rust-url/compare/percent-encoding-v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: percent-encoding
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-13 08:45:46 +03:00