Commit Graph

2258 Commits

Author SHA1 Message Date
TÖRÖK Attila 40eedb6405 core/avm1: Implement BitmapData.merge() 2021-04-21 18:46:03 -07:00
Adrian Wielgosik 8176e0a633
avm2: minor changes to domain memory
* Do not use as_bytearray_mut when we don't need mutability
* Set default domain memory size to 1024b.
2021-04-21 15:08:13 -07:00
CUB3D 9812fab9f8 chore: Format and fix clippy lints 2021-04-21 00:33:11 -07:00
CUB3D 7c4eb0d7ff avm2: Implement ApplicationDomain.domainMemory 2021-04-21 00:33:11 -07:00
CUB3D b3b1e69fc2 avm2: Store ByteArrayObject in Domain rather than ByteArrayStorage 2021-04-21 00:33:11 -07:00
CUB3D 4dc1210b37 avm2: Use try_into for converting slice->array 2021-04-21 00:33:11 -07:00
CUB3D 397ceed33c avm2: Dont panic when domain memory not available 2021-04-21 00:33:11 -07:00
CUB3D 136add866a chore: Fix clippy lints 2021-04-21 00:33:11 -07:00
CUB3D 63120806bf avm2: Correct Sxi8 and Sxi16 2021-04-21 00:33:11 -07:00
CUB3D 6d2339b151 avm2: Add tests for Op::Sxi1 2021-04-21 00:33:11 -07:00
CUB3D f34579926c chore: Format 2021-04-21 00:33:11 -07:00
CUB3D 99edb5ab2b avm2: Implement Op::Sxi1 2021-04-21 00:33:11 -07:00
CUB3D 9ffa4f1f50 avm2: Implement Op::Lf64 2021-04-21 00:33:11 -07:00
CUB3D b4736413fa avm2: Implement Op::Sf64 2021-04-21 00:33:11 -07:00
CUB3D 2b4becf41f avm2: Implement Op::Lf32 2021-04-21 00:33:11 -07:00
CUB3D 509392db8e avm2: Implement Op::Sf32 2021-04-21 00:33:11 -07:00
CUB3D dce2626482 avm2: Use from/to_le_bytes 2021-04-21 00:33:11 -07:00
CUB3D 35d7c5a7e3 chore: Format 2021-04-21 00:33:11 -07:00
CUB3D ae9d5fd328 avm2: Implement Op::Li32 2021-04-21 00:33:11 -07:00
CUB3D 951d557a90 avm2: Implement Op::Si32 2021-04-21 00:33:11 -07:00
CUB3D 96ad0e3d00 avm2: Implement Op::Li16 2021-04-21 00:33:11 -07:00
CUB3D aaaf6ace3e avm2: Implement Op::Si16 2021-04-21 00:33:11 -07:00
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
TÖRÖK Attila 46ddc31254 avm2: Call the super initializer of LoaderInfo after construction 2021-04-19 18:16:47 -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
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 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 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
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
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 d227c6cbce chore: Fix formatting 2021-04-15 00:02:40 -07:00
EmperorBale cbf8d77006 avm2: Fix IsType 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 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 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 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 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 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 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 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