Commit Graph

246 Commits

Author SHA1 Message Date
relrelb ad944800be core: Perfer `Loader`'s `FetchError`
`NetworkError` and `NetworkUnavailable` were rarely used, and they
were very similar to `FetchError`.
2022-03-17 20:31:59 -07:00
relrelb 8a17d88c77 core: Remove `NavigatorBackend::time_since_launch`
`core` already depends on the `instant` crate which abstracts
`std::instant::Instant` and polyfills it on Web. Use it to replace
`NavigatorBackend::time_since_launch` in order to make `NavigatorBackend`
a little smaller and more simple.
2022-03-17 00:08:44 +02:00
relrelb 031126a1b8 core: Remove `LocaleBackend`
Previously there were 3 implementations of `LocaleBackend`:
`DesktopLocaleBackend`, `WebLocaleBackend` and `NullLocaleBackend`.

While `DesktopLocaleBackend`, `WebLocaleBackend` were identical,
`NullLocaleBackend` always returned a fixed date/time for tests
determinism.

Unify them in a single file, and use `cfg!(test)` and a new dedicated
`deterministic` feature to decide whether to mock date/time or not.
This should not cause any behavioral changes.
2022-03-16 19:57:53 +02:00
relrelb 5da7149aaf desktop: Access `App` fields directly
I think older Rust versions couldn't handle this, but I may be wrong.
Anyway, now it works and is more straight-forward.
2022-03-16 18:49:59 +02:00
relrelb 32f5cd22a4 desktop: Split `movie` and `movie_url`
This makes the code a little more readble.
2022-03-14 21:59:16 +02:00
relrelb 83287e4d48 desktop: Store only `bool` instead of `SwfMovie`
Because it was only used as such.
2022-03-14 21:59:16 +02:00
relrelb a3f858c510 desktop: Turn `load_from_file_dialog` into `pick_file`
This deduplicates some code (the calls to `parse_url` and `load_movie`),
plus makes the path choosing flow more linear.
2022-03-14 21:59:16 +02:00
relrelb d22186c088 desktop: Extract `parse_url` from `load_movie_from_path`
And change `load_movie_from_path` to `load_movie`.
2022-03-14 21:59:16 +02:00
relrelb 8ad8122b68 desktop: Change return type of `App::run` to `!`
The never type is already stable for function return types.
2022-03-14 21:59:16 +02:00
relrelb 7a591b885c desktop: Remove `loop` from `App::run`
`winit::event_loop::EventLoop::run` never returns, so there's no
point calling it over and over again.
2022-03-14 21:59:16 +02:00
Chris Midgley 453b0f1fe3 desktop: swap out tinyfiledialogs for rfd 2022-02-23 22:45:26 +02:00
Mike Welsh d5986a7294 desktop: Don't swallow Escape key (fix #6135) 2022-01-25 00:22:28 -08:00
relrelb 82b4c6ef27 core: Support mouse buttons in `KeyCode`
Add `MouseLeft`, `MouseRight` and `MouseMiddle` to `KeyCode` for
AVM1's `Key.isDown()` function.
2022-01-10 01:18:49 -08:00
relrelb 6396c21bc0 core: Rename `PlayerEvent::MouseLeft` to `MouseLeave`
So it's not consfusing with `KeyCode::MouseLeft`.
2022-01-10 01:18:49 -08:00
relrelb 07c5330456 core: Introduce `InputManager`
`InputManager` encapsulates the common logic that previously the
`UiBackend`s used to implement.
2021-12-15 14:20:30 -08:00
relrelb 0e3168f99e desktop: Small event-related cleanups
* Use `match state` for `MouseInput` events.
* Remove `ReceivedCharacter` handling from `DesktopUiBackend::handle_event`.
2021-11-25 07:35:33 +02:00
relrelb cbce91365c desktop: Track `keys_down` by `KeyCode`
This makes `DesktopUiBackend::is_key_down` a simple one-line check.
Also unify the handling code of `ElementState::Pressed` and `ElementState::Released`,
which had a lot of common code.
2021-11-25 07:35:33 +02:00
Tal Hayon 7ed38850fd core: implement displayState for Stage in avm1/2 2021-11-11 16:20:05 -07:00
Adrian Wielgosik 8cc00f32bb chore: Stop using traits available in prelude 2021-10-21 10:24:05 -07:00
dependabot[bot] 40aeffb91d build(deps): bump clap from 3.0.0-beta.4 to 3.0.0-beta.5
Bumps [clap](https://github.com/clap-rs/clap) from 3.0.0-beta.4 to 3.0.0-beta.5.
- [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/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-18 14:50:19 -07:00
Chris Midgley b0e3698c44
desktop: correct error when passing an invalid absolute windows filepath 2021-10-09 11:26:45 -07:00
relrelb 3aeffce365 desktop: Refactor clap settings
* Fix #5252 by passing `multiple_occurrences = true`.
* Remove `case_insensitive = true`.
* Reformat comments a bit.
2021-09-08 16:04:09 -07:00
Mike Welsh 94d02fa653 core: Add AudioMixer to core
Pull out the audio mixing code from desktop and add it to core.
This will allow other backends to use it (such as the web audio
backend) to get consistent audio across all platforms.
2021-09-07 16:48:34 -07:00
Tal Hayon 4625ca0e0b web: fix base param 2021-09-07 16:45:35 -07:00
David Wendt 116fb1f323 avm2: Impl `Sound.play`
This does not (yet) implement the third `SoundTransform` parameter on `play`.
2021-09-03 16:47:02 -06:00
David Wendt 3b6eea2a1d core: Report sound duration as `f64` and round down in AS1 2021-09-03 16:47:02 -06:00
David Wendt 89b411593f avm2: Impl `Sound.bytesTotal` 2021-09-03 16:47:02 -06:00
relrelb fff739d5c9 desktop: Cleanup `CpalAudioBackend` 2021-09-03 22:48:35 +03:00
relrelb 66e2a2166e desktop: Revert cpal initialization on a separate thread
It was initialized on a separate thread since 6178dd9ef1,
as a workaround for Windows.

But now thanks to https://github.com/RustAudio/cpal/pull/597, this
is no longer needed, and cpal can be initialized on the same thread
as before.
2021-09-03 22:48:35 +03:00
David Wendt dae087017c desktop: Add video backend to timedemo 2021-08-21 14:13:55 -06:00
EmperorBale 792a0d6502 desktop: Fix clap settings 2021-08-20 21:41:44 -06:00
Adrian Wielgosik b940e7f00f Extension: Sidestep CORS issues by offering to load the SWF in a tab 2021-08-02 21:28:16 +02:00
Adrian Wielgosik 35d543b610 desktop: Add a flag to disable AS3 warning popup 2021-07-06 17:03:45 +02:00
relrelb 0fd1c05fd5 chore: Use into() in more places 2021-06-22 11:49:41 -07:00
relrelb f82faf9603 chore: Appease clippy 2021-06-05 10:16:00 -07:00
Mike Welsh 3ddb97d2f6 core: Add SwfMovie::frame_rate and num_frames 2021-05-23 23:02:38 -07:00
Mike Welsh 077c7f045e core: Add SwfMovie::stage_size
Change `SwfMovie::width` and `height` to return `Twips`.
2021-05-23 23:02:38 -07:00
Mike Welsh e1439f4105 swf: Add HeaderExt struct providing additional info
When reading an SWF, search for FileAttributes and
SetBackgroundColor and return this along with the header data
because it's useful (in particular, the AS3 flag).
2021-05-23 23:02:38 -07:00
relrelb 7acf0349c3 desktop: Refactor main.rs 2021-05-11 18:58:08 -07:00
Mike Welsh 6051ee4cb1 core: Disallow .. in shared object paths (fix #3961)
Toss out any shared objects that contain ".." in the name
to avoid accessing files outside of the Ruffle data directory.

The DiskStorageBackend also will fail any requests with a ".."
component as an extra precaution.

Fixes #3961.
2021-05-09 23:20:32 -07:00
Mike Welsh 339f0e2862 desktop: Append .sol extension to SharedObject files
Also, prefix the shared object name with # if it contains a
slash, (e.g. `#mygame/foo`). This matches Flash's directory
structure and makes it easier to transfer saved data to Ruffle.
2021-05-09 23:20:32 -07:00
CUB3D cd1cde1708 avm1: Implement de/serialization of shared objects into Flash Player Lso format 2021-05-09 23:20:32 -07:00
Mike Welsh ba7fd1b2b9 chore: Appease clippy, bump url
Bump url and avoid `Url::into_string` deprecation warnings.
Fix `single_char_pattern` clippy lints.
2021-05-07 20:51:26 -07:00
Mike Welsh e35933aeee desktop: Fix window size calculation
Change width/height CLI paramters to `f64`, and also clamp window
size to minimum of 1x1 to prevent panics from invalid window
dimensions.
2021-05-06 17:56:35 -07:00
Nicolas F 423fcf5019 desktop: add parameters to specify window size
This adds two optional parameters, --width and --height, which
allow the user to specify a desired physical window width and
height to be used. If only one of the two parameters is present,
the other will be deduced from it and the movie's aspect ratio.

If neither are present, the window's size is set to the movie's
logical size, in accordance with the behaviour before this change.
2021-05-06 15:58:41 -07:00
Moulins 272841729e core: Replace SwfMovie's PropertyMap by a list of key-value pairs
PropertyMap is an AVM1-only concept, and shouldn't be used on cross-VM
types.
2021-05-03 13:47:14 -07:00
David Wendt 0c6584ca03 core: Store the viewport's scale factor on the stage 2021-04-26 01:15:42 -07:00
relrelb 79bcee07f5 audio: Properly round sound duration
Previously it was always rounded down. Change it to the nearest
integer.
2021-04-17 09:11:50 -07:00
EmperorBale 1020aa84d6 chore: Simplify response.status() formatting 2021-04-06 16:01:34 -06:00
EmperorBale e36ad2874b chore: Make error message more helpful 2021-04-06 16:01:34 -06:00