Commit Graph

6300 Commits

Author SHA1 Message Date
TÖRÖK Attila 331d1789da render,core,desktop: Port to `wgpu` `v0.20.0`, switch to `egui` `master` 2024-05-17 01:19:01 +03:00
Nathan Adams b8c1263f9e avm1: Expose NativeObjects through SuperObject - fixes g2conline 2024-05-17 00:02:45 +02:00
Nathan Adams dfd9a26a7b avm1: Implement NetConnection, more or less 2024-05-17 00:02:45 +02:00
Kamil Jarosz aeabe3cbb5 core: Implement proper automatic tab ordering
This patch implements proper automatic tab ordering that
behaves exactly the same as in FP.

The automatic order depends only on the position of
the top-left highlight bound corner, referred to as `(x,y)`.
It does not depend on object's size or other corners.

The value of `6y+x` is used to order objects by it.
This means that the next object to be tabbed is the next one
that touches the line `y=-(x-p)/6` (with the smallest `p`).

When two objects have the same value of `6y+x`
(i.e. when the line touches two objects at the same time),
only one of them is included.

This behavior is similar to the naive approach of
"left-to-right, top-to-bottom", but (besides being sometimes
seen as random jumps) takes into account the fact that
the next object to the right may be positioned slightly higher.
This is especially true for objects placed by hand or objects with
different heights (as FP uses the top left corner instead of the center).

This behavior has been discovered experimentally by placing
tabbable objects randomly and bisecting one of their
coordinates to find a difference in behavior.
2024-05-16 21:40:56 +02:00
sleepycatcoding be8cbd64d6 core/render/web: Make FromStr exclusively for snake_case 2024-05-16 01:14:42 +03:00
Nathan Adams 519de0e230 avm1: Implement __resolve 2024-05-15 22:45:56 +02:00
Aaron Hill 932f2d410b debug_ui: Render bitmap in new 'Bitmap' display object tab
This lets us view a bitmap directly from the debug ui.
We cache an egui texture handle on the `BitmapData` itself,
and invalidate it whenever the BitmapData gets changed.
2024-05-15 15:19:52 -04:00
Aaron Hill 4d2b2893ae avm2: Prevent loader mouse pick from targeting direct child
Loaders have a similar behavior to the main stage - if a mouse pick
would target their direct child (the root movieclip in the stage case,
and the loaded MovieClip in the Loader case), the Stage/Loader is
targeted instead.
2024-05-15 13:41:17 -04:00
Aaron Hill 60000d6930 avm2: Skip mouse pick for all mask children
We were previosuly only checking 'clip_depth', but we should
also check 'maskee()'
2024-05-15 12:30:51 -04:00
Nathan Adams b5948a883a avm2: Simplify string comparison in stylesheet a bit 2024-05-14 21:03:37 +02:00
Nathan Adams 4691d0c798 avm2: Call transform from StyleSheet.setStyle() 2024-05-14 21:03:37 +02:00
Nathan Adams 7309e457d5 avm2: Transform css properties from with-dashes to snakeCase 2024-05-14 21:03:37 +02:00
Nathan Adams 24b01b8f89 avm2: Implement StyleSheet.transform() 2024-05-14 21:03:37 +02:00
Nathan Adams 7e1bc84bdf avm2: Implement most of StyleSheet 2024-05-14 21:03:37 +02:00
Kamil Jarosz 8eb8673122 core: Update a comment related to custom tab ordering
Turns out the existing implementation was right.
2024-05-14 18:33:46 +02:00
Kamil Jarosz 5dcb87c727 debug_ui: Add stage focus rect 2024-05-13 20:48:48 +02:00
Kamil Jarosz f713c90cca core: Add possibility to set tab_enabled in AVM1
This makes it possible to set it from the debug UI.
2024-05-13 20:48:48 +02:00
Kamil Jarosz 0c3ab81671 debug_ui: Fix a positioning issue in Stage tab 2024-05-13 20:48:48 +02:00
Kamil Jarosz a5b7933c26 debug_ui: Add a tab for interactive objects 2024-05-13 20:48:48 +02:00
Kamil Jarosz 4253525f8b core: Add InteractiveObject.tab_enabled_default
This patch removes two methods:
* `tab_enabled_avm1`, and
* `tab_enabled_avm2_default`,
and replaces them with `tab_enabled_default`.

