Commit Graph

5345 Commits

Author SHA1 Message Date
Lord-McSweeney ab6d5006b4 avm2: Make sure RegExp prototype is not enumerable 2023-04-01 13:49:41 -07:00
Lord-McSweeney 18bff18d0b avm2: Fix QName's prototype 2023-04-01 13:49:41 -07:00
Tom Schuster 86395f194f avm2: Strip BOM in ByteArray::toString 2023-04-01 12:48:22 -07:00
Aaron Hill 6ce6fd1681 avm2: Use custom_unescape wherever we unescape XML
When we were using a fork of quick-xml, we modified the actual
unescape method. Now that we're using the crates.io release again,
we need to go through our `custom_unescape` function.
2023-04-01 02:25:24 -05:00
Aaron Hill 18f5ba18e9 core: Don't overwrite font descriptor with a duplicate
If a SWF contains multiple DefineFont tags with the same
font name (but different font IDs), the first tag will win
when a font is looked up by *name*. This affects the behavior
of EditText objects, which can have embedded HTML like
`<font face="MyFontName">` which performs a font lookup by name.

This fixes Fancy Pants World 4 Part 3, which contains two
DefineFont3 tags with the name FancyFont. The second font is
missing many glyphs, so using it causes us to be unable to
render the squiggle and life count text.
2023-03-31 22:47:00 -07:00
Mike Welsh 4c13da8fcb avm2: Unstub `BitmapData.lock` and `BitmapData.unlock`
These functions are intentionally no-ops in Ruffle because it has
no concept of a player dirty region, so unmark them as stubs.

The only observable difference is that Flash Player will sometimes
not re-render a `Bitmap` instance on the stage immediately if it's
`BitmapData` is locked and changed, but this is only temporary and
depends on the redraw behavior of the Flash Player.
2023-03-31 22:13:28 -07:00
Nathan Adams 1c6aaba57a core: Use actual clone() method when cloning bitmap 2023-03-31 21:56:41 -07:00
Nathan Adams 62d30251f2 core: Move clone to bitmapdata operations 2023-03-31 21:56:41 -07:00
Nathan Adams b07bf84da5 core: Skip a gpu->cpu sync in set_pixels_from_byte_array if we're filling the whole bmd 2023-03-31 21:32:15 -07:00
Nathan Adams fcaf462423 core: Fix set_pixels_from_byte_array respecting the bytearray position + tests 2023-03-31 21:32:15 -07:00
Nathan Adams 445912e760 core: Move set_pixels_from_byte_array out from avm2 to bmd operations 2023-03-31 21:32:15 -07:00
Aaron Hill 7f6cb99b08 avm2: Convert QName to ActionScript 2023-03-31 22:05:18 -05:00
Aaron Hill 27092ecb76 avm2: Convert RegExp to ActionScript 2023-03-31 17:08:21 -07:00
Mike Welsh b62040884c core: Make `DisplayObject::global_to_local` fallible
* `global_to_local` returns `None` if the object has zero scale.
 * Adjust AVM `globalToLocal` methods to return the untransformed
   point on failure.
 * Add `DisplayObject::mouse_to_local` to handle AVM `mouseX`
   and `mouseY` coordinates. For zero scale objects, these end up
   returning values based on the twips-to-pixels scale,
   divided by 20.
2023-03-31 16:26:11 -07:00
Mike Welsh 664b168d3d core: Make `DisplayObject::global_to_local_matrix` fallible
This will return `None` if the object is zero scale, and callers
can handle this appropriately.
2023-03-31 16:26:11 -07:00
Mike Welsh 54b7094c16 render: Make `Matrix::inverse` fallible
* Add `Matrix::determinant`.
 * Rename `Matrix::invert` to `inverse`.
 * `Matrix::inverse` return an `Option`, with `None` returned
    for non-invertible matrices.
 * AMV `Matrix::invert` duplicates the code as the behavior is
   different (works in f64 and not twips, etc.)
