Commit Graph

2825 Commits

Author SHA1 Message Date
CUB3D f437539f73 avm2: Some domain memory is available by default and error when range invalid 2021-04-21 00:33:11 -07:00
CUB3D 5a0cdf60bc avm2: Implement Op::Si8 and Op::Li8 badly 2021-04-21 00:33:11 -07:00
CUB3D 12a198f671 avm2: Implement Op::Coerce and add tests 2021-04-21 00:33:11 -07:00
CUB3D c2969895b2 avm2: Add domain memory tests 2021-04-21 00:33:11 -07:00
CUB3D 89c01dca18 swf: Add support for AVM2 domain memory opcodes 2021-04-21 00:33:11 -07:00
TÖRÖK Attila 46ddc31254 avm2: Call the super initializer of LoaderInfo after construction 2021-04-19 18:16:47 -07:00
Mike Welsh cbe685f8d5 tests: Update transform test to verify color transform rounding 2021-04-19 15:47:52 -07:00
Mike Welsh 0552d26551 core: Use Fixed8 and i16 for ColorTransform
Use the proper types for ColorTransform:
 * Fixed8 (8.8) format for multiplicative component
 * i16 format for additive component

This matches the behavior of Flash (for example, alpha only changes
in units of 1/256).
2021-04-19 15:47:52 -07:00
dependabot-preview[bot] 9c466c65da build(deps): bump syn from 1.0.67 to 1.0.69
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.67 to 1.0.69.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.67...1.0.69)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-18 23:54:37 -07:00
relrelb cd8ab813a4 avm1: Return an unboxed undefined in `TransformObject` constructor
This is now possible thanks to #2415.
2021-04-17 09:27:29 -07:00
relrelb 6d68460196 tests: Expand funky_function_calls 2021-04-17 09:25:24 -07:00
relrelb 95cffdc2f9 avm1: Pass undefined this for CallMethod with non-string method_name
This isn't the most accurate behavior, since it should be an unboxed
Value, but currently it's not possible due to #843.
2021-04-17 09:25:24 -07:00
relrelb 6a34070e76 tests: Expand sound
Check Sound.duration and Sound.getDuration() for detached sounds.
Check rounding behavior of Sound.duration and Sound.getDuration()
behind a comment because NullAudioBackend doesn't respect durations.
TODO: Uncomment it once NullAudioBackend returns real durations.
2021-04-17 09:11:50 -07:00
relrelb e3478248ac avm1: Implement Sound.getDuration() and Sound.setDuration()
These seem to be undocumented.
Looks like Sound.getDuration() behaves exactly as Sound.duration,
and Sound.setDuration() does nothing.
2021-04-17 09:11:50 -07:00
relrelb 6310e31023 avm1: Sound.duration should return undefined when no sound is attached
Previously it returned 0.
2021-04-17 09:11:50 -07:00
relrelb 4d41297b04 avm1: Remove reduntant new_ret_no_self annotation
Per https://rust-lang.github.io/rust-clippy/master/#new_ret_no_self,
`new_ret_no_self` applies only to functions named `new`.
`TObject::create_bare_object` used to be named `new`, but was renamed
in 79af3ffe44.
2021-04-16 15:25:22 -07:00
relrelb 1f934c5fc6 avm1: Remove redundant newlines 2021-04-16 15:25:22 -07:00
relrelb dac60da936 avm1: ValueObject::boxed -> coerce_to_object 2021-04-16 15:25:22 -07:00
relrelb 0f8f0986e9 chore: Use matches!(...) in more places 2021-04-16 15:25:22 -07:00
relrelb 9dc63a7831 core: Remove redundant tuple 2021-04-16 15:25:22 -07:00
relrelb a2e162be0d avm1: Add Value::is_primitive
This provides a more convenient and readable way compared to
using matches!(Value::Object(_)).
2021-04-16 15:25:22 -07:00
relrelb 2ba6cada5b avm1: Reserve arguments capacity
This prevents unnecessary re-allocations.
2021-04-16 15:25:22 -07:00
Chris Midgley d89f0bbbfe fix: looks like contentType is ignored (at least in FP6) 2021-04-16 12:36:49 -07:00
Chris Midgley ba185418b9 chore: fmt 2021-04-16 12:36:49 -07:00
Chris Midgley 6c619495f4 chore: fix warnings 2021-04-16 12:36:49 -07:00
Chris Midgley 8e6bba1525 avm1: implement send_and_load 2021-04-16 12:36:49 -07:00
Chris Midgley f1b07bd75b avm1: set contentType on xml; fix initial contentType on load_vars. 2021-04-16 12:36:49 -07:00
dependabot-preview[bot] f90d58703a build(deps): bump pretty_assertions from 0.7.1 to 0.7.2
Bumps [pretty_assertions](https://github.com/colin-kiegel/rust-pretty-assertions) from 0.7.1 to 0.7.2.
- [Release notes](https://github.com/colin-kiegel/rust-pretty-assertions/releases)
- [Changelog](https://github.com/colin-kiegel/rust-pretty-assertions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/colin-kiegel/rust-pretty-assertions/compare/v0.7.1...v0.7.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-15 14:30:00 -07:00
Mike Welsh a45a5c2bcb avm1: _levelN should shadow children instances with the same name
If a child clip is named `_level0`, accessing `_level0` should
return the level and not the child clip.

Move `DisplayObject::get_level_by_path` to `StageObject`, and
change it to return an `Option<Value>`, and return
`Some(Value::Undefined)` if the path is a valid level path but
the level is not occupied. This causes get/set of `_levelN` to
be swallowed, even if the level isn't populated.
2021-04-15 13:49:17 -07:00
Mike Welsh 34886933e5 avm1: Adjust precedence of children in StageObject::get
Children instances should shadow display object magic properties.
For example, a child named "_x" will be returned instead of the
parent's _x position in GetMember.
2021-04-15 13:49:17 -07:00
Mike Welsh 9224e85a2d avm1: Delete2 returns true only if a property was actually deleted
This was incorrectly returning true for children instances
(`delete "clip"`).
2021-04-15 13:49:17 -07:00
Mike Welsh d04989cf49 tests: Update stage_object_children test
Add a few tests for shadowing of child instances vs. display
object magic properties (for example, when a child clip is named
"_x" or "_level0").
2021-04-15 13:49:17 -07:00
desuwa 0d6c548be4 tests: Add tests for Player::run_actions at timer callbacks. 2021-04-15 13:48:27 -07:00
desuwa 3030f2098a avm1: Run Player::run_actions after every timer callback. 2021-04-15 13:48:27 -07:00
EmperorBale 04d80e5e4e chore: Fix more typos 2021-04-15 00:02:40 -07:00
EmperorBale 0ea02919b3 chore: Fix typo 2021-04-15 00:02:40 -07:00
EmperorBale d227c6cbce chore: Fix formatting 2021-04-15 00:02:40 -07:00
EmperorBale 153da75304 tests: Add test for IsType 2021-04-15 00:02:40 -07:00
EmperorBale cbf8d77006 avm2: Fix IsType 2021-04-15 00:02:40 -07:00
EmperorBale e4ba4b074a tests: Add test for AsType 2021-04-15 00:02:40 -07:00
EmperorBale ca2709f594 avm2: Implement AsType 2021-04-15 00:02:40 -07:00
EmperorBale 17acebb108 chore: Fix formatting 2021-04-15 00:02:40 -07:00
EmperorBale f459e18b1a tests: Update regression tests 2021-04-15 00:02:40 -07:00
EmperorBale 1d0c2b78b2 tests: Add test for AsTypeLate 2021-04-15 00:02:40 -07:00
EmperorBale c0a56b14c0 avm2: Implement AsTypeLate 2021-04-15 00:02:40 -07:00
Mike Welsh b9d84c0a82 chore: Appease clippy
Honor the branches-sharing-code lint.
2021-04-15 00:02:27 -07:00
Mike Welsh d87be39e3c avm2: Don't parse "inf" as Infinity 2021-04-14 21:51:48 -07:00
Mike Welsh b6945395a8 avm1: Don't parse "inf" as Infinity
Rust nightly 4/13 allows f64::parse to handle "infinity", case
insensitive. This broke cases such as `Number("Infinity")`, which
should return `NaN` in AVM1.

Additionally, Rust will now print "-0" for negative zero, when
previously it would print "0".

 * Return NaN for inf cases ("inf", "-Infinity", "+INF", etc.)
 * Add a test for `Number("inf")` (this was also incorrect before
   the latest nightly)
 * Add a special case for zero in `f64_to_string` to ensure
   that -0.0 gets coerced to "0".

For more info, see:
https://github.com/rust-lang/rfcs/issues/1074
2021-04-14 21:51:48 -07:00
Adrian Wielgosik b2bed7a18d
avm1: Add missing clearTimeout() (fix #4003) 2021-04-14 11:02:04 -07:00
Moulins f9bbe96812 core: Remove extra Option/Results from XmlNode getters
This removes some special cases and simplifies the code.
2021-04-11 14:16:48 -07:00
Moulins ae1a01d181 avm1: Allow XMLNode reparenting (closes #3962)
`XMLNode.{appendChild, insertNode}` can now be used to move
child nodes from a parent to another.

There are two special cases:
  - if the node is already a child of the destination, nothing happens
  - if moving the node would create a cycle, nothing happens
2021-04-11 14:16:48 -07:00
relrelb 20d6fcc128 chore: Remove unnecessary type annotations 2021-04-10 18:39:16 -07:00
Mike Welsh 11f40384da tests: Add test for loading into _root 2021-04-10 13:48:05 -07:00
Mike Welsh aa0707411c avm1: Update movie parameters when loading into _root/_level0
The movie framerate and dimensions should be changed when a movie
is loaded into _root or level 0.
2021-04-10 13:48:05 -07:00
David Wendt 7a781179aa core: Move all of the remaining AVM2 object allocation and/or construction into the `construct_frame` step. 2021-04-09 22:24:22 -07:00
David Wendt dc5b30e460 core: Remove "constructor ran" flag now that we can handle that with a local bool 2021-04-09 22:24:22 -07:00
David Wendt 27d09084fb core: Use the library's AVM type to determine how to name the root.
We cannot check it's constructed AVM value anymore because it is now named before construction.
2021-04-09 22:24:22 -07:00
David Wendt ebc5c3dd64 avm2: Ensure that objects are only *ever* constructed at frame construction time.
This ensures that root movie classes see their children in their constructor.
2021-04-09 22:24:22 -07:00
desuwa e8de3a5a20 tests: Add tests for `MovieClip.hitTest()` with shapeflag and masks. 2021-04-09 22:11:07 -07:00
desuwa 4f90b9d161 avm1: Support masks when mouse-picking. 2021-04-09 22:11:07 -07:00
relrelb f8b589fc24 core: Fix panic in remove_invalid_jpeg_data
`data` could be shorter than 4 bytes.
2021-04-09 14:47:19 -07:00
desuwa 755409673b avm2: Add tests for set_width / set_height setting the scale to non-finite values. 2021-04-07 17:42:28 -06:00
desuwa 3c2d467a5f avm1: Add tests for set_width / set_height setting the scale to non-finite values. 2021-04-07 17:42:28 -06:00
desuwa fa1fde7083 core: Ensure the new scale is finite when setting the width / height of display objects. 2021-04-07 17:42:28 -06:00
desuwa b7bf8334b2 core: Run `update_drag` earlier in the update cycle. Fix #1511 2021-04-06 15:48:06 -06:00
relrelb 732efb27c4 render: Fix RGB15 bitmaps decoding
Each row should be padded to 2.
2021-04-05 20:10:35 -06:00
David Wendt 5d198952e8 chore: Fix merge conflict mis-resolution 2021-04-05 16:18:37 -06:00
David Wendt 5cba07111e avm2: Impl `LoaderInfo.parameters` 2021-04-05 16:18:37 -06:00
David Wendt de1b0d4d0c core: Add support for an explicit loader URL (though nothing sets it yet) and expose it in `LoaderInfo`. 2021-04-05 16:18:37 -06:00
David Wendt 4eee8be911 avm2: Impl `SWFVersion` enumeration 2021-04-05 16:18:37 -06:00
David Wendt 4c314a47cc avm2: Impl `LoaderInfo.bytes` 2021-04-05 16:18:37 -06:00
David Wendt a9328b228f avm2: Allow writing to `ByteArrayStorage` 2021-04-05 16:18:37 -06:00
David Wendt f61ea0b290 chore: Clippy beta/nightly compliance 2021-04-05 16:18:37 -06:00
David Wendt 46bf1b33c4 avm2: Impl `LoaderInfo.width` 2021-04-05 16:18:37 -06:00
David Wendt 28a1cb4308 avm2: Impl `LoaderInfo.url` 2021-04-05 16:18:37 -06:00
David Wendt 5941d6cf66 avm2: Impl `LoaderInfo.swfVersion` 2021-04-05 16:18:37 -06:00
David Wendt 6814fb9c22 avm2: Stub `LoaderInfo.isURLInaccessible` 2021-04-05 16:18:37 -06:00
David Wendt b6e31d8be5 avm2: Impl `LoaderInfo.height` 2021-04-05 16:18:37 -06:00
David Wendt e795da0358 avm2: Impl `LoaderInfo.frameRate` 2021-04-05 16:18:37 -06:00
David Wendt cbd167fd6c avm2: Stub `LoaderInfo.contentType` 2021-04-05 16:18:37 -06:00
David Wendt 76c563146d tests: Grab `contentType` on frame two 2021-04-05 16:18:37 -06:00
David Wendt 7b7d250ce9 avm2: This is a getter, not a method 2021-04-05 16:18:37 -06:00
David Wendt 2a01260f52 avm2: `bytesLoaded` etc reports the compressed file length, not the uncompressed length 2021-04-05 16:18:37 -06:00
David Wendt d0ad894f70 avm2: Impl `LoaderInfo.content` 2021-04-05 16:18:37 -06:00
David Wendt b4cb01d2c9 avm2: Impl `LoaderInfo.bytesTotal`, and `.bytesLoaded`
`bytesLoaded` is currently aliased to `bytesTotal` as we do not yet support streaming loads
2021-04-05 16:18:37 -06:00
David Wendt 55e448ebaa avm2: Impl `LoaderInfo.applicationDomain` 2021-04-05 16:18:37 -06:00
David Wendt c156cd2a16 tests: Add tests for properties that are only accessible on frame 2 2021-04-05 16:18:37 -06:00
David Wendt 12dcfe7c62 avm2: Impl `LoaderInfo.actionScriptVersion` 2021-04-05 16:18:37 -06:00
David Wendt 1a7b33a1af avm2: Impl `ActionScriptVersion` 2021-04-05 16:18:37 -06:00
David Wendt a492c4db4d tests: Add a test for `LoaderInfo`'s properties 2021-04-05 16:18:37 -06:00
David Wendt fc26c26d1d avm2: Allow access to `loaderInfo` on root movies 2021-04-05 16:18:37 -06:00
David Wendt 60c92dde49 avm2: Add Loader Info class & object type 2021-04-05 16:18:37 -06:00
CUB3D e2f124ee34 avm2: Rename current_position -> instruction_start 2021-04-03 16:37:47 -06:00
CUB3D c22ebc1de3 chore: Format on stable 2021-04-03 16:37:47 -06:00
CUB3D d5c2e5559b avm2: Don't mutably borrow for pos() 2021-04-03 16:37:47 -06:00
CUB3D 96f89a1643 avm2: Implement Op::LookupSwitch 2021-04-03 16:37:47 -06:00
relrelb 2d37f4d23e avm1: Migrate `search_prototype` to primitive prototype 2021-04-03 12:40:05 -06:00
relrelb bbded90697 avm1: Rename proto_value to proto 2021-04-01 17:06:07 -06:00
relrelb 89679bba65 avm1: Delete proto and set_proto
In favor of the new proto_value and set_proto_value pair.
In the next commit proto_value and set_proto_value will be renamed
to proto and set_proto.
2021-04-01 17:06:07 -06:00
relrelb 2c1dfea3ce avm1: Migrate Player to proto_value 2021-04-01 17:06:07 -06:00
relrelb 76d80061a7 avm1: Migrate Object to proto_value 2021-04-01 17:06:07 -06:00
relrelb e712a4fd59 avm1: Migrate FunctionObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb dc174b9d9f avm1: Migrate StageObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb be60aa5941 avm1: Migrate XmlIdMapObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb ea52562d06 avm1: Migrate XmlAttributesObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 161db474a2 avm1: Migrate SuperObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 766a5db31c avm1: Migrate ScriptObject to proto_value 2021-04-01 17:06:07 -06:00
relrelb 18a32424bd amv1: Migrate custom_object.rs to proto_value 2021-04-01 17:06:07 -06:00
CUB3D 209b9cec36 chore: Format 2021-03-31 18:36:24 -06:00
CUB3D ecbf6118bb avm2: Update tests 2021-03-31 18:36:24 -06:00
CUB3D 9453743f9f avm2: Add test for Op::EscXElem 2021-03-31 18:36:24 -06:00
CUB3D 0ea564f75c avm2: Implement Op::EscXAttr and Op::EscXElem 2021-03-31 18:36:24 -06:00
relrelb e453cbf0ef tests: Expand object_prototypes 2021-03-31 18:04:52 -06:00
relrelb e5660bc0c7 avm1: Allow primitive prototypes
Prototypes can be primitive, not just objects. However, TObject's
proto() and set_proto() work with Object and not Value. To allow
easier and more incremental migration from Object to Value, this
commit introduces a new pair of proto_value/set_proto_value functions
in TObject, preserving the existing proto/set_proto functions.
Both pairs have default implementations, so it's enough to implement
only one pair in each TObject implementation.
For now only ScriptObject uses the new pair, which fixes the behavior
of incorrectly coercing __proto__ to object.

Follow-up migration plan:
1. Replace all old proto/set_proto implementations by the new
proto_value/set_proto_value in all TObject implementations on a
one-by-one basis.
2. After proto/set_proto become unused, delete them and rename
proto_value/set_proto_value to proto/set_proto for more concise code.
2021-03-31 18:04:52 -06:00
relrelb 014e85b1f0 tests: Expand funky_function_calls 2021-03-31 17:59:58 -06:00
relrelb 5beb0164dd tests: Cleanup funky_function_calls 2021-03-31 17:59:58 -06:00
relrelb a3727e0727 avm1: Fix "this" argument conversion in Function.prototype.{call,apply}
The "this" argument should fall-back to the global object only for
undefined or null. Other primitives should be coerced to an object
rather than falling-back to the global object.

As a drive-by replace `Vec::new` by `Vec::with_capacity` in
`Function.prototype.apply` to minimize unnecessary reallocations.
2021-03-31 17:59:58 -06:00
CUB3D 8d68dcb562 avm2: Update tests 2021-03-29 20:46:02 -06:00
CUB3D 68527c13da avm2: Implement flash.utils.getTimer 2021-03-29 20:46:02 -06:00
dependabot-preview[bot] 23af83f923 build(deps): bump syn from 1.0.64 to 1.0.65
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.64 to 1.0.65.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.64...1.0.65)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-27 01:40:26 -07:00
relrelb 7e1acce150 core: Fix build without default features
Previously `cargo build --no-default-features` failed because then
neither implementation of `Mp3Decoder` is chosen.
Fix that by not handling mp3 sounds at all in that case.
2021-03-27 01:40:11 -07:00
Mike Welsh f96a414036 avm2: Lazily initialize Graphics object
Initialize a Sprite/Shape's Graphics object on the first access,
so that `shape.graphics == shape.graphics` is `true`.
2021-03-24 13:18:06 -07:00
Mike Welsh 040da925e4 avm2: Fix incorrect color in drawing API 2021-03-24 13:18:06 -07:00
Mike Welsh 9a08b9ae4f avm2: flash.display.Graphics is final 2021-03-24 13:18:06 -07:00
David Wendt df466dfba1 core: Start with an empty drawing when a `Shape` is converted into a `Drawing`. 2021-03-24 13:18:06 -07:00
David Wendt b739b8d786 core: Retain the original `swf::Shape` until dynamic behavior is needed, upon which we switch to using a `Drawing`. 2021-03-24 13:18:06 -07:00
David Wendt ff028de8de core: `Drawing` should accept a SWF movie to pull bitmaps from 2021-03-24 13:18:06 -07:00
David Wendt 4238d8bd2a tests: Add another test for drawing on `MovieClip` 2021-03-24 13:18:06 -07:00
David Wendt 1d57eee369 tests: Add a test for shape drawing 2021-03-24 13:18:06 -07:00
David Wendt 1d64f38bb7 avm2: Impl `drawRect` 2021-03-24 13:18:06 -07:00
David Wendt 60f4f2c534 core: `Graphic` should expose it's `Drawing` for external access 2021-03-24 13:18:06 -07:00
David Wendt 85ee005c0f core: `Graphic` should always use it's stored `Drawing`'s bounds 2021-03-24 13:18:06 -07:00
David Wendt e3f2d0f213 avm2: Allow constructing new `Shape`s. 2021-03-24 13:18:06 -07:00
David Wendt 62a779444d avm2: `graphics` is a `Sprite` property, not a `MovieClip` property 2021-03-24 13:18:06 -07:00
David Wendt 5e7327d041 avm2: Allow drawing on `Shape`s. 2021-03-24 13:18:06 -07:00
David Wendt e8b6d1a52a core: Migrate clip drawing commands to exposing the internal `Drawing` to mutation 2021-03-24 13:18:06 -07:00
David Wendt 1a6f401f1f avm2: Implement `Graphics.moveTo` 2021-03-24 13:18:06 -07:00
David Wendt 15d3a1e99d avm2: Implement `Graphics.lineTo` 2021-03-24 13:18:06 -07:00
David Wendt 9464a8800a avm2: Implement `CapsStyle` 2021-03-24 13:18:06 -07:00
David Wendt f7f98cc69e avm2: Implement `LineScaleMode` 2021-03-24 13:18:06 -07:00
David Wendt 582d2447cd avm2: Implement `JointStyle` 2021-03-24 13:18:06 -07:00
David Wendt 6396b90890 avm2: Implement `Graphics.lineStyle` 2021-03-24 13:18:06 -07:00
David Wendt 41ad756792 avm2: Implement `Graphics.endFill` 2021-03-24 13:18:06 -07:00
David Wendt 3dfeeacfcc avm2: Implement `Graphics.curveTo` 2021-03-24 13:18:06 -07:00
David Wendt 71b6bca100 avm2: Implement `Graphics.clear` 2021-03-24 13:18:06 -07:00
David Wendt f1febe33b9 avm2: Implement `Graphics.beginFill` 2021-03-24 13:18:06 -07:00
David Wendt 124e144d02 avm2: Add a class for `graphics` 2021-03-24 13:18:06 -07:00
dependabot-preview[bot] 20b2e55171 build(deps): bump gif from 0.11.1 to 0.11.2
Bumps [gif](https://github.com/image-rs/image-gif) from 0.11.1 to 0.11.2.
- [Release notes](https://github.com/image-rs/image-gif/releases)
- [Changelog](https://github.com/image-rs/image-gif/blob/master/Changes.md)
- [Commits](https://github.com/image-rs/image-gif/compare/v0.11.1...v0.11.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-23 10:03:59 -07:00
dependabot-preview[bot] 19d57941ee build(deps): bump serde from 1.0.124 to 1.0.125
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.124 to 1.0.125.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.124...v1.0.125)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-23 10:03:17 -07:00
Adrian Wielgosik c084d575f4
tests: Speed up builds of regression tests 2021-03-20 14:50:57 -07:00
Adrian Wielgosik 2d1c60e02e
avm1: Fix binary operators not returning signed values
Also enabled AVM2 test that was forgotten before.
2021-03-20 14:49:55 -07:00
EmperorBale ac9d27b2fd
avm1: Avoid panic when setMask called with no arguments (fix #3298) 2021-03-19 17:25:58 -07:00
Chris Midgley aa94f6570e
avm1: fix String.substr behaviour for negative lengths (fix #3626) 2021-03-19 14:32:04 -07:00
David Wendt 05dc538a25 avm2: Use the actual `FromIterator` trait 2021-03-19 12:39:57 -07:00
David Wendt 1baadb93c2 chore: cargo fmt is fickle 2021-03-19 12:39:57 -07:00
David Wendt a40755154d avm2: `TextField` and `TextFormat` are sealed (non-dynamic) classes 2021-03-19 12:39:57 -07:00
David Wendt 6deebf0733 tests: approx the `leading` and `font_size` tests, and increase the epsilon on `autosize` by 1px. 2021-03-19 12:39:57 -07:00
David Wendt a05423d48c avm2: Setting a given text property also sets or resets the `html` mode (since it's not a separate property like in AS2) 2021-03-19 12:39:57 -07:00
David Wendt f5268198b0 avm2: Don't round text metrics (`textWidth` and `textHeight`) 2021-03-19 12:39:57 -07:00
David Wendt f908eb65fc tests: Port AS2 edittext tests to AS3. 2021-03-19 12:39:57 -07:00
David Wendt f188306f4f avm2: `setTextFormat` is range-checked 2021-03-19 12:39:57 -07:00
David Wendt 78c519cce0 avm2: Don't except when creating a dynamic TextField. 2021-03-19 12:39:57 -07:00
David Wendt 4ef01000a8 avm2: Impl `TextField.setTextFormat` 2021-03-19 12:39:57 -07:00
David Wendt a115db49ba avm2: Impl `TextField.setSelection` 2021-03-19 12:39:57 -07:00
David Wendt 7902914aa4 avm2: Impl `TextField.replaceText` 2021-03-19 12:39:57 -07:00
David Wendt c22f30fdf0 avm2: Impl `TextField.replaceSelectedText` 2021-03-19 12:39:57 -07:00
David Wendt b4d97ca183 avm2: Impl `TextField.getTextFormat` 2021-03-19 12:39:57 -07:00
David Wendt f45c9d1889 avm2: Impl `TextField.appendText` 2021-03-19 12:39:57 -07:00
David Wendt 42f717deb8 avm2: Impl `TextField.wordWrap` 2021-03-19 12:39:57 -07:00
David Wendt 4bfc3cfda4 avm2: Impl `TextField.type` 2021-03-19 12:39:57 -07:00
David Wendt 1c2ef3154a avm2: Impl `TextFieldType` 2021-03-19 12:39:57 -07:00
David Wendt da563266d5 avm2: Impl `TextField.textHeight` and `TextField.textWidth` 2021-03-19 12:39:57 -07:00
David Wendt 8165aa5c4a avm2: Impl `TextField.textColor` 2021-03-19 12:39:57 -07:00
David Wendt c0a2547be3 avm2: Impl `TextField.text` 2021-03-19 12:39:57 -07:00
David Wendt dee937ac3a avm2: Impl `TextField.selectable` 2021-03-19 12:39:57 -07:00
David Wendt b6a1bf80c1 avm2: Impl `TextField.multiline` 2021-03-19 12:39:57 -07:00
David Wendt 053b6bd4cc avm2: Impl `TextField.length` 2021-03-19 12:39:57 -07:00
David Wendt 1ce868c51e avm2: Impl `TextField.htmlText` 2021-03-19 12:39:57 -07:00
David Wendt 89c131bf52 avm2: Impl `TextField.embedFonts`
This assumes `embedFonts` is the opposite of device fonts, which sounds reasonable.
2021-03-19 12:39:57 -07:00
David Wendt 62ec106afb avm2: Impl `TextField.displayAsPassword` 2021-03-19 12:39:57 -07:00
David Wendt fa5145b884 avm2: Impl `TextField.defaultTextFormat` 2021-03-19 12:39:57 -07:00
David Wendt 3d8bf90794 core: Also allow converting `TextFormat` back into an AVM2 object. 2021-03-19 12:39:57 -07:00
David Wendt 3d2d2072af avm2: Impl `TextFormatAlign` 2021-03-19 12:39:57 -07:00
David Wendt e10726ef1c core: Add utilities for converting an AVM2 object into a `TextFormat` 2021-03-19 12:39:57 -07:00
David Wendt 50f992b9e6 avm2: Implement `TextField.borderColor` 2021-03-19 12:39:57 -07:00
David Wendt 8913297514 avm2: Fix type of `TextField.backgroundColor` 2021-03-19 12:39:57 -07:00
David Wendt 8d1e0992b5 avm2: Impl `TextField.border` 2021-03-19 12:39:57 -07:00
David Wendt 436b3b2ed3 avm2: Impl `TextField.backgroundColor` 2021-03-19 12:39:57 -07:00
David Wendt a84acd55c3 avm2: Impl `TextFieldAutoSize` 2021-03-19 12:39:57 -07:00
David Wendt e35f66fafe avm2: Impl `TextField.autoSize` 2021-03-19 12:39:57 -07:00
David Wendt b6adc18c9c avm2: Impl `flash.text.TextFormat` 2021-03-19 12:39:57 -07:00
David Wendt f44e54246d avm2: Text fields on AVM2 movies should have AVM2 objects. 2021-03-19 12:39:57 -07:00
David Wendt 9e739f8ceb avm2: Ensure constructed text fields have a DisplayObject side 2021-03-19 12:39:57 -07:00
David Wendt b71286f1c4 avm2: Stub `flash.text.TextField` 2021-03-19 12:39:57 -07:00
relrelb cdb2c279c0 avm2: Implement Nop 2021-03-19 12:39:23 -07:00
relrelb 72626825d3 tests: Expand bitmap_data 2021-03-18 22:04:39 -07:00
relrelb 3b6f0f0ced avm1: Fix color_bounds_rect 2021-03-18 22:04:39 -07:00
Aaron Hill d3744d28df Derive `Collect` for `ActionQueue` 2021-03-18 21:56:04 -07:00
dependabot-preview[bot] 069096e3e7 build(deps): bump syn from 1.0.63 to 1.0.64
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.63 to 1.0.64.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.63...1.0.64)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-18 18:33:14 -07:00
Callum Thomson a570d96433
avm2: Implement flash.geom.Point (#3681) 2021-03-18 12:03:04 -07:00
Adrian Wielgosik 1aa77b04fe
avm1: Reduce frequency of timeout checks by 10+ times 2021-03-13 01:19:58 -08:00
relrelb d16d142c60 chore: Appease clippy 2021-03-13 00:56:04 -08:00
relrelb e594f602b6 chore: Twips::new(0) -> Twips::zero() 2021-03-13 00:56:04 -08:00
dependabot-preview[bot] 934f95cd52 build(deps): bump syn from 1.0.62 to 1.0.63
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.62 to 1.0.63.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.62...1.0.63)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-09 12:25:56 -08:00
dependabot-preview[bot] 8bd13203a1 build(deps): bump pretty_assertions from 0.6.1 to 0.7.1
Bumps [pretty_assertions](https://github.com/colin-kiegel/rust-pretty-assertions) from 0.6.1 to 0.7.1.
- [Release notes](https://github.com/colin-kiegel/rust-pretty-assertions/releases)
- [Changelog](https://github.com/colin-kiegel/rust-pretty-assertions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/colin-kiegel/rust-pretty-assertions/compare/v0.6.1...v0.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-09 12:25:47 -08:00
relrelb 866e143073 chore: Cleanup bounds related code 2021-03-08 14:34:26 -08:00
EmperorBale 4d7b2fa1b9
avm1: Fix #3446
Thanks!
2021-03-08 00:52:35 -08:00
TÖRÖK Attila 339d0330a2 avm1: Fix seeking
The problem was most likely with negative relative offsets
2021-03-08 00:49:16 -08:00
relrelb 8f21c17683 chore: Rename MutationContext parameters to gc_context 2021-03-06 23:30:06 -08:00
relrelb 8318d4d0ed chore: Remove unnecessary context parameters 2021-03-06 23:30:06 -08:00
relrelb fff6eb2ffd chore: Use bitflags set method 2021-03-06 23:30:06 -08:00
dependabot-preview[bot] d8c140fce1 build(deps): bump syn from 1.0.61 to 1.0.62
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.61 to 1.0.62.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.61...1.0.62)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-06 23:28:38 -08:00
dependabot-preview[bot] c4af8114d0 build(deps): bump serde from 1.0.123 to 1.0.124
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.123 to 1.0.124.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.123...v1.0.124)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-05 22:29:54 -08:00
EmperorBale b68eeeae26
avm2: Implement ByteArray 2021-03-05 15:01:02 -08:00
desuwa 0d98fe8b7c core: Clear masker/maskee properties when unloading objects 2021-03-05 14:15:25 -08:00
dependabot-preview[bot] b586c7f74e build(deps): bump indexmap from 1.6.1 to 1.6.2
Bumps [indexmap](https://github.com/bluss/indexmap) from 1.6.1 to 1.6.2.
- [Release notes](https://github.com/bluss/indexmap/releases)
- [Commits](https://github.com/bluss/indexmap/compare/1.6.1...1.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-05 14:10:36 -08:00
dependabot-preview[bot] b6559214b8 build(deps): bump syn from 1.0.60 to 1.0.61
Bumps [syn](https://github.com/dtolnay/syn) from 1.0.60 to 1.0.61.
- [Release notes](https://github.com/dtolnay/syn/releases)
- [Commits](https://github.com/dtolnay/syn/compare/1.0.60...1.0.61)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-05 10:31:55 -08:00
TÖRÖK Attila 873736950e core/avm1: Implement BitmapData.paletteMap() 2021-03-03 05:26:24 -08:00
paq 922998b4a2 tests: Add test for RegExp's exec 2021-03-03 03:37:34 -08:00
paq 71588b32f1 tests: Add test for RegExp's test 2021-03-03 03:37:34 -08:00
paq ae2de6315d tests: AVM2 RegExp constructor and flags 2021-03-03 03:37:34 -08:00
paq d866f73c5e avm2: Implement RegExp 2021-03-03 03:37:34 -08:00
paq b8c1f1627a chore: Add `regress` crate for implementing RegExp class. 2021-03-03 03:37:34 -08:00
David Wendt 999100a332 avm2: Only track broadcast lists for events that are actually broadcasts. 2021-03-03 03:08:01 -08:00
David Wendt 540a68fb68 avm2: Grant each event it's own, separate broadcast list. 2021-03-03 03:08:01 -08:00
David Wendt 8e8de09f63 core: Ensure absolutely nothing runs in frame scripts unless the object is AVM2. 2021-03-03 03:08:01 -08:00
David Wendt d90ad1ab08 core: Account for the fact that AVM2 constructs objects far earlier than the frame number advances.
This is most certainly *not* the correct behavior; though it does work. If I track the frame number in event handlers we can see it change before `enterFrame` is broadcast. However, when I tried to do that, all hell broke loose and every AVM1 and AVM2 test failed (gating the behavior to AVM2 did *not* help).
2021-03-03 03:08:01 -08:00
David Wendt a5b4e168d3 avm2: Stub `flash.display.Shape`. 2021-03-03 03:08:01 -08:00
David Wendt d157a9995b core: When a programmatic goto happens, *all* frame scripts run immediately. 2021-03-03 03:08:01 -08:00
David Wendt 452d878cd9 core: When triggered by ActionScript, clip gotos should trigger AS3 frame lifecycle events.
For some reason, only *some* of the events actually trigger; notably programmatic gotos do not trigger `enterFrame`.

Implicit gotos (like looping around to frame 1) also do not trigger frame scripts; they instead run at the usual time.
2021-03-03 03:08:01 -08:00
David Wendt c9b68f600c core: Avoid skipping queued script frames in the case where a frame script queues up additional frame scripts via gotos 2021-03-03 03:08:01 -08:00
David Wendt f3a8eb821f core: Gotos still trigger new frame scripts 2021-03-03 03:08:01 -08:00
David Wendt e9f8636fe5 core: Frame scripts should run immediately and not queue 2021-03-03 03:08:01 -08:00
David Wendt dc499a13a2 core: Gotos do not issue frame progression events on their own. 2021-03-03 03:08:01 -08:00
David Wendt 69e8a33a8e Debug event dispatches. 2021-03-03 03:08:01 -08:00
David Wendt a2d56016cb avm2: Don't except when dispatching events on unconstructed objects. 2021-03-03 03:08:01 -08:00
David Wendt 50546512fe core: Add a separate construct step before running display objects.
This appears to only be in use for AVM2. Objects placed on a given frame are constructed before anything else happens with it's parent - even it's constructor being called. This involves splitting AVM2 up into a bunch of steps that really don't make sense for AVM1 content. Hence, `construct_frame` is a no-op for AVM1 and pre-running the first frame when instantiated is AVM1 exclusive now.
2021-03-03 03:08:01 -08:00
David Wendt a91273530f tests: Display events tests should log construction events 2021-03-03 03:08:01 -08:00
David Wendt a308b9d4f9 Re-dispatch the added event after post-instantiating an object since the automatic dispatch happens too early 2021-03-03 03:08:01 -08:00
David Wendt ac6a206257 Fire `exitFrame`, `enterFrame`, and `frameConstructed` events as broadcasts. 2021-03-03 03:08:01 -08:00
David Wendt d1ffa3254b Store a list of every constructed event dispatcher so we can broadcast events on them. 2021-03-03 03:08:01 -08:00
David Wendt 731c18ad80 avm2: Issue (or attempt to issue) events for entering, exiting, and constructing, a frame. 2021-03-03 03:08:01 -08:00
David Wendt 2e38caafff tests: Add further tests for various timeline interaction scenarios and events 2021-03-03 03:08:01 -08:00
David Wendt 3df97d8da2 avm2: Stub `System.gc`.
Our current garbage collector design precludes the ability to actually collect garbage during player updates, so this is a no-op.
2021-03-03 03:08:01 -08:00
David Wendt 464f388324 avm2: Unstaged display objects are treated as unrooted. 2021-03-03 03:08:01 -08:00
David Wendt 279f2d0652 core: Re-allow reinsertions into the same parent (but still gate off the extra events it would otherwise use) 2021-03-03 03:08:01 -08:00
David Wendt cea65f95db avm2: Dispatch `addedToStage` and `removedFromStage` events 2021-03-03 03:08:01 -08:00
David Wendt 7f78bfa51d core: Add a utility method to check if a display object is rooted to the current stage 2021-03-03 03:08:01 -08:00
David Wendt 5acaf0bd01 core: `iter_render_list` returns a non-locking iterator and should be documented as such. 2021-03-03 03:08:01 -08:00
David Wendt 094563e28f tests: Add a (currently failing) test for the execution order of various events in the presence of programmed display tree manipulations. 2021-03-03 03:08:01 -08:00