Commit Graph

6612 Commits

Author SHA1 Message Date
TÖRÖK Attila 36210c9f20 avm2: Add AIR-only constant `flash.ui.KeyLocation.D_PAD` 2024-01-25 22:44:41 +01:00
TÖRÖK Attila 67674ba089 avm2: Add constant `flash.ui.GameInputDevice.MAX_BUFFER_SIZE` 2024-01-25 22:44:41 +01:00
TÖRÖK Attila 8b9e490d2d avm2: Add remaining `StageVideoEvent` constants 2024-01-25 22:44:41 +01:00
TÖRÖK Attila 6f5cf27d55 avm2: Add undocumented `IOErrorEvent` constants 2024-01-25 22:44:41 +01:00
TÖRÖK Attila c7b7f24a19 avm2: Add remaining, AIR-only `IOErrorEvent` constants 2024-01-25 22:44:41 +01:00
TÖRÖK Attila bb0c30a686 avm2: Add `flash.events.ActivityEvent.ACTIVITY` constant 2024-01-25 22:44:41 +01:00
TÖRÖK Attila 97c5394600 avm2: Add remaining `ClipboardFormats` constants 2024-01-25 22:44:41 +01:00
moulins 727a9a8334
avm2: Don't forget to set the state in `Avm2Button::set_state`
Fixes #14922. Also removes a redundant line. These regressed in #14820.
2024-01-25 21:20:25 +00:00
Tom Schuster 499dfc8990 avm2: Partially implement FileReferenceList with a single FileReference 2024-01-25 19:10:56 +01:00
Aaron Hill bb9e7c04f7 avm2: Fix handling of Loader.loadBytes for images
I've switched back to the original code for creating
the bitmap/bitmapdata, rather than relying on custom
initialization logic that we only used in loader.

To make sure that the Bitmap/BitmapData are only exposed
to ActionScript at the correct time, I've added a new flag
to control when 'LoaderInfo.content' becomes non-null
2024-01-25 10:35:28 -05:00
Lord-McSweeney 38d58552f2 nit: Fix some minor capitalization mistakes 2024-01-25 08:05:48 +01:00
Aaron Hill 820e7e828a wgpu: Allow Stage3D texture upload where source is smaller than dest
Fancy Pants World 4 relies on this behavior.
2024-01-25 00:30:10 +01:00
Aaron Hill 1cb24b41b0 render: Support PixelBender ByteArray/Vector.<Number> input/output
When ActionScript uses a ByteArray/Vector.<Number> as a shader input
or target, we create a temporary Rgba32Float texture, and copy the
input float32 bytes to/from the texture.

Unfortunately, wgpu doesn't seem to support an Rgb32Float (3-channel)
texture. When the shader uses 3 channels, we use a Rgba32Float
(4-channel) texture, and manually insert/remove padding for the
alpha channels. This isn't very efficient, but it's the simplest
solution.

The temporary textures themselves aren't cached anywhere - if this
becomes a performance issue, we could look into using some of our
existing wgpu texture/buffer pooling code.
2024-01-24 08:31:52 -05:00
Moulins 5f83b45692 avm2: Add `Avm2Button::all_state_children` to centralize button child ordering 2024-01-23 22:43:13 +01:00
Moulins e014d7c023 avm2: Use inner mutability instead of `GcCell` in `Avm2Button` 2024-01-23 22:43:13 +01:00
Moulins d1cbe46e25 avm1: Use inner mutability instead of `GcCell` in `Avm1Button` 2024-01-23 22:43:13 +01:00
Tom Schuster 07afb04896 avm2: Fix FileFilter description getter 2024-01-23 18:43:36 +01:00
Tom Schuster 3ddf0aec28 avm2: Implement FileReference save 2024-01-23 18:43:36 +01:00
Tom Schuster 9101ab322e avm2: Implement flash.net.FileReference size 2024-01-23 18:43:36 +01:00
Tom Schuster c73be131f0 avm2: Implement flash.net.FileReference name 2024-01-23 18:43:36 +01:00
Tom Schuster fff841a22e avm2: Implement FileReference browse 2024-01-23 18:43:36 +01:00
Tom Schuster e7b8b75d07 avm2: Basic FileReference object boilerplate 2024-01-23 18:43:36 +01: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
Lv Yitian bebadb450f
avm2: Make `flash.system.Capabilities#playerType` return "Desktop" within the AIR runtime
Unless the SWF is loaded by an HTML page.
2024-01-23 07:45:11 +00:00
Aaron Hill c1fce1106f swf: Parse string as Vec<u8> instead of String in SWF
Some obfuscated SWFs may have invalid strings in their constant
pool - trying to immediately parse them as a utf-8 String throws
away information. Instead, we now store a `Vec<u8>`, which we
then use to construct an `AvmString` (or with `String::from_utf8_lossy`
for debug printing).
2024-01-22 21:50:45 -05:00
Aaron Hill 8dbcfe26f9 core: Display image load when using Loader.loadBytes
The handling of images in Loader.loaderBytes is similar to
the handling of SWFs - some of the data is exposed immediately
following the 'Loader.loadBytes' call, but the DisplayObject isn't
loaded until later.
2024-01-22 19:35:08 -05:00
Tom Schuster 173efbb77a avm2: Stub flash.desktop.Clipboard 2024-01-22 23:37:22 +01:00
sleepycatcoding 1804c23b93 avm2: Fix `Error.toString` regression
This was introduced by #14897, and to make sure this won't happen again I added a test.