This refactor makes the code more readable and simple.
2024-05-13 20:48:48 +02:00
Jacob Greenfield 272c07ea3b
avm2: Implement `describeType(null)` stub (#16235) 2024-05-10 22:06:56 +00:00
Kamil Jarosz b1b7ccfbd2 avm1: Highlight buttons using their hit bounds
Buttons are always highlighted using their hit bounds.
I guess it does have some sense to it, because their bounds
usually change on hover (children are swapped out),
which would cause the automatic tab order to change during tabbing.
That could potentially create a loop in the tab ordering
(soft locking the tab).
2024-05-10 23:52:01 +02:00
Kamil Jarosz 1e5439ab68 core: Add InteractiveObject.highlight_bounds() method
This method returns the world bounds of
the focus highlight for the interactive object.
2024-05-10 23:52:01 +02:00
Kamil Jarosz da9c9527e5 core: Allow pressing buttons with keyboard
This patch allows the keyboard to be used (Enter/Space) to press buttons.
2024-05-10 22:42:03 +02:00
Kamil Jarosz 18d9035685 core: Fire button event handlers only when highlight is active
It seems that button event handlers not only require focus to be fired,
but also an active highlight.
2024-05-10 22:42:03 +02:00
Kamil Jarosz 97a454cc36 core: Refactor a common condition to should_fire_button_event_handlers
This condition is identical for buttons and movie clips.
2024-05-10 22:42:03 +02:00
Kamil Jarosz bfb7e57277 debug_ui: Improve highlight display, add re-focus button
Since highlight has 3 states now, it's better represented by
describing the state instead of having a checkbox.
A re-focus button has been added to compensate for the fact
that the highlight cannot be automatically enabled anymore.
2024-05-10 22:42:03 +02:00
Kamil Jarosz df714d35bd core: Differentiate between active and visible highlight
Some button events (e.g. KeyUp/KeyDown) seem to require a state when
the highlight is not visible, but is active (i.e. a focus is selected).
That is why this patch introduces a third possible state of
the highlight: ActiveHidden.
2024-05-10 22:42:03 +02:00
TÖRÖK Attila 11c1120364 core: Invalidate cached bitmap on every newly decoded video frame
Not just when seeking manually. And request rendering to be sure.
2024-05-10 09:56:47 +02:00
Lord-McSweeney 8eaede1c2c avm2: Try to speed up domain memory ops 2024-05-09 16:41:12 -07:00
Lord-McSweeney 8ab19054aa avm2: Create bad branch errors lazily in verifier 2024-05-09 16:41:12 -07:00
Lord-McSweeney 4df7722aab avm2: Add fast path for setting array property 2024-05-09 16:41:12 -07:00
Kamil Jarosz ed037214b1 core: Always fire KeyPress after KeyDown for buttons
Button events are actually handled twofold:
1. KeyPress for printable characters is handled on TextInput,
2. KeyPress for special characters (e.g. enter, arrows)
   is handled on KeyDown.

Before this patch, KeyPress was fired too early, so that for
special characters (2) it fired BEFORE KeyDown.
This was not a problem for printable characters, as they
fired on TextInput, which always fired separately after KeyDown.

This patch ensures that KeyPress is fired always in the proper order.
2024-05-09 21:13:13 +02:00
Kamil Jarosz 5541daa105 debug_ui: Add interactive tab order list 2024-05-09 20:57:53 +02:00
Kamil Jarosz baa87ff016 core: Add FocusTracker::tab_order method
This method returns the current tab order as a list of objects.
2024-05-09 20:57:53 +02:00
Kamil Jarosz ccf6b3edb5 debug_ui: Add possibility to clear current focus 2024-05-09 20:57:53 +02:00
Kamil Jarosz ab62b740a7 debug_ui: Use open_display_object_button for focus 2024-05-09 20:57:53 +02:00
Kamil Jarosz 4e39598da4 debug_ui: Exclude hidden objects properly when searching
The option "Include Hidden" was not working properly,
as it did not exclude all hidden objects when disabled.
An object is hidden also when its ancestor is not visible.
2024-05-09 08:12:59 -07:00
Kamil Jarosz ece156e478 core: Use draw_rect_outline for focus highlight
This ensures that highlight does not become outdated
(e.g. when the highlighted content moves).
Additionally, it makes the highlight have 3px independently of zoom.
2024-05-09 00:40:25 +02:00
Kamil Jarosz 07bfa0c3e2 core: Use draw_rect_outline for debug rects
This improves debug rect rendering so that debug rects
do not have missing corners as before.
2024-05-09 00:40:25 +02:00
Kamil Jarosz eabf76dae8 core: Add RenderContext::draw_rect_outline
This method may be used to efficiently draw a simple rectangle outline
for debug rects and focus rects.
2024-05-09 00:40:25 +02:00
Kamil Jarosz bc4ed4c5a1 core: Improve performance of round_to_even
This patch improves performance of ecma_conversions::round_to_even():
1. by using f64::round_ties_even(), which has been stable
   since 1.77.0, instead of a custom algorithm; and
2. by removing an unnecessary comparison to i32::MIN,
   as casting a float to an integer automatically saturates
   values smaller than the minimum integer value to the minimum
   value of the integer type.
2024-05-08 22:16:40 +02:00
Kamil Jarosz 8eaf844cdc core: Add tests for round_to_even 2024-05-08 22:16:40 +02:00
Kamil Jarosz b551d14a59 avm2: Ensure the focus is dropped when it's removed
The logic of dropping the focus when it's removed
applies not only to TextFields but for every InteractiveObject.
This patch ensures that any focus is dropped when its parent is removed.
2024-05-07 22:56:25 +02:00
Kamil Jarosz 428688e7e7 core: Add DisplayObject.on_parent_removed method
This method prevents code duplication performed when overwriting
set_parent to inject some behavior when the parent is removed.
2024-05-07 22:56:25 +02:00
Kamil Jarosz 8d50d1fead core: Move has_focus to InteractiveObject
All the interactive objects had the has_focus flag in their concrete
implementations (even AVM2 button, which did not use it at all).
This patch moves it to InteractiveObject (as a bit flag), making it
easier to manage and use through the has_focus, set_has_focus methods.

Additionally, the operation of setting the current focus to None
when an object was having it was popular enough that it warranted its
own method of drop_focus.
2024-05-07 22:56:25 +02:00
Adrian Wielgosik 120bfa2b30 avm2: Send ADDED_TO_STAGE in SimpleButton at correct time 2024-05-07 22:42:52 +02:00
Kamil Jarosz 8e6e71b2f7 web: Download the file on FileReference.save
This patch adds support for saving files on web using FileReference.
When writing data, a download is triggered with the default file name.
Currently, there's no dialog that lets the user select save destination.

This patch also ensures that all implementations of FileDialogResult
behave the same way: desktop, web, and tests.
The methods `write` and `refresh` have been merged into one:
`write_and_refresh`, which allows the tests and web implementations
behave the same way as desktop.
2024-05-07 22:26:30 +02:00
Kamil Jarosz 64df0368fd avm2: Fix TextField.selectedText 2024-05-06 22:17:41 +02:00
_Mads 901a88db29 avm2: Implement selectedText in class flash.text.TextField 2024-05-06 22:17:41 +02:00
J0sh0nat0r 0c38cc9e28 avm2: share binding skip optimization with `call_method` 2024-05-06 22:02:45 +02:00
Polo 0910df8307
avm2: Implement XML.contains (#16206)
* avm2: XML.contains() implemented

* tests: XMLList known_failure removed

* avm2: XML manual checks removed

* avm2: XMLList.contains() behavior fixed

* avm2: XML contains method moved to xml.rs

* avm2: Empty line removed in xml.rs

* avm2: XML contains args name renamed to value
2024-05-06 17:40:03 +00:00
Kamil Jarosz 42c26f61d1 core: Call focus handlers on every object
Before this patch, focus handlers were called from on_focus_changed,
only for selected objects. It seems that they should be called for
every object by default.
2024-05-04 17:05:24 -07:00
Kamil Jarosz f5a0751557 avm2: Do not highlight Stage on focus
Stage is never highlightable, even if there's a focus on it.
2024-05-04 17:05:24 -07:00
Kamil Jarosz 8ee514e62f avm2: Handle setting tabIndex to -1
Despite throwing an error that `tabIndex` cannot be negative,
the value of -1 is allowed, and it means that `tabIndex` is unset.
2024-04-30 14:23:45 +02:00
Kamil Jarosz f40cb6435f code: Unset tabIndex upon assigning -1
The value of -1 for tabIndex always means that it's unset,
even in AVM1 where tabIndex may have a value of `undefined`.
2024-04-30 14:23:45 +02:00
Kamil Jarosz ec2aaa0549 avm2: Implement InteractiveObject.focusRect 2024-04-29 23:41:40 +02:00
Kamil Jarosz 0479259fb9 avm2: Implement DisplayObjectContainer.tabChildren 2024-04-29 21:54:06 +02:00
Kamil Jarosz e3bc63f2bf core: Add possibility to set tab_children for containers 2024-04-29 21:54:06 +02:00
Kamil Jarosz 39b6c9d096 avm2: Implement InteractiveObject.tabEnabled 2024-04-29 21:54:06 +02:00
Kamil Jarosz 1ecdaea392 avm2: Implement InteractiveObject.tabIndex 2024-04-29 21:54:06 +02:00
Kamil Jarosz 14f7665912 core: Allow setting tabEnabled for AVM2
The field tab_enabled in AVM1 is effectively read-only as
tabEnabled is not a built-in property of objects.
That is not the case in AVM2, where tab_enabled is native.

This patch covers both of these cases by introducing methods:
* tab_enabled,
* set_tab_enabled,
* tab_enabled_avm1,
* tab_enabled_avm2_default.
2024-04-29 21:54:06 +02:00
Kamil Jarosz 036b898122 avm2: Call focus handler in AVM2 buttons
The focus handler should also be called for AVM2 buttons when
the focus is being changed.
2024-04-29 21:54:06 +02:00
Kamil Jarosz 02091e590d avm1: Move tab_index to InteractiveObject and make it i32
The i32/u32 discrepancy is only a data presentation issue,
as the value is treated as i32 in every case.
2024-04-29 21:54:06 +02:00
Kamil Jarosz e7eaf2a640 avm2: Override inapplicable properties in TextLine
Some inherited properties of `TextLine` are inapplicable.
They always return the default value and throw an error when set.
2024-04-29 21:18:08 +02:00
Lord-McSweeney b0443b3b5f avm2: Simplify uses of `GcCell<'gc, Class<'gc>>` 2024-04-27 08:29:10 -07:00
Adrian Wielgosik 868ab45c98 avm2: Add Stage.softKeyboardRect 2024-04-24 20:33:13 +02:00
Kamil Jarosz 953a741943 core: Update focus highlight reset logic for SWF9+
SWF versions 9 onwards reset the highlight only on
left mouse button down, whereas older versions also
reset it on other mouse events.
2024-04-24 00:49:37 +02:00
Kamil Jarosz 83d5d18a20 avm2: Add missing overrides to Stage
Stage overrides some properties from its super classes.
Some of them are currently identical in Ruffle,
but in FP they are used for e.g. security checks.
2024-04-23 23:13:02 +02:00
Kamil Jarosz f01cb99d1a avm2: Remove unnecessary imports in AS 2024-04-23 23:13:02 +02:00
Kamil Jarosz ccd2922973 avm2: Stub DisplayObjectContainer.textSnapshot 2024-04-23 23:13:02 +02:00
Kamil Jarosz 19cc8e5873 avm2: Add a stub for flash.text.TextSnapshot 2024-04-23 23:13:02 +02:00
Adrian Wielgosik 09e932163b xml: Add TODO comment in deepCopy() 2024-04-22 22:08:40 +02:00
Adrian Wielgosik 43f27b80ce avm2: Also conditionally set IS_QNAME in 'new QName()' 2024-04-22 22:08:40 +02:00
Adrian Wielgosik 464ccb6eb6 avm2: Update comment for QName struct 2024-04-22 22:08:40 +02:00
Adrian Wielgosik fd281cc715 avm2: Add IS_QNAME flag to Multiname, improve XML name matching 2024-04-22 22:08:40 +02:00
Lord-McSweeney 15c076fe0c avm2: Remove "namespace not matching" message
This was getting spammed after #16069
2024-04-21 16:12:54 -07:00
Kamil Jarosz b9e9a3e1f2 core: Dispatch rollOut/rollOver events on focus change and Tab
When focus changes, rollOut/rollOver events should be dispatched.
This includes onRollOut/onRollOver handlers, but also button actions.
2024-04-22 00:53:20 +02:00
Kamil Jarosz e20341f0a3 core: Skip updating mouse hover when not necessary
Since objects may be hovered using Tab, mouse hover update cannot happen
every time, because it would always reset the hover set by Tab.

This is why mouse hover is skipped when the following are true:
1. the mouse has not moved,
2. no mouse button has been pressed,
3. there was a hover,
4. the hovered object did not disappear.
2024-04-22 00:53:20 +02:00
Kamil Jarosz 9987519608 core: Make FocusTracker operate on InteractiveObjects
Originally, FocusTracker operated on DisplayObjects. However, in both
AVM1 and AVM2, all objects that are focusable are InteractiveObjects.
Switching FocusTracker to operate on InteractiveObjects simplifies code
in the long run.
2024-04-22 00:53:20 +02:00
Kamil Jarosz f94a31c5c2 core: Add FocusTracker.get_as_edit_text method
This is a utility method which simplifies getting the current focus
as an EditText object, which is being done frequently throughout Ruffle.
2024-04-22 00:53:20 +02:00
Kamil Jarosz 31c9be3a35 core: Ensure all changes made to UpdateContext are applied
UpdateContext.mouse_over_object and UpdateContext.mouse_down_object
were treated differently from other properties. Changes made to them
were required to be applied manually after using the context.
However, when reborrowing the context, all changes made to these
properties were dropped, as they were not applied after reborrow.
Applying them after reborrow would be difficult (RAII, concurrency
problems), that's why they were replaced with mutable references.

MouseData struct was introduced to make the code more readable and
adhere to the convention of UpdateContext to contain mutable references
to higher level objects.
2024-04-22 00:53:20 +02:00
Kamil Jarosz e28712f111 avm1: Use Avm1::run_stack_frame_for_method for focus handlers
Using Avm1::run_stack_frame_for_method for calling focus handlers
simplifies code and prevents duplication.
2024-04-22 00:53:20 +02:00
Kamil Jarosz 47758e1fb3 core: Make objects focusable by default
Since is_focusable has been moved to InteractiveObject,
it may now return true by default, because non-interactive objects
do not implement this method anymore.
2024-04-22 00:53:20 +02:00
Kamil Jarosz 5173fa4118 core: Move focus-related methods to InteractiveObject
Only interactive objects may be focusable, so keeping these methods
in all display objects makes matters more difficult, as they also
has to be implemented for non-interactive objects.

Moving these to InteractiveObject simplifies code in the long run.
2024-04-22 00:53:20 +02:00
Lord-McSweeney ca4da9e5ee avm2: Fix regression from classes not being registered in order from the constant pool 2024-04-21 14:27:16 -07:00
Lord-McSweeney 8a4946fa03 avm2: Store Class instead of QName as superclass of Class 2024-04-20 15:23:44 -07:00
turicfr 3f5582ed94 avm1: Correct `getBounds` properties order
This affects the order of the properties when enumerating the
returned object (via `Enumerate2` etc.)
2024-04-20 21:58:32 +02:00
jarca0123 7e349d9190 avm2: Add support for sparse arrays 2024-04-20 21:41:33 +02:00
TÖRÖK Attila 3ca7cc821e nit: Silence nightly `dead_code` lint 2024-04-20 17:39:54 +02:00
TÖRÖK Attila b8ec3a8089 nit: Silence nightly `clippy::legacy_numeric_constants` lint 2024-04-20 17:39:54 +02:00
Lord-McSweeney 955d03885e avm2: Remove outdated TODO comments 2024-04-19 15:03:53 -07:00
Tom Schuster cdf587c5a5 avm2: Fix two bugs that caused wrong query parameters with navigateToURL 2024-04-19 18:56:25 +02:00
Adrian Wielgosik a69b80b4bb avm2: Allow splice() on a Vector with fixed=true 2024-04-18 00:56:22 +02:00
Aaron Hill 899fe54477 debug_ui: Show mouseEnabled/mouseChildren/doubleClickEnabled
This helps with debugging mouse-pick bugs
2024-04-17 14:36:34 -04:00
StevenMia 899c0bb157 chore: fix some typos in comments
Signed-off-by: StevenMia <flite@foxmail.com>
2024-04-16 09:31:00 +02:00
Lord-McSweeney 1f4eebfd8d avm2: Add SetSlotNoCoerce and ReturnValueNoCoerce ops for SetSlot and ReturnValue without coercion when type is guaranteed to be not coerced 2024-04-14 22:10:37 -07:00
Lord-McSweeney daaf274245 avm2: Fill in all ops in optimizer 2024-04-14 22:10:37 -07:00
Lord-McSweeney efe878211a avm2: Pre-pool multinames for several ops
`CallPropLex`, `GetSuper`, `SetSuper`, `CallSuper`, `CallSuperVoid`, `GetDescendants`
2024-04-14 22:10:37 -07:00
Lord-McSweeney a7021f4fee avm2: Use already stored param types in optimizer 2024-04-14 22:10:37 -07:00
Lord-McSweeney e05f405888 avm2: Remove unneeded zero code length check in `run_actions` 2024-04-14 22:10:37 -07:00
Lord-McSweeney 9dcf0a7d70 avm2: Resolve function argument types once when calling function for the first time 2024-04-14 22:10:37 -07:00
Lord-McSweeney 9870754b5e avm2: Support optimization of `CallPropVoid` and virtual setters
This requires adding a custom field to the `CallMethod` op
2024-04-14 22:10:37 -07:00
Adrian Wielgosik 9d2664f752 wstr: Fix parsing of '+' 2024-04-14 13:24:42 +02:00
Nick 752ced391c
avm1: use correct coordinates for hitTest (#15894) 2024-04-09 17:11:21 +00:00
Nathan Adams 62867729de core: Removed now-unused Player::swf() method 2024-04-09 00:01:59 +02:00
Kamil Jarosz 741c53994c core: Add focus tracker to debug UI 2024-04-08 23:19:29 +02:00
Kamil Jarosz 497eaba6c5 core: Add DisplayObject.is_highlightable method
This is added for convenience so that it's not required
to cast an object to InteractiveObject when checking for a highlight.

This also gets rid of InteractiveObject.focus_rect_supported,
as `is_highlightable` may be now overridden.
2024-04-08 23:19:29 +02:00
Kamil Jarosz 43266f2d5d avm1: Fix onKeyUp and onKeyDown events for Button
These two events were not firing properly when a key was pressed
and the button had focus.
2024-04-08 22:16:50 +02:00
Kamil Jarosz e57b371a3d core: Add support for NumLock
This patch adds support for NumLock, which was missing.
Now NumLock (144) may be used as a parameter in methods
from the Key class.
2024-04-08 20:14:07 +02:00
Lord-McSweeney c1b6aa48a2 avm2: Fix unknown jump sources mixing with known jump sources 2024-04-05 00:34:50 +02:00
Lord-McSweeney 1727b946c4 avm2: Ensure exception targets are noted as possible jump targets 2024-04-05 00:34:50 +02:00
Lord-McSweeney 1a9ea0c9b1 avm2: Merge properly when the target is right after a block-terminating op 2024-04-05 00:34:50 +02:00
Lord-McSweeney fbef4c342e avm2: Add basic state merging for forward jumps to optimizer 2024-04-05 00:34:50 +02:00
Kamil Jarosz e564803ec0 core: Ignore non-tabbable objects from tab ordering
These objects include:
* invisible objects along with their children,
* non-editable text fields.

The method `is_tab_enabled` is renamed to `is_tabbable`, as it no
longer represents the `tabEnabled` property value, but also
incorporates other logic.
2024-04-04 22:53:19 +02:00
Kamil Jarosz 53f49eb480 avm2: Update comments related to stageFocusRect
Although full AVM2 support is not there yet, stageFocusRect is
not ignored anymore.
2024-04-04 10:58:42 +02:00
Kamil Jarosz 84d24fdd50 core: Use focus_rect to control highlight rendering
The field `focus_rect` is available for each interactive object,
and its value is used to control highlight rendering.
The notable exception is the TextField, which despite having a focus,
is incapable of rendering a highlight.
That is why the `focus_rect_supported` field has been added
to control this behavior.
2024-04-04 10:58:42 +02:00
Kamil Jarosz 76b8b5e438 avm1: Add support for _focusrect property
The property `_focusrect` allows specifying whether an object should be
highlighted by keyboard focus. For SWF <=5 that was possible globally,
and since SWF 6 the global option only has been the default,
which may be overridden using a local `_focusrect` property.
2024-04-04 10:58:42 +02:00
Kamil Jarosz da9ee141dc avm1: Mark applicable Object properties as SWF6+
Some of the Object properties are available only in SWF6+.
2024-04-04 10:58:42 +02:00
sleepycatcoding 92f437ec15 desktop: Add storage backend preference 2024-04-03 23:44:27 +02:00
sleepycatcoding e1f9b5e5df desktop: add UI for bookmarks 2024-04-03 22:20:55 +02:00
Kamil Jarosz d4b74db133 core: Default value logic for MovieClip.tabEnabled
The default value of `MovieClip.tabEnabled` is neither trivial
nor well-documented. This patch implements the logic behind
the default value of `MovieClip.tabEnabled` and covers it with tests.
2024-04-02 00:31:34 +02:00
Kamil Jarosz 6d08d2afb0 core: Make the default value lazy in get_avm1_boolean_property 2024-04-02 00:31:34 +02:00
Kamil Jarosz 95983bf4f3 core: Render yellow highlight on keyboard focus
This patch implements rendering of the yellow rectangle around
a focused element after pressing Tab. Focus tracker which is responsible
for keeping track of the current focus is now also responsible
for keeping track of the highlight and rendering thereof.
2024-04-01 23:38:59 +02:00
Kamil Jarosz 1a250f0144 core: Move FocusTracker to Stage 2024-04-01 23:38:59 +02:00
Kamil Jarosz b12bf31c6e core: Improve order of automatic tab ordering
This patch improves the order of automatic tab ordering,
and makes it behave more like in FP.
The order after this patch is far from being exactly
the same as in FP, but is close enough.
2024-04-01 22:48:59 +02:00
Tom Schuster 1552059c9f avm2: Stub DisplayObject.metaData 2024-04-01 12:31:59 +02:00
Kamil Jarosz 1883daff22 avm1: Support `MovieClip.tabChildren`
The property `MovieClip.tabChildren` allows changing the behavior of
tab ordering hierarchically. When set to `false`, it excludes the whole
subtree represented by the movie clip from tab ordering.
2024-03-30 00:15:45 +01:00
Kamil Jarosz 9ba7bb8629 core: Reverse tab order on Shift+Tab
When pressing Shift+Tab or Ctrl+Shift+Tab,
elements are tabbed in reverse.
2024-03-29 23:20:15 +01:00
Kamil Jarosz 208aae78ee core: Use either crate instead of a custom implementation 2024-03-29 23:20:15 +01:00
Kamil Jarosz 9d18bcdd06 avm1: Add support for tabEnabled and tabIndex 2024-03-27 00:40:24 +01:00
Kamil Jarosz c7b16f4642 core: Add basic support for Tab key behavior
The Tab key is used to cycle through focusable elements in stage.
It supports two tab orderings: automatic and custom.
This patch adds basic support for this behavior.
2024-03-27 00:40:24 +01:00
Kamil Jarosz e6e23fc758 core: Simplify handling clip events in Player 2024-03-27 00:40:24 +01:00
Lord-McSweeney 1a9a36c1ed avm2: Properly push coerced value back to stack in optimizer for Coerce op 2024-03-26 10:43:13 -07:00
Tom Schuster 1d4fd1575b avm2: Make URLStream fire the HTTP_STATUS event 2024-03-24 12:42:12 +01:00
Tom Schuster 403f6eb511 avm2: Add URLStream.connected 2024-03-24 12:42:12 +01:00
Lord-McSweeney 0adac8f69d core: Remove `Collect` from `Color` and `DirtyState` as it was unnecessary 2024-03-23 21:18:02 -07:00
Lord-McSweeney 530319ce93 avm2: Add many more ops to optimizer 2024-03-23 20:17:41 -07:00
Lord-McSweeney 9f44281a52 avm2: Remove unnecessary range checks on local-modifying ops in optimizer 2024-03-23 20:17:41 -07:00
Lord-McSweeney dec9f07f5f avm2: Better optimizer handling for `FindProperty` and `FindPropStrict` 2024-03-23 20:17:41 -07:00
Lord-McSweeney 2646fcf148 avm2: Add more domain memory ops to optimizer 2024-03-23 20:17:41 -07:00
Lord-McSweeney 3c39acc2ae avm2: Increase number of actions before timeout check from 2000 to 64000 2024-03-23 20:17:41 -07:00
Lord-McSweeney 407314686e avm2: Verify `getouterscope` op 2024-03-23 20:17:41 -07:00
TÖRÖK Attila 156e4eb2ed core: Make sure that streams progress even with many small-dt ticks 2024-03-24 01:07:10 +01:00
Adrian Wielgosik 08157a056e build: Fix redundant import warnings 2024-03-23 19:23:18 +01:00
Lord-McSweeney ab254c93c6 avm2: Activation class is now guaranteed in `op_new_activation` 2024-03-22 18:55:23 -07:00
Lord-McSweeney af19d6f385 avm2: Fix `newactivation` in script initializer
This works the same as in a normal function
2024-03-22 18:55:23 -07:00
michiel2005 28048e9b81 avm1: added the onScroller listener 2024-03-18 22:17:32 +01:00
michiel2005 5fc2505c07 core: made text fields scrollable 2024-03-18 22:17:32 +01:00
michiel2005 ec99bedcf8 avm1: added mouse_wheel_enabled to text fields 2024-03-18 22:17:32 +01:00
Adrian Wielgosik 3c2d629e0d core: Cull text under textfield 2024-03-18 22:00:34 +01:00
Lord-McSweeney e7924e564b avm2: Fix some parameter types and signatures for XML 2024-03-17 20:01:19 -07:00
Adrian Wielgosik 27cd08deeb avm2: Provide an option to disable the optimizer 2024-03-16 22:40:15 +01:00
soonsouth abf7d3fa20 chore: remove repetitive words
Signed-off-by: soonsouth <cuibuwei@163.com>
2024-03-15 21:10:53 +01:00
Adrian Wielgosik 69ba551f0d avm2: Add extra type propagation to astype 2024-03-14 22:32:48 +01:00
Adrian Wielgosik 88e5f9a898 avm2: unify abstract type propagation 2024-03-14 22:32:48 +01:00
sleepycatcoding c7a34bb7dd avm2: Set default for XML.elements `name` argument in AS
This makes it consistent with other methods on XML and XMLList.
2024-03-14 15:38:49 +01:00
sleepycatcoding 2a70f45423 avm2: Implement XMLList.elements 2024-03-14 15:38:49 +01:00
Tom Schuster eabf7a0d58 avm2: Add Namespace.prototype.toString 2024-03-13 22:26:47 +01:00
Tom Schuster 623dba6f1f avm2: Remove all to_string implementations except Object and Class.
Turns out the Vector to_string function that I added (#15562) was just duplicating what the
default implementation did. The Namespace one was just plain wrong.

Fixes #15474
2024-03-13 22:26:47 +01:00
Tom Schuster 09a7bd61b5 avm2: Fix Object.prototype.toString applied to Vector 2024-03-13 20:16:49 +01:00
Tom Schuster 8ec203a227 avm2: Add Function.prototype.toString and toLocaleString 2024-03-13 10:14:27 +01:00
Tom Schuster 3f17523879 avm2: Fix toString for primitive objects 2024-03-12 21:00:26 -07:00
Adrian Wielgosik dce71fdfcb avm2: Make Activation::from_builtin non-Result 2024-03-10 23:08:04 +01:00
Adrian Wielgosik 064cc14905 avm2: Reduce memcpy overhead in BytecodeMethod calls 2024-03-10 23:08:04 +01:00
Tom Schuster 53aee62c38 avm2: Re-implement RegExp.prototype.toString
Also remove the TObject to_string implementation that isn't necessary.
2024-03-10 21:27:39 +01:00
Lord-McSweeney 788c3da4aa avm2: Add a `make_error_1014` function and use it 2024-03-10 09:49:24 -07:00
Lord-McSweeney f76117a2be avm2: Better target class and target variable name handling for exceptions
Lookup on the target class and variable name is now done in the verifier.
2024-03-10 09:49:24 -07:00
Lord-McSweeney b5f7fa0cd0 swf: `CallMethod` takes a `disp_id`, not any sort of `Index` 2024-03-10 09:49:24 -07:00
Lord-McSweeney 028a61e744 avm2: Pre-pool multiname for `FindDef` 2024-03-10 09:49:24 -07:00
Lord-McSweeney fdf92a9f2d avm2: Also early lookup classes for `IsType` and `AsType` 2024-03-10 09:49:24 -07:00
Lord-McSweeney 51b9dcfb1d avm2: Pool strings in verifier 2024-03-10 09:49:24 -07:00
Lord-McSweeney b69eabfcdc avm2: Lookup multinames in verifier and store them in `Op` 2024-03-10 09:49:24 -07:00
Aaron Hill 7752c32c8e
avm2: Stub GameInput.getDeviceAt and GameInputControl (#15409) 2024-03-09 22:01:10 +00:00
Tom Schuster ed4bb00115 avm2: Stage.stage3Ds must return a vector
Fixes #15472
2024-03-07 19:33:09 +01:00
Lord-McSweeney 12ffc8a347 avm2: Remove unused and unnecessary `init_slot` 2024-03-06 20:49:19 -08:00
Nathan Adams 1a6b73f496 avm2: Use chrono's new Duration::try_ methods 2024-03-06 21:58:40 +01:00
Lord-McSweeney 95b5c700f5 avm2: Fix a minor optimizer bug 2024-03-06 07:21:28 -08:00
Lord-McSweeney 24d194a8b1 avm2: Propagate normal error for bad Multiname read in verifier 2024-03-06 07:21:28 -08:00
Lord-McSweeney 9a1196a7a0 avm2: Fix bugs and resolve reviews 2024-03-06 07:21:28 -08:00
Lord-McSweeney c98d61c376 avm2: Add a `make_error_1021` function and use it 2024-03-06 07:21:28 -08:00
Lord-McSweeney f28928dbc9 avm2: Match verifier reading implementation with FP's 2024-03-06 07:21:28 -08:00
Kamil Jarosz c260a45603 core: Close sockets and timers when replacing the root movie
Turns out that the comment from `set_root_movie` was right all along!
`set_root_movie` should not be used when replacing the root movie,
because it will leave out unclosed resources.
This patch introduces `replace_root_movie`, which is dedicated to be
used when replacing (instead of just setting) the root movie.

The best solution would be to use RAII, e.g. destroy and recreate
the whole Player instance, but this patch is a first step towards
proper resource control.
2024-03-05 23:14:08 +01:00
Nathan Adams 09dfa6427e desktop: Allow changing the language in Preferences 2024-03-05 00:02:27 +01:00
renovate[bot] fae1c458ec fix(deps): update rust dependencies 2024-03-04 22:18:19 +01:00
TÖRÖK Attila 85dd258168 cleanup: Remove a stale workaround for a `generational-arena` bug 2024-03-03 21:18:39 +01:00
TÖRÖK Attila 8764c08b01 cleanup: Define distinct key types for different kinds of slotmaps 2024-03-03 21:18:39 +01:00
TÖRÖK Attila 5bfd8af257 cleanup: Rename `Handle` in `loader.rs` to `LoaderHandle` to follow convention 2024-03-03 21:18:39 +01:00
Adrian Wielgosik 17c5b38bb1 avm2: Only construct type_error on error in astype, instanceof 2024-03-03 20:58:54 +01:00
MrCheeze a119e3e130 core: Improve placement of cursor when clicking in textbox
Currently when clicking in a textbox, the cursor will only be placed
correctly if you click exactly on top of a letter. The basic purpose of
this commit is to make it so that clicking in the surrounding margin
will put the cursor in the closest available position, as in Flash Player.

The logic is a bit complex because a single row of text can contain
multiple layout boxes, each with a different Y offset (but all with the
same Y extent). To be accurate, we need to treat each layout box in the
row "as if" it had the same Y offset that the tallest box in its row has.

This commit also contains a fix for an issue where lower_from_text_spans
was passing the wrong text strings and indexes to fixup_line for
newlines, which needed to be fixed in order to be able to click to place
the cursor in an empty row that was created by newlines.
2024-03-02 20:30:50 +01:00
Lv Yitian 556d16302b
avm2: Implement flash.media.ID3Info (#14916) 2024-03-02 19:13:31 +00:00
TÖRÖK Attila 55773f0205 chore: Replace `generational-arena` with `slotmap` 2024-03-02 19:42:11 +01:00
renovate[bot] 6e84b05b66 fix(deps): update rust dependencies 2024-03-01 22:46:32 +01:00
Tom Schuster 0cea5a0a9e core: Introduce gamepad button mapping support 2024-02-28 21:21:09 +01:00
Kamil Jarosz f6907a5c73 desktop: Add tests for connect_socket
Add tests for ExternalNavigatorBackend::connect_socket.
2024-02-28 19:42:54 +01:00
Kamil Jarosz cc8b0aa5dd core: Use async channels in NavigatorBackend
This has several advantages:
1. it allows using async variants of send and recv,
2. it adds consistency as until now Receiver was async,
   and Sender was not.
2024-02-28 19:42:54 +01:00
Aaron Hill 3e99dd3999 core: Use latest fluent-templates `master` for reproducible builds 2024-02-27 21:36:28 -05:00
Aaron Hill 900a8407d6 core: Implement lazy decoding of bitmaps
We hit a pathological case in House
(https://github.com/ruffle-rs/ruffle/issues/15154),
where eagerly decoding bitmaps during preloading results in
over 10GB of ram being used.

With this PR, we store the compressed bitmap, and only decode it
each time we instantiate it. In order to support bitmap fills,
we store the decoded width/height and a lazily-initialized GPU handle
in `Character::Bitmap`
2024-02-27 21:18:18 -05:00
TÖRÖK Attila ee0c1f42ff core,avm2: Make Timer.setDelay not change the timer ID. Fix #15005. 2024-02-27 23:56:33 +01:00
Lord-McSweeney 11d5a8f7df avm2: Resolve reviews (no functional changes) 2024-02-25 21:52:24 -08:00