Mike Welsh
478f970fc8
chore: Appease clippy
2022-04-09 18:23:51 -07:00
relrelb
9234336dfc
swf: Rename `PlaceFlag::IS_IMAGE` to `PlaceFlag::HAS_IMAGE`
...
To match the SWF19 spec.
2022-03-26 11:33:26 -07:00
relrelb
094da8f1a4
swf: Organize clippy attributes
...
Move them to specific places as possible.
2022-03-26 11:33:26 -07:00
relrelb
71b0a6e32e
swf: Use bitflags for `FontInfoFlag`
2022-03-26 11:33:26 -07:00
relrelb
fd06fa0537
swf: Use bitflags for `LineStyleFlag`
2022-03-26 11:33:26 -07:00
relrelb
e88c7102f5
swf: Use bitflags for `PlaceFlag`
2022-03-26 11:33:26 -07:00
relrelb
6d2005c2fe
swf: Simplify `read_str_with_len`
...
Read the length in the function itself rather than receiving it as
an argument.
2022-03-26 11:33:26 -07:00
relrelb
1230b5e713
swf: Use bitflags for `FontFlag`
2022-03-26 11:33:26 -07:00
relrelb
71a1757d29
swf: Make `Glyph::advance` non-`Option`
...
Simply use `0` instead of `None`.
2022-03-26 11:33:26 -07:00
relrelb
984342abf3
swf: Avoid some `Vec::resize` usages
...
Use the `vec![]` macro instead.
2022-03-26 11:33:26 -07:00
relrelb
e9167cf43c
swf: Add minimal offset table enforcement in `DefineFont2/3`
...
Previously, the offset table and code table offset were completely
ignored. But as it seems, Flash does look into these offsets in
order to avoid exceedingly reading glyph shapes. For now, avoid
exceedingly reading empty and 1-byte glyph shapes, and add debug
assertions that verify the correctness of the offset table and code
table offset, to help diagnosing related bugs in the future.
2022-03-14 22:50:24 +02:00
Adrian Wielgosik
685911a77c
swf: Box ShapeRecord::StyleChange variant
2021-12-08 22:14:17 +01:00
Adrian Wielgosik
a305b80789
swf: Support font layout without swf-v7 fields
2021-11-20 22:48:36 +01:00
relrelb
d069b8dcd6
swf: Avoid one usage of `Reader::pos`
2021-10-08 13:22:45 -07:00
relrelb
693f49904f
swf: Extract `BitReader::new`
2021-10-08 13:22:45 -07:00
TÖRÖK Attila
a1ee508ff8
chore: Fix nightly clippy lint: clippy::if_then_panic ( #5400 )
...
* chore: Fix nightly clippy lint: clippy::if_then_panic
* chore: Fix nightly clippy lint: clippy::if_then_panic in swf tests too
* Address review notes
2021-10-02 16:14:53 +03:00
relrelb
55ffda9c97
swf: Take advantage of `ClipEventFlag` bit pattern
...
Re-number the `ClipEventFlag` enum members to match how they
actually appear in a SWF. This allows much simpler read/write
operations.
Also, gracefully handle malformed ClipActions that are only 1 or 0
bytes, as it seems that Flash accepts those too.
2021-08-30 21:23:18 +03:00
Tal Hayon
7b9049cedf
core: Add DefineBinaryData and SymbolClass connection (Part of #1368 )
2021-08-21 12:24:46 -06:00
relrelb
d2eb46d3be
chore: Reserve capacity for vectors
...
This avoids unnecessary re-allocations and thus should improve
performance in both memory and time terms.
2021-07-20 16:25:23 -07:00
relrelb
c2378416a9
tests: Simplify `read_tag_bytes_from_file_with_index`
...
Let the `Reader` outlive outside the loop, so it tracks its own
position, instead of doing so manually.
Also move `read_from_file` outside and reuse it.
2021-07-12 23:09:29 +03:00
relrelb
ef9c073d26
swf: General cleanup
...
Just mechanical cleanups to ease future refactors.
2021-07-12 23:09:29 +03:00
relrelb
0fd1c05fd5
chore: Use into() in more places
2021-06-22 11:49:41 -07:00
Mike Welsh
56c260fa74
swf: Add NameCharacter tag
2021-06-20 14:01:07 -07:00
Mike Welsh
d23ea90459
swf: Change Matrix to use Fixed16 for a, b, c, d
...
Matrices in an SWF file store their scale/skew components in
in 16.16 format (fbits).
Split `ruffle_core::Matrix` and `swf::Matrix`. `swf::Matrix` now
stores its data as `Fixed16` instead of immediately converting to
`f32`.
2021-06-08 14:57:15 -07:00
relrelb
b8eae51888
swf: Move num_colors into BitmapFormat::ColorMap8
2021-06-07 11:29:28 -07:00
relrelb
de6e2a04a4
swf: Number enum VideoCodec
2021-06-07 11:29:28 -07:00
relrelb
50a4643253
swf: Number enum VideoDeblocking
2021-06-07 11:29:28 -07:00
relrelb
636775f1e2
swf: Number enum TextGridFit
2021-06-07 11:29:28 -07:00
relrelb
a45fdba4d1
swf: Number enum FontThickness
2021-06-07 11:29:28 -07:00
relrelb
88b6632188
swf: Number enum TextAlign
2021-06-07 11:29:28 -07:00
relrelb
781e3ff0cd
swf: Number enum AudioCompression
2021-06-07 11:29:28 -07:00
relrelb
ee14945974
swf: Number enum LineCapStyle
2021-06-07 11:29:28 -07:00
relrelb
f6d04061b0
swf: Number enum GradientSpread
2021-06-07 11:29:28 -07:00
relrelb
fed4facd8a
swf: Number enum SoundEvent
2021-06-07 11:29:28 -07:00
relrelb
0d279a05c2
swf: Number enum BlendMode
2021-06-07 11:29:28 -07:00
relrelb
72113dbcf2
swf: Number enum Language
2021-06-07 11:29:28 -07:00
relrelb
f82faf9603
chore: Appease clippy
2021-06-05 10:16:00 -07:00
Mike Welsh
2b98c878f0
swf: Use Fixed in more places
2021-05-30 21:24:03 -07:00
Mike Welsh
e1439f4105
swf: Add HeaderExt struct providing additional info
...
When reading an SWF, search for FileAttributes and
SetBackgroundColor and return this along with the header data
because it's useful (in particular, the AS3 flag).
2021-05-23 23:02:38 -07:00
Mike Welsh
8960414436
swf: Use bitflags for FileAttributes
2021-05-22 15:53:02 -07:00
dependabot[bot]
185a4f5b8f
chore: Bump lzma-rs from 0.1.3 to 0.2.0
...
Bumps [lzma-rs](https://github.com/gendx/lzma-rs ) from 0.1.3 to 0.2.0.
- [Release notes](https://github.com/gendx/lzma-rs/releases )
- [Changelog](https://github.com/gendx/lzma-rs/blob/master/CHANGELOG.md )
- [Commits](https://github.com/gendx/lzma-rs/compare/v0.1.3...v0.2.0 )
Signed-off-by: dependabot[bot] <support@github.com>
2021-05-03 15:37:29 -07:00
Mike Welsh
0552d26551
core: Use Fixed8 and i16 for ColorTransform
...
Use the proper types for ColorTransform:
* Fixed8 (8.8) format for multiplicative component
* i16 format for additive component
This matches the behavior of Flash (for example, alpha only changes
in units of 1/256).
2021-04-19 15:47:52 -07:00
Mike Welsh
b9d84c0a82
chore: Appease clippy
...
Honor the branches-sharing-code lint.
2021-04-15 00:02:27 -07:00
relrelb
20d6fcc128
chore: Remove unnecessary type annotations
2021-04-10 18:39:16 -07:00
CUB3D
d5c2e5559b
avm2: Don't mutably borrow for pos()
2021-04-03 16:37:47 -06:00
Mads Marquart
66f5c856d7
swf: Make a few functions const
2021-02-27 17:04:42 -08:00
Mads Marquart
1455671cd7
swf: Change read_tag_with_code to take an already parsed tag
2021-02-27 17:04:42 -08:00
Mads Marquart
9243010cc0
swf: Clean up a few imports
2021-02-27 17:04:42 -08:00
Mads Marquart
24780003e7
swf: Deduplicate different read methods
2021-02-27 17:04:42 -08:00
Mike Welsh
3099914374
chore: Appease clippy
2021-02-27 16:10:46 -08:00
David Wendt
92bfc18e1d
swf: Make video-related tags publicly parsable
2021-02-16 19:03:48 -08:00
Mike Welsh
e5fb1f09e7
chore: Appease clippy
...
* #[derive(Collect)] should be before #[collect]
* Replace redunant `&buf[..]` with `buf`
* Changes most cases of UPPERCase to UpperCase
* Allow upper_case_acronym on most SWF types, as they are from
SWF spec/more annoying to change.
2021-02-12 06:32:42 -08:00
TÖRÖK Attila
80b0bd3b33
swf: Add VideoCodec::ScreenVideoV2 variant
2021-02-12 03:37:14 -08:00
Mike Welsh
47f0f980b8
core: Handle PlaceObject tags with malformed clip actions
...
Some SWFs in the wild have PlaceObject tags with ending ClipActions
that are 2 bytes instead of the required 4 bytes (see #2899 ).
Swallow the error in this case so that the tag can run.
2021-02-02 23:56:48 -08:00
Mike Welsh
02d99c3686
core: CSMTextSettings tag alters text hit testing
...
Normally, a hit test on static text will consider the text glyphs.
However, a CSMTextSettings tag can change the text to use the
"advanced rendering engine", which causes hit tests to only consider
the bounds. This is toggled by the "Anti-alias for readibility"
setting in the Flash IDE.
Wire up the CSMTextSettings tag and adjust hit test behavior based
on this flag.
Fixes #2987 .
2021-02-01 17:17:41 -08:00
relrelb
a2dcad683d
swf: Refactor read_tag_list
2021-01-29 13:05:37 -08:00
Mads Marquart
8eddde76a2
swf: Add safe and simpler string parsing
2021-01-28 14:39:35 -08:00
relrelb
19662503ca
swf: Convert ButtonActionCondition to bitflags
2021-01-23 11:59:24 -08:00
relrelb
7f4845d777
swf: Convert ButtonState to bitflags
2021-01-23 11:59:24 -08:00
relrelb
b05c6540e1
chore: Migrate from enumset to bitflags
2021-01-21 16:35:46 -08:00
Mike Welsh
2254589e71
swf: Don't error on focal gradients in DefineShape tags ( fix #2730 )
2021-01-21 15:47:04 -08:00
Mike Welsh
66256dd3be
swf: SwfStr no longer contains encoding
...
SwfStr is now an unsized slice analogous to `str` or `bstr`.
The desired encoding must be supplied when converting to String.
2021-01-20 15:02:31 -08:00
Mike Welsh
700c3c1767
chore: Appease clippy
2021-01-20 15:02:31 -08:00
Mike Welsh
303a2620a7
swf: Fix uncompressed length check
2021-01-20 15:02:31 -08:00
Mike Welsh
c063264d1c
swf: Use bitstream_io
2021-01-20 15:02:31 -08:00
Mike Welsh
61628a74fc
swf: Rename and organize some util methods
...
* SwfRead -> SwfReadExt
* SwfWrite -> SwfWriteExt
* read_swf_header -> decompress_swf
* read_swf -> parse_swf
2021-01-20 15:02:31 -08:00
Mike Welsh
1d9c11e145
swf: Add SwfStr type to handle encodings in SWF<6
2021-01-20 15:02:31 -08:00
Mike Welsh
19034b76e4
swf: Return slices in swf::Reader
...
Avoid copies by returning slices of the decompressed input.
2021-01-20 15:02:31 -08:00
Mike Welsh
bf94f5dbaa
swf: Split out bit i/o into SwfBitsReader/Writer types
2021-01-20 15:02:31 -08:00
Mike Welsh
da1e2801a2
chore: Appease clippy
2021-01-18 21:23:50 -08:00
MrCheeze
5915f2a841
core: Return uncompressed length for getBytesLoaded/Total
2021-01-09 14:29:19 -08:00
Mike Welsh
7cf217a911
swf: Use lzma-rs for LZMA SWFs ( fix #405 )
...
Pure Rust decoder that functions on desktop and wasm.
Enable lzma feature by default.
TODO: Switch to lzma-rs streaming API when stable on crates.io.
Currently decodes entire stream at once.
2020-12-17 16:40:21 -08:00
Mike Welsh
cec0ca74e1
chore: Fix swf doctests working directory
...
Rust 12-09 nightly changed the working dir of doctests to be the
workspace root instead of the subcrate root. This broke the
doctests for swf. Now do some setup to ensure the same working
directory on both stable and nightly.
cc https://github.com/rust-lang/cargo/pull/8954
2020-12-10 12:25:02 -08:00
Mike Welsh
53212f192c
chore: Appease clippy, squelch unnecessary_wraps lint
2020-11-24 18:59:42 -08:00
Mike Welsh
eb0b16790c
swf: Allow construct clip events in SWFv6
2020-11-22 19:34:29 -08:00
relrelb
083e2a2ff5
core: Implement getBytes{Loaded,Total} (simpler approach)
2020-10-23 13:13:00 -07:00
relrelb
14a71b69cc
core: Implement getBytes{Loaded,Total}
2020-10-23 13:13:00 -07:00
Mike Welsh
ed99a15dee
swf: Fill styles are byte aligned
...
A bitmap fill style ends in a matrix, but the overall type should
still be byte aligned. This could cause certain shapes with bitmap
line styles to be incorrectly parsed. Fixes #1192 .
2020-10-10 16:35:37 -07:00
Mike Welsh
5ea06b0ce6
swf: Use Option for more PlaceObject parameters
...
There is a difference between empty/default (change value to default)
and none (don't modify), so make this explicit for some PlaceObject
parameters where it wasn't.
Fixes #1104 .
2020-09-03 19:09:48 -07:00
David Wendt
95ca978034
f64 constants in ABC files are not stored in Flash mixed-endian.
2020-08-10 16:38:04 -07:00
Mike Welsh
4680b01f03
swf: Allow StyleChangeRecord in DefineShape v1
...
The spec says that StyleChangeRecord is only supported in
DefineShape2+, but SWFs exist with StyleChangeRecord in
DefineShape1 tags, and these play correctly in the Flash Player.
(see #929 HAGIMURA_EXTREME.swf).
2020-07-24 18:46:18 -07:00
Mike Welsh
08569ae979
core: Limit tag parsing to slice of tag data
2020-07-03 18:52:26 -07:00
Mike Welsh
12d9ba4583
chore: Fix swf clippy lint
2020-05-30 02:53:25 -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
Nathan Adams
eda862c719
swf: Merged core::Matrix into swf::Matrix
2020-05-20 14:54:41 +02:00
Mike Welsh
deef891c30
swf: Don't error if both libflate and flate2 features are enabled
...
Fixes errors I was getting from rust-analyzer checking with all
features enabled.
2020-05-13 00:16:50 -07: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
Mike Welsh
bc872cbf9c
swf: Clean up DefineButtonCxform tag
2019-12-20 19:20:25 -08:00
Mike Welsh
4026e22bbf
core: Handle DefineButtonSound SWF tag
...
This plays sounds whenever a button is hovered/clicked. Fixes
gun sounds in Pico's School.
2019-12-20 01:08:28 -08:00
Mike Welsh
4cb2cefc5b
swf: Switch depth to u16
2019-12-17 02:48:55 -08:00
Mike Welsh
24d8fa6298
swf: Add public method for read_export_assets
2019-12-16 19:32:34 -08:00
Mike Welsh
da13b36e47
swf: Use EnumSet for ClipEventFlag
2019-12-15 19:00:16 -08:00
Mike Welsh
2b90c61a69
core: Fix error message when LZMA feature is disabled
2019-10-12 00:09:10 -07:00
Mike Welsh
1ab5211bfe
swf: Fix compiling with lzma feature
2019-10-11 23:18:57 -07:00
Mike Welsh
160ec4d0c3
swf: > to >= in read_button_action
2019-10-11 17:57:23 -07:00
Mike Welsh
d9facdd89b
swf: Fix underflow in parsing corrupt DefineButton2 tags
...
401799_pre_Scene_1.swf has a DefineButton2 tag with an invalid
CondActionSize field (it should be at least 4). It's unclear how
Flash handles this. For now, avoid the underflow and return an
error instead.
Fixes #92 .
2019-10-11 17:55:38 -07:00
Mike Welsh
d95e31905e
swf: Handle missing null byte on metadata tag
2019-10-10 21:52:41 -07:00
Mike Welsh
ae0bf52a53
swf: Handle shortened DefineButtonSound tag
2019-10-10 21:52:41 -07:00
Mike Welsh
b0aa2ff952
tests: Use pretty printing on failure
2019-10-10 21:52:41 -07:00