Commit Graph

587 Commits

Author SHA1 Message Date
sleepycatcoding df7d95bf43 desktop: show translated string for currently selected language 2024-03-31 20:54:18 +02:00
Kamil Jarosz 589e7bfb31 desktop: Prevent egui from consuming the Tab key 2024-03-27 00:40:24 +01:00
sleepycatcoding d4e5e54dc0 desktop: Fix window title after closing the file
Previously the title showed the filename in the title even after the file
had been long closed.
2024-03-25 20:13:56 +01:00
Nathan Adams ad34f04b7a desktop: Make sure all backends are tried in the Preferences dialog 2024-03-24 21:04:09 +01:00
Nathan Adams 38f7443605 desktop: Try each graphics backend one-by-one until we have a result 2024-03-24 21:04:09 +01:00
Adrian Wielgosik 08157a056e build: Fix redundant import warnings 2024-03-23 19:23:18 +01:00
Adrian Wielgosik 27cd08deeb avm2: Provide an option to disable the optimizer 2024-03-16 22:40:15 +01:00
TÖRÖK Attila 3399662c76 desktop: Follow `Document` -> `DocumentMut` change in `toml_edit` 2024-03-14 16:45:29 +01:00
Colin Kinloch f472bbc701 desktop: Use egui-winit clipboard
The `egui-winit` clipboard implementation provides a nice interface to
`smithay-clipboard` which correctly implements the core wayland
selection protocol. It uses `arboard` as a fallback for other platforms.
2024-03-13 23:30:15 +01:00
Colin Kinloch 787b6f5dfb desktop: Make clipboard support optional
On wayland ruffle only supports `wlr-data-control-unstable-v1` which is
not intended to be supported by all compositors.
2024-03-12 20:32:23 +01:00
Nathan Adams eaab481dcc desktop: Default RUST_LOG to warn,ruffle=info,avm_trace=info 2024-03-11 21:28:25 +01:00
Nathan Adams a5fe7e1c81 desktop: Add log filename pattern (e.g. with timestamp) to preferences 2024-03-11 21:28:25 +01:00
Nathan Adams 6585ffdd28 desktop: Log to ruffle.log in addition to stdout 2024-03-11 21:28:25 +01:00
Daniel Williams 4927baf290
desktop: URL-decode the window title (fix #15454) 2024-03-11 16:54:56 +00:00
Nathan Adams 6971a1aa5e desktop: Persist volume to disk 2024-03-07 20:38:06 +01:00
Nathan Adams e18055d351 desktop: Don't translate opengl, metal etc 2024-03-07 20:38:06 +01:00
Kamil Jarosz 3d04971ae4 desktop: Make WinitAsyncExecutor thread-safe and prevent deadlocks
Not thread-safe WinitAsyncExecutor was wrapped with a Mutex, making
any access to the instance exclusive. It was problematic, because
when a task was awoken from within another task, it resulted in
a deadlock, because the mutex was not reentrant.

This patch makes WinitAsyncExecutor thread-safe and changes how tasks
are locked. Specifically, instead of locking all tasks, only
the currently executed task is being locked. This allows waking any
other task from within it.
2024-03-05 23:14:08 +01:00
Nathan Adams 571f60abff desktop: Document preferences a little 2024-03-05 00:02:27 +01:00
Nathan Adams c713f56ac0 desktop: Allow changing the audio output device 2024-03-05 00:02:27 +01:00
Nathan Adams 09dfa6427e desktop: Allow changing the language in Preferences 2024-03-05 00:02:27 +01:00
Nathan Adams baa0c5c7cd desktop: Use custom (de)serialization for preferences, not serde 2024-03-05 00:02:27 +01:00
Nathan Adams ed56c70b55 desktop: Only show possibly-available backends for the current system 2024-03-05 00:02:27 +01:00
Nathan Adams d62963c2d4 desktop: Rename config.rs to preferences.rs 2024-03-05 00:02:27 +01:00
Nathan Adams 8b589a9620 desktop: If the preferred graphics backend is unavailable, pick another one and warn 2024-03-05 00:02:27 +01:00
Nathan Adams b9c6db1cb9 desktop: Add preferences dialog, allow setting of graphics backend/power 2024-03-05 00:02:27 +01:00
Nathan Adams 8df7efb662 desktop: Load graphics preferences from disk 2024-03-05 00:02:27 +01:00
Nathan Adams acd01e2eb0 desktop: Add GlobalPreferences struct, prep for storing preferences to disk 2024-03-05 00:02:27 +01:00
Nathan Adams 6136d14179 desktop: Add --save-directory 2024-03-05 00:02:27 +01:00
Nathan Adams 145275af86 desktop: Remove backwards compatibility code from 3 years ago 2024-03-05 00:02:27 +01:00
TÖRÖK Attila 9e8c406cd9 desktop: Introduce a `TaskKey` type for the slotmap in `executor.rs` 2024-03-03 21:18:39 +01:00
TÖRÖK Attila 5b920b8447 chore: Deduplicate the `fluent-templates` dependency 2024-03-02 19:54:00 +01:00
TÖRÖK Attila 55773f0205 chore: Replace `generational-arena` with `slotmap` 2024-03-02 19:42:11 +01:00
Tom Schuster a03355458f desktop: Add gamepad support using gilrs 2024-02-28 21:21:09 +01:00
Kamil Jarosz 9bc6700531 desktop: Get rid of busy waiting in connect_socket
This patch makes connect_socket await on recv
instead of spin and wake the CPU each 10 milliseconds.
2024-02-28 19:42:54 +01:00
Kamil Jarosz f5d52272ca desktop: Flush pending data before socket closes
This patch makes sure that any pending data is sent before
the socket closes. Without this fix Ruffle ignored the data sent
right before calling socket.close.
2024-02-28 19:42:54 +01:00
Kamil Jarosz f6907a5c73 desktop: Add tests for connect_socket
Add tests for ExternalNavigatorBackend::connect_socket.
2024-02-28 19:42:54 +01:00
Kamil Jarosz 2535b926a7 desktop: Add WinitFutureSpawner
This improves testability, decouples ExternalNavigatorBackend
from the event loop, and improves readability.

Instead of passing a channel to send the future to and an event loop
to poll, a WinitFutureSpawner is created which performs the
action of spawning a future and polling the event loop.
2024-02-28 19:42:54 +01:00
Kamil Jarosz cc8b0aa5dd core: Use async channels in NavigatorBackend
This has several advantages:
1. it allows using async variants of send and recv,
2. it adds consistency as until now Receiver was async,
   and Sender was not.
2024-02-28 19:42:54 +01:00
TÖRÖK Attila d2e854fb73 nit: desktop/navigator: Fix a typo in a comment: ownerhsip -> ownership 2024-02-22 21:14:41 +01:00
Kamil Jarosz 98c0dc4616 desktop: Prevent resource leak on reload
This patch makes TaskHandle reference the executor by a weak reference.
Prior to this change, there was a possibility of a resource leak, where
the executor, its tasks, and resources held by them were not properly
dropped due to existing references to the executor.

This manifested by e.g. unclosed sockets after reload, which required
the whole program to be restarted in order to be closed properly.
2024-02-21 21:45:01 -05:00
TÖRÖK Attila 28c380cfac desktop: Update egui to 0.26.0 2024-02-05 19:05:10 +01:00
Kamil Jarosz 50b5f29c0a text: Make enter add a new line in multiline fields 2024-02-03 13:40:07 +01:00
Kamil Jarosz 0657d2daa2 text: Add advanced horizontal text control codes 2024-02-01 20:18:29 +01:00
Nathan Adams e778e5ed58 desktop: Fix context menu, use new approach rather than trying to hack activate egui's menu 2024-01-27 09:44:31 +01:00
arthomnix 3e82ba9a63 desktop: Allow specifying WGPU instance flags from environment 2024-01-26 22:33:18 +01:00
David Wendt 006c3af4b8 core: Add backend method for getting the expected length of a response. 2024-01-25 23:24:09 -07:00
David Wendt 91dd9563bb core: Add method to read downloads in chunks instead of all-at-once. 2024-01-25 23:24:09 -07:00
David Wendt 06eb2e1ee8 core: `Request` is now a trait. Body download is deferred to a second async method. 2024-01-25 23:24:09 -07:00
Aaron Hill dbcefd060f debug_ui: Add 'Show Domains' menu to view domains and classes
This opens a searchable list (similar to what we have for display
objects), which shows a tree of Domains and their associated classes.

Currently, clicking on the domain/class buttons doesn't do anything.
In a follow-up, I'm planning to add additional windows to display
information about a class.
2024-01-23 11:34:14 +01:00
Nathan Adams 4d16e24889 wgpu: Update wgpu and naga to 0.19 2024-01-21 19:36:08 +01:00
Isao Mishima d7df55fd7b
desktop: Change the default Japanese fonts (#14877) 2024-01-21 15:21:48 +01:00
Tom Schuster e0f5b8906d desktop: Support device font with a non-zero index 2024-01-19 19:21:48 +01:00
Kamil Jarosz d89ab3dc83 desktop: Fix doubling inputted characters
Fix a bug introduced by f65060e8.
The text input event was triggered two times: at key press and release.
This patch makes sure that text input is triggered only on key press.
2024-01-18 00:21:19 +01:00
TÖRÖK Attila d153290fd6 nits: Fix a whole bunch of typos all over the place 2024-01-17 23:59:19 +01:00
Daniel Jacobs 8f2292c2c7 core: Add error for loading invalid SWF files and display as appropriate 2024-01-17 17:38:47 -05:00
Nathan Adams f65060e8c9 desktop: Update winit to 0.29.10 and egui to 0.25.0 2024-01-16 21:10:36 +01:00
TÖRÖK Attila 078b264c19 desktop: Support F13..F24 keys 2024-01-11 22:40:37 +01:00
Nathan Adams d89e4536b3 core: Support Japanese font defaults 2024-01-10 23:15:26 +01:00
Tom Schuster 4db87a9643 desktop: define default fonts 2024-01-08 23:00:18 +01:00
Tom Schuster 2a2bcbbfbc desktop: Load device fonts from system 2024-01-08 23:00:18 +01:00
TÖRÖK Attila f9aa6dbea4 chore: Fix a beta clippy lint: `clippy::blocks_in_conditions` 2023-12-23 13:06:47 +01:00
Tom Schuster e3d8a279ad core: load_device_font register function must be &mut 2023-12-22 13:47:48 +01:00
nosamu 989988631f desktop: Fix egui scaling
Fixes #14413
2023-12-17 22:14:14 -08:00
Aaron Hill 287ca8801a avm2: Implement AIR playerglobal versioning
This builds on our existing playerglobal versioning support
to add in AIR versioning. We closely follow the avmplus implementation:

* When an SWF is loaded, we chose either a FlashPlayer or AIR
APIVersion for its SWF version, based on our configured player runtime.
* When loading playerglobals, we look at the player runtime. In AIR
  mode, we map FlashPlayer-versioned definitions to the closest AIR
  version. This ensures that all runtime APIVersions are in the
  same series (either AIR or FlashPlayer). In FlashPlayer mode,
  all AIR-versioned definitions get mapped to VM_INTERNAL, hiding
  them from user code.

Part of our existing api versioning code was implemented incorrectly.
Within playerglobals, we need to treat all unmarked namespaces as
VM_INTERNAL - this allows things like playerglobal script
initializer "initproperty" opcodes to see any VM_INTERNAL AIR
definitions (when we run under FlashPlayer mode). Previously, we
were using AllVersions, which would result in those VM_INTERNAL
definitions being hidden from other playerglobal code, which is
not correct.

Using this support, I've added a stub for the AIR-only
'flash.net.DatagramSocket'. I've also extended the test framework
with a new 'player_options.runtime' config option, which can be
set to "AIR" or "FlashPlayer" to configure the test runtime mode.

I've also added two new tests:
* 'air_hidden_lookup' runs under the FlashPlayer runtime, and verifies
  that a list of classes (currently just "DatagramSocket" are
  inacessible).
* 'air_datagram_socket', which uses `player_options.runtime = "AIR"`
  to construct an instance of `flash.net.DatagramSocket`. We can
  extend this test once we implement more of `DatagramSocket`

With this commit, we have all of the needed infrastructure to start
implementing and testing AIR-only classes and methods.
2023-12-16 19:11:50 -05:00
TÖRÖK Attila bf9cf92af8 render/wgpu: Update wgpu to 0.18.0, naga to 0.14.1, naga_oil to 0.11.0, egui to 0.24.1 2023-12-14 01:36:42 +01:00
Tom Schuster 0fad4c23d2 desktop: Also spoof top.location.href 2023-12-13 20:10:39 +01:00
Aaron Hill 993d8d9f9b core: Add PlayerRuntime::{FlashPlayer, AIR} for Adobe AIR support
We've now had two different bug reports involving Adobe AIR
SWFs, so I'm going to go ahead and start adding a framework
for AIR support.

This commit just adds a command-line option
`--player-runtime <flash-player|air>` (defaulting to `flash-player`),
and passes it along to the `Player`. The actual value is currently
unused - in a follow-up PR, I'm going to implement namespace versioning
for AIR.
2023-11-25 19:05:51 -05:00
Lord-McSweeney d3b9d8a451 dekstop: Support `quit` and `fullscreen` fscommands 2023-11-25 15:49:02 -08:00
MrCheeze 5920a6426e core: Allow Regular/Bold/Italic device fonts to be registered separately 2023-11-24 17:08:35 +01:00
Tom Schuster 96059a8e25 avm2: Implement flash.system.Security pageDomain 2023-11-23 19:55:32 +01:00
Tom Schuster 48102a20a2 desktop: Add window.location.href spoofing to the fake ExternalInterface 2023-11-23 19:12:34 +01:00
Tom Schuster a113d96fdd desktop: Include file path in IO error message 2023-11-22 23:59:46 -05:00
Nathan Adams 424821724f desktop: Show ruffle logo in about dialog 2023-11-12 21:42:02 +01:00
CUB3D b0d88645bc avm1: Implement FileReference 2023-11-03 19:32:24 +01:00
Nathan Adams 74a7ab5afe core: Implement device font lookup, and multiple default device fonts 2023-10-15 14:09:21 +02:00
Aaron Hill 25cf77c4a2 desktop: Handle cookies and Content-Type for HTTP requests
Both of these are handled automatically by the browser in the
web backend. This makes the desktop client store cookies between
requests (though they are discarded when the desktop player is closed),
and set the "Content-Type" header based on the mime-type supplied
in the URLRequest.
2023-10-02 19:41:39 -04:00
TÖRÖK Attila d7d5928c21 chore: Follow rfd API change (set_description) 2023-09-18 00:00:45 +02:00
TÖRÖK Attila b8190660aa chore: Follow rfd API change (MessageDialogResult) 2023-09-18 00:00:45 +02:00
Kornelius Rohrschneider 53ba75d587 Move logarithmic volume transformation to AudioMixer
Previously, the volume transformation to adapt the volume for
logarithmic hearing has been performed in the VolumeControls Rust struct
and TypeScript class each.
Since this calculation is the same on desktop and web and should be
implemented in the audio backend, it has been moved into the
AudioMixer::mix_audio method.
The VolumeControls struct and class now only calculate the linear volume
out of the checkbox and the slider.
Player::set_volume and Player::volume now don't take and return the
adapted volume, but use the linear volume (which gets saved internally).
2023-09-07 00:51:58 +02:00
Kornelius Rohrschneider a550a998c3 desktop: Add desktop volume controls
The desktop version of Ruffle now has a volume controls window. It can
be accessed through the menu bar (Controls > Volume controls).
It contains a mute button and a slider from 0 to 100.

The volume settings set in the GUI are saved in a new VolumeControls
struct, which is also used to calculate the real volume (adapted for
logarithmic hearing) out of the entered volume and the mute checkbox.
As soon as the volume is changed in the GUI, the real volume will be set
in the player (if the player exists).

The player doesn't set its volume level according to the PlayerOptions
after its creation anymore. Instead, RuffleGui::on_player_created now
gets the player and sets its volume to the real volume set in the GUI.
The volume in the GUI itself defaults to the PlayerOptions value.
This also fixes the issue that the PlayerOptions volume has previously
not been adapted for logarithmic hearing.

The existing ftl files have been adapted (and new ones have been
created) to include the new multilingual text in the menu bar and the
volume controls window.
2023-09-07 00:51:58 +02:00
David Wendt 7158039135 audio: Audio streamed from FLVs do not have the SWF MP3 header 2023-08-23 15:36:20 -06:00
sleepycatcoding ba5eb9532b desktop: Fix --no-gui issues 2023-08-08 18:25:45 +02:00
Daniel Jacobs dbb5e381f2 core/desktop/web: Play unsupported videos with browser 2023-08-07 14:31:33 -06:00
Lord-McSweeney 66df964709 desktop: Don't wrap context menu item text; support enabled/disabled ctx menu items 2023-08-05 22:06:10 +02:00
sleepycatcoding ad5f087baa desktop: Add --no-gui flag 2023-08-02 22:34:25 +02:00
sleepycatcoding d7b6e588d0 desktop: Use new socket API 2023-07-31 22:32:03 +02:00
Nathan Adams 55906c22fa desktop: Change 'socket mode' text to 'TCP Connections' 2023-07-26 19:44:39 +02:00
Nathan Adams 1a0a82d898 core: Move fscommand execution outside of ExternalInterfaceProvider, so it can be implemented without causing ExternalInterface.available to become true 2023-07-26 17:00:15 +02:00
sleepycatcoding a432b1cbca desktop: Split read/write tasks for TcpStream
This should improve latency as we no longer wait for writing.
2023-07-23 09:13:01 +02:00
sleepycatcoding 4db16b76ab Chore: fmt 2023-07-23 09:13:01 +02:00
sleepycatcoding 74b66fdd73 core+desktop: Rename SocketBehavior to SocketMode
Also change command line flag from --socket to --socket-mode
2023-07-23 09:13:01 +02:00
sleepycatcoding d7421a9812 desktop: Default socket behavior to ask 2023-07-23 09:13:01 +02:00
sleepycatcoding 7cb6998991 chore: fmt 2023-07-23 09:13:01 +02:00
sleepycatcoding 4c6ce79210 desktop: Differentiate between TimedOut and Failed connection 2023-07-23 09:13:01 +02:00
sleepycatcoding caddd5512b desktop: remove Option for connection timeout 2023-07-23 09:13:01 +02:00
sleepycatcoding 4501bc19c4 chore: allow clippy::too_many_arguments 2023-07-23 09:13:01 +02:00
sleepycatcoding b46cc2aadc desktop: remove unneeded comment 2023-07-23 09:13:01 +02:00
sleepycatcoding c0ebafdb95 desktop: Use provided timeout when connecting 2023-07-23 09:13:01 +02:00
sleepycatcoding df4ee7fe05 Chore: Fmt 2023-07-23 09:13:01 +02:00
sleepycatcoding 2bcfc25b9f desktop: Add socket behavior to OpenDialog 2023-07-23 09:13:01 +02:00