2023-03-31 16:26:11 -07:00
Nathan Adams 6f7493f16a avm2: Don't sync BitmapData when getting .rect 2023-03-31 21:07:38 +02:00
Nathan Adams c51ba098f6 render: Rename PixelRegion's (min|max)_(x|y) to (x|y)_(min|max) 2023-03-31 16:57:52 +02:00
Nathan Adams cfb18718a1 core: Remove debug output 2023-03-31 16:57:52 +02:00
Nathan Adams fd702dabcc core: Remove disposed checks from operations, it's responsibility of avm1 and avm2 to handle it their own way 2023-03-31 16:57:52 +02:00
Nathan Adams 66e2eb77e5 core: Rename bitmap_data_operations to just operations 2023-03-31 16:57:52 +02:00
Nathan Adams 94e5aa8f34 core: Fix calculating dirty area of BitmapData.draw() with rotation 2023-03-31 16:57:52 +02:00
Nathan Adams c85910b46d wgpu: Fixed panic when rendering texture to itself, by always rendering to an intermediary 2023-03-31 16:57:52 +02:00
Nathan Adams 68343369a3 core: Don't sync cpu->gpu in overwrite_cpu_pixels_from_gpu 2023-03-31 16:57:52 +02:00
Nathan Adams cae8f89c9b core: Remove clone from copy_pixels_with_alpha_source and don't sync if copying outside dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams d7b0a6f611 core: Remove clone from copy_pixels and don't sync if copying outside dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams f5501b57da core: Remove clone from merge and don't sync if copying outside dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams 44c35a5b50 core: Made palette_map not sync if copying outside of dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams b1b3eef283 core: Remove clone from threshold and don't sync if copying outside dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams 2b84e926ec core: Remove clone from copy_channel and don't sync if copying outside dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams 966f5bc816 core: Skip bitmapdata.draw which will affect 0 pixels 2023-03-31 16:57:52 +02:00
Nathan Adams e6d36ade7f core: Make get_pixels_as_byte_array not sync if the pixel is outside a dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams fd0ba4a753 core: Make get_vector not sync if the pixel is outside a dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams 864ee1c6df core: Make hit test methods not sync if the pixel is outside a dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams 8fc1b0d48e core: Make get_pixel and get_pixel32 not sync if the pixel is outside a dirty region 2023-03-31 16:57:52 +02:00
Nathan Adams e1f76bf135 core: Use map instead of and_then for MovieLibrarySource::bitmap_handle 2023-03-31 16:57:52 +02:00
Nathan Adams b035c7f24e core: noise and perlin_noise shouldn't perform a gpu->cpu sync 2023-03-31 16:57:52 +02:00
Nathan Adams 2b483a5953 core: Ensure MovieLibrarySource::bitmap_handle updates the bitmap handle 2023-03-31 16:57:52 +02:00
Nathan Adams d44bdc16a8 avm2: Ensure Graphics.lineBitmapStyle updates the bitmap handle 2023-03-31 16:57:52 +02:00
Nathan Adams 7e2382d804 avm2: Ensure DisplacementMapFilter.mapBitmap updates the bitmap handle 2023-03-31 16:57:52 +02:00
Nathan Adams 29ad46daf5 avm1: Ensure MovieClip.beginBitmapFill updates the bitmap handle 2023-03-31 16:57:52 +02:00
Nathan Adams c364deb545 avm2: Ensure Graphics.beginBitmapFill updates the bitmap handle 2023-03-31 16:57:52 +02:00
Nathan Adams 9e5c56fc4f core: BitmapData.transparent (in both avm1 and 2) shouldn't sync the whole bmd 2023-03-31 16:57:52 +02:00
Nathan Adams e62e05cd09 core: Move get_pixels from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 89c2fc841e core: Move get_vector from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams e4caedcc12 core: Move draw from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 57648b6380 core: Move apply_filter from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 8bb02c38c0 core: Move copy_pixels from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams eb04738b73 core: Move set_pixel from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams a41a797b4a core: Move merge from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 60a157224f core: Move color_bounds_rect from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 62b90c6c8e core: Move hit test methods from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 2c65f23eb8 core: Move compare from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 8a0cb4685e core: Move palette_map from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams b1b0394101 core: Move scroll from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 4510eb305b core: Move threshold from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams f476968693 core: Move color_transform from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 43716bbdc7 core: Move copy_channel from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams ea6fb1a3d4 core: Move perlin_noise from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams ffe6828e9c core: Move noise from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 285122a1fa core: Move flood_fill from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams c2af7b92c0 core: Move get_pixel from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 758d8f1492 core: Move get_pixel32 from BitmapData to bitmap_data_operations 2023-03-31 16:57:52 +02:00
Nathan Adams 31f46c6acf core: Move set_pixel32 from BitmapData to bitmap_data_operations, fixed set_pixels to no longer use it 2023-03-31 16:57:52 +02:00
Nathan Adams 1024fc8be5 core: Optimise fill_rect when replacing entire region after a draw call 2023-03-31 16:57:52 +02:00
Nathan Adams e614265c17 core: Move fill_rect from BitmapData to bitmap_data_operations, fixed a bug when using non-standard values, and added better tests for fill_rect showing the bug 2023-03-31 16:57:52 +02:00
Nathan Adams 033ab34c14 core: Extract bitmap_data_operations for common avm operations 2023-03-31 16:57:52 +02:00
Nathan Adams 311a165149 wgpu: Reintroduce texture promoting; only preassign buffer when the texture is frequently written/&read 2023-03-31 16:57:52 +02:00
Nathan Adams 579f046122 core: Don't mark anything dirty in an invalid drawRect call 2023-03-31 16:57:52 +02:00
Nathan Adams 68c87c7485 core: When drawing display objects to bitmapdatas, use their minimum bounds 2023-03-31 16:57:52 +02:00
Nathan Adams 6e859891af render: Take in dirty region in update_texture, only upload those pixels 2023-03-31 16:57:52 +02:00
Nathan Adams 137593b6a6 render: Extract (u32, u32, u32, u32) to PixelRegion 2023-03-31 16:57:52 +02:00
Nathan Adams e0bd911f2f render: Only copy a possible dirty area for bitmapdata.draw & read 2023-03-31 16:57:52 +02:00
Gleb Piskunov ed282f016b
avm1: Exclude __proto__ prop from object props enumeration
---------

