Commit Graph

5814 Commits

Author SHA1 Message Date
Varun Ramesh 7c87f35d8d
avm2: Implement `flash.display.PixelSnapping` (#5718)
* Add flash.display.PixelSnapping enum class

* Run 'cargo format --all'

* Add 'final' class attribute
2021-11-28 07:31:39 +02:00
Moulins 9701b817f5 core: Replace WStr<'_> and WStrMut<'_> by a single DST type WStr 2021-11-27 11:20:47 -07:00
Moulins fd8bdeb1a8 core: improve f64's FromWStr impl
This avoids converting the string to UTF8 if it can't possibly
be a float
2021-11-27 11:20:47 -07:00
Moulins ee326e31b7 core: Reduce allocations in AvmString::new_utf8
Also remove some useless back-and-forth conversions between
AvmString and String
2021-11-27 11:20:47 -07:00
Moulins fa30e1bc43 chore: rename AvmString::{new -> new_utf8, new_ucs2 -> new} 2021-11-27 11:20:47 -07:00
Moulins 45fe1e86ae core: remove AvmString::as_str, and the extra UTF8 String inside 2021-11-27 11:20:47 -07:00
Moulins e24af59197 core: remove last instances of AvmString::as_str 2021-11-27 11:20:47 -07:00
Moulins 824263d2bc core: adapt TextField, Font & Html handling code to use WStr 2021-11-27 11:20:47 -07:00
Moulins f149c9efce core: remove some AvmString::as_str calls 2021-11-27 11:20:47 -07:00
Moulins 053758d77c avm2: use WString in QName methods 2021-11-27 11:20:47 -07:00
Moulins 5ca911209b core: implement WStr::join 2021-11-27 11:20:47 -07:00
Moulins c496f81f13 avm1: remove AvmString::as_str usage in activation.rs and movie_clip.rs 2021-11-27 11:20:47 -07:00
Moulins 87400b829d core: use WStrings for display object's frame and scene labels 2021-11-27 11:20:47 -07:00
Moulins 84b4e33036 core: implement FromWStr for various enum types 2021-11-27 11:20:47 -07:00
Moulins b894d0c97f avm1: adapt parseInt, escape & unescape to use WStr API 2021-11-27 11:20:47 -07:00
Moulins c2349ae012 xml: use AvmString in xml code
This has the nice side-effect of reducing string cloning, because we can
just pass AvmStrings around instead.
2021-11-27 11:20:47 -07:00
Moulins 5db23ddbf3 avm2: use WStr in date parsing logic 2021-11-27 11:20:47 -07:00
Moulins f49ce49d28 core: add FromWStr trait and WStr::parse 2021-11-27 11:20:47 -07:00
Moulins 8863b54db0 avm1: don't use &str for activation's path & variable logic 2021-11-27 11:20:47 -07:00
Moulins 1d9d7e6942 avm1: don't use &str methods when parsing enum parameters in MovieClip 2021-11-27 11:20:47 -07:00
Moulins d850085d2b avm1: partially rewrite Value::primitive_as_number 2021-11-27 11:20:47 -07:00
Moulins 4a09088d42 avm2: rewrite regexp module to not rely on AvmString::as_str
This is a little tricky, because we have to map the utf8 indices
returned by the regex engine to utf16 indices usable by Ruffle.

To limit the impact on performance, the regex, the string we're
currently matching on, and the last known (utf8, utf16) positions
are cached, avoiding extra utf8 conversions in common use cases
where a single string is repeatedly searched with increasing
`lastIndex`.
2021-11-27 11:20:47 -07:00
Moulins 23cbe4c2fd core: Add `string::Pattern` trait, based on `std::str::Pattern`
This allows `Str::{find, rfind, split}` to accept multiple types
2021-11-27 11:20:47 -07:00
Moulins 110f568aa4 core: Remove some useless utf8<->utf16 conv. in {avm1,avm2}/activation.rs 2021-11-27 11:20:47 -07:00
Moulins 8885175550 core: Replace string::utils *_ignore_case functions by methods on WStr 2021-11-27 11:20:47 -07:00
Moulins 79d47a9863 avm1: Requires a WStr<'_> to access PropertyMap 2021-11-27 11:20:47 -07:00
Moulins 7f4af210b8 core: Reimplement AVM string methods using our UCS2 API
This generally means that methods are more efficient, as we
don't need to encode to UTF16 on-the-fly to have correct indices.

This also fix some bugs:
 - charCode now properly handle surrogate pairs
 - calling lastIndexOf with the empty pattern and an OoB index now
properly returns the string length

Still missing is AVM2's String.match
2021-11-27 11:20:47 -07:00
Moulins 32fa20b857 core: Make AvmString "two-headed" by storing a UTF8 and an UCS2 string
This is only temporary; once all code paths use the ruffle `WString` API
instead of dereferencing to a string, the UTF8 `String` will be removed.
2021-11-27 11:20:47 -07:00
Moulins 3d20c4acc7 core: Add owned string::WString type 2021-11-27 11:20:47 -07:00
Moulins c1ccd3a3ac core: Introduce `WStr` and `WStrMut` types, for representing Flash strings
These types represent an UCS2 string (UTF-16 with unpaired surrogates).

The string is stored either as a sequence of u8s (Bytes) or u16s (Wide);
the type of string is tracked by setting the high bit of the length of
its fat pointer.
2021-11-27 11:20:47 -07:00
relrelb b32ec3cf6c audio: Calculate sound transform values using 30-bit integers
The fix in #5218 wasn't sufficient; 30-bit arithmetic should be used
along all the way when calculating an effective sound transform.

For example, a sound transform composited by volumes `-0x80000000` and
`25` should end up as effectively 0, whereas previously it would have
been calculated as `-0x80000000 * 25 / 100 = -0x20000000`, which is a
30-bit integer that hasn't been truncated.

Fixes #5655.
2021-11-27 12:09:33 +02:00
relrelb e2b821e92f chore: Replace `min` + `max` with `clamp`
`clamp` is a bit more efficient, in both runtime and size terms.
2021-11-26 20:54:48 +02:00
relrelb 41eb215b02 chore: Avoid using `std::char`
Use the `char` primitive type instead.
2021-11-26 10:45:30 +02:00
relrelb dc6d4804ff core: Avoid odd import 2021-11-26 10:45:30 +02:00
relrelb 0a3ede31dc core: Remove unused `Downcast` 2021-11-26 10:45:30 +02:00
relrelb 79a0ba31ae avm1: Use `.unwrap_or(&Value::Undefined)` in more places 2021-11-26 10:45:30 +02:00
Adrian Wielgosik f35b2666a3 build: Use the 'union' SmallVec feature for minor memory savings 2021-11-26 00:45:09 +01:00
Chris Midgley 8ac19e9807
web: update everything (#5731)
* web: update everything

* chore: apply new lint corrections
2021-11-25 23:21:43 +02:00
relrelb 79deba87f3 avm1: Small cleanup in `start_drag` 2021-11-25 07:35:33 +02:00
relrelb a2aeadf9e1 core: Small cleanups in `Player::handle_event`
* Use `match` for AVM debug key combos.
* Remove redundant `if let Some(button_event)` inside an `if button_event.is_some()`.
2021-11-25 07:35:33 +02:00
relrelb 0e3168f99e desktop: Small event-related cleanups
* Use `match state` for `MouseInput` events.
* Remove `ReceivedCharacter` handling from `DesktopUiBackend::handle_event`.
2021-11-25 07:35:33 +02:00
relrelb a4b2e38f4d web: Track `keys_down` by `KeyCode`
This makes `WebUiBackend::is_key_down` a simple one-line check.
2021-11-25 07:35:33 +02:00
relrelb cbce91365c desktop: Track `keys_down` by `KeyCode`
This makes `DesktopUiBackend::is_key_down` a simple one-line check.
Also unify the handling code of `ElementState::Pressed` and `ElementState::Released`,
which had a lot of common code.
2021-11-25 07:35:33 +02:00
Adrian Wielgosik da4ed75bc8 avm2: Compare QNames by local name first 2021-11-22 17:59:00 -07:00
Adrian Wielgosik c2d521df41 avm2: refactor: Merge has-setter-and-no-getter into one lookup 2021-11-22 17:59:00 -07:00
Adrian Wielgosik 370186dc3c avm2: refactor: Make trait lookups return a single item 2021-11-22 17:59:00 -07:00
Chris Midgley cf1d0e7624 web: remove firefox extension version restriction 2021-11-22 21:47:37 +02:00
TÖRÖK Attila 0e4d2d48f5 video/vp6: Don't throw an error on skip frames, reuse the last frame instead 2021-11-22 17:08:31 +01:00
Adrian Wielgosik a305b80789 swf: Support font layout without swf-v7 fields 2021-11-20 22:48:36 +01:00
relrelb ff2ef47159 canvas: Fill using the even-odd rule
Flash always uses the even-odd fill rule, whereas canvas defaults to
nonzero.
Specify the fill rule explicitly in both `swf_shape_to_canvas_commands`
and `swf_shape_to_svg`.
2021-11-20 22:48:37 +02:00