Commit Graph

4718 Commits

Author SHA1 Message Date
MartySVK ad688b45da
avm2: added Stage.fullScreenSourceRect stub (#9265)
* avm2: added Stage.fullScreenSourceRect

* fixing checks I hope
2023-01-22 16:29:12 -05:00
Aaron Hill e2954821ea
core: Take two - delay reading image back from render backend using `SyncHandle` (#9184)
* Take two: Delay reading image back from render backend using `SyncHandle`

This allows us to avoid blocking immediately after a `BitmapData.draw` call.
Instead, we only attempt to use the `SyncHandle` when performing an operation
that requires the CPU-side pixels (e.g. BitmapData.getPixel or BitmapData.setPixel).

In the best case, the SWF will never explicitly access the pixels of
the target BitmapData, removing the need to ever copy back the render backend
image to our BitmapData. If the SWF doesn't require access to the pixels immediately,
we can delay copying the pixels until they're actually needed, hopefully allowing
the render backend to finish processing the BitmapData.draw operation in
the backenground before we need the result.

Now that the CPU and GPU pixels can be intentionally out of sync with
each other, we need to ensure that we don't accidentally expose 'stale'
CPU-side pixels to ActionScript (which needs to remain unaware of
our internal laziness). We now use a wrapper type `BitmapDataWrapper`
to enforce that the `SyncHandle` is consumed before accessing the
underlying `BitmapData.

* core: Skip GPU->CPU sync for source and target BitmapData during draw

* Introduce DirtyState enum
2023-01-21 21:08:04 +00:00
MartySVK 6d5f6385a5
avm2: added TextField.restrict stub (#9218)
* added TextField.restrict stub

Co-authored-by: Martin Mravec <marty.devil@gmail.com>
2023-01-19 22:23:33 -05:00
Adrian Wielgosik fb4d2d3f04 avm2: Implement TextField.maxChars 2023-01-19 01:24:47 +01:00
Nathan Adams 5f72ebaef9 core: Don't call avm2 callstack method if there's no callstack 2023-01-19 00:50:56 +01:00
Nathan Adams f5d69f5ad8 avm2: Corrected panic messages in date code 2023-01-16 21:48:00 +01:00
EmperorBale 3287173da3 avm2: Fix edge case when setting fullYear of date 2023-01-16 21:48:00 +01:00
EmperorBale 6bb079cc60 avm2: Remove some useless else statements in date 2023-01-16 21:48:00 +01:00
MrCheeze ebe5eed143 avm2: Fix corner case when goto same frame multiple times (close #9018)
This change makes it so that if there is a goto to a specific frame,
then a frame script is registered for that frame, and then a goto to the
same frame again, the frame script will not be skipped. At least one movie
appears to depend on this behaviour.
2023-01-16 18:37:19 +01:00
nosamu 952aa2d5f9 avm2: Correct name of rollover event 2023-01-14 20:04:33 +01:00
Aaron Hill 3a6c8d9796 core: Use BitmapData instead of separate `initial_data` field
Now that a `Bitmap` always stores a `BitmapData`, we can read the pixels
directly from the `BitmapData`, instead of duplicating them in an
`initial_data` field
2023-01-14 01:28:22 -05:00
Aaron Hill b5796f9016 core: Derive Default for FramePhase 2023-01-13 20:37:52 +01:00
Calvin304 6c71f5b2a6 avm2: Naive DefineButtonSound impl for Avm2Button 2023-01-11 17:45:39 -05:00
Nathan Adams 9cd850d30e render: Make render_offscreen return a sync handle which can be used to get the texture at a later time 2023-01-11 16:53:33 -05:00
Nathan Adams 133044b06b avm2: Fix start_drag with negative width or height 2023-01-11 00:09:01 +01:00
MrCheeze 0597ae56e6 core: Make AVM2 frame labels case sensitive 2023-01-10 11:28:56 -05:00
renovate[bot] 630558a936 fix(deps): update rust dependencies 2023-01-10 16:37:40 +01:00
Moulins 3b1c981d25 Clears the AVM1 stack after executing bytecode
AVM1 bytecode may leave the operand stack unbalanced, and this will
cause a slow memory leak if the stack is never cleared.
2023-01-10 14:14:17 +01:00
CUB3D c6bd431864 avm1: Deduplicate threshold operations 2023-01-10 13:59:06 +01:00
CUB3D ea6ea8074a tests: Add tests for BitmapData.threshold, fix issues found as a result 2023-01-10 13:59:06 +01:00
CUB3D 70f071b347 avm1: Implement Bitmapdata.threshold 2023-01-10 13:59:06 +01:00
CUB3D 8db909a7d4 desktop: Allow specifying player version 2023-01-10 13:13:30 +01:00
MrCheeze bf6342bd4b avm2: Fix hitTestPoint not transforming coordinates to world space
This behaviour is essentially copied from avm1 movie_clip.rs's hit_test.
Seems to fix several flashes that had broken collision until now.
2023-01-10 12:53:20 +01:00
Nathan Adams 724609e323 audio: Don't panic when reading an invalid mp3, bubble the error up 2023-01-10 11:10:46 +01:00
Nathan Adams 3b24d849e7 audio: Removed unwraps in mixer.rs and replaced with reasoned expects 2023-01-10 11:10:46 +01:00
Nathan Adams 7a9e8b4771 core: Made NullNavigatorBackend no longer use unwraps 2023-01-10 11:10:46 +01:00
CUB3D 84d0111a14 avm1: Add test for with scope nesting 2023-01-10 10:34:10 +01:00
CUB3D ca82ff65de avm1: Defining a local in a with scope should actually define it on the parent scope 2023-01-10 10:34:10 +01:00
Nathan Adams a37e070724 core: Use Color::WHITE for draw_rect when we don't care, as it's just identity color transform and thus cheaper 2023-01-10 09:39:28 +01:00
Nathan Adams 53d6fa4d8b render: Make render commands take in an actual value, not ref for immediate cloning 2023-01-10 09:39:28 +01:00
Adrian Wielgosik 14ee9b43fb avm2: Replace ok_or by ok_or_else 2023-01-09 21:01:39 +01:00
Aaron Hill 40d8751d67 avm2: Implement clipRect parameter for BitmapData.draw 2023-01-08 16:11:55 -05:00
Aaron Hill 1b71e288fd Remove 'gc_context lifetime
The latest `gc-arena` makes this unnecessary - we can just
use our `'a` lifetime for `MutationContext`
2023-01-06 19:20:39 -05:00
Moulins d332a174c3 Bump `gc-arena` to current master revision
This required small changes to some Debug impls that were missed in #8964
2023-01-06 18:22:43 -05:00
Nathan Adams a7738bec69 core: Added a few simple tracing::instruments 2023-01-06 04:25:22 +01:00
Nathan Adams 13fd830e7c core: Switch from log to tracing 2023-01-06 04:25:22 +01:00
MrCheeze 71fcd383a3 avm2: Add ctrlKey, altKey, shiftKey, controlKey properties to KeyboardEvent 2023-01-04 16:27:09 -05:00
Nathan Adams 4d948616db avm1: Implement BitmapData.draw with blend mode, fixes #8920 2023-01-04 12:09:08 -05:00
Nathan Adams cd550457e1 core: Made TDisplayObject::movie() no longer an Option<> 2023-01-04 08:20:08 +01:00
Nathan Adams 40a7bb04d6 core: Removed default impl of TDisplayObject::movie(), implement it everywhere 2023-01-04 08:20:08 +01:00
Aaron Hill 10491a1be9 core: Store data in `BitmapData` instead of `Bitmap`
This makes `Bitmap` delegate to `BitmapData` for
all of the bitmap-related information (handle, width, and height).
As a result, we now unconditionally store a `BitmapData` in `Bitmap`.

As a result, swapping the underling `BitmapData` instance will
automatically change the properties (and rendered image) of a `Bitmap`.

This required some refactoring in the render backends in order to
get access to a `BitmapHandle` through `BitmapData`.
2023-01-03 18:01:41 -07:00
MrCheeze 41df7fdc59 avm2: For old swf versions, invalid goto labels jump to frame 1 (fix #8954)
The regression test for this was edited directly in JPEXS, so there is
no corresponding fla to compile into the swf.
2023-01-03 17:10:06 -07:00
MrCheeze 77104ca473 avm2: Improve accuracy of gotoAndPlay / gotoAndStop (partially fix #8954)
Partially based on AVM1 implementation, partially based on the new
regression tests added in this commit.
2023-01-03 17:10:06 -07:00
nosamu 664a86161a avm2: Fix `for each..in` loops over Dictionary values 2023-01-03 16:52:15 -07:00
Moulins 27307d847a core: Replace some derived Debug impls with manual ones
In future versions of `gc-arena`, the `Debug` impl. of `Gc`
and `GcCell` will print the pointed-to value, which will cause
derived `Debug` impls. to enter an infinite recursion.

As such, this manually implements `Debug` on types wrapping a
`Gc/GcCell` to maintain the current behavior.
2023-01-03 18:03:23 -05:00
Nathan Adams 5a7ec70254 core: Remove blend mode unsupported message 2023-01-03 03:39:13 +01:00
Nathan Adams ded46e20e7 render: Replace PushBlendMode/PopBlendMode with Blend 2023-01-03 03:39:13 +01:00
EmperorBale a51ffd0e9f avm2: Strings passed to date constructor should be parsed 2023-01-02 11:43:03 -08:00
EmperorBale ab3a1e6148 avm2: Move date parsing into a separate function 2023-01-02 11:43:03 -08:00
MrCheeze bf18334294 avm2: Fix calling setTextFormat without providing a beginIndex and EndIndex
Previous behaviour defaulted to undefined and applied the format to the
range [0,0) instead of defaulting to -1 and applying the format to the
full length of the TextField.
2023-01-01 21:03:12 -08:00