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
relrelb
8fb77b34d6
tests: Add `bitmap_data_compare`
2021-11-20 14:11:14 +02:00
relrelb
56b5183262
avm1: Refactor and fix `BitmapData::compare`
2021-11-20 14:11:14 +02:00
bbb651
687069ba7d
avm1: Added BitmapData::compare
2021-11-20 14:11:14 +02:00
relrelb
3760e0e275
core: De-duplicate `round_to_even` function
...
Put a single implementation in `ecma_conversions.rs`.
Need to consider what to do with the similar implementation in `matrix.rs`.
2021-11-20 13:36:06 +02:00
relrelb
7c6d006862
avm2: Correct `TextFormat` properties coercion
2021-11-20 13:36:06 +02:00
relrelb
10b7c69719
avm1: Correct `TextFormat` properties coercion
2021-11-20 13:36:06 +02:00
David Wendt
068e7acc6f
avm2: Remove the need for `lazy_static`
2021-11-19 20:43:53 -07:00
David Wendt
dda8a73899
avm2: Refactor so we don't need to rebox and unbox the numbers into values.
...
Also, use an actual constant table for the ellipsises.
2021-11-19 20:43:53 -07:00
David Wendt
4665a6c210
avm2: None of `Graphics`' methods need to be `pub`.
2021-11-19 20:43:53 -07:00
David Wendt
c719e69693
avm2: Also implement `drawEllipse` using `drawRoundRect`.
2021-11-19 20:43:53 -07:00
David Wendt
ef46d780ba
avm2: Implement `Graphics.drawCircle` using `drawRoundRect`
2021-11-19 20:43:53 -07:00
David Wendt
b318eb9969
avm2: Implement `Graphics.drawRoundRect`
2021-11-19 20:43:53 -07:00
relrelb
ae189c5a0d
tests: Fix image tests
...
Seems like CI was upgraded to use LLVM 13.
Rename image tests (currently only color) to match it.
2021-11-19 21:40:30 +02:00
relrelb
24db13ae1e
html: Handle self-closing tags
...
"br" and "sbr" tags can appear in a self-closing form (i.e. `<br />`).
Commit 3cab464026
forgot to handle this.
2021-11-15 23:28:51 +02:00
relrelb
855bc721a8
html: Restore handling of "br" tags
...
This fully reverts commit 2119ce9
.
Seems like Flash does handle "br" tags, but ignores them under some
unknown circumstances (e.g. setting `htmlText` in AVM1).
For now handle "br" tags unconditionally.
2021-11-15 23:28:51 +02:00
dependabot[bot]
60c2a14363
build(deps): bump isahc from 1.5.1 to 1.6.0
...
Bumps [isahc](https://github.com/sagebind/isahc ) from 1.5.1 to 1.6.0.
- [Release notes](https://github.com/sagebind/isahc/releases )
- [Commits](https://github.com/sagebind/isahc/compare/1.5.1...1.6.0 )
---
updated-dependencies:
- dependency-name: isahc
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
2021-11-15 23:27:05 +02:00
Daniel Jacobs
d86bf69a04
i18n: Add spanish tranlation for swf download option
2021-11-15 23:12:27 +02:00
Daniel Jacobs
d3a5561e8f
web: Give toggleable option to download swfs in extension/selfhosted
2021-11-15 23:12:27 +02:00
relrelb
2083d77100
tests: Expand `sound`
...
Add cases of `Sound.setVolume()` and `Sound.setPan()` with no arguments.
Also correct `Sound` to `sound` in traces.
2021-11-14 20:25:45 +02:00
relrelb
2e5a8922ae
tests: Uncomment `Sound.getDuration` tests
...
`NullAudioBackend` returns real durations by now.
2021-11-14 20:25:45 +02:00
relrelb
73f5982cad
avm1: Fix `Sound.setVolume()` and `Sound.setPan()` with no arguments
...
Instead of coercing `undefined` into `f64` (which results `NaN` in SWF7+),
treat the missing value argument as `0`.
2021-11-14 20:25:45 +02:00