Commit Graph

7001 Commits

Author SHA1 Message Date
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
relrelb e78bf30d58 swf: Extract `Color` to a separate file 2022-07-23 08:43:02 +03:00
Rafał Dowgird fac32b488b
avm2: implement string replace(string, function) (#7456)
* avm2: implement string replace where pattern is string and replacement is a function

* * removed unnecessary vec!

  * fixed "no newline at the end of file"
2022-07-22 17:32:02 +03:00
Aaron Hill bb6f07ee1a
avm2: Add support for playerglobal instance allocators
This commit adds support for combining instance allocators with
ActionScript playerglobal class definitions. This is activated
by defining the metadata `[Ruffle(InstanceAllocator = "true")]`
on the ActionScript class definition.

The implementation of this feature is very similar to native methods:
`build_playerglobal` checks for the metadata described above,
and defines a const `NATIVE_INSTANCE_ALLOCATOR_TABLE` mapping
class ids to function pointers.

To demonstrate this feature, I've converted `Event` to ActionScript
(keeping the existing instance allocator function).
I've also converted `ActivityEvent` and `ContextMenuEvent` to
`ActionScript`, to demonstrate how this simplifies inheritance.
In a future PR, we can convert the remaining events to ActionScript,
and remove the `EventData` enum entirely.

Unfortunately, `flex-sdk`'s `asc.jar` compiler strips out all metadata
when the `-optimize` option is passed. As a result, I forked
`flex-sdk` and disabled this behavior:
https://github.com/ruffle-rs/flex-sdk/releases/tag/ruffle-1.0.0

The modified `asc.jar` (built from the forked repository)
is included in this PR, and replaces the our previous 'asc.jar'
downloaded from the official Flex SDK release.

* Change metadata to `[Ruffle(InstanceAllocator)]`

* Strip out metadata before saving bytecode
2022-07-20 23:11:46 -07:00
nosamu 01c8c38762 web: Hide loading screen when root movie download fails 2022-07-20 19:55:12 +03:00
dependabot[bot] 7336e7cbf7 build(deps): bump terser from 5.10.0 to 5.14.2 in /web
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-19 20:06:20 -07:00
Mike Welsh 6f142c21fa canvas: Fix transforming of gradient/bitmap strokes 2022-07-19 15:01:17 -07:00
Mike Welsh ef838a3536 avm1: lineStyle scale mode defaults to normal 2022-07-19 15:01:17 -07:00
Mike Welsh 1980d6f420 canvas: Scale stroke width based on shape transform 2022-07-19 15:01:17 -07:00
Daniel Jacobs 56adcc5665
web: Add a loading screen (#7396)
* web: Add a loading screen

* web: Workaround sometimes overwitten remove method

* web: Completely remove exact px values from preloader

* web: Add meaningless loading animation to preloader

* web: Make preloader position relative

* web: Minor preloader CSS changes

* web: Don't change autoplay/unmuteOverlay showing logic

* demo: Use preloader-background for demo

* web: Don't fully remove preloader

* web: Hide preloader loading bar if there's no content-length

* web: Fix typo in load-ruffle

* web: Show/hide playButton and unmuteOverlay based on preloader state

* web: Address preloader feedback

* web: Revert ESLint change

* web: Remove unneeded optional chaining

* web: Change load option from hasPreloader to preloader

* web: Address some preloader feedback

* web: Change margin-bottom for preloader loading anim

* web: Simplify preloader conditional

* web: Show/hide full container when hiding/showing preloader

* web: Make preloader full-size
2022-07-19 22:20:53 +03:00
relrelb 23fdc2b2ee chore: Appease clippy 2022-07-19 09:26:46 +03:00
Rafał Dowgird 934cb05371
avm2: implement string.replace(...) with fn, for now regex only. (#7429)
* avm2: implement string.replace(...) with fn, for now regex only.

  * string - added path for replacing regex with fn (replacing string
  with fn is still unimplemented)

  * regex - factored out common replace logic for when replacement is
  a string and when it is a function

  * added tests

* Addressed review comments

* removed tinkering cruft; formatting

* addressed review comments
2022-07-19 08:47:57 +03:00
dependabot[bot] 2ffded778b build(deps): bump symphonia from 0.5.0 to 0.5.1
Bumps [symphonia](https://github.com/pdeljanov/Symphonia) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/pdeljanov/Symphonia/releases)
- [Commits](https://github.com/pdeljanov/Symphonia/compare/v0.5.0...v0.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-19 00:31:17 +03:00
relrelb 0e65617d4a avm2: Small cleanup in `RegExp::effective_replacement`
`char_indicies()` isn't really needed because the position is never
used.
So use the simpler `chars()` method instead.
2022-07-18 10:53:18 +03:00
Adrian Wielgosik 22d2810ef9 avm2: Migrate ContextMenu-related classes to AS 2022-07-17 11:05:37 -07:00
relrelb cad3cd8dbf avm2: Inline `Activation::run_stack_frame_for_script`
This reduces some complexity.
2022-07-15 17:15:14 -05:00
Aaron Hill af4f181856 avm2: Implement support for native methods in `playerglobal`
This commit adds support for marking methods as `native`
in ActionScript classes defined in playerglobal. The
`build_playerglobal` now checks for native methods, and
generates Rust code linking them to a corresponding Rust
function definition in the codebase.

To test this functionality, I've reimplemented several
functions as native methods (and moved related code to
pure ActionScript).
2022-07-15 11:43:49 -05:00
EmperorBale 41bfc028d2 tests: Add test for special unicode characters and characters that need padding 2022-07-15 15:29:55 +03:00
EmperorBale 95809f8a9b avm2: Make escape output for unicode characters, as well as characters that need padding 2022-07-15 15:29:55 +03:00