Commit Graph

10405 Commits

Author SHA1 Message Date
Nathan Adams e66f2397b5 core: Avoid some work in render_base if we're not cacheAsBitmap 2023-07-20 23:19:20 +02:00
Nathan Adams f030680084 core: Don't invalidate self on changing blend mode 2023-07-20 23:19:20 +02:00
Nathan Adams b6a8e0a471 core: Don't invalidate self on changing visibility 2023-07-20 23:19:20 +02:00
Nathan Adams 1fd8ca7bad core: Reduce the amount of false-invalidations 2023-07-20 23:19:20 +02:00
Aaron Hill c19fc1b72c desktop: Set max_execution_duration to Infinity by default
The `max_execution_duration` feature is pretty much useless on desktop,
and breaks slow SWFs by aborting script execution instead of letting
it continue.
2023-07-20 16:25:49 -04:00
Nathan Adams 3447b8bfdd chore: npm run format 2023-07-20 14:00:04 +02:00
renovate[bot] 0cbfda22db chore(deps): update node.js dependencies 2023-07-20 14:00:04 +02:00
Crowdin Bot b2afcbaf3e chore: Update translations from Crowdin 2023-07-20 13:41:04 +02:00
Nathan Adams a85aa41e6a tests: Add displacement filter scaling test 2023-07-20 12:41:30 +02:00
TÖRÖK Attila ad591224f9 tests: Another test with .filters instead of applyFilter 2023-07-20 12:41:30 +02:00
TÖRÖK Attila 4e7baf647e tests: Add another displacement map test 2023-07-20 12:41:30 +02:00
Nathan Adams 400ff32723 wgpu: Implement a naive DisplacementMap filter 2023-07-20 12:41:30 +02:00
Lord-McSweeney 7c33932f53 core: Allow NetStream script data to call any functions 2023-07-19 17:26:24 -06:00
Lord-McSweeney dd0d4f7eea avm2: Add test for NetStream.client 2023-07-19 17:26:24 -06:00
Lord-McSweeney 42c1facf55 avm1+tests: Implement onMetaData event for AVM1, fix netStatus test for AVM2 2023-07-19 17:26:24 -06:00
Lord-McSweeney 14b78aafcc avm2: Support onCuePoint and onMetadata NetStream.client function handlers 2023-07-19 17:26:24 -06:00
Aaron Hill 715abd8985 avm2: Use invisible mask descendants for mouse picking and rendering
The 'DisplayObject.visible' flag seems to be ignored for mask objects
(and their descendants) - mouse picking still takes them into account,
and they get rendered as part of the mask.