Co-authored-by: Gleb Piskunov <emgfc@ya.ru>
2023-03-31 10:14:33 +00:00
Toad06 c81460beb0 avm1: Support strings in `MovieClip.setMask(str)` 2023-03-31 02:39:39 -07:00
Tom Schuster 8a8071e6d5 avm2: Stub XMLNode.nodeName setter and XMLNode.appendChild 2023-03-31 00:11:52 -07:00
Tom Schuster ce4ddee792 avm2: Shim flash.xml.XMLNode using XML 2023-03-31 00:11:52 -07:00
Aaron Hill 3e97f0e223 core: Update to latest quick-xml
I've moved our special entity handling logic into
a `custom_unescape` function. This lets us move off
of our fork of `quick-xml` back onto the crates.io release
2023-03-30 22:25:24 -07:00
Gleb Piskunov b18d3a2645
avm2: Add AS3 implementation of BitmapData.paletteMap (#10344)
Co-authored-by: Gleb Piskunov <emgfc@ya.ru>
2023-03-30 17:39:05 +00:00
relrelb 236a97bf31 render: Replace `ColorTransform` with `swf::ColorTransform` 2023-03-29 23:27:20 -07:00
onkrot 5632ade09c avm2: Hookup `DisplayObject.opaqueBackground` 2023-03-29 23:11:01 -07:00
Aaron Hill 8fa00de8a8 avm2: Convert Font class to ActionScript 2023-03-29 22:46:27 -07:00
Tom Schuster 330bd37237 avm2: Stub flash.net.XMLSocket 2023-03-29 22:33:16 -07:00
EmperorBale ac626493dd avm2: Fix panic in regexp when a wide empty string is used 2023-03-29 18:00:07 -07:00
Aaron Hill 34e4cffeb0 avm2: Use global domain for timer Activation 2023-03-29 19:05:19 -05:00
relrelb d71617209a render: Remove `RenderBackend::register_glyph_shape`
Use just `RenderBackend::register_shape` instead.
2023-03-30 01:46:04 +03:00
Tom Schuster b1f253775a avm2: Implement XML.childIndex 2023-03-29 14:40:29 -05:00
Tom Schuster c0400af1de avm2: Implement XML.copy 2023-03-29 11:04:32 -05:00
Aaron Hill cdba704b4b avm2: Construct Activation with Domain when setting named child 2023-03-29 09:27:34 -05:00
Nathan Adams 3a49870689 avm2: Fix errors in LoaderInfo and stubbed remaining properties 2023-03-28 11:57:00 +02:00
TÖRÖK Attila 05e2b4c729 avm2: Stub Video.deblocking and Video.smoothing 2023-03-28 10:20:29 +03:00
TÖRÖK Attila 72802de20e nit: Fix typo: "recieve" -> "receive" 2023-03-28 10:06:08 +03:00
renovate[bot] 5052e942b5 chore(deps): lock file maintenance rust dependencies 2023-03-28 09:31:15 +03:00
Toad06 9c37c9cd34 core: Correct `swapDepths` 2023-03-28 00:24:48 -05:00
Adrian Wielgosik 4e84632609 avm2: Fix edge cases in RegExp constructor 2023-03-27 19:09:09 -05:00
Ikko Eltociear Ashimine fc4b51b20f chore: fix typo in display_object.rs
defualt -> default
2023-03-27 20:54:16 +03:00
Mike Welsh a7bd3737a6 avm2: Implement `SharedObject.clear` 2023-03-26 22:22:27 -05:00
Aaron Hill a52cb7461e wgpu: Implement MSAA support for Stage3D
When we receieve a nonzero 'antiAlias' parameter, we create
create a non-multisampled resolve buffer to use with WGPU.

Several tests were already requesting antialiasing, so their
output images are now anti-aliased without any changes to
the tests themselves.
2023-03-26 18:05:41 -07:00
Aaron Hill 1a352aa453 avm2: Implement ApplicationDomain constructor and fix parent handling
Previously, the `ApplicationDomain` constructor ignored its argument,
instead of constructing a new domain with the specified domain as
the parent.

Additionally, we were incorrectly executing code with
`Activation::from_nothing` in several places, causing
`ApplicationDomain.currentDomain` to return the system domain
instead of the correct parent domain. I've introduced a new method
`Activation::from_domain`, which allows explicitly passing in the
domain. Internally, we now store an `Option<Domain>`, and panic
when calling `caller_domain` with a `None` domain. Several places
in the codebase have been adjusted to pass in the correct domain.
2023-03-26 17:43:46 -07:00
Aaron Hill da6384b30e Warn instead of panicking 2023-03-26 17:22:52 -07:00