Commit Graph

6467 Commits

Author SHA1 Message Date
Lord-McSweeney 8096146a0d avm1: Correctly mark unloaded movies as unloaded instead of relying on depth 2023-12-09 00:29:37 +01:00
Tom Schuster 8688d4da21 avm2: Stub flash.text.engine.FontDescription::isFontCompatible 2023-12-08 16:16:15 -05:00
Tom Schuster 06e33c104d avm2: Implement TextLine::textWidth and TextLine::textHeight 2023-12-08 19:15:01 +01:00
renovate[bot] 40b92e69f7 fix(deps): update rust dependencies 2023-12-05 21:08:16 +01:00
renovate[bot] a0c33382bf fix(deps): update wasm-bindgen 2023-12-04 12:08:22 +01:00
TÖRÖK Attila 82d61faa2c avm2: Use explicitly wrapping integer arithmetic operations 2023-12-03 16:34:27 +01:00
Aaron Hill 19c3df7cb6 avm2: Perform early allocation and exposing of SimpleButton object
The allocated-but-unconstructed object should be set on
the parent field before we construct the 'up state' object - this
is observable by ActionScript
2023-11-30 12:49:32 -08:00
MrCheeze 9f6ab2b7c6 core: Allow default fonts to use bold/italic fonts 2023-11-30 21:04:41 +01:00
Lord-McSweeney 1ce3ec636a avm2: Prevent `AVM1Movie`s from being moved around in the DO hierarchy 2023-11-30 07:12:37 -08:00
Lord-McSweeney 889c13f7c6 core: Remove leftover `avm2_avm1movie` 2023-11-30 07:12:37 -08:00
Lord-McSweeney 24c9f9386f core: Resolve review comments (no functional changes) 2023-11-30 07:12:37 -08:00
Lord-McSweeney f458a391fc avm2: Use caller movie when creating a `Bitmap` 2023-11-30 07:12:37 -08:00
Lord-McSweeney 7e145d7c7c core: Don't run DoABC(2) tags when the root movie is AVM1
KOF vs DNF relies on this.
2023-11-30 07:12:37 -08:00
Lord-McSweeney 8e1f145aba core: Use correct movie version for `Bitmap` DOs 2023-11-30 07:12:37 -08:00
Lord-McSweeney 5c04925ebc core/avm1: Remove usage of `context.stage` in a few places 2023-11-30 07:12:37 -08:00
Lord-McSweeney 23f7291a52 core: Immediately post-instantiate an AVM1 MovieClip being loaded by AVM2 2023-11-30 07:12:37 -08:00
Lord-McSweeney a71bfe777c avm2: Fix building after rebase, fix `AVM1Movie`, use `Avm2Activation::caller_movie_or_root` where appropriate 2023-11-30 07:12:37 -08:00
Lord-McSweeney fb8bde252f core/avm2: Hook up AVM1Movie 2023-11-30 07:12:37 -08:00
Lord-McSweeney 7eb3c3be0c core: Remove NotAvm2 AVM2 mouse pick enum option since it is equivalent to Miss 2023-11-30 07:12:37 -08:00
Lord-McSweeney cdbb08b4ee core: Remove context.is_action_script_3 2023-11-30 07:12:37 -08:00
Lord-McSweeney 58f33b6b94 core: Provide global domain for loading movies without avm2_data. 2023-11-30 07:12:37 -08:00
Lord-McSweeney 6eba8a6444 core: Use current movie instead of root movie in Avm1Button.event_dispatch 2023-11-30 07:12:37 -08:00
Lord-McSweeney 2553b1acdb core: Set movie of Stage's ChildContainer when Stage's movie is set 2023-11-30 07:12:37 -08:00
Lord-McSweeney 45f6dfdbd4 core: Remove some uses of context.swf 2023-11-30 07:12:37 -08:00
Lord-McSweeney fd538915b3 core: Change some uses of Avm1Activation::from_stub to from_nothing 2023-11-30 07:12:37 -08:00
Lord-McSweeney 43fdd30fc1 core: Improve mouse picking for mixed AVM 2023-11-30 07:12:37 -08:00
Lord-McSweeney 9e2b49f857 core: Remove most uses of context.is_action_script_3() 2023-11-30 07:12:37 -08:00
David Wendt 6d77fea750 avm1, avm2: Convert Object to AVM values as well 2023-11-28 18:53:01 -07:00
David Wendt 204bdbf74c avm1: Implement strict array conversion for AVM1, too. 2023-11-28 18:53:01 -07:00
Lord-McSweeney 0a4d1449fc avm2: Implement StrictArray conversion for FLV script data 2023-11-28 18:53:01 -07:00
David Wendt ab02e89b3b core: FLV's Strict Array type holds values, not key/value pairs.
*draws a zero on the 'days since last misdocumented feature' sign*
2023-11-28 18:53:01 -07:00
renovate[bot] 6da223a875 fix(deps): update rust dependencies 2023-11-27 09:44:47 +01:00
Aaron Hill 24aa9b8fe4 avm2: Copy data for async loadCompressedTextureFromByteArray
The caller might modify the ByteArray immediately after the call,
so we need to copy the ByteArray.
2023-11-25 19:11:54 -08:00
TÖRÖK Attila 941f87ca8e core/audio: Remove the now unused clip_frame parameter of start_stream 2023-11-26 03:51:28 +01:00
TÖRÖK Attila 8ce95d76fe core/audio: Remove the now unused stream_handle parameter of start_stream 2023-11-26 03:51:28 +01:00
TÖRÖK Attila 23960883f8 core/audio: Remove the now dummy is_loading_complete 2023-11-26 03:51:28 +01:00
TÖRÖK Attila ca8de7b791 core/avm2: Add sampledataevent to globals 2023-11-26 03:51:28 +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
Aaron Hill e0998642f6 core: Divide by 255 in blend_over calculation
This prevents the value from being changed when blending a
source pixel of 0x0 over a destination pixel (with alpha).
2023-11-25 22:29:30 +01:00
Lord-McSweeney f41059a60a avm2: Version-gate `JSON` to SWFv13 and above 2023-11-25 13:15:42 -08:00
Aaron Hill f12f457f5d avm2: Fix handling of public indices with nested iteration
This more closely aligns our code with the corresponding avmplus code.
A user-supplied index of '0' is special-cased, and we correctly
resume iteration when a public index mismatch is detected.
2023-11-25 21:34:48 +01:00
Tom Schuster a2021cd3e2 avm2: Remove dead init_display_object fn 2023-11-25 11:38:08 -05: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
Lord-McSweeney d3489ef1f3 avm2: Implement URLLoader for VARIABLES data format 2023-11-23 19:40:28 +01:00
sleepycatcoding 7be2eae4b8 avm2: Implement QName enumeration 2023-11-23 19:25:08 +01:00
Aaron Hill c920ceba51 avm2: Set RUNNING_CONSTRUCT_FRAME flag inside DisplayObject ctor
This ensures that this flag is set regardless of whether the
object is constructed by the timeline or from ActionScript
(it was previously only set when constructed by the timeline).
2023-11-23 10:36:37 -05:00
Robin Allen cad162121b
core: Fix MorphShape inaccuracy on complex paths (#14089)
* core: Fix MorphShape inaccuracy on complex paths

It's inaccurate to interpolate the moveTo/lineTo deltas individually
because on complex paths they're often small integers, which won't
interpolate smoothly.

Instead, interpolate absolute positions.
2023-11-21 12:41:45 +00:00
MrCheeze d23d16cb11 avm2: Report ProgressEvent when a sound is loaded (close #8932) 2023-11-20 16:14:03 -08:00
Robin Allen 1ce772befa core: fix lerp_twips sometimes being off-by-one due to FP error 2023-11-20 13:21:32 +01:00
renovate[bot] 7757d060ff fix(deps): update rust dependencies to v2 2023-11-20 09:03:08 +01:00
Aaron Hill 92a50d37f0 avm2: Mark MovieClip as initialized in 'on_construction_complete'
This ensures that a re-entrant 'construct_frame' call (e.g. due
to a goto or AVM2 button) does not end up marking a MovieClip as
initialized too early.

This issue was causing us to run 'fire_init_and_complete_events' too
early, firing Loader events before we had actually finished (and
before the SWF had registered the relevant listeners).
2023-11-19 20:52:23 -05:00
Lord-McSweeney 23a65c50f2 avm2: Add `Activation::caller_movie_or_root` to default to root movie and use it 2023-11-19 11:50:50 -08:00
Lord-McSweeney 5be2eb499a avm1: Copy `Activation`'s local register set when running a `catch` 2023-11-19 10:15:36 -08:00
sleepycatcoding a78a67ee24 avm2: Implement [[HasProperty]] for XMLList 2023-11-16 16:09:37 -05:00
Daniel Jacobs 117a4ea0bf avm2: Add ContextMenu clipboard related properties 2023-11-16 15:53:10 -05:00
Daniel Jacobs 75923e5568 avm2: Make MouseEvent isRelatedPropertyInaccessible a getter/setter 2023-11-16 18:33:26 +01:00
Nathan Adams d6f16b0be5 tests: Make tests use a virtual filesystem, which currently maps to the regular physical FS rooted in a test directory 2023-11-13 22:28:10 +01:00
Tom Schuster 1e5e80aa2c avm2: GroupElement TLF improvements 2023-11-13 21:59:29 +01:00
Nathan Adams f2b02acf44 chore: Appease clippy-beta 2023-11-13 20:26:50 +01:00
renovate[bot] 32c65e6460 fix(deps): update rust dependencies 2023-11-13 09:10:26 +01:00
TÖRÖK Attila 11c5a68452 avm2: nit: Fix typo: explict_namespace -> explicit_namespace
Spotted by @Lord-McSweeney.
2023-11-12 14:58:32 -08:00
TÖRÖK Attila 660cdd9477 core: nit: Fixed a typo and a double space in comments. 2023-11-12 14:58:32 -08:00
Aaron Hill 1501a858f6 avm2: Improve E4XNode::matches_name
Avmplus constructs a full `QName`, and uses the normal
Multiname matching logic. This would be a large refactor,
so I've just modified the existing method to properly
handle multiple namespaces.

I've also included a closely related fix - we should only treat
a multiname with the literal local name "@foo" as an attribute
when the namespace is the empty public namespace. We were incorrectly
reparsing multinames that contained multiple namespaces.
2023-11-12 17:38:56 -05:00
Tom Schuster 451e4bad10 amv2: Simplify XmlObject get_enumerant_name 2023-11-12 22:03:52 +01:00
Lord-McSweeney 576c7e1b14 avm2: Add `AccessibilityImplementation.accDoDefaultAction` 2023-11-12 06:52:51 -08:00
Aaron Hill de4d58630a avm2: Add stub for Graphics uvt parameter 2023-11-12 15:19:47 +01:00
Aaron Hill c360d45729 avm2: Use 'has_own_property' to check for prop in 'resolve_definition'
If Actionscript explicitly sets the property to 'undefined', we
should still succeed.
2023-11-12 00:38:35 +01:00
Lord-McSweeney 3cc9915076 avm2: TLF EditTexts should not be selectable 2023-11-11 06:53:18 -08:00
Lord-McSweeney fdb2a06ad8 avm2: Fix TLF text getting cut off vertically 2023-11-11 06:53:18 -08:00
Lord-McSweeney 1bb2422595
avm2: Correctness fixes to AMF serialization (#13537)
Fixes some cases where `amf::serialize_value` returns `None`
---------

Co-authored-by: Lord-McSweeney <Lord-McSweeney@github.com>
2023-11-10 17:59:26 -08:00
Lord-McSweeney 172b76d01f avm2: `DataEvent` fixes
- `DataEvent.data` should delegate to the superclass's `TextEvent.text`
- `DataEvent.clone` implementation was wrong
2023-11-10 15:09:28 -08:00
Aaron Hill b056e12f4b avm2: Re-use same AMFValue for the same Object ptr
This preserves object identity across a serialization
round-trip. Unfortunately, we don't currently implement this
correctly in flash_lso, so I've added a stub message.

Once flash_lso is fixed, this code will start working. For now,
it just allows us to detect (via the stub) if this is actually
used by an SWF.
2023-11-10 17:52:47 -05:00
sleepycatcoding e8ccbf4e2c avm2: Support enumeration for XML objects
Previously, iterating the XML object would iterate the prototype. This broke filtering expressions on XML objects, which should work.
2023-11-10 22:50:19 +01:00
Nathan Adams f03b6307a8 core: Don't invalidate when setting filters to the same value 2023-11-10 22:24:45 +01:00
Nathan Adams bce0608e1f tests: Move all wgpu code out of test framework, make it abstract over any/no renderer, and make wgpu option if imgtests isn't enabled 2023-11-10 22:02:18 +01:00
Lord-McSweeney 2f5166790c chore: Update flash-lso 2023-11-10 18:26:02 +01:00
Lord-McSweeney d51cfff03d chore: Remove leftover `println!` 2023-11-09 22:38:09 -05:00
Aaron Hill c821d0564e avm2: Use class aliases to serialize Vector type
This allows us to round-trip `Vector.<CustomType>` when
`CustomType` has an alias registered.
2023-11-09 22:01:59 -05:00
Aaron Hill 7110be920c Suport uploading ATFTextureData::CompressedRawAlpha
Fortunately, this is very simple - we can just take
the DXT5 data and upload it directly to the wgpu texture.
2023-11-10 02:00:40 +01:00
Aaron Hill 2cb1efca8c avm2: Improve AVM2 button construction handling
An Avm2 button appears to run a 'nested frame' during construction -
the same type of 'nested frame' performed by a goto. This will
run framescripts for all objects in the display hierarchy (including
orphans), resulting in an unusual child->parent framescript execution
order that DeathVsMonstars_decrypted.swf depends on.
2023-11-10 01:33:07 +01:00
Mike Welsh 5232854f00 avm1: Implement `MovieClip.scale9Grid` 2023-11-09 21:38:53 +01:00
Mike Welsh aacc67b096 avm2: Implement `DisplayObject.scale9Grid` 2023-11-09 21:38:53 +01:00
Mike Welsh cc6320a2dc core: Add `DisplayObject::scaling_grid` 2023-11-09 21:38:53 +01:00
Richy McGregor 10ebc60a7d core: Always redraw text in relayout 2023-11-09 21:20:10 +01:00
Richy McGregor 924e5ef632 core: Store EditText requested height and width (close #13026)
remove now unused EditTextStatic bounds
2023-11-09 21:20:10 +01:00
Richy McGregor 4c819b5fca core: Make set_width & set_height call relayout
this requires an UpdateContext to be passed into both methods
2023-11-09 21:20:10 +01:00
Richy McGregor fcc0d14188 core: Derive Debug for AutoSizeMode 2023-11-09 21:20:10 +01:00
Richy McGregor dd083dd502 chore: Fix typos 2023-11-09 21:20:10 +01:00
Nathan Adams 6061186c0f core: Fix formatting texts when they start with any amount of <br>s 2023-11-09 20:52:16 +01:00
Nathan Adams fe2ff4f242 chore: Update flash-lso 2023-11-09 20:01:52 +01:00
Aaron Hill bab2a80d64 Fix vtable property amf serialization 2023-11-09 19:43:55 +01:00
Aaron Hill 10d6157755 avm2: Work on AMF3 custom object serialization 2023-11-09 19:43:55 +01:00
Aaron Hill 2982c12ed4 Use VM_INTERNAL api version in helper methods
This is a better default than using the lowest possible version,
as it allows things like AMF deserialization to see all properties
on the target object.

This only affects explicit Ruffle-side property setting - interpreted
code will continue to use the namespace version determined by the
SWF version.
2023-11-09 19:22:27 +01:00
Aaron Hill fa05c66e2a avm2: Implement namespace versioning
This allows us to hide things like `MovieClip.isPlaying` from older
SWFs, which may define an `isPlaying` method without marking it
as an override.

This has the largest impact on public namespaces. There is no longer
just one public namespace - we now have a public namespace per API
version. Most callsites should use `Avm2.find_public_namespace()`,
which determines the public namespace based on the root SWF API version.
This ensures that explicit property access in Ruffle (e.g. calling
"toString") are able to see things defined in the user SWF.

This requires several changes other:

* A new `ApiVersion` enum is introduced, storing all of the api versions
  defined in avmplus
* NamespaceData::Namespace now holds an `ApiVersion`. When we read a
  namespace from a user-defined ABC file, we use the `ApiVersion` from
  the root movie clip. This matches Flash Player's behavior - when a
  child SWF is loaded through `Loader`, its API version gets overwritten
  with the parent's API version, which affects definition visibility and
  'override' requirements in the child SWF. Note that 'behavior changes'
  in methods like `gotoAndPlay` are unaffected.
* The `PartialEq` impl for `Namespace` has been removed - each call site must now choose
  to compare namespaces either by an exact version match, or by
  'compatible' versions (a `<=` check) with `Namespace::matches_ns`
* `PropertyMap` now uses `Namespace::matches_ns` to check for a
  compatible version when looking up a definition.
* When compiling our playerglobal, we pass in the `-apiversioning` flag,
  which causes asc.jar to convert `[API]` metadata into a special
  Unicode 'version mark' suffix in namespace URLs. We parse this
  when loading namespaces to determine the API version to use for
  playerglobal definitions (unmarked definitions use the lowest possible
  version).

Unfortunately, this makes ffdec unable to decompile our
playerglobal.swc
I've going to file an upstream issue
2023-11-09 15:27:33 +01:00
Lord-McSweeney 4d99459849 avm2: Add another FIXME to `create_text_line` 2023-11-09 13:38:48 +01:00
Lord-McSweeney af878c69b2 avm2: Always return same TextLine passed to `recreateTextLine` in `recreateTextLine` 2023-11-09 13:38:48 +01:00
Lord-McSweeney 9be62bf561 chore: fmt 2023-11-09 13:38:48 +01:00
Lord-McSweeney 8301ac16cf avm2: Stub TextJustifier.lineJustification; add constructor handling code 2023-11-09 13:38:48 +01:00
Lord-McSweeney 1f62c29738 avm2: Proper handling of null text of content element 2023-11-09 13:38:48 +01:00