Fixes #14901.
2024-01-22 19:34:12 +01:00
sleepycatcoding 2057417824 avm2: Implement `Error.prototype.toString`
And remove `ErrorObject::to_string` implementation. This fixes a few avmplus tests.
2024-01-22 15:09:55 +01:00
renovate[bot] 262dff83a4 fix(deps): update rust dependencies 2024-01-22 03:09:33 +01:00
cmdocmd c6331113ed
avm2: Stub `flash.text.engine.TextLine.getAtomIndexAtCharIndex` 2024-01-21 22:09:39 +01:00
Tom Schuster ab99eb3e09 avm2: Only lookup own properties in flash.net.getClassByAlias 2024-01-21 17:23:29 +01:00
cmdocmd 5cf9e00f9c
avm2: Stub XML::inScopeNamespaces 2024-01-20 14:27:27 -08:00
nosamu 379bed891f core: Invalidate cached bitmap on state change in AVM2Button 2024-01-20 11:53:19 +01:00
nosamu 284489b721 avm2: Stub Stage colorCorrection and colorCorrectionSupport 2024-01-20 11:35:28 +01:00
Tom Schuster c9c1326d13 avm2: Allow TLF to use embedded fonts when requested 2024-01-19 23:14:58 +01:00
Tom Schuster 0a6cf92a53 core: Implement DefineFont4 2024-01-19 23:14:58 +01:00
Tom Schuster e0f5b8906d desktop: Support device font with a non-zero index 2024-01-19 19:21:48 +01:00
Adrian Wielgosik 11fe70ab65 avm2: Fix possible overflow in address calculations 2024-01-18 23:35:03 +01:00
Tom Schuster 28b20322f0 avm2: Assume we have the default public namespace when matching XML names 2024-01-18 16:31:00 +01:00
TÖRÖK Attila 9aff953163 core: Make `Player::mutate_with_update_context` public 2024-01-18 09:00:40 +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
Daniel Jacobs 5765177ba7 web: Properly panic when loading invalid SWF files (fix #14665) 2024-01-17 17:38:47 -05:00
Aaron Hill 97f868b8d5 avm2: Don't hold GcCell read ref open for Loader.loadBytes
We were holding this open while dispatching an event,
leading to a panic if anything attempted to modify the
ByteArray.
2024-01-17 17:05:52 -05:00
Tom Schuster b54a807b37 avm2: Handle explicitly imported/used namespace for XML lookup
Fixes #14792
2024-01-17 21:11:25 +01:00
Aaron Hill 6c420fa5d5 avm2: Run most of Loader.loadBytes immediately
This requires moving `set_root_movie` into `UpdateContext`.

Now, we preload the entire movieclip immediately - Flash Player
does this regardless of the size of the SWF.
The 'Loader::load_complete' is delayed to the end of the frame
(which is when the root class is constructed for the loaded clip).
2024-01-17 00:53:08 +01: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
zhenghaoz 5169d9db3d avm2: Fix multiply with overflow in `string_to_f64` 2024-01-15 23:44:14 -05:00
Lord-McSweeney 9637682216 avm1: Correctly access topmost `LoaderDisplay` or `Stage` instead of accessing the parent of `avm1_root`
This fixes a case where `lockRoot` is involved.
2024-01-15 17:15:36 -08:00
Tom Schuster 1b5eb2e8e2 avm2: Stub XML::namespaceDeclarations
Improves #14734
2024-01-15 19:50:09 -05:00
renovate[bot] 3c115238fd fix(deps): update rust dependencies 2024-01-16 01:13:38 +01:00
sleepycatcoding 5b19ecec97 avm2: Implement XML.setLocalName 2024-01-15 23:53:17 +01:00
renovate[bot] e0a22b56ce fix(deps): update wasm-bindgen 2024-01-15 17:24:02 -05:00
Abiel Deneke df3a033b77 avm2: Stub Accelerometer.isSupported 2024-01-15 22:10:58 +01:00
Kamil Jarosz 5bd643cd4f core: Improve caret blinking behavior
Caret now blinks only when idle.
2024-01-15 08:20:22 +01:00
nosamu a638715bd8 avm2: Throw null param error in navigateToURL
Fixes #14733
2024-01-14 20:17:31 +01:00
Aaron Hill 3cbfbdd4a6 avm2: Add weird parse-as-uint special case to Object keys
When handling dynamic properties, avmplus will always try to
parse the string key name as a uint. If it succeeds, then the
key will be stored internally as a integer (via Atom), which is
observable by property iteration. The intention appears to have
been to support `obj[25] = someVal`, but it causes `obj["25"]`
and `obj[25]` to map to the same key (though iterating over the
object's keys will always produce a `number`).
2024-01-13 19:47:58 -05:00
TÖRÖK Attila 55cdfab3d3 avm2: Add API versioning to DisplayObjectContainer 2024-01-13 19:35:54 +01:00
TÖRÖK Attila 4c1d59c4a3 avm2: Cleanup: Make `Domain::get_class` not return a `Result`
As it was always the `Ok` variant anyway.
2024-01-13 11:53:35 -05:00
Aaron Hill 195822885e avm2: Stub all remaining TextField methods and properties 2024-01-12 20:42:18 -05:00
Aaron Hill 639d17d259 Apply 'xml["@myattr"]' logic when setting/deleting properties
We previously only applied this when getting properties.
2024-01-12 19:13:35 -05:00
sleepycatcoding 2775c917bf avm2: Correctly handle `@*` in string_to_multiname 2024-01-13 00:27:28 +02:00
Tom Schuster 79c5112f45 core: Provide a better fallback for Ming typefaces 2024-01-12 21:59:20 +01:00
Kamil Jarosz 70486465e8 core: Support TextField.restrict when pasting 2024-01-11 23:22:49 +01:00
Kamil Jarosz 2ef63d3a61 avm2: Implement TextField.restrict 2024-01-11 23:22:49 +01:00
Kamil Jarosz 1c15cd55b9 avm1: Implement TextField.restrict 2024-01-11 23:22:49 +01:00
Kamil Jarosz 43d4c26b77 core: Implement restrict for EditText
EditTextRestrict models the `restrict` property, which is used
to specify which characters the user is allowed to type.
2024-01-11 23:22:49 +01:00
Kamil Jarosz 5ece6981ce core: Fix caret and selection rendering
This commit fixes issues with caret and selection rendering:
1. They had the wrong height and were rendered lower than expected
   for some fonts and sizes.
2. The caret was not being rendered at all when there was no text,
   but only when the text was set earlier and then deleted.
3. The selection was rendered with translate_x=-1,
   which caused overlap over some glyphs.
2024-01-11 23:04:02 +01:00
Nathan Adams e993f5ce46 core: Support F13..F24 keys 2024-01-11 22:40:37 +01:00
Tom Schuster 7498ed51d8 core: Font kerning is in points not pixels 2024-01-11 21:39:17 +01:00
Tom Schuster ae8c0148c2 core: Use sans instead of serif when missing a font 2024-01-11 10:35:47 +01:00
Kamil Jarosz 5feafb2ca3 avm1: Add support for onSetFocus & onKillFocus
Methods `onSetFocus` & `onKillFocus` are invoked when focus is changed
for `TextField`, `Button`, and `MovieClip`.
Multiple SWFs use these methods to listen to a focus change,
e.g. in order to implement placeholders for text fields.
2024-01-10 21:59:25 -05:00
Aaron Hill c01ab53d2e avm2: Stub flash.text.engine.GraphicElement 2024-01-10 21:29:33 -05:00
Aaron Hill db623a90e8 avm2: Stub TextField.getCharBoundaries 2024-01-10 20:35:29 -05:00
sleepycatcoding aeedec19fa avm2: Implement XML.normalize 2024-01-11 01:30:47 +01:00
Tom Schuster 82ce40af82 avm2: Optimize op_get_property index access on array-like 2024-01-10 23:18:40 +01:00
Tom Schuster 532279b4e6 avm2: Inline Avm2::peek 2024-01-10 23:18:40 +01:00
Nathan Adams d89e4536b3 core: Support Japanese font defaults 2024-01-10 23:15:26 +01:00
Aaron Hill 9a96941de9 avm2: Improve Graphics.drawGraphicsData stubs
We now produce stubs or clearer errors for unsupported argument
combinations, instead of unclear `RustError`s
2024-01-10 01:53:27 +01:00
Tom Schuster ba3d1bbf66 core: Don't treat known aliases as default fonts before trying to load them as device fonts 2024-01-10 00:41:31 +01:00
Tom Schuster b34d3c9ad2 core: Explicitly match and use default fonts, before loading device fonts 2024-01-08 23:00:18 +01:00
Nathan Adams 7e4ac986f2 core: Add FontFace struct, for loading a Font from a file binary 2024-01-08 23:00:18 +01:00
Aaron Hill 6c2e28a08f Correctly handle zero-frame MovieClip
A MovieClip with zero frames can still have a child added
through ActionScript, which ticks normally.
2024-01-08 08:19:17 -05:00
renovate[bot] a328deab11 fix(deps): update rust dependencies 2024-01-08 02:59:04 +01:00
Aaron Hill 47db84473a avm2: Improve handling of Stage3D profile
We now validate the passed in profile, and return the selected profile
from 'Context3D.profile'. We don't yet alter the available
registers/textures based on the profile.
2024-01-07 22:34:33 +01:00
Aaron Hill 3156bf31ce avm2: Throw correct errors in Graphics.[drawPath,drawGraphicsData]
This is pretty straightforward, except for the fact that Flash
completely ignores the provided commands when the 'data' vector
is empty (if 'data' has even a single entry, then Flash will validate
that all of the commands have the correct amount of data to run).

One SWF that I tested relies on this behavior.
2024-01-07 19:57:47 +01:00
Tom Schuster e0abe72da4 avm2: Stub more TextField getLine methods 2024-01-07 12:29:26 -05:00
nosamu 95ad0f103f avm2: Stub flash.globalization.DateTimeFormatter
Closes #14577
2024-01-06 23:41:53 -05:00
Aaron Hill b96cfed6c7 avm2: Stub TextField.getCharIndexAtPoint 2024-01-06 23:11:43 -05:00
TÖRÖK Attila f0ed5c7211 chore: Upgrade gc-arena to 0.5.0 2024-01-06 09:45:35 +01:00
Tom Schuster 7da3411fd0 avm2: Revert XML get_property_local to using has_explicit_namespace
This partly reverts #13966. No new test failure, but makes the add test
for `xml["@attr"]` pass.
2024-01-06 09:16:04 +01:00
Tom Schuster 79e0e8b2ae avm2: XML::name() needs to mark attributes as such 2024-01-06 09:16:04 +01:00
Kamil Jarosz 47deaf50a2 core: Fix non-ASCII characters input in EditText
Casting the character to u8 and back to char caused some non-ASCII
non-control characters to be treated as control characters.
For instance the letter "ą" (U+0105) after casting to u8 and back
became ENQ (U+0005) which is a control character.
Some other letters worked, for instance the letter "ł" (U+0142)
became "B" (U+0042) and was not classified as a control character.

The test edittext_input was added to verify this behavior.
2024-01-05 13:03:43 -08:00
TÖRÖK Attila 217585daa8 chore: Delegate `[lints]` in `Cargo.toml` of all packages to the workspace 2024-01-05 11:28:19 +01:00
Lord-McSweeney 89b7f7a6b8 avm2: Use correct null parameter error in `registerClassAlias` 2024-01-04 21:34:21 +01:00
Tom Schuster dd53b4e06b avm2: Reduce the size of Op on 64bit 2024-01-04 21:15:09 +01:00
Lord-McSweeney a7716bb744 avm2: Implement FP's logic for parsing XML with multiple nodes 2024-01-03 15:14:11 +01:00
Tom Schuster 8b414c48c7 avm2: Optimize Avm2::push/pop slightly 2024-01-02 20:37:05 +01:00
Tom Schuster c8901d43a4 avm2: Force inlining of do_next_opcode 2024-01-02 20:37:05 +01:00