David Wendt
a852a6939a
Add an extremely trivial implementation for the AVM2 interpreter state.
2020-07-13 17:42:31 -04:00
Nathan Adams
fba8ccda81
avm1: Rename Avm1String to AvmString
2020-07-13 10:12:54 -07:00
Nathan Adams
d8f043fa1a
avm1: Value::coerce_to_string returns an Avm1String, as it can avoid a clone-and-reallocate
2020-07-13 10:12:54 -07:00
Nathan Adams
f0ef68cb16
avm1: Reenabled paused string-value tests during string refactor
2020-07-13 10:12:54 -07:00
Nathan Adams
c60b2cf4fc
avm1: Implement From<&'static str> for Value
2020-07-13 10:12:54 -07:00
Nathan Adams
e03e3f6c4e
avm1: Allow Avm1String to contain &'static str
2020-07-13 10:12:54 -07:00
Nathan Adams
ad733f2f21
avm1: Add Avm1String which wraps Gc<String>
2020-07-13 10:12:54 -07:00
Nathan Adams
016b9db3c5
avm1: Change Value::String(String) to Value::String(Gc<String>)
2020-07-13 10:12:54 -07:00
CUB3D
0591c0fe4b
core: Add functions to prototypes
2020-07-12 15:25:58 -07:00
CUB3D
ab022b66e9
chore: Format and cleanup clippy lints
2020-07-12 15:25:58 -07:00
CUB3D
83cca044ad
core: Add tests for ContextMenu and ContextMenuItem
2020-07-12 15:25:58 -07:00
CUB3D
46cd8eb507
core: Add ContextMenuItem
2020-07-12 15:25:58 -07:00
CUB3D
04ca652f98
core: ContextMenu fully implemented
2020-07-12 15:25:58 -07:00
CUB3D
73a98c7f78
core: Implement copy() for ContextMenu
2020-07-12 15:25:58 -07:00
CUB3D
f3aa6f7f01
core: Add stub of ContextMenuItem
2020-07-12 15:25:58 -07:00
CUB3D
c8fefc56b5
core: Add stubs for context menu
2020-07-12 15:25:58 -07:00
dependabot-preview[bot]
aaf42d1948
build(deps): bump syn from 1.0.33 to 1.0.34
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.33 to 1.0.34.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.33...1.0.34 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-12 15:01:43 -07:00
Nathan Adams
180891c58e
avm1: Add impl_custom_object!() macro to simplify custom object types
2020-07-10 16:48:05 -07:00
Nathan Adams
eb94cc54b2
chore: Move avm1 objects to their own module, we have plenty of them now
2020-07-10 16:48:05 -07:00
Mike Welsh
3322c2d916
avm1: Implement updateAfterEvent
2020-07-10 14:38:48 -07:00
Mike Welsh
8715589f50
tests: Add setInterval test
2020-07-10 14:38:48 -07:00
Mike Welsh
98e7da7d93
avm1: Implement setInterval
2020-07-10 14:38:48 -07:00
Mike Welsh
a1ff80bb18
avm1: Object.watch is case insensitive on SWFv6
2020-07-10 12:02:26 -07:00
Nathan Adams
8a0430d744
avm1: Implement Object.watch & Object.unwatch ( #268 )
2020-07-10 12:02:26 -07:00
Nathan Adams
ecbab536b5
avm1: Respect ScriptLimits for recursion depth, and use that in infinite_recursion_function
2020-07-08 14:47:38 -07:00
Nathan Adams
2b30fd32b7
avm1: Activation depth can be up to u16.
2020-07-08 14:47:38 -07:00
Nathan Adams
51ec5739c6
avm1: Throw errors when functions (user-called, or special) go too deep
2020-07-08 14:47:38 -07:00
Nathan Adams
aa98c2c24f
avm1: Track the reason for executions, if it's a function call vs
...
something special, like a getter
2020-07-08 14:47:38 -07:00
Nathan Adams
65396ba87a
avm1: All errors are ignored during getters or setters
2020-07-08 14:47:38 -07:00
Nathan Adams
3ee1902117
avm1: Don't log errors at every Activation, only at the "root" frames
2020-07-08 14:47:38 -07:00
Nathan Adams
8218e14824
avm1: Remove unused field is_executing from Activation
2020-07-08 14:47:38 -07:00
dependabot-preview[bot]
a3bdb20cf1
build(deps): bump smallvec from 1.4.0 to 1.4.1
...
Bumps [smallvec](https://github.com/servo/rust-smallvec ) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/servo/rust-smallvec/releases )
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.4.0...v1.4.1 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-06 20:30:41 -07:00
Mike Welsh
2cbbe32412
tests: Add test for GetVariable/SetVariable on _x, etc.
2020-07-05 15:15:31 -07:00
Mike Welsh
804385347f
tests: Add test for virtual properties on prototype
2020-07-05 15:15:31 -07:00
Mike Welsh
fec8cf5e52
tests: Add tests for with from issue #792
2020-07-05 15:15:31 -07:00
Mike Welsh
bd7f986594
avm1: Allow overwriting _parent
2020-07-05 15:15:31 -07:00
Mike Welsh
ad6e2ceed4
avm1: Remove TObject::is_property_overwritable
...
Local virtual properties take precedence over prototype/parent
scopes, even for read-only propreties.
2020-07-05 15:15:31 -07:00
Mike Welsh
1240c79f70
avm1: StageObject::has_property should return true for _x, etc.
2020-07-05 15:15:31 -07:00
Mike Welsh
6feb266576
avm1: with(undefined) or with(null) is ignored
2020-07-05 15:15:31 -07:00
CUB3D
00d55b05a0
chore: Fix formatting
2020-07-05 13:49:59 -07:00
CUB3D
64eed4def9
chore: Cleanup
2020-07-05 13:49:59 -07:00
CUB3D
ab58cff8b3
core: Add tests for ColorTransform and cleanup code
2020-07-05 13:49:59 -07:00
CUB3D
0dcbd05f5d
chore: Fix formatting
2020-07-05 13:49:59 -07:00
CUB3D
68eb6a6342
core: Fix ColorTransformObject virtual prototype setters
2020-07-05 13:49:59 -07:00
CUB3D
73e9dc1a82
core: Refactor ColorTransform
2020-07-05 13:49:59 -07:00
CUB3D
26ae182584
core: Update to reflect avm changes
2020-07-05 13:49:59 -07:00
CUB3D
431cc532be
core: ColorTransform no longer passed through engine ColorTransform object
2020-07-05 13:49:59 -07:00
CUB3D
a8b1be2afa
core: Remove useless to_owned in color_transform
2020-07-05 13:49:59 -07:00
CUB3D
c0315dce3f
chore: Format
2020-07-05 13:49:59 -07:00
CUB3D
a8f7638d99
core: Implement ColorTransform
2020-07-05 13:49:59 -07:00
dependabot-preview[bot]
328246dc10
build(deps): bump jpeg-decoder from 0.1.19 to 0.1.20
...
Bumps [jpeg-decoder](https://github.com/image-rs/jpeg-decoder ) from 0.1.19 to 0.1.20.
- [Release notes](https://github.com/image-rs/jpeg-decoder/releases )
- [Changelog](https://github.com/image-rs/jpeg-decoder/blob/master/CHANGELOG.md )
- [Commits](https://github.com/image-rs/jpeg-decoder/compare/v0.1.19...v0.1.20 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-04 15:29:45 -07:00
Mike Welsh
7b4045f32b
core: Remove some unneccessary `take` calls in tag functions
2020-07-03 18:52:26 -07:00
Mike Welsh
08569ae979
core: Limit tag parsing to slice of tag data
2020-07-03 18:52:26 -07:00
Nathan Adams
c50c835790
avm1: Made Executable::Action take in a Gc to Avm1Function, reducing the size of the struct significantly
2020-07-03 18:47:34 -07:00
Nathan Adams
c4980d0bf5
core: Make XMLName::node_name return Cow<str>. It's not always owned, and we don't always need it to be.
2020-07-03 17:30:59 -07:00
Nathan Adams
c036e2cf88
avm1: Made f64_to_string return Cow<str> instead of String, as we sometimes return static values
2020-07-03 17:30:59 -07:00
Nathan Adams
938d644d7d
core: Made PropertyMap::insert take &str instead of String, as ownership isn't always needed
2020-07-03 17:30:59 -07:00
Nathan Adams
fb84999778
core: Made VacantEntry store a &str instead of a String, avoiding allocation until insertation is requested
2020-07-03 17:30:59 -07:00
Nathan Adams
f4921fad45
core: Made PropertyMap::entry take &str instead of String. We often don't need ownership here.
2020-07-03 17:30:59 -07:00
Nathan Adams
b5c06be8a2
avm1: Anonymous function names for debugging when not in debug mode
2020-07-03 17:24:20 -07:00
Nathan Adams
51321713b5
avm1: Show stack frame with the avm_debug feature
2020-07-03 17:24:20 -07:00
Nathan Adams
c976cf8efb
avm1: Replace action.avm() with activation.avm to help with borrow checker in next commit
2020-07-03 17:24:20 -07:00
Mike Welsh
07814fdf53
tests: Add test for Error
2020-07-02 20:58:01 -07:00
Jon Pacheco
48c65f02a1
avm1: Implement Error object (see #251 )
2020-07-02 20:58:01 -07:00
Adrian Wielgosik
301d696670
Add a fast path for ASCII case conversions
2020-07-02 12:48:50 -07:00
Mike Welsh
3a4d432645
tests: Edit textfield_variable test for #777
2020-07-02 01:29:41 -07:00
Mike Welsh
dd32acd8fc
avm1: Empty text field does not initialize variable binding
...
If a text field with a variable binding is placed on the stage,
usually the variable is initialized with the initial text. However,
if the text field is empty, the variable remains undefined.
Fixes #777 .
2020-07-02 01:29:41 -07:00
Mike Welsh
b05da5ef0f
avm1: CastOp fails for primitive values
2020-07-01 17:30:56 -07:00
Nathan Adams
d86761db5d
avm1: Implement try {..} catch {..} finally {..} - #731
2020-07-01 17:30:56 -07:00
Nathan Adams
7c0b0a7a57
avm1: Fix instanceof checks with primitives
2020-07-01 16:36:54 -07:00
Nathan Adams
d1732dd3d6
avm1: Returning from with{} should return from the parent activation
2020-07-01 16:21:43 -07:00
Mike Welsh
4b4370b90d
avm: Refactor Avm1, move execution to StackFrame (merge #767 )
...
AVM1 refactoring: moving execution from Avm1 to StackFrame
2020-07-01 15:56:09 -07:00
Nathan Adams
8bc3eedc43
avm1: Rename StackFrame to Activation now that they're merged
2020-07-02 00:09:43 +02:00
dependabot-preview[bot]
41e262d745
build(deps): bump libflate from 1.0.1 to 1.0.2
...
Bumps [libflate](https://github.com/sile/libflate ) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/sile/libflate/releases )
- [Commits](https://github.com/sile/libflate/compare/1.0.1...1.0.2 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-01 11:43:31 -07:00
Nathan Adams
9b66b496d0
avm1: Fix double-borrow when calling a getter that calls another method
2020-07-01 18:53:16 +02:00
dependabot-preview[bot]
aa9100395f
build(deps): bump downcast-rs from 1.1.1 to 1.2.0
...
Bumps [downcast-rs](https://github.com/marcianx/downcast-rs ) from 1.1.1 to 1.2.0.
- [Release notes](https://github.com/marcianx/downcast-rs/releases )
- [Changelog](https://github.com/marcianx/downcast-rs/blob/master/CHANGELOG.md )
- [Commits](https://github.com/marcianx/downcast-rs/compare/v1.1.1...v1.2.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-30 17:32:47 -07:00
Nathan Adams
987375299b
avm1: Replace 'run_in_avm' with just building a StackFrame object, letting Rust borrowchecker do our stack management for us
2020-06-30 21:57:51 +02:00
Nathan Adams
47a806a5ee
avm1: Removed errors that are no longer possible to run into
2020-06-30 21:28:32 +02:00
Nathan Adams
a989aa235a
avm1: We don't need to lock StackFrames anymore, the borrow checker will steer us right
2020-06-30 21:26:57 +02:00
Nathan Adams
2288919663
avm1: We don't need to store data in StackFrame, it's only used when actually running data
2020-06-30 21:24:46 +02:00
Nathan Adams
45c3967deb
avm1: Merge Activation into StackFrame
2020-06-30 21:08:42 +02:00
Nathan Adams
d889b98043
avm1: Merge Activation::from_function and Activation::from_action as they're identical
2020-06-30 20:34:05 +02:00
Nathan Adams
6e4dd506da
avm1: Activation doesn't need to be in a GcCell
2020-06-30 20:31:49 +02:00
Nathan Adams
4d24bc7f09
avm1: Removed pc from Activation, it's no longer needed
2020-06-30 19:42:18 +02:00
Nathan Adams
3e9c380ba1
avm1: Remove is_function from Activation, it's no longer needed
2020-06-30 19:40:21 +02:00
Nathan Adams
ec4affcf10
avm1: Use child activations when already running from another activation
2020-06-29 10:13:59 +02:00
Nathan Adams
aaa082fb60
avm1: Replace run_with_stack_frame with run_in_avm
2020-06-29 10:13:57 +02:00
Nathan Adams
0dd2ece371
avm1: Introduce parents to StackFrame, and move run_activation from avm1 to StackFrame
2020-06-29 10:12:17 +02:00
Nathan Adams
9b630bd305
avm1: Remove ReturnValue, it's no longer needed
2020-06-29 10:12:16 +02:00
Nathan Adams
ab4304d634
avm1: Properly and more explicitly work around the double-borrow issue in setters
2020-06-29 10:10:38 +02:00
Nathan Adams
a2103d906d
avm1: Remove dead code from Avm1
2020-06-29 10:10:24 +02:00
Nathan Adams
f85684fec0
avm1: Move current_swf_version and is_case_sensitive from avm1 to stackframe
2020-06-29 10:10:11 +02:00
Nathan Adams
d470c52aea
avm1: Move root_object, target_clip_or_root, target_clip and base_clip from avm1 to StackFrame
2020-06-29 10:09:57 +02:00
Nathan Adams
ca305684db
avm1: Removed unused return_value on Activation
2020-06-29 10:09:40 +02:00
Nathan Adams
da8ca1379f
avm1: Change from 'avm, context' to 'activation, context' and restructured to support this
2020-06-29 10:09:38 +02:00
Nathan Adams
a841743962
avm1: Make current_stack_frame return a Result for easy chaining
2020-06-29 10:07:48 +02:00
Nathan Adams
cdfd58d619
avm1: Move register get/setting from avm1 to StackFrame
2020-06-29 10:07:31 +02:00
Nathan Adams
63e66c29eb
avm1: We already have our stack frame, don't refetch it in actions
2020-06-29 10:07:14 +02:00
Nathan Adams
3a093dddbd
avm1: Run activations immediate, not queued up for some-time-later
2020-06-29 10:07:12 +02:00
Nathan Adams
10b8f4abaf
avm1: Handle stack poping in avm
2020-06-29 08:55:50 +02:00
Nathan Adams
84a5fae43f
avm1: Only perform stack-frame adjustments in one place, not scattered throughout actions
2020-06-29 08:51:34 +02:00
Nathan Adams
9109d89daa
avm1: Allow for frame control in StackFrame from any action
2020-06-29 08:51:34 +02:00
Nathan Adams
329716bfe7
avm1: Don't refetch activation.data every action
2020-06-29 08:51:33 +02:00
Nathan Adams
af72f68f0f
avm1: Run entire stack frames at once
2020-06-29 08:51:33 +02:00
Nathan Adams
c6b9de883f
avm1: Add Activation to StackFrame, removing lots of get-and-unwraps
2020-06-29 08:51:33 +02:00
Nathan Adams
4d76e8b24d
avm1: Move all actions from Avm1 to a new StackFrame
2020-06-29 08:51:33 +02:00
Mike Welsh
3bc3d4acb2
text: Fix bindings being incorrectly cleared in StageObject
...
Call to `Vec::retain` was backwards, causing bindings to be
incorrectly cleared/not cleared when a text field was removed.
2020-06-28 23:38:58 -07:00
Mike Welsh
93cf7a1386
text: Use retire_stack_frame after firing text bindings
2020-06-28 23:37:50 -07:00
Mike Welsh
ed82d984d2
text: Properly set text field position when created dynamically
2020-06-28 18:36:10 -07:00
Mike Welsh
7eeda7d93e
chore: clippy
2020-06-28 18:36:10 -07:00
Mike Welsh
ef31a6bea4
text: Don't override TextField::set_matrix and other layout changes
...
Don't override set_matrix and set_x for TextFields, and leave the
bounds intact.
TODO: There are still some wrapping issues in the tests, but
this allows the simple case of single-line texts to render
correctly.
2020-06-28 18:36:10 -07:00
Mike Welsh
b40f9d4c1a
avm1: Implement TextField.html
2020-06-28 18:36:10 -07:00
Mike Welsh
d97a515330
tests: Add text field variable test
2020-06-28 18:36:10 -07:00
Mike Welsh
618fa11acb
avm1: Implement text field variable binding
2020-06-28 18:36:10 -07:00
Mike Welsh
51d66c53f0
core: Edit text sets variables on instantiation
2020-06-28 18:36:10 -07:00
Mike Welsh
12fca71b21
avm1: Move StageObjectData behind a GC pointer
2020-06-28 18:36:10 -07:00
Mike Welsh
a922fd559f
avm1: Add EditText variable property
...
Add `EditText::variable` as well as `TextField.variable` property.
This commit only adds the getter/setter and does not yet add the
binding functionality.
2020-06-28 18:36:10 -07:00
Mike Welsh
dd50071240
core: Move frame and goto methods from MovieClipData to MovieClip
2020-06-28 18:36:10 -07:00
Mike Welsh
8da0f43412
tests: Add test for DefineLocal and issue #760
2020-06-28 15:15:45 -07:00
Mike Welsh
52fbb77e99
avm1: DefineLocal respects virtual properties and prototype chain ( fix #760 )
...
DefineLocal will call a virtual setter if the property already exists
on the local object, including the local object's prototype chain.
DefineLocal2 will also not overwrite a property if it already exists
on the local object, including the local object's prototype chain.
2020-06-28 15:15:45 -07:00
Mike Welsh
905f9d7ac6
core: Clear mouse down flag even if there is no hovered object
2020-06-27 23:34:19 -07:00
Mike Welsh
a846d92d8c
core: Don't fire rollOut events if clip is removed
...
Allows the inventory to work in The Room Tribute.
2020-06-27 21:24:49 -07:00
Mike Welsh
0833c15e25
tests: Add test for enumerating array indices
2020-06-27 20:25:45 -07:00
Mike Welsh
478d88b22d
tests: Test hasOwnProperty for array indices in array_properties
2020-06-27 20:25:45 -07:00
Mike Welsh
8e3b96f1b1
tests: Add tests for non-string params in hasOwnProperty:
2020-06-27 20:25:45 -07:00
Mike Welsh
ccf33eedf6
avm1: Array indices are enumerable
2020-06-27 20:25:45 -07:00
Mike Welsh
ecc54d01f7
avm1: Disallow setting "" property
...
object[""] has no effect.
2020-06-27 20:25:45 -07:00
Mike Welsh
ef82fc472e
avm1: Object.hasOwnProperty should coerce_to_string
2020-06-27 20:25:45 -07:00
Mike Welsh
b37b74e0b6
tests: Add test for __constructor__ being DontEnum
2020-06-27 18:54:01 -07:00
Mike Welsh
054194026e
avm1: Mark __constructor__ and constructor as DontEnum
2020-06-27 18:54:01 -07:00
dependabot-preview[bot]
63beea22a2
build(deps): bump weak-table from 0.2.3 to 0.3.0
...
Bumps [weak-table](https://github.com/tov/weak-table-rs ) from 0.2.3 to 0.3.0.
- [Release notes](https://github.com/tov/weak-table-rs/releases )
- [Changelog](https://github.com/tov/weak-table-rs/blob/master/release.toml )
- [Commits](https://github.com/tov/weak-table-rs/compare/0.2.3...0.3.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-27 16:08:52 -07:00
dependabot-preview[bot]
82a86d6139
build(deps): bump png from 0.16.5 to 0.16.6
...
Bumps [png](https://github.com/image-rs/image-png ) from 0.16.5 to 0.16.6.
- [Release notes](https://github.com/image-rs/image-png/releases )
- [Changelog](https://github.com/image-rs/image-png/blob/master/CHANGES.md )
- [Commits](https://github.com/image-rs/image-png/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-27 16:08:11 -07:00
Nathan Adams
463b79f063
avm1: Implement Action::Throw
2020-06-25 02:03:15 -07:00
Nathan Adams
70e4a40f01
avm1: Allow for user errors inside avm1::error::Error
2020-06-25 02:03:15 -07:00
Mike Welsh
81d75c6256
text: Text formatting for EditText fields (merge #615 )
...
First implementation of HTML parsing and formatting for text fields.
2020-06-24 23:06:11 -07:00
Mike Welsh
5d9701313e
text: Fix TextField.embedFonts setter
2020-06-24 22:46:59 -07:00
Mike Welsh
b2c96336fd
text: Cull text field if offscreen
2020-06-24 22:46:54 -07:00
David Wendt
74af7b345c
Adjust `BoxBounds` to use `Copy` instead of `Clone`.
2020-06-24 23:40:27 -04:00
David Wendt
d7a257f93f
Adjust `LayoutContext` and `LayoutBox` to construct a `Vec` of boxes rather than an intrusive, garbage-collected linked list.
2020-06-24 23:34:38 -04:00
David Wendt
d281452fe1
Expose the device font flag to AVM1 code.
2020-06-24 22:55:50 -04:00
David Wendt
453cf6c0f1
Remove *extremely* out of date documentation on `BoxBounds`.
2020-06-24 22:36:36 -04:00
David Wendt
2723c3f6d9
Rename `Collec` to `CollectWrapper`
2020-06-24 22:34:04 -04:00
David Wendt
5b36522258
Remove out-of-date doccomment on `LayoutBox`.
2020-06-24 22:19:16 -04:00
David Wendt
0b8d0e8c85
Move the internal padding to a separate constant.
2020-06-24 21:53:58 -04:00
David Wendt
e4d4d996f9
Don't push each line of text down with the leading adjustment.
...
We already adjust the cursor with the same adjustment, so we don't need to move the text down.
2020-06-24 21:32:59 -04:00
David Wendt
bfb150ec05
Remove hardcoded 3px margin.
...
This was originally intended to correctly position text within the border, but it appears borders are weird and this doesn't jive with what unbordered text does.
2020-06-24 21:32:59 -04:00
Mike Welsh
0f794489a4
text: Don't create underline drawing if no underline exists
2020-06-24 12:53:51 -07:00
Mike Welsh
3558e42c34
text: Always fallback to Noto Sans if text field is set to use device fonts
2020-06-24 12:19:06 -07:00
Mike Welsh
f591e1dafc
text: process_html_entity returns a Cow
2020-06-24 11:56:20 -07:00
Mike Welsh
5a7012923b
avm1: Move TextField methods into functions
2020-06-24 11:11:00 -07:00
Mike Welsh
d2702464a5
avm1: TextField properties are emumerable and deletable
2020-06-24 11:02:21 -07:00
Mike Welsh
b47e84b131
text: Derive Default for TextFormat
2020-06-24 10:44:34 -07:00
CUB3D
a5b0a196cc
core: Update to use updated value conversion functions
2020-06-24 01:57:15 +01:00
CUB3D
f03093528c
core: Add shared object cache and saving on exit
...
On the desktop player, shared objects will now be flushed on quit.
Attempting to retrieve an existing shared object will now return a
reference to the existing one.
2020-06-24 01:46:42 +01:00
CUB3D
166cb60d89
chore: Clean up useage of unwrap
2020-06-24 01:46:07 +01:00
CUB3D
62834fd690
chore: Remove unnecessary comment
2020-06-24 01:46:07 +01:00
CUB3D
fce8e8b7de
chore: Fix build
2020-06-24 01:46:07 +01:00
CUB3D
8a65ac764b
chore: Clean up comments
2020-06-24 01:46:07 +01:00
CUB3D
8e28bab159
chore: Fix clippy lints, refactor storage to use data_local_dir
2020-06-24 01:46:07 +01:00
CUB3D
0122d65a09
core: Refactor SharedObject
2020-06-24 01:46:07 +01:00
CUB3D
1b130ccd47
chore: Refactor storage access
2020-06-24 01:46:06 +01:00
CUB3D
4e286b43ae
chore: Format
2020-06-24 01:46:06 +01:00
CUB3D
0c6a7b3b4c
core: Add SharedObject object type
2020-06-24 01:46:05 +01:00
CUB3D
752ffc5cca
chore: Fix clippy lints and tests
2020-06-24 01:44:07 +01:00
CUB3D
eff06d3d4d
core: Add stub listener methods for SharedObject
2020-06-24 01:43:25 +01:00
CUB3D
d3ae6a3a40
core: Fix data property of SharedObject
2020-06-24 01:43:25 +01:00
CUB3D
48693e4a7a
core: Add inital storage backend implementation
...
Currently SharedObjects are encoded and decoded from JSON via the
StorageBackend, also provided is a basic in-memory implementation
2020-06-24 01:43:23 +01:00
CUB3D
539b4b0f63
core: Add stub for SharedObject
2020-06-24 01:42:19 +01:00
David Wendt
12495de91e
Generate `LI`s when newlines are encountered with bullets on.
2020-06-22 19:45:39 -04:00
David Wendt
ed5f3cdd0e
Don't attempt to use non-embedded fonts. Instead, replace all of them with Noto (like EditText used to do).
2020-06-22 19:02:32 -04:00
David Wendt
40ea58c1c0
Since we cannot parse `<br>` properly yet, replace them and `<sbr>` with newlines before parsing so that we don't get spurious parse errors.
2020-06-22 18:00:51 -04:00
dependabot-preview[bot]
0a166af8ac
build(deps): bump syn from 1.0.32 to 1.0.33
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.32 to 1.0.33.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.32...1.0.33 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-22 10:15:50 -07:00
Nathan Adams
cea2c9520d
chore: Ignore new 'unnested_or_patterns' clippy lint as we the suggested behaviour doesn't exist outside of nightly
2020-06-21 04:18:44 -07:00
David Wendt
7a9796a2f9
Restore BR parsing.
...
Note that this won't actually work since we're behind an XML parser that chokes on implicitly self-closing HTML tags.
2020-06-20 20:15:00 -04:00
David Wendt
c1ad37a0f6
Implement text span raising, sans list items.
...
During the raising process, we maintain a list of pointers to the lowest-most `textformat`, `p`, `font`, `a`, `b`, `i`, and `u` in the document that we are appending to. When we get a new one of any of those elements, we clear the rest off the stack. This forces us to add HTML in the same order Flash does.
LIs are not yet supported because they require us to process text line-by-line which doesn't mesh with this model.
There's also a test but the XML DOM generates HTML strings with the wrong attribute order, so the test fails spuriously.
2020-06-20 20:14:57 -04:00
David Wendt
e036d6594b
Add some entity support to HTML parsing.
2020-06-20 20:08:22 -04:00
David Wendt
88fcb98913
Allow disabling entity processing when parsing XML.
...
This necessitated a change to edittext_bullet, which turns out is accidentally an entity test, too. It now no longer uses entities so that it won't spuriously fail due to an entity related problem.
2020-06-20 20:06:21 -04:00
David Wendt
65f4d2cf1e
Add regression tests for `underline`.
...
We're within 4px in every case.
2020-06-20 19:56:01 -04:00
David Wendt
f097a6584e
Implement underlines.
2020-06-20 19:56:01 -04:00
David Wendt
d63b3f23e9
Add support for inserting arbitrary drawings into the layout.
2020-06-20 19:56:00 -04:00
David Wendt
a2d69a69a3
Add a test for bullets.
...
As usual with most newline related things, we're 3px off no matter how many or how few lines we have.
2020-06-20 19:56:00 -04:00
David Wendt
1c371c3a95
Render bullets.
...
Bullets are implemented by rendering U+2022 as if it were normal text, but always placed 18px from the left of the line. This appears to be sort of what Flash does.
2020-06-20 19:55:59 -04:00
David Wendt
a3dfa8c21f
Bulleted lists get 35px of additional left-margin and do not respect alignment at all.
2020-06-20 19:55:59 -04:00
David Wendt
fa2da492a7
Allow ActionScript to control text field borders.
2020-06-20 19:55:58 -04:00
David Wendt
2aa7d9770f
Draw a border around text if requested.
2020-06-20 19:55:58 -04:00
David Wendt
8628261dc8
Add a bunch of necessary fixes to default text formatting and HTML format extraction.
...
This also replaces the `edittext_html_defaults` test with a more robust test that checks the default format and global format of SWF-based, text, and HTML test vectors.
2020-06-20 19:55:57 -04:00
David Wendt
4f3d4c82fb
For some reason, Flash does not respect `<br>` at all, so we won't, either.
...
It *does*, however, respect `<sbr>` (which does the exact same thing), as well as `\n` (which makes absolutely no sense in HTML, normally that would get stripped out).
2020-06-20 19:55:57 -04:00
David Wendt
efc6236cb5
Treat the end of each paragraph as a newline.
2020-06-20 19:55:56 -04:00
David Wendt
d5fc2709fc
Don't use a slice to hold an index.
...
Fixes clippy on beta and nightly Rust.
2020-06-20 19:55:56 -04:00
David Wendt
58a039a6aa
Nulls in font names are ignored.
2020-06-20 19:55:56 -04:00
David Wendt
d8a38d06bb
Collect font height, letter spacing and the kerning flag into a single `EvalParameters` structure.
2020-06-20 19:55:55 -04:00
David Wendt
1f6d6018dc
Use a char pattern here for clippy's sake
2020-06-20 19:55:55 -04:00
David Wendt
1966ec5cb1
Implement `sbr` tags.
...
No, I don't know what they are either, but at least one movie exists which treats them like `br`, so we'll treat them like that, too.
2020-06-20 19:55:54 -04:00
David Wendt
9e56f10fd0
Approx the align and margins text by up to 3 pixels.
...
These tests currently have visual bugs in all cases, and measurement bugs in the justification case that require me to approx them.
2020-06-20 19:55:54 -04:00
David Wendt
f746ac5539
Implement `justify`, mostly.
...
This implementation has a few bugs which appear to have something to do with alignment. It's not only justify, but justify is the only test that's flagged as failing.
If you look at the margins test, you'll see what I mean: right-aligned and justified text doesn't quite make it to the right edge of the box even though it should. I'm not sure why.
This also restricts text rounding further: `measure` now only rounds when wrapping text, since Flash Player appears to account for fractional pixels in all other cases.
2020-06-20 19:55:54 -04:00
David Wendt
670c4723e3
Add support for the `kerning` flag, which turns on and off the kerning information on fonts.
2020-06-20 19:55:53 -04:00
David Wendt
3c9a43ea72
Add a regression test for newlines.
...
This test includes tests for HTML newlines, which causes the XML parser in Ruffle to throw errors. Hence why it's currently ignored.
2020-06-20 19:55:53 -04:00
David Wendt
180ef3b423
Recognize `<br>` as a line break.
...
This code is currently unreachable as `<br>` will actually trigger an AVM1 error due to our overly-strict XML parser.
2020-06-20 19:55:52 -04:00
David Wendt
045a81e79e
Implement `html` and `htmlText`... sort of.
...
There are several problems, first off:
1. I'm not entirely sure what I'm supposed to be changing on the text field when someone writes `html`.
2. We're using the XML parser for HTML (both `htmlText` and SWF tag parsing) which causes problems. Notably, `<br>` issues an AVM1 error (!!!) because the XML parser doesn't like unclosed tags.
3. Reading `htmlText` should not return the same HTML tree (at least, not until we implement stylesheets). It should instead regenerate an HTML tree from text spans.
2020-06-20 19:55:52 -04:00
David Wendt
2452124631
Break individual words at the start of lines that are too big to fit on the line.
2020-06-20 19:55:51 -04:00
David Wendt
6c44418b10
Add a test for tab_stops.
...
This test is currently inaccurate by up to 5 pixels, this is due to some behavior with really, really wide tabstops and word breaks that I don't entirely get yet.
2020-06-20 19:55:51 -04:00
David Wendt
2ad216cab4
Don't continue comparing tab stops after we find one that fits.
2020-06-20 19:55:50 -04:00
David Wendt
b6c12b1e23
Use current font height times 2.7 as the natural tab stop, as that seems to match Flash... for now.
2020-06-20 19:55:50 -04:00
David Wendt
0e45dc12e9
Recompile the letter spacing test 'cause I spotted an errant `s` in the FLA
2020-06-20 19:55:49 -04:00
David Wendt
2caaa6875d
Add support for explicit tabs and newlines.
2020-06-20 19:55:49 -04:00
David Wendt
153ab675e9
When aligning a line, actually consider all the boxes within the line.
2020-06-20 19:55:49 -04:00
David Wendt
3d094ed689
Add margins test.
...
This test is also approx'd to 1px due to the same issue where heights are off by one.
2020-06-20 19:55:48 -04:00
David Wendt
db0398d2ee
Left and right margins and indents should not be included in `textWidth`.
2020-06-20 19:55:48 -04:00
David Wendt
74d4c25133
Add a test for letter spacing.
...
This test is approximate because the 0.5px test is off by 1px in terms of height.
2020-06-20 19:55:47 -04:00
David Wendt
6ce7ecee78
Implement `letterSpacing`.
2020-06-20 19:55:47 -04:00
David Wendt
171954d5e4
Add `edittext_leading` test.
...
This test constructs a handful of text fields and measures them. Each field has 0, 5, or 15px of `leading` applied to it's text format.
2020-06-20 19:55:47 -04:00
David Wendt
bbc73f1477
The `edittext_align` test now passes perfectly.
2020-06-20 19:55:46 -04:00
David Wendt
16da6d827c
Line-leading is always applied at least once, even if there are no line breaks in the text field.
2020-06-20 19:55:46 -04:00
David Wendt
410fb3ab86
Don't round each line's leading. Instead, round at the end of the operation.
...
This was verified by visual comparison with Flash Player; lines of text appear to be shifted by half-pixels, while the script output is always still rounded down.
2020-06-20 19:55:45 -04:00
David Wendt
2858c09b6e
Only apply leading adjustment on newlines.
...
This results in ALL height adjustments being off by 2px, regardless of leading or font size. Tantalizing!
2020-06-20 19:55:45 -04:00
David Wendt
2ab85c32e2
When wrapping text, measure the text including the trailing space (if present).
...
This matches Flash behavior, but breaks an existing test, which I've adjusted appropriately.
2020-06-20 19:55:44 -04:00
David Wendt
c67bf0b6b7
Add approximate test of text field metrics during alignment.
...
This is an approximate text with a 1-pixel tolerance because our height is currently off by one and I cannot explain why. Previous attempts to fix the bug have resulted in cascading errors that resulted in off-by-one errors in the opposite direction. This is still better than nothing and I need to check other tests in.
2020-06-20 19:55:44 -04:00
David Wendt
a1e52ab556
Add a test for formatting defaults on HTML text.
2020-06-20 19:55:44 -04:00
David Wendt
09c91d191a
Round-trip tab stops between `EditText` and AVM1
2020-06-20 19:55:43 -04:00
David Wendt
00217072e6
After the previous set of fixes our tests are now consistent with a layout engine that always rounds down to the nearest pixel and never up. Adjust code to match.
2020-06-20 19:55:43 -04:00
David Wendt
06c66533c7
Don't apply leading twice.
2020-06-20 19:55:42 -04:00
David Wendt
82c6269cf6
Ensure that presentational markup styles cascade from parent tag to child, and from the default format to the first tag.
2020-06-20 19:55:42 -04:00
David Wendt
88d07f5d17
We don't need to relayout when the new-text text format gets changed.
2020-06-20 19:55:42 -04:00
David Wendt
9981148482
Add a test for `BoxBounds.with_size`, since we're using it now
2020-06-20 19:55:41 -04:00
David Wendt
aae1f0ba7a
Skip fixups on empty lines.
2020-06-20 19:55:41 -04:00
David Wendt
bd40295076
Ensure that the font-provided leading is accounted for when moving the cursor for a newline.
2020-06-20 19:55:41 -04:00
David Wendt
0e0b2fb85d
All layout boxes on the line should have trailing whitespace trimmed off of their measurements.
...
Flash has a weird bug where it will NOT trim trailing spaces off of the metrics reported to users if the text is left-aligned. We replicate this here so that tests pass.
2020-06-20 19:55:40 -04:00
David Wendt
50a05df998
Generated lines should *always* include their end spaces, there should be no gaps.
2020-06-20 19:55:40 -04:00
David Wendt
ab2b9cc733
Change all of the `BoxBounds` in the layout machinery to not use `Default`.
...
The `Default` bounds are NOT safe to union against if they were uninitialized. Doing so will force any resulting layout box to enclose `(0,0)`, which can throw off certain layout calculations. Instead, we use `None` to signal an uninitialized box.
2020-06-20 19:55:40 -04:00
David Wendt
806a741bf4
EditText appears to have internal padding between it's borders equivalent to a CSS padding of `3px 4px 3px 0`.
...
Verified by experimentation with Flash Player, appears to be necessary for tests to pass.
2020-06-20 19:55:39 -04:00
David Wendt
96c43654d0
Retain the bounds returned when constructing layout boxes and use them as the `textWidth` and `textHeight` of a given text field.
2020-06-20 19:55:39 -04:00
David Wendt
318f09d241
Include the font-provided leading in the exterior bounds sent off for `autoSize` calculation.
2020-06-20 19:55:39 -04:00
David Wendt
06dc2f5fe0
Implement the `leading` attribute as defined by fonts.
...
`EditText` supports two different forms of leading:
1. Font-provided leading, specified relative to the EM square and scaled with font size
2. User-specificed leading, specified in pixels
Notably, the former appears to apply to the first line in the text and pushes it down. This showed up in the `edittext_font_size` test, and according to that test result the leading is rounded *up* to the nearest pixel, plus one.
That last bit seems possibly wrong and is subject to further change, but it matches the tests at multiple scales.
2020-06-20 19:55:29 -04:00
David Wendt
6e81f30a70
Round down to the nearest pixel when measuring text.
...
Certain text routines calculate text on the pixel grid, despite the fact that Flash ordinarily works in twips. There is probably a reason for this - my guess is to keep text wrapping stable across multiple pixel densities (e.g. low-res screens plus high-res print).
2020-06-20 19:53:42 -04:00
David Wendt
7a62a8e9ce
Programmatically created text fields get a biased depth.
2020-06-20 19:53:34 -04:00
David Wendt
75aaa49169
Y coordinates should always be adjusted by Y coordinates.
2020-06-20 19:48:14 -04:00
David Wendt
245cea784f
Running an `autoSize` on any text field should always synchronize the X coordinate between the bounding box and the base transform.
...
I don't know why, but this is necessary for the "NEW STUFF" box on homestarrunner.com's toons menu to position correctly. SOMEWHERE, we are performing some kind of operation that adjusts one of the two, but not the other, and I can't find out what.
2020-06-20 19:48:13 -04:00
David Wendt
5a2b74c5fc
Setting a new matrix should also transform the bounds as well.
2020-06-20 19:48:13 -04:00
David Wendt
e7e944ad76
Account for the width of glyphs when measuring text.
...
This fixes spaces at the start of text spans not being rendered, but also breaks center-align.
I also broke the font tests, so I had to rewrite them, which makes me question their value.
2020-06-20 19:48:13 -04:00
David Wendt
8a5a2bf7c7
When `Font.wrap_text` indicates that none of the line can fit, we should also refresh our width and offset and check if there's even more text to measure or not.
2020-06-20 19:48:12 -04:00
David Wendt
efc50da367
`Font.wrap_text` should return `0` if no part of the string can fit within the requested bounds.
2020-06-20 19:48:12 -04:00
David Wendt
38d679ef29
`wrap_line` should take spaces into account when sizing lines.
2020-06-20 19:48:12 -04:00
David Wendt
85a3a845d9
Dynamic `EditText` bounds should go from `x` to `x+width`, not `x` to `x+height` (etc)
2020-06-20 19:48:12 -04:00
David Wendt
bacbf06614
Setting the matrix of an `EditText` should scale it's bounds.
2020-06-20 19:48:12 -04:00
David Wendt
9564cbeda4
Use the new dynamic bounding box to calculate a width for word-wrapping, and update the new bounding box directly in autosize rather than hitting `DisplayObject` methods.
...
This also adjusts `DisplayObject` methods to use the bounds.
2020-06-20 19:48:11 -04:00
David Wendt
a0477e7525
Adjust the layout code to properly align content with right margins, trailing spaces on lines, and lines wider than the bounds.
...
Right margins: Simple enough, we just need to subtract the right margin from the bounds when we calculate our alignment adjustment.
Trailing spaces: This is very tricky as we effectively have to remeasure the last box in the line when fixing it up. This also means LayoutContext has to hold the text itself so we can remeasure again...
Lines wider than bounds: If word wrap is disabled it is possible for a line to exceed the bounds of the box. In this case it will be left-aligned. Effectively, the align adjustment is clamped to positive values and we do that here too.
2020-06-20 19:48:11 -04:00
David Wendt
4eb2113a77
Setting positions and widths on the `EditText` should adjust intrinsic bounds rather than stretching or transforming the field.
2020-06-20 19:48:11 -04:00
David Wendt
7cf2cce3ef
Add functions to set positions and widths on bounding boxes.
2020-06-20 19:48:10 -04:00
David Wendt
dc46885021
Implement `autoSize`.
...
This doesn't work right yet because the resulting width doesn't apply correctly to the field. This is because `EditText`'s `_width` and `_height` change it's intrinsic bounds rather than it's X and Y scale (like it would with a button or a movie clip).
2020-06-20 19:48:00 -04:00
dependabot-preview[bot]
6928e75cd6
build(deps): bump syn from 1.0.31 to 1.0.32
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.31 to 1.0.32.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.31...1.0.32 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-20 16:36:01 -07:00
David Wendt
18e93b3d11
Implement tests for `wrap_line`.
...
These tests depend on the particulars of our default device font, Noto Sans. If this test proves to be fragile we may need to create a testing font with a locked width and kerning table...
2020-06-20 19:26:47 -04:00
David Wendt
cb47e0bae8
`wrap_line` returns breakpoints relative to how we sliced the text, so we need to break things appropriately.
...
This prevents a bounds-check panic when we inevitably try to slice an array like `[300..2]` or something like that.
We also skip rendering the space that we're turning into a newline to avoid it popping up on the next line by accident.
2020-06-20 19:26:47 -04:00
David Wendt
ece879a15c
The align adjustment should be positive, not negative.
2020-06-20 19:26:47 -04:00
David Wendt
593f442372
Implement `leading` between lines
2020-06-20 19:26:47 -04:00
David Wendt
e83cebc4fb
Vertically align different-font-size boxes to the same bottom baseline.
2020-06-20 19:26:46 -04:00
David Wendt
b517019b57
Clean up how we calculate the width of the text field.
...
`max_length` isn't a geometrical width, despite the fact that the type system didn't prevent me from making erroneous conversions. It's actually just a text length limit, which we won't be dealing with for some time.
When first instantiated, we use the static bounds; however, further relayouts grab `local_bounds` and calculate a width from that. `EditText` works almost identically to any other display object, with the exception that device fonts do not render if the transform is not an axis-aligned bounding box (and it doesn't respect scale). We don't have to worry about that for now.
2020-06-20 19:26:46 -04:00
David Wendt
c7ac0e4bb1
Implement center and right alignment.
...
Justification will have to wait for another day.
2020-06-20 19:26:46 -04:00
David Wendt
562adcdc7e
Implement `leftMargin`, `rightMargin`, `indent` and `blockIndent`.
...
This is surprisingly difficult because of how Flash handles these properties: they are cached at the start of a new line (explicit or flown) and then used for all spans that intersect with that line. Ergo, `LayoutContext` needs to keep track of all the boxes we generate within the line and the span that ultimately is going to provide margins for it.
And yet, at the same time, we also have to precalculate the effects of these margins when flowing text so that we know how much space we have to play with. This needs to be calculated the same at the start of the line as it is at the end. This is why `LayoutContext` is a separate type: it handles all the state tracking and crap that has to be done when splitting text into spans, paragraphs, and lines all at the same time.
Fortunately, this design will make it easier to implement other features like text alignment where we couldn't even begin to calculate everything in one pass.
2020-06-20 19:26:46 -04:00
David Wendt
5fcaa52687
Restore newline functionality (mostly...)
2020-06-20 19:26:45 -04:00
David Wendt
9f60567f66
Remove library lookup as layout can do it itself
2020-06-20 19:26:45 -04:00
David Wendt
e3f59ac00f
Implement `color` on spans
2020-06-20 19:26:45 -04:00
David Wendt
9bcc7ef0cc
`setTextFormat` should trigger a relayout
2020-06-20 19:26:44 -04:00
David Wendt
b5de92edeb
Properly retrieve default font class
2020-06-20 19:26:44 -04:00
David Wendt
c4e5a9afc2
In the spirit of shared-nothing `post_instantiation` should duplicate any `LayoutBox`es it has, in case we mutate them later.
2020-06-20 19:26:44 -04:00
David Wendt
467fd9db80
Implement `TextField.length` in AVM1.
2020-06-20 19:26:44 -04:00
David Wendt
ef6ebe2b44
The default format of a text field should match it's SWF tag.
2020-06-20 19:26:43 -04:00
David Wendt
361ea1f774
Index fonts by font name, boldness, and italicization.
...
This involves a new struct called a `FontDescriptor` which is generated whenever a font is registered and used to index the font in the library. When a font is requested, it goes through the descriptor system to get found.
2020-06-20 19:26:43 -04:00
David Wendt
f234926e63
Default text formats are not replaced when movies call `setNewTextFormat`, they instead mix with the existing one.
...
"Mixing" is defined as `Option.or`ing all the properties in the new text format with the old one. Not specifying a text format in the new default will result in the field retaining it's old properties.
2020-06-20 19:26:43 -04:00
David Wendt
0aab45f389
Fix panic in `render_layout_box` caused by indexing an already-indexed slice.
2020-06-20 19:26:42 -04:00
David Wendt
3b80ff8d23
Clippy compliance
2020-06-20 19:26:42 -04:00
David Wendt
fde5e13358
Expose `replaceText` to AVM1 code.
2020-06-20 19:26:42 -04:00
David Wendt
a8a1b985a3
Expose `getTextFormat` and `setTextFormat` to AVM1.
2020-06-20 19:26:41 -04:00
David Wendt
74912525ed
Add ancestor iteration to XML nodes.
2020-06-20 19:26:41 -04:00
David Wendt
a2836a0b92
Tie `EditText` into the new layout system, which is currently unfinished.
...
This should *significantly* regress `EditText` layout.
2020-06-20 19:26:37 -04:00
David Wendt
8622cb97a9
Add a system of layout boxes to store text layout decisions made at update time.
2020-06-20 19:16:17 -04:00
David Wendt
4a2fac28d1
Add iterator for text spans
2020-06-20 19:16:17 -04:00
David Wendt
ec72ac518c
Allow HTML text nodes to populate text.
...
This will need to be updated to handle line breaks, spaces, and so on correctly - the way whitespace works in HTML differs from plain text.
2020-06-20 19:16:17 -04:00
David Wendt
816644c497
Add an internal implementation of `replaceText`.
2020-06-20 19:16:17 -04:00
David Wendt
a1f548f744
Add a routine to generate `TextFormat`s from presentational markup, and another lowering process which tracks the text formats generated by this process.
2020-06-20 19:16:16 -04:00
David Wendt
62a13cd7a6
Add the ability to `walk` through an XML tree.
...
This yields nodes as `Step`s. This allows keeping track of the structure of the tree as you walk through descendents, as each element will be yielded twice: both as a `Step::In` *and* as a `Step::Out`. Non-element nodes will be yielded once as a `Step::Around`.
I'm adding `walk` iteration specifically to avoid having to write certain methods recursively. Existing recursive callers of `children` should probably be updated to `walk` the tree and maintain a separate `Vec` stack.
2020-06-20 19:16:16 -04:00
David Wendt
4eca2d4bdd
Replace the existing default format on `EditText` with our brand-new `FormatSpans`.
...
This also includes code to automatically populate the default format with data from the SWF tag.
2020-06-20 19:16:16 -04:00
David Wendt
efdecdea64
Store the default text format, and use it when generating new spans during normalization.
...
I'm sure this will wind up having further uses eventually.
2020-06-20 19:16:15 -04:00
David Wendt
153571c0c4
Implement `FormatSpans::set_text_format`.
...
This also necessitated the addition of code to:
* Ensure span breaks exist at both sides of the text boundary, without creating degenerate (length-0) spans
* Consolidate spans with matching text formats
* Shorten or lengthen the total list of text spans to match the backing string
* Ensure at least one text span exists at all times
This still has some minor to-dos: for example, it relies on the default `TextSpan` formatting, which probably should be replaced with actually accepting or storing a default format to be used when constructing new text spans.
2020-06-20 19:16:15 -04:00
David Wendt
102c494de4
Add a type to hold text with some text spans, and some tests for that type.
2020-06-20 19:16:14 -04:00
David Wendt
1671fc6eba
Add an internal representation of text spans.
...
Despite having HTML and CSS rendering capabilities, the Flash text field actually does not use HTML as it's internal representation. Instead, the text-span format implied by `getTextFormat` and `setTextFormat` is used to drive layout. You can see this by watching what happens to `htmlText`, *especially* when you add and remove stylesheets.
The `LayoutBox` machinery will be adapted to consume text spans in a future commit. This would make the entire rendering pipeline: HTML/CSS -> Text Spans -> Layout Boxes -> Render commands.
2020-06-20 19:16:14 -04:00
David Wendt
850831181c
Add tests for all non-trivial methods of `Position`, `Size`, and `BoxBounds`.
2020-06-20 19:16:13 -04:00
David Wendt
ef035c5283
Add `Size.max`, conversions between `Position` and `Size`, `BoxBounds.extent`, and `BoxBounds.with_size`.
2020-06-20 19:16:13 -04:00
David Wendt
e7c34d9745
Switch `BoxBounds` from a position-and-size representation to an offset-and-extent representation.
...
This makes the implementation of rectangle union (`Add`/`AddAssign`) far easier as we just compute the min and max of the offset and extent coordinates. It also makes the conversion into and from `swf::Rectangle` easier as it's now effectively a generic version of that datatype.
On the other hand, `width`, `height`, and `size` now have to be calculated, and require `T` to be self-`Sub`. I'm not sure if this is that much of a problem or not.
2020-06-20 19:16:12 -04:00
David Wendt
0a1de3276f
Add extra types for indicating moving a position and resizing a box.
2020-06-20 19:16:12 -04:00
David Wendt
a4c8cd4711
Add a set of types for tracking CSS attributes, positions, sizes, and bounds on layout boxes.
2020-06-20 19:16:12 -04:00
David Wendt
4739e08c11
Add the ability to split lines from the middle of an already-existing flow operation
2020-06-20 19:16:12 -04:00
David Wendt
7e7ca88c3d
`post_instantiate` is morally equivalent to duplicating the display object it's called on, so we should also duplicate the XML document attached to it.
...
We don't have to do this for `object` because we don't actually construct the script object until instantiation time.
2020-06-20 19:16:11 -04:00
David Wendt
a3f4509d63
Store all text internally as an HTML tree, alongside the existing strings.
...
We're reusing the XML machinery to handle HTML - this is probably not 100% correct, but writing a new HTML parser to cover just `EditText` will be rather complicated.
2020-06-20 19:16:11 -04:00
David Wendt
cc854db9b3
Derive `Collect` on `EditTextData`.
2020-06-20 19:16:10 -04:00
David Wendt
ac9cd0cf87
Move `TextFormat` over to a new `html` module, which will hold all the stuff necessary for rendering HTML in an `EditText`.
...
`TextFormat` is owned data and should be collectable as static.
2020-06-20 19:16:10 -04:00
Nathan Adams
2e7ebbf258
avm1: Fatal errors will halt the AVM and prevent further execution
2020-06-20 15:02:00 -07:00
Nathan Adams
f5da954b32
avm1: Merge avm1::Error and avm1::ExecutionError for now. It's plausible that nested inside actions we can encounter an ExecutionError, so at that point it doesn't make sense to have a separation.
2020-06-20 15:02:00 -07:00
Nathan Adams
e2c607c70f
avm1: Avm1::retire_stack_frame can't error, so adjust its signature appropriately
2020-06-20 15:02:00 -07:00
Nathan Adams
a36e2105a3
avm1: Made avm1::Error an actual error type, and removed all calls that throw incorrect errors in avm1
2020-06-20 15:02:00 -07:00
Nathan Adams
ad07520af3
avm1: Add avm1::ExecutionError
2020-06-20 15:02:00 -07:00
Nathan Adams
adb8ffbf9c
core: Convert XML errors into an enum
2020-06-20 15:02:00 -07:00
Nathan Adams
59ccd75518
core: Rename loader::LoaderError to loader::Error
2020-06-20 15:02:00 -07:00
Nathan Adams
b6f012cf7f
core: Use thiserror to derive Loader errors
2020-06-20 15:02:00 -07:00
Nathan Adams
0f1eef9022
core: Introduce LoaderError to all Loader methods
2020-06-20 15:02:00 -07:00
Nathan Adams
c8f0753da4
core: Rename Value::as_number to Value::coerce_to_f64
2020-06-19 12:48:28 -07:00
Nathan Adams
67042b255c
core: Replace Value::as_* numeric methods in favour of coerce_to_* or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
270f63b2f3
core: Made Object::to_string return a Cow<str>
2020-06-19 12:48:28 -07:00
Nathan Adams
f4b4d0ebb7
core: Replace Value::into_string in favour of coerce_to_string or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
5662b2d4d9
core: Make Value::coerce_to_string return a Cow<str>`
2020-06-19 12:48:28 -07:00
Nathan Adams
9633dc71c3
core: Replace Value::as_string in favour of coerce_to_string or manual matching
2020-06-19 12:48:28 -07:00
Nathan Adams
e44568c31c
core: Remove Value::call_method, you must box the value first
2020-06-19 12:48:28 -07:00
Nathan Adams
5dd1a1e509
core: Remove Value::get, you must box the value first
2020-06-19 12:48:28 -07:00
Nathan Adams
fc18c2fce5
core: Rename Value::as_object to Value::coerce_to_object
2020-06-19 12:48:28 -07:00
Nathan Adams
b2b57c1540
core: Make Value::as_object always return a (possibly boxed) object
2020-06-19 12:48:28 -07:00
Nathan Adams
3695c3c9fa
tests: Add test for default names of display objects
2020-06-18 16:26:36 -07:00
Mike Welsh
62cfeb3754
core: Assign default name to unnamed clips ( fix #66 )
2020-06-18 16:26:36 -07:00
Nathan Adams
25ad2a428d
tests: Improve attach_movie test to prove when the first frame is executed
2020-06-17 14:16:38 -07:00
Mike Welsh
83feeefeeb
audio: Don't panic on unimplemented codecs
...
Remove `unimplemented` calls when encountring unsupported codecs
such as Nellymoser. Instead, return an Error that can be
gracefully handled.
2020-06-17 12:14:08 -07:00
Mike Welsh
1d7e6b7e8a
chore: Fix let-unit-value clippy lint
2020-06-17 11:25:06 -07:00
Mike Welsh
77cb186357
avm1: Constructors queue to run after a goto
...
If a class is registered to a clip that is placed on the timeline
during a goto, that constructor should run after the frame is
completely constructed. In order to tell whether to run the
constructor immediately, add a parameter to `post_instantiation`
to indicate if the clip is instantiated from the AVM or via a
standard timeline seek.
2020-06-16 14:53:44 -07:00
Mike Welsh
568d0513ed
tests: register_and_init_order tests for constructor after goto
2020-06-16 14:53:44 -07:00
Nathan Adams
5efab4c579
core: Implement RGB15 PNGs - fixes #724
2020-06-16 14:53:19 -07:00
dependabot-preview[bot]
fcea6012bb
build(deps): bump png from 0.16.4 to 0.16.5
...
Bumps [png](https://github.com/image-rs/image-png ) from 0.16.4 to 0.16.5.
- [Release notes](https://github.com/image-rs/image-png/releases )
- [Changelog](https://github.com/image-rs/image-png/blob/master/CHANGES.md )
- [Commits](https://github.com/image-rs/image-png/compare/v0.16.4...v0.16.5 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-13 18:52:24 -07:00
Mike Welsh
5da9863402
tests: Add test for #710
2020-06-13 02:48:38 -07:00
Mike Welsh
35a4c05923
avm1: CallFunction can resolve variable paths
2020-06-13 02:48:38 -07:00
Mike Welsh
29dc88ec01
tests: Clip event test now tests for children unloading
...
The test now verifies that a child movie clip runs its `unload`
clip event if its parent is removed.
2020-06-11 23:39:16 -07:00
Mike Welsh
ce73b4eaa7
core: Recursively unload child display objects
...
Child movie clips should run their unload actions when the parent
is removed.
2020-06-11 23:39:16 -07:00
Mike Welsh
9b0881edb7
core: Set $version on root
...
_root has a $version property that should matches
`System.capabilites.version`. This allows Nanaca Crash to boot.
2020-06-11 10:03:29 -07:00
Mike Welsh
faa35a53e9
tests: Add test for getBounds with empty children
2020-06-10 17:17:08 -07:00
Mike Welsh
b5daf3d020
core: Fix BoundingBox::union for invalid bounds
2020-06-10 17:17:08 -07:00
dependabot-preview[bot]
f03e75951a
build(deps): bump syn from 1.0.30 to 1.0.31
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.30 to 1.0.31.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.30...1.0.31 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 22:14:57 -07:00
CUB3D
fa11ef1e81
core: Add remaining capabilities
2020-06-09 23:57:46 +01:00
CUB3D
dd5d2976ea
core: Add missing functions to System.security
2020-06-09 23:03:13 +01:00
CUB3D
07d4f3a8eb
core: Fix build
2020-06-09 22:41:11 +01:00
CUB3D
ad3bc612aa
chore: Fix clippy lints
2020-06-09 22:41:11 +01:00
CUB3D
4987cfdaac
core: Refactor enums, Add unknown windows os support and fix attributes
...
Now using Display to convert enums.
Also added support for a fallback "Windows" os for when the current version can't be detected
2020-06-09 22:41:11 +01:00
CUB3D
48bef91917
core: Remove clear_clipboard, format and fix tests
2020-06-09 22:41:11 +01:00
CUB3D
bc1055e381
core: Create system protos in globals.rs, fix version-dependant output
...
Make get_server_string output order match flash, also make language and manufacturer output respect emulated player version
2020-06-09 22:41:11 +01:00
CUB3D
de013426bc
core: Url encode serverString
2020-06-09 22:41:11 +01:00
CUB3D
887e09337f
core: Add dummy impl of System.security
2020-06-09 22:41:11 +01:00
CUB3D
fc8cd1139a
core: Add initial System.IME implementation
2020-06-09 22:41:11 +01:00
CUB3D
94a53f3506
core: Store System.capabilities in SystemProperties
2020-06-09 22:41:11 +01:00
CUB3D
af41ac5602
core: Add clipboard support to input backend
2020-06-09 22:41:11 +01:00
CUB3D
0f0f778830
core: Retain properties for System in the player
2020-06-09 22:41:11 +01:00
CUB3D
8471523e49
core: Add basic System.capabilities implementation
2020-06-09 22:41:11 +01:00
CUB3D
50abbe1887
core: Implement basic System global
2020-06-09 22:41:10 +01:00
Nathan Adams
58df56e4a4
core: Add `Value::get` shortcut that resolves Objects or returns Undefined
2020-06-08 15:12:05 -07:00
Nathan Adams
d0ad1b57fe
core: Replace `toString`/`valueOf` calls with `call_method`
2020-06-08 15:12:05 -07:00
Nathan Adams
c592b5fb2a
core: `Value::call_method` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
d39ffcfadc
core: `Value::call` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
fe55c5a264
core: `TObject::call_method` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
da3e2bb0a0
core: `TObject::call` no longer requires you to resolve after calling it
2020-06-08 15:12:05 -07:00
Nathan Adams
26590d4c63
core: `TObject::get_local` no longer requires you to resolve after retrieving it
2020-06-08 15:12:05 -07:00
Nathan Adams
a121a3a4d0
core: `TObject::get` no longer requires you to resolve after retrieving it
2020-06-08 15:12:05 -07:00
dependabot-preview[bot]
36fb0cd43c
build(deps): bump quote from 1.0.6 to 1.0.7
...
Bumps [quote](https://github.com/dtolnay/quote ) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/dtolnay/quote/releases )
- [Commits](https://github.com/dtolnay/quote/compare/1.0.6...1.0.7 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-07 17:17:32 -07:00
Mike Welsh
359df6860f
tests: Add String.charCodeAt tests
...
Tests the fix provided in #634 .
2020-06-04 16:02:55 -07:00
Nathan Adams
34cf21289b
avm1: Fixed some missing behaviours with flash.geom.Rectangle
2020-06-02 18:49:01 -07:00
Nathan Adams
f5765f2bac
avm1: Implement all of flash.geom.Rectangle + tests ( #305 )
2020-06-02 18:49:01 -07:00
Nathan Adams
226a97ef4b
core: Don't panic on `new DoesntExist()`
2020-06-02 18:49:01 -07:00
dependabot-preview[bot]
4b22fc723d
build(deps): bump indexmap from 1.3.2 to 1.4.0
...
Bumps [indexmap](https://github.com/bluss/indexmap ) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/bluss/indexmap/releases )
- [Commits](https://github.com/bluss/indexmap/compare/1.3.2...1.4.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 13:42:08 -07:00
dependabot-preview[bot]
cf4df4058f
build(deps): bump png from 0.16.3 to 0.16.4
...
Bumps [png](https://github.com/image-rs/image-png ) from 0.16.3 to 0.16.4.
- [Release notes](https://github.com/image-rs/image-png/releases )
- [Changelog](https://github.com/image-rs/image-png/blob/master/CHANGES.md )
- [Commits](https://github.com/image-rs/image-png/compare/v0.16.3...v0.16.4 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 12:23:21 -07:00
dependabot-preview[bot]
078c64c201
build(deps): bump syn from 1.0.28 to 1.0.30
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.28 to 1.0.30.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.28...1.0.30 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 12:19:30 -07:00
dependabot-preview[bot]
0e7b0f8467
build(deps): bump libflate from 1.0.0 to 1.0.1
...
Bumps [libflate](https://github.com/sile/libflate ) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/sile/libflate/releases )
- [Commits](https://github.com/sile/libflate/compare/1.0.0...1.0.1 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 11:24:15 -07:00
Nathan Adams
0d53f0a952
chore: Fix new clippy lint about short variable names - fixes #668
2020-06-01 10:31:46 -07:00
Mike Welsh
3a8c705e95
chore: Fix clippy lints
2020-05-30 03:47:12 -07:00
Nathan Adams
4c1ce6d765
core: Print swf version on startup, and warn when we run into avm2
2020-05-30 02:48:54 -07:00
dependabot-preview[bot]
c0593ce081
build(deps): bump syn from 1.0.27 to 1.0.28
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.27 to 1.0.28.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.27...1.0.28 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-29 09:49:49 -07:00
dependabot-preview[bot]
97f69e8ed2
build(deps): bump syn from 1.0.25 to 1.0.27
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.25 to 1.0.27.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.25...1.0.27 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 07:24:00 +00:00
Nathan Adams
ddf2aa3ec1
avm1: Implement all of flash.geom.Point ( #304 )
2020-05-27 00:23:45 -07:00
Nathan Adams
2e25fec099
tests: Add test coverage for flash.geom.Point
2020-05-27 00:23:45 -07:00
Nathan Adams
df6764a69c
chore: Add license metadata to all packages & crates
2020-05-27 00:11:02 -07:00
dependabot-preview[bot]
458ca2a478
build(deps): bump syn from 1.0.24 to 1.0.25
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.24 to 1.0.25.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.24...1.0.25 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 20:36:01 +00:00
CUB3D
590321133f
core: Fix incorrect String.charCodeAt bounds check ( close #633 )
2020-05-25 13:35:41 -07:00
dependabot-preview[bot]
4712446314
build(deps): bump syn from 1.0.23 to 1.0.24
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.23 to 1.0.24.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.23...1.0.24 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-25 01:42:44 +00:00
Mike Welsh
993421e732
core: Children run an initial frame when changing button states
...
There was a one-frame-off flicker when a button changed states.
Now children will tick a frame so that they are properly created
immediately when the parent button changes state.
2020-05-24 08:57:30 -07:00
Mike Welsh
932ad30570
core: Flatten ClipActions into a single event per action
...
Previously a MovieClip's clip action would have a set of events
that would trigger it. Now we flatten these out into a single
event per action, because this is by far the common case. If an
action does happen to have >1 event, it will be duplicated for each.
2020-05-24 08:57:30 -07:00
Mike Welsh
c427d55dbb
core: Clean up clip event handlers
...
Remove ButtonEvent and subsume it in ClipEvent. Player now tosses
ClipEvents down the display tree, cleaning up some of the event code.
2020-05-24 08:57:30 -07:00
Mike Welsh
6929cea996
core: Implement button event handlers for movie clips
2020-05-24 08:57:30 -07:00
Mike Welsh
09ca11f788
webgl: Implement linear RGB gradients
2020-05-22 11:03:16 -07:00
Mike Welsh
97db518fb1
core: First pass of drawing API (merge #611 )
2020-05-22 08:54:55 -07:00
Nathan Adams
3346accb9c
core: More accurate shape_bounds/edge_bounds in drawing api
2020-05-21 20:34:48 +02:00
Nathan Adams
62a1914c3e
core: BoundingBox::encompass should properly convert invalid BBs to valid BBs.
...
This means that encompassing 100,100 on an invalid BB should create a BB of 100,100-100,100, and not 0,0-100,100
2020-05-21 20:19:26 +02:00
Nathan Adams
279c07d9b8
core: Update drawings on render instead of on tick
2020-05-21 18:38:10 +02:00
Nathan Adams
55215273e8
core: Stretch edge & shape bounds separately and avoid a clone, in rendering api
2020-05-21 18:38:10 +02:00
Nathan Adams
04690581ba
core: Refactor common code in drawing api
2020-05-21 18:38:10 +02:00
Nathan Adams
1f8abc92fd
core: Keep track of cursor position in drawings
2020-05-21 18:38:10 +02:00
Nathan Adams
99574cfa72
core: Move drawing api out from `movie_clip` into `drawing`
2020-05-21 18:38:10 +02:00
Nathan Adams
4f69566f77
tests: Add test coverage for flash.geom.Matrix
2020-05-21 18:38:08 +02:00
dependabot-preview[bot]
898232394b
build(deps): bump syn from 1.0.22 to 1.0.23
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.22 to 1.0.23.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.22...1.0.23 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-21 03:49:03 +00:00
Nathan Adams
31b0a5ae76
avm1: Implement gradient matrix types
2020-05-20 14:54:41 +02:00
Nathan Adams
5098eb079d
avm1: Implement most of flash.geom.Matrix ( #303 )
2020-05-20 14:54:41 +02:00
Nathan Adams
14331da71b
avm1: Add flash.geom.Matrix and methods to convert between this and swf::Matrix
2020-05-20 14:54:41 +02:00
Nathan Adams
eda862c719
swf: Merged core::Matrix into swf::Matrix
2020-05-20 14:54:41 +02:00
Nathan Adams
61e464099c
core: Add initial drawing API to MovieClip
2020-05-20 14:54:40 +02:00
Nathan Adams
7ab6703fc9
render: Add RenderBackend::replace_shape method
2020-05-20 14:54:40 +02:00
Nathan Adams
4c80ae150c
core: Make DistilledShape use Boundingbox and not Rectangle
...
Rectangle more represents compressed swf data and isn't suited for performing operations, and the drawing api will be generating these dynamically
2020-05-20 14:54:33 +02:00
Nathan Adams
f7b5f14f65
core: Make RenderBack::register_bitmap* methods return a Result ( fixes #531 )
2020-05-19 07:12:36 -07:00
dependabot-preview[bot]
6134ae091f
build(deps): bump generational-arena from 0.2.7 to 0.2.8
...
Bumps [generational-arena](https://github.com/fitzgen/generational-arena ) from 0.2.7 to 0.2.8.
- [Release notes](https://github.com/fitzgen/generational-arena/releases )
- [Changelog](https://github.com/fitzgen/generational-arena/blob/master/CHANGELOG.md )
- [Commits](https://github.com/fitzgen/generational-arena/compare/0.2.7...0.2.8 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 23:54:45 -07:00
dependabot-preview[bot]
41a8b01fe7
build(deps): bump quote from 1.0.5 to 1.0.6
...
Bumps [quote](https://github.com/dtolnay/quote ) from 1.0.5 to 1.0.6.
- [Release notes](https://github.com/dtolnay/quote/releases )
- [Commits](https://github.com/dtolnay/quote/compare/1.0.5...1.0.6 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 08:38:24 +00:00
dependabot-preview[bot]
3b163c2b6e
build(deps): bump syn from 1.0.21 to 1.0.22
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.21 to 1.0.22.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.21...1.0.22 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-16 09:46:08 +00:00
dependabot-preview[bot]
1f0e695465
build(deps): bump fnv from 1.0.6 to 1.0.7
...
Bumps [fnv](https://github.com/servo/rust-fnv ) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/servo/rust-fnv/releases )
- [Commits](https://github.com/servo/rust-fnv/compare/v1.0.6...v1.0.7 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 19:05:48 +00:00
dependabot-preview[bot]
1641d05d00
build(deps): bump syn from 1.0.20 to 1.0.21
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.20 to 1.0.21.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.20...1.0.21 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 17:18:29 +00:00
dependabot-preview[bot]
e22da9ac4c
build(deps): bump quote from 1.0.4 to 1.0.5
...
Bumps [quote](https://github.com/dtolnay/quote ) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/dtolnay/quote/releases )
- [Commits](https://github.com/dtolnay/quote/compare/1.0.4...1.0.5 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 14:42:48 +00:00
Mike Welsh
031f5d6501
core: Avoid undefined behavior in f64_to_wrapping functions
2020-05-13 02:41:50 -07:00
Mike Welsh
b59140ee01
render: Add support for GIF decoding in DefineBitsJPEG tags
2020-05-13 00:15:09 -07:00
Mike Welsh
5d84d33710
render: Handle PNG data in DefineBitsJPEG tags ( fix #530 )
2020-05-13 00:15:09 -07:00
dependabot-preview[bot]
f68edb37b5
build(deps): bump syn from 1.0.19 to 1.0.20
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.19 to 1.0.20.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.19...1.0.20 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 00:10:19 -07:00
Nathan Adams
b82b869950
core: Don't panic when NullNavigatorBackend can't do futures
2020-05-11 01:09:07 -07:00
Nathan Adams
2343074c56
core: Make RenderBackend downcastable
2020-05-11 01:09:07 -07:00
Nathan Adams
edcd1e6d65
core: Add keyboard shortcut to dump every variable (ctrl+alt+V, same as Flash Player)
2020-05-10 23:39:54 -07:00
Nathan Adams
c787e28fcd
render: Introduce a DistilledShape and use that instead of swf::Shape for the rendering API
2020-05-10 22:03:56 -07:00
Nathan Adams
5767fb1772
swf: Added utility method for `Color::from_rgb(rgb, alpha)`
2020-05-10 22:03:56 -07:00
Nathan Adams
601715aa19
render: Merge begin_frame and clear as they're always called together
2020-05-10 22:03:56 -07:00
dependabot-preview[bot]
60ca1da468
build(deps): bump syn from 1.0.18 to 1.0.19
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.18 to 1.0.19.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.18...1.0.19 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 03:12:14 +00:00
Nathan Adams
054e6f1ac6
chore: Fix new rust check lint about std::mem::replace
2020-05-10 03:29:25 -07:00
Nathan Adams
bac99368be
chore: Fix new clippy lints about cloning
2020-05-10 03:29:25 -07:00
dependabot-preview[bot]
a81adfa336
build(deps): bump num_enum from 0.4.3 to 0.5.0
...
Bumps [num_enum](https://github.com/illicitonion/num_enum ) from 0.4.3 to 0.5.0.
- [Release notes](https://github.com/illicitonion/num_enum/releases )
- [Commits](https://github.com/illicitonion/num_enum/compare/0.4.3...0.5.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-10 10:27:38 +00:00
dependabot-preview[bot]
08a786a213
build(deps): bump libflate from 0.1.27 to 1.0.0
...
Bumps [libflate](https://github.com/sile/libflate ) from 0.1.27 to 1.0.0.
- [Release notes](https://github.com/sile/libflate/releases )
- [Commits](https://github.com/sile/libflate/compare/0.1.27...1.0.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-05 08:12:26 +00:00
Nathan Adams
47a44a5fe8
desktop: Prime window with known width/height of the movie
2020-05-04 16:07:38 -07:00
Nathan Adams
51d9f3ef36
core: Change Player::new to take in a SwfMovie, not &[u8]
2020-05-04 16:07:38 -07:00
Nathan Adams
84f6b4d06e
core: Set init_object values after prototype but before constructor
2020-05-03 12:46:55 -07:00
Nathan Adams
96d1f8fd30
tests: Add test for order of init_object vs constructor when attaching movies
2020-05-03 12:46:55 -07:00
Nathan Adams
0152f384ea
core: Run any on(construct) events at the appropriate time
2020-05-03 12:46:55 -07:00
Nathan Adams
2b9219e8f9
tests: Add test for undocumented on(construct) property (note: this swf is hand-crafted)
2020-05-03 12:46:55 -07:00
Mike Welsh
f09bd8c079
core: Clean up tick/render loop
...
Don't call `render` from `Player::tick`; instead, require the
frontends to explicitly call `render` when they wish to redraw.
The frontend can query `Player::needs_render` to see if the stage
is dirty and needs a redraw. Update desktop and web to use this
new method.
This fits better with the newer winit event loop model, which
requires explicitly calling `request_redraw`, and should avoid
spurious renders.
2020-05-02 04:25:21 -07:00
Mike Welsh
6339c74d67
render: Add wgpu backend (merge #527 )
...
Adds a wgpu-rs render backend.
2020-05-02 03:42:05 -07:00
Nathan Adams
8384847084
avm1: Deleting on a non-object is a silent failure & warning, not a hard error
2020-04-30 14:18:54 -07:00
dependabot-preview[bot]
04660a9540
build(deps): bump quote from 1.0.3 to 1.0.4
...
Bumps [quote](https://github.com/dtolnay/quote ) from 1.0.3 to 1.0.4.
- [Release notes](https://github.com/dtolnay/quote/releases )
- [Commits](https://github.com/dtolnay/quote/compare/1.0.3...1.0.4 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 21:18:17 +00:00
Nathan Adams
99d15aef0d
render: Cache color transforms in wgpu backend, don't re-upload unchanged values
2020-04-30 16:33:41 +02:00
dependabot-preview[bot]
014df249a8
build(deps): bump jpeg-decoder from 0.1.18 to 0.1.19
...
Bumps [jpeg-decoder](https://github.com/image-rs/jpeg-decoder ) from 0.1.18 to 0.1.19.
- [Release notes](https://github.com/image-rs/jpeg-decoder/releases )
- [Changelog](https://github.com/image-rs/jpeg-decoder/blob/master/CHANGELOG.md )
- [Commits](https://github.com/image-rs/jpeg-decoder/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 04:54:23 +00:00
Mike Welsh
8aa12d181f
render: Remove RenderBackend::draw_pause_overlay
2020-04-27 04:45:53 -07:00
David Wendt
ed29b1c3bb
It turns out Macromedia just used an undocumented but user-modifiable property called `__constructor__` to store the constructor.
...
A previous version of this PR (whose history has been scrubbed, but go check 918d88abe68b7467a4194738b95e5bf3e9b5bb72 if you're curious) implemented a new `TObject` property which basically every line of code that dealt with object construction had to populate. It was terrible.
2020-04-25 14:37:24 -04:00
David Wendt
bb879870ec
Add test for the constructor property on v6 and v7 SWFs
2020-04-25 13:25:21 -04:00
Nathan Adams
b3322acc8c
tests: Copy as2_super_and_this test for manual prototype setting, used by mx (currently broken)
2020-04-25 13:25:20 -04:00
David Wendt
aaa6f481ac
Add a v6 version of the super-and-this test, which is exactly the same source compiled to SWF version 6.
2020-04-25 13:25:20 -04:00
David Wendt
17d96a0fa6
Constructing a new object sets `constructor` on that object for SWFv6 and lower.
2020-04-25 13:25:20 -04:00
David Wendt
b8fd1eac9c
Invoke virtual setters defined in the prototype chain.
...
This is accomplished via two new `TObject` methods: `has_own_virtual` and `call_setter`. If an object does not contain it's own version of a property, it will first crawl the prototype chain to see if there is an overwritable virtual. If so, it will invoke that prototype's setter.
A bit of borrow finangling was required to do this; `super` now no longer caches it's proto and constr values and instead dynamically constructs them. This also means it can't be downcasted to `Executable` anymore.
With this commit, virtual setters and super-setters now work correctly.
2020-04-25 13:25:19 -04:00
David Wendt
35197f889f
`Property.set` should return a `ReturnValue` as it can potentially execute AVM code
2020-04-25 13:25:19 -04:00
David Wendt
e76ba4de87
Method calls on `super` objects should substitute the child object instead of itself as `this`.
2020-04-25 13:25:19 -04:00
David Wendt
869cbd17da
Extend `as2_super_and_this` to cover accessing object properties in super-methods, super-getters, and super-setters.
2020-04-25 13:25:18 -04:00
David Wendt
9c5cd79e2c
Refactor how `SuperObject` works to use `base_proto` and avoid handing copies of itself as `this`.
...
This allows supercalled functions to properly read and mutate the object they were called on.
2020-04-25 13:25:18 -04:00
David Wendt
f3b3db51cb
Alter AVM1 to keep track of each function call's *base prototype*: the object from which a particular function was retrieved from.
...
A base prototype is only applicable in cases where a method is being called as a property on an object. Bare function calls, `apply`/`call` calls, and so on do not generate a base prototype.
We also add a convenience method, `call_method`, to all objects. This method automatically calculates the correct base prototype for a method call on an object, which is the only operation that should generate base prototypes.
2020-04-25 13:25:18 -04:00
David Wendt
15a19f4cf8
Add test from @Dinnerbone that checks to make sure super-called functions can still initialize the object they are a part of.
2020-04-25 13:25:17 -04:00
dependabot-preview[bot]
c5a8402eae
build(deps): bump syn from 1.0.17 to 1.0.18
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.17 to 1.0.18.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.17...1.0.18 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 10:19:18 +00:00
Mike Welsh
fd114959f9
core: Fix regressions from init order changes in #498
...
Revert to the old action queue method of popping off actions in a
loop, as new actions can be queued while iterating. Store proto
changes in a separate queue to maintain the high priority behavior.
2020-04-25 03:06:54 -07:00
Mike Welsh
bad34c4d8f
tests: Fix tests for regressions caused by #498
...
Changes to the action queue caused actions queued during other
actions to run too late. These regressions weren't caught by the
tests because many of the goto tests ran for more frames than was
necessary, allowing the late actions to still run.
2020-04-25 03:06:54 -07:00
Mike Welsh
c1dc69c6b7
chore: rustfmt
2020-04-24 22:16:16 -07:00
dependabot-preview[bot]
24a26541a3
build(deps): bump smallvec from 1.3.0 to 1.4.0
...
Bumps [smallvec](https://github.com/servo/rust-smallvec ) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases )
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.3.0...v1.4.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 12:20:39 +00:00
Nathan Adams
b43d0c2430
core: Pass SwfMovies along to empty movie clips
2020-04-21 05:49:25 -07:00
Nathan Adams
a673e7108d
tests: Add test for movieclip.createEmptyMovieClip().attachMovie()`
2020-04-21 05:49:25 -07:00
Nathan Adams
8b34fbdd81
chore: Removed debug code from a test
2020-04-21 05:48:17 -07:00
Nathan Adams
330e6b40f0
core: post_instantiation should happen after properties are set, but before first frame or actions
2020-04-17 23:48:58 -07:00
Nathan Adams
9318290336
core: Execute init actions immediately, do not queue them up
...
Clip initializers can and will influence how the next clips are loaded, and must execute before that
This fixes #418
2020-04-17 23:48:58 -07:00
Nathan Adams
fe6b79a9b7
chore: Make avm1 accessible to MovieClip::preload
2020-04-17 23:48:58 -07:00
Nathan Adams
46d31548b0
chore: Move MovieClipData::do_init_action to MovieClip::do_init_action
...
No functional changes, just replaces `self` with `self.0.read()` and removed `self_display_object` argument
2020-04-17 23:48:58 -07:00
Nathan Adams
c0d1dec7dd
chore: Move MovieClipData::preload to MovieClip::preload
...
No functional changes, just replaced `self` with `self.0.read/write`.
2020-04-17 23:48:58 -07:00
Nathan Adams
601fcbfebd
core: Queue up changes of movieclip prototypes, don't execute it immediately (but at a higher priority than normal actions)
2020-04-17 23:48:58 -07:00
Nathan Adams
6b48e77b61
avm1: Add TObject::set_proto
2020-04-17 23:48:58 -07:00
Nathan Adams
6316d7e0b3
tests: Add (currently failing) test for init order when combined with register_class
2020-04-17 23:48:58 -07:00
Nathan Adams
d0fd26a89c
avm1: Fix panic with [].unshift(x)
2020-04-17 21:17:13 -07:00
Nathan Adams
bf639e1802
avm1: Don't crash when enumerating non-objects, it's a silent fail
2020-04-15 05:26:09 -07:00
Mike Welsh
b7d464f367
chore: Bump enumset to 1.0.0
2020-04-13 04:14:29 -07:00
dependabot-preview[bot]
2146c42863
build(deps): bump smallvec from 1.2.0 to 1.3.0
...
Bumps [smallvec](https://github.com/servo/rust-smallvec ) from 1.2.0 to 1.3.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases )
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.2.0...v1.3.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 21:19:11 +00:00
Mike Welsh
47e936fcc2
tests: Add tests for Array.sort
2020-04-01 18:46:12 -07:00
Mike Welsh
bd0d2031bc
avm1: Implement Array.sort and constants
2020-04-01 18:46:12 -07:00
Mike Welsh
2bdbac9247
tests: Test that Color has no effect when target is undefined
2020-03-30 01:09:05 -07:00
Mike Welsh
e47c2aa356
avm1: Color object has no effect if target is undefined/empty
2020-03-30 01:01:37 -07:00
Mike Welsh
d5bd7c2dd8
avm1: Math.round rounds towards infinity
2020-03-29 18:44:28 -07:00
Mike Welsh
0c0d3dfd41
core: Add Navigator::time_since_launch to use for getTimer
...
Change `ActionGetTime` (`getTimer`) to use a new backend method.
This allows it to return updated times if it is called multiple
times in a single frame. This fixes hangs caused by games that use
busy-loop "frame limiter" code.
2020-03-28 22:28:07 -07:00
Mike Welsh
f7375c3700
avm1: Use `PropertyMap::get_index` for stage object properties
2020-03-28 16:22:02 -07:00
Mike Welsh
4ea609cca1
tests: Don't special case enumeration tests
2020-03-28 16:22:02 -07:00
Mike Welsh
8da9487c0a
avm1: Match Flash's property enumeration order ( fix #153 )
2020-03-28 16:22:02 -07:00
Mike Welsh
2cdf780e6f
avm1: Handle case sensitivity in DisplayObject children
...
Alter `get_child_by_name` and alter `get_level_by_path` to respect
case sensitivity.
2020-03-28 16:22:02 -07:00
Mike Welsh
81a0bb370b
tests: Add test for SWF<=6 case insensitivty
2020-03-28 16:22:02 -07:00
Mike Welsh
ea245895b0
avm1: Use PropertyMap for stage object magic properties
2020-03-28 16:22:02 -07:00
Mike Welsh
7d848f4f34
avm1: Add avm parameter to TObject methods
...
This is necessary to get the current SWF version for properly
handing case sensitivity.
2020-03-28 16:22:02 -07:00
Mike Welsh
1ef698f2ea
core: Add PropertyMap for handling AVM1 object properties
...
`PropertyMap` wraps over `IndexMap` to handle object properties in
AVM1. All insert/remove/get methods require and `swf_version`
parameter, and the `PropertyMap` will take care of handling case
senstivity and maintaing iteration order based on the SWF version.
2020-03-28 16:22:02 -07:00
Mike Welsh
d42a402522
avm1: Add display object methods to TextField
2020-03-26 14:19:18 -07:00
Mike Welsh
7865ec1021
avm1: Implement Button object
...
First implementation of Button object. Hook up to the button
display object and run onRelease etc. methods as appropriate.
Pull out common display object methods into globals::display_object.
2020-03-26 00:21:21 -07:00
Mike Welsh
4df1128c19
core: Implement Object.registerClass (merge #344 )
...
Implement Object.registerClass
2020-03-25 18:55:49 -07:00
dependabot-preview[bot]
ef5ee3a889
build(deps): bump syn from 1.0.16 to 1.0.17
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.16 to 1.0.17.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.16...1.0.17 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-21 01:37:48 +00:00
Mike Welsh
e9cb05aeb4
avm1: Correct order of modulo operands
...
Addresses part of #458 .
2020-03-20 16:00:28 -07:00
hthh
a16885d84b
avm1: Fix string-to-number octal and whitespace handling
...
This conversion allows negative octal values, but not negative
hex values, and ignores only leading ASCII whitespace. A test
for this behavior is included.
2020-03-20 04:27:41 -07:00
Nathan Adams
b4624fddce
avm1: GetVariable and SetVariable look through the scope chain. Fixes #414
...
GetVariable and SetVariable attempt to resolve paths on each scope
in the scope chain.
2020-03-19 19:58:16 -07:00
Mike Welsh
454cd29ed6
chore: EditText::font takes self by value
2020-03-17 19:42:57 -07:00
Mike Welsh
068f4c3bee
core: Edit text uses device fonts when outline flag isn't set
...
Specifically fall back to the device font when the UseOutlines
flag is not set in DefineEditText (SWF19 p.172). Fixes #451 .
Note that since we only use a single font for "device" rendering,
this may sometimes be a different font than is specified in the
Flash IDE.
2020-03-17 19:13:20 -07:00
dependabot-preview[bot]
da3398c832
build(deps): bump bitstream-io from 0.8.4 to 0.8.5
...
Bumps [bitstream-io](https://github.com/tuffy/bitstream-io ) from 0.8.4 to 0.8.5.
- [Release notes](https://github.com/tuffy/bitstream-io/releases )
- [Commits](https://github.com/tuffy/bitstream-io/commits/v0.8.5 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-17 17:08:59 +00:00
dependabot-preview[bot]
2bfa2502a9
build(deps): bump num_enum from 0.4.2 to 0.4.3
...
Bumps [num_enum](https://github.com/illicitonion/num_enum ) from 0.4.2 to 0.4.3.
- [Release notes](https://github.com/illicitonion/num_enum/releases )
- [Commits](https://github.com/illicitonion/num_enum/compare/0.4.2...0.4.3 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-17 17:07:35 +00:00
Mike Welsh
c2ce9892b1
core: Clamp RGBA when un-multiplying alpha
...
Fixes some bad pixels sometimes appearing in decoded JPEGs (such
as in #437 and in Dad 'n' Me).
2020-03-16 16:11:59 -07:00
dependabot-preview[bot]
0f7f36681d
build(deps): bump quick-xml from 0.17.2 to 0.18.1
...
Bumps [quick-xml](https://github.com/tafia/quick-xml ) from 0.17.2 to 0.18.1.
- [Release notes](https://github.com/tafia/quick-xml/releases )
- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md )
- [Commits](https://github.com/tafia/quick-xml/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-16 05:34:45 +00:00
Mike Welsh
24a557807d
chore: Fix more clippy lints
2020-03-12 21:40:48 -07:00
Mike Welsh
13b039fa34
chore: Fix clippy iter-nth-zero warnings
...
New lint added in latest clippy versions.
2020-03-12 21:16:30 -07:00
Mike Welsh
098bf33068
chore: Bump quote to 1.0.3
2020-03-08 18:58:39 -07:00
dependabot-preview[bot]
a0ee19fd37
build(deps): bump syn from 1.0.14 to 1.0.16
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.14 to 1.0.16.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.14...1.0.16 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 20:26:50 +00:00
dependabot-preview[bot]
ba185d3d43
build(deps): bump minimp3 from 0.3.3 to 0.3.5
...
Bumps [minimp3](https://github.com/germangb/minimp3-rs ) from 0.3.3 to 0.3.5.
- [Release notes](https://github.com/germangb/minimp3-rs/releases )
- [Commits](https://github.com/germangb/minimp3-rs/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 19:07:25 +00:00
dependabot-preview[bot]
3f28554285
build(deps): bump enumset from 0.4.4 to 0.4.5
...
Bumps [enumset](https://github.com/Lymia/enumset ) from 0.4.4 to 0.4.5.
- [Release notes](https://github.com/Lymia/enumset/releases )
- [Changelog](https://github.com/Lymia/enumset/blob/master/RELEASES.md )
- [Commits](https://github.com/Lymia/enumset/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-02 18:14:25 +00:00
Nathan Adams
751b15beec
chore: Raise errors during Object.registerClass
2020-02-29 23:13:02 +01:00
Nathan Adams
7bed4d4940
chore: Document each trace in attach_movie avm1 tests
2020-02-29 23:05:17 +01:00
Nathan Adams
041bb6b44c
avm1: Implement `Object.registerClass`
2020-02-29 23:05:17 +01:00
Nathan Adams
d850443c84
avm1: Refactor to expose `avm, context` in `post_instantiate`
2020-02-29 23:05:15 +01:00
David Wendt
fdce33ff5e
Return an `Err` when decompression fails, rather than just logging it and returning an empty vec.
2020-02-26 18:18:24 -05:00
David Wendt
ded7737ac0
`SwfMovie::from_data` is falliable and we should not hide those errors behind panics.
2020-02-26 18:15:01 -05:00
David Wendt
0313225164
Don't allow movie loads to be removed from the load manager unless they have completed or errored.
2020-02-26 18:03:45 -05:00
David Wendt
a023e161fc
Don't panic if our target handle was removed from the load manager. Instead, return an `Err` so that it can be properly reported on the console without killing the player.
2020-02-26 17:38:31 -05:00
Mike Welsh
223edb9bc1
core: Matrix translation is in twips
2020-02-26 12:47:47 -08:00
Mike Welsh
c4c02260fb
core: Implement keyUp event
2020-02-26 03:48:07 -08:00
Mike Welsh
db9bd1616e
chore: Remove unused deref impl from AudioBackend
2020-02-26 02:00:28 -08:00
Mike Welsh
86ec2c6cb8
input: Add InputBackend::set_mouse_cursor. Change cursor on buttons
...
It doesn't feel like Flash without having the hand cursor display
when hovering over buttons. First pass at implementing this;
core communicates which mouse cursor to use via
`InputBackend::set_mouse_cursor`.
TODO: Hand cursor only displayed for Button display objects
currently. Movie clips should also display this when they are in
"button mode" (when a button mouse event is set on them in AVM1,
or `buttonMode` property in AVM2).
2020-02-25 02:50:26 -08:00
Mike Welsh
a917fa4028
tests: Add temporary test for MovieClip.getRect
...
This is just testing that it exists and returns the same values as
getBounds for shapes without strokes.
TODO: When it is properly implemented for strokes, add stroked
shapes to testing.
2020-02-24 14:12:48 -08:00
Mike Welsh
d8079ac04a
core: Stub out MovieClip.getRect
...
Just defer to getBounds for now. TODO: getRect should return bounds
ignoring strokes, so in reality it is <= getBounds.
2020-02-24 14:12:48 -08:00
Mike Welsh
993c05cf19
core: Calculate bounds for each morphshape frame
2020-02-24 14:12:48 -08:00
Mike Welsh
a5c08f2e59
avm1: Implement MovieClip.getBounds and clean up bounding box methods
...
Implements MovieClip.getBounds, and also reorganized the
DisplayObject AABB methods:
* `self_bounds` calculates the inherent untransfomed bounds of
the object without children. All `DisplayObject`s must implement
this method. For example, `Bitmap` returns the size of bitmap.
Composite objects like `MovieClip` return a null AABB because they
are made up of only children.
* `bounds` calculates the untransformed bounds including children.
* `local_bounds` calculates the bounds relative to the object's
parent.
* `world_bounds` calculates the bounds in global stage space.
* `bounds_with_transform` calculates a tight AABB for the object
with a given transform, and is used to implement the above.
2020-02-24 14:12:48 -08:00
Mike Welsh
73a9a0e771
tests: Add test for MovieClip.getBounds
2020-02-24 14:12:48 -08:00
Mike Welsh
8c486b7544
chore: Use free functions for movie_clip methods
...
Try to keep style more consistent by using functions for all MC
methods. Previous was a mix of closures and functions (we're still
a little bad with this elsewhere)
2020-02-24 11:17:40 -08:00
Mike Welsh
f163afc5b4
core: Use collect to copy level pointers
2020-02-24 02:28:27 -08:00
Mike Welsh
1b08fb538d
chore: Rename layer -> level
...
Unify mix of 'layer' and 'level' in the code, and it's probably
better to stick with Flash nomenclature.
2020-02-23 23:41:55 -08:00
David Wendt
05e5fbb69c
For some reason, this color transform code broke on the moviefetch branch
2020-02-22 00:02:52 -05:00
David Wendt
abc1d00276
Fix incorrect preload of `_root` in `DefineFunction2` function calls.
...
This is caused by the fact that `avm.root_object` references the *current* stack frame, not the one we are about to introduce. Ergo, we need to pull the base clip of the *new* stack frame and find it's root.
This particular behavior only crops up in situations where there can be multiple root objects, at least until we implement `_lockroot`.
2020-02-22 00:02:51 -05:00
David Wendt
766ded6dfd
When replacing a movie clip with another movie, don't wipe out the entire display object base as that disassociates us from our parent, siblings, and most importantly, *layer depth*.
2020-02-22 00:02:51 -05:00
David Wendt
e0b4a0f193
Top-level layers are referenced via their path (`_leveln`) rather than name - in fact, their name is always the empty string.
2020-02-22 00:02:51 -05:00
David Wendt
00f88f9e87
Use the depth to indicate which layer a particular root clip is, and then use that to calculate it's `_leveln` path.
2020-02-22 00:02:50 -05:00
David Wendt
8ef759d377
Top-level layers do not get an instance name of `_leveln`.
2020-02-22 00:02:50 -05:00
David Wendt
9adf0f43d7
Allow levels to be read as scope variables, and add a test for this.
2020-02-22 00:02:50 -05:00
David Wendt
5a7e530c91
Add a test for cross-movie `_root`.
...
This test does not pass yet. Other layers need to resolve as target paths in order for this to happen.
2020-02-22 00:02:48 -05:00
David Wendt
aa6aba13dd
Abolish `context.root` completely.
...
`_root` is calculated dynamically based on the clip the currently executing function was called in.
Other things that used `context.root` have been changed to either update all layers or just update layer 0, which is the former `context.root`.
2020-02-22 00:02:46 -05:00
David Wendt
33d26b9149
Shorten `Pin<Box<dyn Future<Output=Result<T,E>> + 'static>>` into `OwnedFuture<T,E>`.
...
This is technically stricter on `fetch` impls, but right now we can't support non-`'static` futures at all.
2020-02-22 00:02:45 -05:00
David Wendt
aab339880d
Implement `XML.load()`, with tests.
...
Interestingly enough, very little actually has to be done inside the async process for XML. The async process basically just fetches data and fires an event handler when it's done. Everything else is handled via a system builtin, `XML.onData`.
2020-02-22 00:02:45 -05:00
David Wendt
538a5f05e5
Add tests for various forms of `loadVariables`.
...
Surprisingly enough these tests passed without any changes, somehow.
2020-02-22 00:02:43 -05:00
David Wendt
c00ecccd1f
Basic, stub implementation of `MovieClipLoader.getProgress`, plus test.
...
This implementation just returns the size of the current loaded movie. The test is also deliberately written to be loose on timings so that it likely won't see a partially loaded movie. (I don't want it to be a test of load events, so I just wait a few frames, rather than the correct way of waiting for `onLoadComplete`.)
Until we support streaming file loads, we can't faithfully support these properties. Still, it's better to have them, just in case.
2020-02-22 00:02:42 -05:00
David Wendt
3f7e3a9ed8
Implement `MovieClipLoader.unloadClip`, with tests.
2020-02-22 00:02:41 -05:00
David Wendt
a132226da4
Run `onLoadInit` at the *end* of a frame, rather than before the movie clip's own actions.
...
This is technically better, but it may make more sense to trigger `ClipEvent::Load` at the start of the next frame instead. Furthermore, I don't know if other forms of load events should trigger on the next frame (or end of the current one) like this.
2020-02-22 00:02:39 -05:00
David Wendt
55734619f7
`GetUrl2` can accept a `DisplayObject` as target in `LoadTargetFlag` mode.
...
I have no idea what happens to non-MovieClip objects, or if I'm really supposed to `coerce_to_string` here.
2020-02-22 00:02:36 -05:00
David Wendt
d49c0e9bf7
Rewrite some of the unload and cliploader tests to be more generous with load timing.
...
Loads in Flash Player, like all web technologies, are asynchronous tasks of some kind (probably a separate thread). They appear to operate on some kind of a delay. If I `trace` each frame out, like in the previous version of `mcl_loadclip`, you get a series of events that look like this:
1. Parent frame 1
2. Parent frame 2
3. Event: onLoadStart
4. Event: onLoadProgress
5. Event: onLoadComplete
6. Parent frame 3
7. Event: onLoadInit
If I run that version of the test on Ruffle, everything happens after frame 1. This is an artifact of how we're testing asynchronous behavior in Ruffle. In order to guarantee test determinism, we have a dummy implementation of `fetch` that does a blocking load, and we poll all futures every frame of execution. This means that there is a very specific order of execution with these tests, which is good for testing, but probably isn't 100% accurate.
Flash Player appears to delay all loads by at least one frame, even loads that are coming from disk which should load immediately. I don't know if this is intentional or not, so I don't want to implement a load delay just for the sake of making tests pass. Ergo, I'm loosening the tests to just test the ability to load and unload movies, and fire events from a loader.
Specifically:
1. `mcl_loadclip` no longer traces out frames of the parent timeline
2. `unloadmovie` et. all use a target movie that doesn't fail the test until 10 frames have passed.
If someone can find a movie network that breaks with fast loading, then I'll consider implementing explicit frame delays for async tasks. Otherwise, this is how we're testing this.
2020-02-22 00:01:22 -05:00
David Wendt
8ece2d1b31
Add another ignored test, this time measuring the timing of load events broadcasted by `MovieClipLoader`. We're loading too early, which is why this is ignored.
2020-02-22 00:01:20 -05:00
David Wendt
b56c3b6aed
Fire events directly onto `broadcastMessage` instead of the individual event handlers on the `MovieClipLoader`, so that listeners run correctly.
...
Also, this fixes a double-borrow for `onClipInit`.
2020-02-22 00:01:19 -05:00
David Wendt
89e5dd97f3
Implement `MovieClipLoader.loadClip`
2020-02-22 00:01:19 -05:00
David Wendt
162b6b70f8
Allow unloading a movie by sending `None` to `replace_with_movie`.
...
This also adjusts `MovieClip.unloadMovie` to do just that, instead of removing the clip from the display list. We also have to unload clips when loading new movies into them, since `unloadMovie` desugars to loading `""` as the URL.
2020-02-22 00:01:19 -05:00
David Wendt
8ef4a94672
Add new tests for `unloadMovie`, `unloadMovieNum`, and `MovieClip.unloadMovie`.
...
They currently fail in Ruffle, so they're ignored.
2020-02-22 00:01:18 -05:00
David Wendt
cc5dff4254
Add a test for `MovieClip.loadMovie`.
2020-02-22 00:01:17 -05:00
David Wendt
82d305a0f5
Add test for `loadmovienum`
2020-02-22 00:01:16 -05:00
David Wendt
a9621da47d
Add tests for `loadMovie`.
...
This test also includes changes to the SWF testing environment to allow asynchronous movie loads to execute.
2020-02-22 00:01:15 -05:00
David Wendt
a8545ee277
Implement `onLoadInit` by pulling `LoadManager` into all clip load events.
2020-02-22 00:01:14 -05:00
David Wendt
7ff885a0de
Implement `MovieClipLoader` event broadcasts for `onLoadStart`, `onLoadProgress`, `onLoadComplete`, and `onLoadError`.
...
Note that we do not implement `onLoadInit` yet - this requires some ability to trigger an event when another movie clip loads.
2020-02-22 00:01:14 -05:00
David Wendt
db41bec91e
Implement `MovieClipLoader`'s `addListener`, `removeListener`, and `broadcastMessage` methods.
...
Interestingly, this constitutes an implementation of `AsBroadcaster`. It appears Macromedia decided to implement event handling on `MovieClipLoader` in a very similar fashion to `AsBroadcaster`, down to invoking `broadcastMessage` and searching a `_listeners` property for listeners.
2020-02-22 00:01:12 -05:00
David Wendt
b7d318a897
Implement `MovieClip.loadMovie`, `MovieClip.loadVariables`, and `MovieClip.unloadMovie`.
...
*De*implement the free function versions of the above, as well as their `Num` variants, since they don't actually exist as callables. Instead, the ActionScript compiler treats them as preprocessor functions that represent various forms of `ActionGetURL`/`ActionGetURL2`.
2020-02-21 23:59:13 -05:00
David Wendt
31b1364b82
Implement `unloadMovie` / `unloadMovieNum`
2020-02-21 23:58:00 -05:00
David Wendt
b2b2a165fc
Implement `loadVariables` and `loadVariablesNum`.
2020-02-21 23:58:00 -05:00
David Wendt
c7539872f7
Add the ability to POST data from `fetch`, and allow methods that read AVM locals into form data to `GET` or `POST` them.
2020-02-21 23:58:00 -05:00
David Wendt
3fe6884c90
Refactor layer resolution into a separate function.
...
This function is part of `Avm1`, rather than a hypothetical `LayerManager`, because we're going to need to eventually construct layers differently for AVM2.
2020-02-21 23:57:59 -05:00
David Wendt
ea28c2c4a2
Impl `loadMovie` / `loadMovieNum` (sans local variable support)
2020-02-21 23:57:59 -05:00
David Wendt
07637fe676
Replaced movies should start out playing. This fixes a regression from a previous rebase.
2020-02-21 23:57:58 -05:00
David Wendt
64b787b73f
Implement `Collect` for `Loader`. (How did this compile without that?)
2020-02-21 23:57:58 -05:00
David Wendt
d84e11ed40
Introduce a new top-level object, `LoadManager`, which is responsible for all asynchronous behavior in the program. Migrate the existing async impls to it.
2020-02-21 23:57:58 -05:00
David Wendt
2d7a4fef28
`Sound` methods that reference sounds by library export name should default to `_layer0`'s library if the `Sound` was created without a movie clip target.
2020-02-21 23:57:57 -05:00
David Wendt
6b78ec6e03
More thoroughly clean `MovieClip`s that have movies loaded into them. This does everything except wipe the object it's attached to - I need further testing to see how Flash handles that.
2020-02-21 23:57:57 -05:00
David Wendt
2a82d21966
Change the layer list from a static array to a `BTreeMap`.
...
Flash allows creating layers at any 31-bit height without issue, so this should support similar limitations.
2020-02-21 23:57:57 -05:00
David Wendt
f4e4171ebe
Make spawned futures falliable, and report those errors.
2020-02-21 23:57:56 -05:00
David Wendt
5ce499d11e
Add separate libraries for each loaded movie.
2020-02-21 23:57:56 -05:00
David Wendt
e0c0779bd0
Make sure to preload all loaded clips.
2020-02-21 23:57:55 -05:00
David Wendt
6da374c567
Implement loading movies into `_leveln` via `ActionGetUrl`
2020-02-21 23:57:55 -05:00
David Wendt
ed799fd2b9
Split the player up into nine layers, each of which is a separate root movie clip.
2020-02-21 23:57:55 -05:00
David Wendt
8c9d290db7
Implement the MovieClip loading portion of `ActionGetURL2`.
2020-02-21 23:57:54 -05:00
David Wendt
5ed5876e9a
Merge SWF data and version into a single structure. Refactor everything that interacts with it to use `SwfSlice`s.
2020-02-21 23:57:53 -05:00
David Wendt
250ec13c12
Implement LoadVariablesFlag.
...
This has some subtle problems: we cannot hold references to garbage-collected data in Futures, so we have to arrange for the AVM itself to forcibly root them for us. Then we get them back when our async code is ready to do something to the AVM.
2020-02-21 23:44:06 -05:00
David Wendt
55149b7b7e
Reference count the Player and provide a weak reference in UpdateContext.
...
This allows the formation of `'static` futures that can still interact with a player. Async code will need to upgrade the weak reference in order to be able to interact with the player.
2020-02-21 23:44:06 -05:00
David Wendt
491d94c947
Pinbox all Futures.
...
Due to some strangeness with the way Rust implemented unsafe-to-move behavior, boxed futures are implicitly `Unpin`. Which is useless to us.
The reason for this is a little counter-intuitive. Actually, the fact that Rust supports memory pinning at all is a little odd, because the core language explicitly requires all types be movable. To get around this, Pin requires that all !Unpin types be *born pinned*. This is because you can't re-pin an already unpinned value in memory.
Anyway, this necessitates this silly API change.
2020-02-21 23:44:05 -05:00
David Wendt
00d25a768c
Extremely basic impl of fetch/spawn methods for getting data off the web
2020-02-21 23:44:05 -05:00
David Wendt
2137b9f1fd
Migrate `set_frame_rate` into the core `AudioBackend` trait
2020-02-21 23:44:05 -05:00
David Wendt
c1cf73ccb3
Add a public method to trigger a player update.
...
User-defined player updates are treated the same as if a stage frame had been run: queued actions are executed and garbage is collected.
2020-02-21 23:44:04 -05:00
Mike Welsh
f80c188048
core: Stop stream sounds when a clip is removed
2020-02-21 19:24:45 -08:00
Mike Welsh
6b503ac053
avm1: Fix DefineFunction2 preload order when _parent is undefined
...
The order is misdocumented in SWF19 (and also miscompiled assuming
this incorrect order by the Flash IDE!).
`_global` gets preloaded before `_parent`.
2020-02-20 12:58:26 -08:00
Mike Welsh
dc1f99e2ba
tests: Add test for misdocumented DefineFunction2 register preload
2020-02-20 12:58:26 -08:00
Mike Welsh
10fb6c7c04
tests: Add define_function2_preload test
2020-02-19 23:22:33 -08:00
Mike Welsh
19d0bf64a9
avm1: Preload _parent directly from base clip
...
When `_parent` is preloaded in a `DefineFunction2` action,
we previously resolve it on the scope chain. This could cause
double borrow panics as the parent object could already be
borrowed, and also this matches the behavior of the official Flash
player.
Addresses #398 .
2020-02-19 23:22:33 -08:00
Mike Welsh
8d7e58011e
avm1: undefined coerces to "" in SWFv6 and below
...
Except in the AVM1 trace op, which will print out "undefined".
2020-02-19 10:47:43 -08:00
Mike Welsh
dfde98da7d
tests: Add tests for coercing undefined to string in SWF6
2020-02-19 10:47:43 -08:00
Mike Welsh
452ac84f0e
tests: Uncomment Number.POSITIVE_INFINITY/Number.NEGATIVE_INFINITY tests
2020-02-18 10:17:55 -08:00
Mike Welsh
c073afb077
avm1: Use proper value for Number.MIN_VALUE
...
This is the smallest positive number, not the most negative value.
This is actually the smallest positive subnormal f64, which Rust
does not provide a constant for. This is ~5e-324.
2020-02-18 10:17:55 -08:00
Mike Welsh
6bbe1dbab8
avm1: Match Flash when converting exotic numbers to string ( fix #361 )
...
Match Flash's more closely when converting number to string:
* NAN -> NaN
* inf -> Infinity
* -inf -> -Infinity
* Use exponential notation for very large/very small
This is a little bit of a cheat by using Rust's number-to-string
formatting for exponentials, and shoving a sign in front of the
exponent.
2020-02-18 10:17:55 -08:00
Mike Welsh
324dd1c5e4
tests: Add swf_tests_approx macro
...
Use this macro to test numeric calculations that might have some
variance using approx_eq.
2020-02-17 15:42:29 -08:00
Mike Welsh
b6249cdb73
tests: Add localToGlobal/globalToLocal test
2020-02-17 15:42:29 -08:00
Mike Welsh
2af21d87e0
avm1: Implement MovieClip.localToGlobal/globalToLocal
2020-02-17 15:42:29 -08:00
Mike Welsh
cd94486f7e
desktop: Fix stream audio from prematurely ending ( fix #222 )
2020-02-14 20:32:25 -08:00
Mike Welsh
7c406732c7
audio: Ensure stream sounds stop upon goto/loop ( fix #370 )
2020-02-14 20:32:25 -08:00
Mike Welsh
9ad069e11a
avm1: Improve display object property setters for weird values
...
Setting a property such as _x to undefined or null should have no
effect. This was working for v7+ SWFs because it would coerce to
NaN and we toss out NaNs. But on v6 and below, these coerce to 0
and would end up setting the property to 0.
Explicitly check for undefined/null and bail out. Fixes #380 .
Also adjust the _visible setter, since this actually coerces to a
number (because of its legacy from SWFv4). For example,
_visible = "" should have no effect.
2020-02-14 15:34:14 -08:00
Mike Welsh
3a1a73ae11
tests: Add more tests for display object properties
...
Add more _x = weirdo value tests, and copy the test into a v6 SWF.
(because undefined etc. can coerce to 0 instead of NaN in SWFv6).
2020-02-14 15:34:14 -08:00
Mike Welsh
7d14b98f3b
avm1: Ignore undefined values in Color.setTransform
...
If a property is not set on the object passed to Color.setTransform,
then that channel is left unmodified. This fixes invisible objects
in some games (fixes #369 , addresses #380 ).
Also improve handling of wrapping/invalid values to better match the
behavior in the Flash Player (some work pending on #193 ).
2020-02-13 18:06:27 -08:00
Mike Welsh
21f117e7bc
avm1: Add Value::coerce_to_i16
2020-02-13 18:06:27 -08:00
Mike Welsh
19df074a79
tests: Add more tests for AVM1 Color object
...
Include not defined values, wrapping values, invalid values.
2020-02-13 18:06:27 -08:00
David Wendt
18516c8eac
Pre-strip HTML from HTML tags, rather than skipping them.
2020-02-03 19:32:05 -05:00
David Wendt
7d225f8b55
Fix overflow when shifting `u8`s
2020-02-03 14:46:36 -05:00
David Wendt
3d6b00c1e4
Impl the remaining text layout properties
2020-02-03 14:46:36 -05:00
David Wendt
517e7ce9ff
Add word-wrap for `measure_text` and caching for word-wrap calculations
2020-02-03 14:46:36 -05:00
David Wendt
5e808c8cd6
Adjust the wordwrap machinery to work in break points (indicies where new lines start) so we can cache them later
2020-02-03 14:46:35 -05:00
David Wendt
fb8664c818
Implement wordWrap and multiline rendering, poorly
2020-02-03 14:46:35 -05:00
David Wendt
7df8eb7674
Impl `is_multiline`'s effect of respecting newlines
2020-02-03 14:46:35 -05:00
David Wendt
f95ec777de
Also impl storage of the `wordWrap` flag
2020-02-03 14:46:34 -05:00
David Wendt
819757e2b6
Fix text measurement now that the underlying SWF tags are correctly parsed as `Twips`.
...
Transform coordinates are always in twips, so we have to convert pixels to twips when evaluating the font, and then convert back when measuring.
2020-02-03 14:46:34 -05:00
David Wendt
63b7d172f4
`TextRecord.height` is also in `Twips`.
...
Notably, the `Text` rendering code does not appear to actually work in pixel scale.
2020-02-03 14:46:34 -05:00
David Wendt
fde7715fb8
`EditText.height` is in `Twips`
2020-02-03 14:46:33 -05:00
David Wendt
75022f36d2
Pull `TextFormat` into the `font` module.
...
Also, since there's a separate function for attaching virtual properties to an AVM1 `TextField` object, let's use that!
2020-02-03 14:46:33 -05:00
David Wendt
4b3660bf2c
Impl get/set for `is_multiline`.
2020-02-03 14:46:32 -05:00
David Wendt
c1ff1d94d5
Pull the `EditText.evaluateFont` method into `Font`.
...
`Text` itself doesn't use this method, but it probably could with some changes.
2020-02-03 14:46:32 -05:00
David Wendt
81b7958090
Impl `textWidth` / `textHeight`, although it currently only works well for single-line scenarios.
2020-02-03 14:46:32 -05:00
David Wendt
2181f0d0d0
Impl `getNewTextFormat`/`setNewTextFormat`.
...
These don't actually do anything yet, because we don't track text spans, nor do we actually use those text spans to alter rendering or text layout.
2020-02-03 14:46:30 -05:00
David Wendt
db56217f20
`TextFormat` does *not* coerce `undefined` or `null`; instead those both become `null`.
2020-02-03 14:46:30 -05:00
David Wendt
8449d964ef
Implement `TextFormat` as a property bag.
2020-02-03 14:46:29 -05:00
David Wendt
2b0600ab1a
Impl `createTextField`.
2020-02-03 14:46:29 -05:00
Mike Welsh
2ff76775e0
core: Empty movie clips can not be used as a mask
...
When a movie clip or button is used as a mask, the masking will be
disabled if that object has no children; the maskee will be
completely visible. An empty movie clip inside an empty movie clip
successfully masks.
An EditText can also not be used as a masker (although it can be
wrapped inside a movie clip, and then the text successfully masks).
Add a `TDisplayObject::allow_mask` trait method that will
return whether the object can be used as a mask.
This fixes characters not being visible in Dad 'n' Me.
2020-02-01 01:15:31 -08:00
Mike Welsh
2e304a81ef
core: Flag as transformed-by-script after swapDepths
2020-01-31 19:44:42 -08:00
Mike Welsh
a55a378a73
avm1: Improve comments in MovieClip depth methods
2020-01-31 19:44:42 -08:00
Mike Welsh
4d1f7c4d4a
tests: Add movieclip depth method tests
2020-01-31 19:44:42 -08:00
Mike Welsh
a4e175a790
avm1: Implement MovieClip.getNextHighestDepth
2020-01-31 19:44:42 -08:00
Mike Welsh
4d12cd1566
avm1: Implement MovieClip.getDepth
2020-01-31 19:44:42 -08:00
Mike Welsh
9e337ede34
avm1: Implement MovieClip.swapDepths
2020-01-31 19:44:42 -08:00
dependabot-preview[bot]
2f98fd1a0e
build(deps-dev): bump webpack-dev-server in /web/selfhosted
...
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server ) from 3.10.1 to 3.10.2.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases )
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md )
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.10.1...v3.10.2 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-31 19:44:42 -08:00
Mike Welsh
0d91fb423e
core: Goto only runs if frame is an integer
2020-01-30 15:17:01 -08:00
Mike Welsh
c079cb3bca
core: Don't run frame actions when seeking past end of timeline
...
If you goto past the final loaded frame of a timeline, for example,
with gotoAndStop(9999), this seeks to the final frame on the
timeline, but it doesn't run the actions on this frame.
MovieClip::goto_frame now will not run the final frame actions if
the target frame was not reached.
2020-01-30 15:17:01 -08:00
Mike Welsh
8aae07bbf3
core: Frame labels are case insensitive
2020-01-30 15:17:01 -08:00
Mike Welsh
a835573f3c
tests: Add test for global GotoFrame action
2020-01-30 15:17:01 -08:00
Mike Welsh
62467bb880
avm1: Handle invalid parameters in GotoFrame2
...
Use the same code path for the global GotoFrame2 action and
MovieClip.gotoAndX, which properly handles out-of-range and invalid
values like NaN.
Fixes Disorderly hanging on game start
(https://www.newgrounds.com/portal/view/121896 )
2020-01-30 15:17:01 -08:00
David Wendt
a57d0e12b3
Do not apply a color filter at all unless rendering a bitmap or gradient.
...
This significantly improves render times, as browsers appear to apply filters in the most general, inefficient way possible.
2020-01-29 14:19:18 -05:00
dependabot-preview[bot]
dc8858505d
build(deps): bump smallvec from 1.1.0 to 1.2.0
...
Bumps [smallvec](https://github.com/servo/rust-smallvec ) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/servo/rust-smallvec/releases )
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.1.0...v1.2.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-29 18:42:28 +00:00
Mike Welsh
003cc414aa
core: Create clips in execution order during a goto
...
The list of goto commands is now a Vec that will already be in order
of creation. This ensures that subsequent ActionScript in these clips
runs in the correct order.
2020-01-28 04:15:08 -08:00
Mike Welsh
81a1c05682
tests: Add goto_execution_order2 regression test
...
Tests execution order of children added during a goto.
2020-01-28 04:15:08 -08:00
Mike Welsh
7532e89aff
avm1: Use `resolve_target_display_object` in `Color`
...
Fixes the boss damage blinking in Alien Hominid. Target was a path
string.
2020-01-27 23:35:41 -08:00
Mike Welsh
69f19f03c4
avm1: Output trace warning for invalid SetTarget ( fix #332 )
2020-01-27 23:35:41 -08:00
Mike Welsh
a0032b9aa1
avm1: Better handling of movie clip paths strings ( fix #317 )
...
Ops and functions that take a movie clip path in String form have
a very forgiving syntax. These include:
* `SetTarget`
* `CloneSprite`
* `RemoveSprite`
* `swapDepths`
This change adds `Avm1::resolve_target_display_object` to parse
these paths correctly, along with `target_paths` test to test a
wide variety of formats.
This also applies to `GetVariable`/`SetVariable`, which accept
target paths to variables and is used by some SWF4/5 content.
(fixes #324 , #337 ).
2020-01-27 23:35:41 -08:00
Mike Welsh
2751b89d4e
avm1: Root clip should not have a name
...
Previously we set the name of the root clip to `_level0`. Top-level
clips should actually have no name (`_root._name` returns `""`).
However, when constructing a dot path, `_level0` still gets inserted
by `DisplayObject::path` for the top-level, so that `trace(_root)`
still correctly prints `_level0`.
TODO: When `loadMovieNum` gets merged in, the proper level # needs
to be returned by `.DisplayObject::path`.
2020-01-27 23:35:41 -08:00
Mike Welsh
0446644742
tests: Add target_path test
2020-01-27 23:35:41 -08:00
David Wendt
db51ec9e3c
Implement a separate `Object` impl for functions that holds an `Executable`.
2020-01-27 21:57:32 -05:00
David Wendt
8eeb9a5c60
This technically isn't a test of `toString`, so remove stuff from the test that it relies upon.
2020-01-27 21:50:11 -05:00
David Wendt
d217f51c6c
Don't crash if `Function.prototype.call` is called without arguments.
2020-01-27 21:50:10 -05:00
David Wendt
0470b8d0a7
Add a test for `Function.call` and `Function.apply`
2020-01-27 21:50:10 -05:00
David Wendt
2c0d892154
Implement Function.call/apply
2020-01-27 21:50:09 -05:00
Mike Welsh
4b7bac706b
avm1: ActionNewMethod supports auto-boxing values
...
This allows `new ("FOO".bar)()`, although there is probably no
good reason to do this. :-)
2020-01-21 18:24:49 -08:00
Mike Welsh
70bec9437f
tests: Boolean() returns undefined
2020-01-21 18:24:49 -08:00
Mike Welsh
d9e7a6a960
avm1: Implement Boolean class
2020-01-21 18:24:49 -08:00
Mike Welsh
e71099edd5
tests: Add primitive_type_globals test
2020-01-21 18:24:49 -08:00
Mike Welsh
8263d13fd0
avm1: Implement Number class
2020-01-21 18:24:49 -08:00
Mike Welsh
b49357e46f
avm1: Boxing a value calls the object constructor
2020-01-21 18:24:49 -08:00
Mike Welsh
ccf62979a1
avm1: Implement String methods
2020-01-21 18:24:49 -08:00
Mike Welsh
5f12ce78b6
tests: Add string method tests
2020-01-21 18:24:49 -08:00
David Wendt
2f9d50cdb8
Very rudimentary/basic/not-good implementation of `String`, plus auto-boxing for primitive strings getting their methods taken.
2020-01-21 18:24:49 -08:00
David Wendt
4d1e49882b
Add another object class for boxed primitive values, because the language demands it.
2020-01-21 18:24:49 -08:00
Mike Welsh
13b4cd4c1b
avm1: Add Value::coerce_to_i32/u32/u16 methods
...
Add these methods that will explicilty coerce a value to an int,
following the wrapping behavior in the ECMAScript specs (ToInt32,
ToUInt32, ToUInt16).
This also fixed an off-by-one error for negative numbers in the
previous implementation.
These will call `valueOf` if necessary. AVM code that requires an
integer will probably use one of these (`coerce_to_i32` usually).
2020-01-20 13:28:27 -08:00
dependabot-preview[bot]
87e96212e4
build(deps): bump syn from 1.0.13 to 1.0.14
...
Bumps [syn](https://github.com/dtolnay/syn ) from 1.0.13 to 1.0.14.
- [Release notes](https://github.com/dtolnay/syn/releases )
- [Commits](https://github.com/dtolnay/syn/compare/1.0.13...1.0.14 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-20 18:56:56 +00:00
Nathan Adams
4ad6ef8b83
core: Implemented Key.getCode()
2020-01-17 15:11:38 -08:00
Nathan Adams
adceceed5d
avm1: Removed redundant double registration of Key
2020-01-17 15:11:38 -08:00
Nathan Adams
cef7d3eba2
avm1: Implement Key constants
2020-01-17 15:11:38 -08:00
Mike Welsh
8cb4278903
tests: Use pretty_assertions for nice output on test fail
2020-01-17 13:54:39 -08:00
Mike Welsh
cf7a564f2c
core: Fix properties not resetting in goto when rewinding
...
Properties of a display object would not reset when rewinding if
it existed in both the initial and final frames of the goto.
This fixes the weapons toggles in UFA.
2020-01-16 09:58:33 -08:00
Mike Welsh
8448fc80ef
avm1: Don't panic when calling ActionRandom with <= 0
2020-01-14 00:05:13 -08:00
Mike Welsh
4eef8a1821
tests: Add test for ActionCall
2020-01-14 00:04:11 -08:00
Mike Welsh
2d3801dac8
avm1: Implement ActionCall opcode
2020-01-14 00:04:11 -08:00
Nathan Adams
fdf1d38d21
avm1: Implement remainder of Math
2020-01-13 15:57:56 -08:00
dependabot-preview[bot]
6c2f5143b3
build(deps): bump rand from 0.7.2 to 0.7.3
...
Bumps [rand](https://github.com/rust-random/rand ) from 0.7.2 to 0.7.3.
- [Release notes](https://github.com/rust-random/rand/releases )
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md )
- [Commits](https://github.com/rust-random/rand/commits )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-13 18:38:15 +00:00
Mike Welsh
001a931afe
avm1: Avm1::pop should always succeed
...
Don't return a Result from `pop`. Instead, emit a warning and
return Undefined if there is an underflow.
2020-01-07 15:59:14 -08:00
Mike Welsh
170813ffbf
audio: Assume little endian for PCM unknown endian sounds
2020-01-07 02:40:09 -08:00
Mike Welsh
a28e97d8c3
avm1: Don't push returns from non-function stack frames
2020-01-06 20:49:05 -08:00
Mike Welsh
7e05da6147
avm1: Fix issues with traversing the scope chain in SetVariable
...
When setting a variable in a function-local scope, if that variable
has not been defined in the function scope, it should be defined in
the executing movieclip's scope. Previously it would get defined
in the function's scope. Changed Scope::overwrite to Scope::set,
and modified the behavior to stop traversing and define the value
when it hits a movie clip Target scope.
Also, modified With scopes to properly add onto the end of the scope
chain.
2020-01-06 20:49:05 -08:00
Mike Welsh
a60fadf0bb
tests: Add test for correct scope in SetVariable
2020-01-06 20:49:05 -08:00
David Wendt
0d1d0e8de7
Don't bother preserving the `Cow`ness of unescaped strings when we're going to clone them anyway.
2020-01-05 00:31:45 -05:00
David Wendt
7957434036
This is a copy type, copy it
2020-01-05 00:24:31 -05:00
David Wendt
f8b5b8a032
Use `unwrap_or_default` where available
2020-01-05 00:22:36 -05:00
David Wendt
ef7c5d7eb9
Move XML properties to separate functions rather than closures
2020-01-05 00:17:57 -05:00
David Wendt
14dba0d100
Log errors encountered when removing the children of a node we plan to parse XML into.
...
Also, remove a handful of unnecessary `#[allow(unused_must_use)]` instances.
2020-01-05 00:04:45 -05:00
David Wendt
464563a703
Change the no-double-introduction warning into a proper `assert!`. Add doc warning about the panic.
2020-01-05 00:00:29 -05:00
David Wendt
750e6e4370
Replace bare number constants for XML errors with symbolic `const` values
2020-01-04 23:56:10 -05:00
David Wendt
fd541fabea
Implement `status`.
...
I'm not entirely sure how to test this one - the list of errors that Flash kicks out for XML and the list of errors that `quick_xml` kicks out don't line up at all; so I just ensured that any error is a negative number (currently the one for OOM errors) and stuck whatever errors *did* match up together.
Consequently I don't know entirely *how* to write tests for this.
2020-01-04 19:00:49 -05:00
David Wendt
fec95dd226
Add regression test for `idMap`.
2020-01-04 19:00:49 -05:00
David Wendt
f3226537bf
Implement `idMap`.
...
`idMap` is a strange property; it's only populated with nodes which had a given `id` *at the time of parsing*, and said nodes continue to be referenced even if the node is removed from the document. I have yet to find a way by which nodes can be deleted from `idMap`.
It also takes expandos, so this has to be a new retained object on the XML document. I originally considered not creating *another* `Object` impl and populating a regular `ScriptObject` with nodes, but that meant we couldn't lazy-instantiate their AVM1 side counterparts. Boo. :/
2020-01-04 19:00:48 -05:00
David Wendt
1722558d44
Add test for `XML.parseXML`
2020-01-04 19:00:47 -05:00
David Wendt
823e8602ff
Impl `XML.parseXML`
2020-01-04 19:00:46 -05:00
David Wendt
d00ef01965
Add a convenience method: `XMLNode.into_string`
2020-01-04 19:00:46 -05:00
David Wendt
b4b722e1d6
Add another test for AVM1 XML's failure to roundtrip unsupported node types (e.g. comments).
2020-01-04 19:00:45 -05:00
David Wendt
2c790f1d41
Filter non-AS2 compatible nodes from toString output, and add non-SWF tests for XML filtering.
2020-01-04 19:00:45 -05:00
David Wendt
ce1b958abb
Add some more tests for XML namespace URIs.
2020-01-04 19:00:45 -05:00
David Wendt
e2fa685d41
Fix tagname parsing.
...
There is a bug in `quick_xml` - or at least, I *think* it's a bug - where the `unescaped` method of `BytesStart` yields a bunch of attributes if you have slightly invalid crap in your tag like `xmlns:`. To work around it, I turned off unescaping; we're instead using `name` and ignoring unescaping. This will probably fail somewhere.
2020-01-04 19:00:44 -05:00
David Wendt
e1034fce31
clippy compliance
2020-01-04 19:00:44 -05:00
David Wendt
7ac3204759
format prev commit
2020-01-04 19:00:43 -05:00
David Wendt
d2aa3dd987
Add a test for `createElement` and `createTextNode`.
2020-01-04 19:00:43 -05:00
David Wendt
db38982ffb
For some reason, text nodes have an attributes object.
2020-01-04 19:00:42 -05:00
David Wendt
91155d6870
Text nodes have empty arrays for `childNodes` rather than being `undefined`.
2020-01-04 19:00:42 -05:00
David Wendt
d28094a019
Implement `createElement` and `createTextNode`.
2020-01-04 19:00:42 -05:00
David Wendt
97bcb6b2dc
Add an ignored test for `xmlDecl`.
...
Test is currently ignored because AS2 XML currently handles XML declarations in ways not compatible with our current parser. Investigating hacky ways around this.
2020-01-04 19:00:41 -05:00
David Wendt
c02da74afa
Expose the `<?xml ?>` declaration to ActionScript.
...
I can't write proper tests for this because our underlying XML parsing technology doesn't let us do what AS2 XML does: just copy the first xml tag out of the document and into a string. No, seriously, anything at the start of the parsed XML that starts with `<?xml` and ends with `?>` gets copied into Flash's moral equivalent of `xml::Document` as a string. We parse the whole thing, which is wrong, so we'll need to additionally retain the original xmldecl string in order to pass the test I wrote for this.
2020-01-04 19:00:41 -05:00
David Wendt
ce0546fc2c
Add test for `docTypeDecl`.
2020-01-04 19:00:40 -05:00
David Wendt
a7a349b02b
Expose `docTypeDecl` to ActionScript.
...
This also involves storing the `DocType` node on the document object and retrieving it later.
2020-01-04 19:00:40 -05:00
David Wendt
a80aab1b08
Document roots can store an attributes object, even though they don't have attributes
2020-01-04 19:00:40 -05:00
David Wendt
6a472d32bb
Filter incompatible nodes from the sibling and child lists.
2020-01-04 19:00:39 -05:00
David Wendt
fd14d0c9df
Doctype nodes should be represented as text nodes to ActionScript (if they somehow grab hold of them)
2020-01-04 19:00:38 -05:00
David Wendt
6b4bbee195
Create and store `DocType` nodes on the tree when we encounter a `<!DOCTYPE...>` tag.
2020-01-04 19:00:38 -05:00
David Wendt
aa749dc1b0
Store the XML document version, encoding, and standalone flags.
2020-01-04 19:00:38 -05:00
David Wendt
a869107480
The `DocumentRoot` node type should have it's own node type ID, and AS2 XML should filter it out. This also filters out comment nodes as text, which isn't technically wrong but we should do better
2020-01-04 19:00:37 -05:00
David Wendt
7965045d87
Add test for XMLNode.toString.
2020-01-04 19:00:37 -05:00
David Wendt
673f85f067
XMLNode type 1 is an element, not a text node.
2020-01-04 19:00:36 -05:00
David Wendt
88aa5f8004
Add extra whitespace to empty tags.
2020-01-04 19:00:36 -05:00
David Wendt
0c7a1fe667
Text and comment nodes are stored plain and must be escaped for XML
2020-01-04 19:00:36 -05:00
David Wendt
c7e1f34a5d
Print empty nodes as empty tags rather than start/end
2020-01-04 19:00:35 -05:00