This commit changes display object rendering and AVM2 mouse picking
to ignore DisplayObject.visibility when dealing with mask objects/
descendants.
2023-07-19 23:18:28 +02:00
Nathan Adams b1ba144166 wgpu: Implement Bevel filter 2023-07-19 22:59:33 +02:00
CUB3D 771f568509 core: Trying to access a named shape should resolve to the parent as they have no object representation 2023-07-19 22:32:42 +02:00
sleepycatcoding 4c1c3cc105 avm2+tests: Allow concating XMLLists; add test 2023-07-19 16:03:10 -04:00
Nathan Adams 2729da8ec0 desktop: Send wgpu stats to tracy 2023-07-19 21:36:30 +02:00
Nathan Adams 5597535471 wgpu: Store wgpu::Instance in Descriptors 2023-07-19 21:36:30 +02:00
Nathan Adams 030c3c50e8 wgpu: Make `request_adapter_and_device` take in wgpu::Instance by ref 2023-07-19 21:36:30 +02:00
Daniel Jacobs affff425c5 web: Fix typo in build_wasm.js 2023-07-19 11:37:15 -04:00
Nathan Adams 5304009892 tests: Port Shumway's timeline tests over 2023-07-19 17:04:38 +02:00
Lord-McSweeney 5975714f75 avm2+swf+tests: Store metadata on Traits and VTable, report metadata in describeType; parse ABC metadata key-value pairs correctly; add test 2023-07-19 16:24:23 +02:00
Nathan Adams b8081ac609 core: Use actual bounding box of curves instead of an approximation 2023-07-19 02:09:12 +02:00
Nathan Adams 00ea6180dc avm2: Default line caps should be Round, not None 2023-07-19 02:09:12 +02:00
Aaron Hill 0fa16dfe69 avm2: Remove redundant 'depth' variable in XML parsing 2023-07-19 00:20:14 +02:00
Nathan Adams aa243dbe4c tests: Port Shumway's acid tests over 2023-07-18 23:48:21 +02:00
Nathan Adams a35ea3d9f2 wgpu: Sum up all center blur pixels before multiplying 2023-07-17 23:33:30 +02:00
Nathan Adams 18e343c6ad wgpu: Shift blur uvs over to the left of the kernel 2023-07-17 23:33:30 +02:00
Nathan Adams 8ecd9d0181 wgpu: Precompute left_weight in blur shader 2023-07-17 23:33:30 +02:00
Nathan Adams 13eda1361a wgpu: Use push constants for blur buffer, when supported 2023-07-17 23:33:30 +02:00
Nathan Adams 0076d65865 wgpu: Speed up blur filter by about 50% 2023-07-17 23:33:30 +02:00
MartySVK 6667ea1d94
avm2: Stub flash.globalization.CurrencyFormatter.format (#12108)
* fixes Rogue Soul 2

* return after stub_method
2023-07-17 21:00:43 +00:00
Crowdin Bot 50c819295c chore: Update translations from Crowdin 2023-07-17 21:15:43 +02:00
relrelb 151ad97686 avm1: Migrate `SharedObject` to `NativeObject` 2023-07-17 11:34:06 +03:00
renovate[bot] 268403faad chore(deps): lock file maintenance rust dependencies 2023-07-17 09:55:56 +03:00
nosamu de9ea9571b avm2: Implement SharedObject.size 2023-07-17 00:53:52 +02:00
nosamu fea0df192f avm1: Implement SharedObject.getSize() 2023-07-17 00:53:52 +02:00
MrCheeze e1819f7c00 tests: Add visual test for colored underlines.
Note that the underline's vertical position is wrong, meaning that the
expected.png will have to be updated whenever this is fixed.
2023-07-17 00:32:46 +02:00
MrCheeze 08e13b5056 core: Make underlines the same color as their text 2023-07-17 00:32:46 +02:00
Kornelius Rohrschneider ac5b3d9b2f core: Move use_new_invalid_bounds to Avm1 & Add documentation
The variable use_new_invalid_bounds has been moved from the
UpdateContext and the Player to the Avm1 struct because it is only used
for AVM1 code. A getter method and an activator method setting it to
true have been added as well.
The get_bounds function, which uses the variable, has been adapted to
use the getter and the activator.

Additionally, documentation has been added and improved.
The MovieClip now contains documentation about all MovieClip states and
the use_new_invalid_bounds documentation has been extended to explain
the logic of how the variable is set and used.
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider 48192efe8a core: Remove MovieClip::oldest_parent_swf_version
The MovieClip variable oldest_parent_swf_version and its getter method
have been removed because they were unnecessary, as the UpdateContext
already provides the root movie.
The call of the getter method has been replaced by
activation.context.swf.version().
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider a0493c770e core: Implement suggested changes to PR
The suggested changes in the feedback to the pull request have been
implemented.
Therefore, this commit consists of multiple smaller changes:

- The unload_movie method has been renamed to avm1_unload_movie.
- The movieclip_default_state test now doesn't test
  getTextSnapshot().getCount() because the underlying methods haven't
  been implemented in AVM1 yet.
  This should be reverted when they have been implemented or stubbed in
  AVM1.
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider bd67ce8661 tests: Add MovieClip state tests
Two tests testing the different states of a MovieClip have been added.

A MovieClip can be in different specific states (namely: default state,
initial loading state, error state, image state, success state and
unloaded state). A state of a MovieClip consists of the values of all
properties and the results of some getter functions of the MovieClip.
To make sure that all of these states are implemented correctly and will
continue to be so in the future, two MovieClip state tests have been
added.

The movieclip_default_state test tests the default state of a MovieClip
after it has been created with createEmptyMovieClip.

The movieclip_state_values test has MovieClips going through all other
states and tests if the values are correct in each.

These tests currently only test the MovieClip states when trying to load
a local file since Ruffle tests currently don’t support tests using
remote URLs. Test cases for remote URLs are still included and can be
used if Ruffle starts supporting remote URLs at some point.

A HelperTest, which can be used to find out about how the state of a
MovieClip changes when trying to load and unload it, has been included
as well.
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider c74a43e643 core: Add MovieClip unloaded state
An unload_movie method has been added to the MovieClip. It unloads the
MovieClip, which means that one frame after it has been called,
avm1_unload and the new transform_to_unloaded_state method get called
and the MovieClip enters the unloaded state in which some attributes
have certain values.
To do this, it creates and spawns a future which calls avm1_unload and
transform_to_unloaded_state (which actually makes the MovieClip enter
the unloaded state).
It uses the new MovieUnloader (which has been added to the Loader enum)
to pass the MovieClip to the asynchronous code. The MovieUnloader saves
a handle and the target clip, and the asynchronous code retrieves it
from the LoadManager.

unload_movie is now called when a MovieClip should be unloaded.
TODOs have been added, describing to check whether other avm1_unload
calls also need to be delayed by one frame and whether unload_movie also
needs to be called in other places.

Additionally, a spelling mistake has been corrected.
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider 8888aae60b tests: Add MovieClip invalid getBounds tests
The behaviour of when the results of getBounds / getRect calls on
MovieClips with invalid bounds are 6710886.35 and when they are
6710886.4 for each corner of the rectangle is rather complex.
To make sure it works correctly in every case and will continue to do so
in the future, eight tests testing the results of getBounds calls under
these circumstances have been added.

This needs to be tested in several tests because an internal state
determining the results can change irreversibly. Making sure that it
changes correctly on different occasions takes several tests.
2023-07-17 00:08:02 +02:00
Kornelius Rohrschneider d2ac9d32b4 core: Correct MovieClip default state
Previously, the MovieClip default state contained wrong values for
opaqueBackground, transform.pixelBounds and getRect & getBounds with
another default MovieClip as the parameter.
This has been corrected; the calculation of these values has been fixed.

To do that, a use_new_invalid_bounds_value variable has been added to
the UpdateContext and the Player (from which the UpdateContext is
created).
Additionally, an oldest_parent_swf_version variable has been added to
the MovieClip with a getter method for it. It is calculated and saved on
demand in the getter.
These variables are retrieved in the get_bounds function and used to set
use_new_invalid_bounds_value and to calculate the correct bounds.

Ruffle now uses the correct MovieClip default state.
2023-07-17 00:08:02 +02:00