Mike Welsh
c408f56e1a
web: Fix looping sounds not ending
2019-10-03 16:30:33 -07:00
Mike Welsh
c2ddb5a26f
web: Clamp stroke width to 1 pixel minimum
...
Many SWFs use "hairline" strokes which are 1 twip wide, but Flash
renders strokes with a minimum width of 1 pixel (20 twips).
SVG has no minimum, resulting in faint lines for the "hairline"
strokes. Clamp the minimum stroke width to 1 pixel to more closely
match the Flash Player.
2019-10-03 03:15:10 -07:00
Mike Welsh
c1f521cfba
web: Fix color transforms not working when canvas is reused
...
On the web demo, if you played two different SWFs, color transforms
would stop working because the color matrix SVG filter would be
created twice with the same ID. Now we properly remove the previous
filter.
2019-09-27 16:20:25 -07:00
Mike Welsh
fcfcf0407d
core: Fix stop sound events
2019-09-27 13:50:03 -07:00
Mike Welsh
9fc18fdb6a
web: Clean up web audio backend
...
Change naming to more closely match the desktop backend.
2019-09-27 13:50:03 -07:00
Mike Welsh
af163d9183
core: Support start, stop, event sounds in audio backend
...
Event sounds on the timeline in Flash have a "sync" setting,
which allows them to stop other sounds or only play if the
sound is not already playing.
2019-09-27 13:50:03 -07:00
Mike Welsh
547da84c9c
core: Add stop_all_sounds to audio backend
...
Implemented in web and desktop.
2019-09-19 00:47:05 -07:00
Mike Welsh
1f0e43c3bd
web: Support event sound looping and start/end points
2019-09-19 00:47:05 -07:00
Mike Welsh
e052a70a5a
desktop: Support looping and start/end points for event sounds
...
Renamed `AudioBackend::play_sound` to `start_sound`, and this
also takes a `SoundInfo` parameter with the event sound settings
from the SWF file.
Desktop now obeys the loop and start/end point settings. Envelopes
are still TODO.
2019-09-19 00:47:05 -07:00
Mike Welsh
9c8721c127
core: Drop rodio and use only cpal for audio backend
...
Drop the rodio dependency and directly use cpal for the audio
backend. Use the sample crate for audio mixing and resampling.
2019-09-19 00:47:05 -07:00
Mike Welsh
82c1116c42
chore: cargo fmt
2019-09-16 20:37:11 -07:00
David Wendt
58ce10ea67
Support form submission from Flash.
2019-09-16 20:04:30 -07:00
David Wendt
e952d20976
Open the window asked for, if specified
2019-09-16 20:04:30 -07:00
David Wendt
0f9db1744b
Add a backend for controlling the enclosing web browser.
2019-09-16 20:04:30 -07:00
Mike Welsh
dbbeccaacd
web: More accurate radial gradients on canvas
2019-09-12 01:02:46 -07:00
Mike Welsh
8fcee704c0
chore: cargo fmt
2019-09-09 20:42:08 -05:00
Mike Welsh
ce9a0a8ef6
web: Initial masking support
...
Also add web/src/utils.rs for some methods to ease management
of errors for wasm_bindgen.
2019-09-09 20:42:08 -05:00
Mike Welsh
28f0ce3c83
Mask work
2019-09-09 20:42:08 -05:00
Mike Welsh
6a5c5ab1df
chore: Add rustfmt.toml and rustfmt pass
2019-08-26 16:38:48 -07:00
Mike Welsh
3a795fff47
web: image-rendering: pixelated for nonsmoothed bitmaps
...
TODO: Firefox uses crisp-edges, Chrome uses pixelated. Clean this up
at some point.
Addresses #28 .
2019-08-24 10:59:56 -05:00
Mike Welsh
324a410cb1
render: Properly render premultiplied alpha bitmaps
2019-08-22 15:24:50 -07:00
Mike Welsh
022a0746ca
web: Add hack for Firefox additive alpha cxforms
...
This hack removes additive alpha components from color transforms
on Firefox. See #38 .
2019-08-22 14:13:37 -07:00
Mike Welsh
3933b00000
web: Use initial timestamp from requestAnimationFrame
...
Previously Performance.now() was used to grab the initial timestamp
for calculating dt in requestAnimationFrame. However, this doesn't
seem to be reliable and resulted in negative dt values in Chrome.
Now we just use an Option for the timestamp and initialize it to None.
The first animation callback will set the timestamp.
2019-08-22 13:28:06 -07:00
Mike Welsh
5fdc7168a7
web: Fix DefineBitsJPEG3 + alpha
...
DefineBitsJPEG3 tags also include a zlib-encoded alpha channel.
This wasn't working on web (it was trying to use the raw RBGA also
an image!) Now these are re-encoded to PNG.
Addresses #27 .
2019-08-20 16:23:46 -07:00
Mike Welsh
d021b02e90
web: Disable alpha on canvas
2019-08-19 23:33:12 -07:00
Mike Welsh
9cbeacd7b2
core: Transform mouse coordinates from viewport to stage
2019-08-19 22:27:38 -07:00
Mike Welsh
637588fae5
core: Store view matrix in player
...
Player is now in charge of scaling/cropping/translating the content
to fit the viewport size supplied by the frontend.
Added backend::render::Letterbox, which stores the margin sizes
for letter/pillarboxing.
2019-08-19 22:27:38 -07:00
Mike Welsh
f3f4fa6179
web: Add mouse up/down/move handlers
2019-08-19 22:27:38 -07:00
Mike Welsh
7005dd7621
web: Remove debug spew in web renderer
2019-08-19 17:29:08 -07:00
Mike Welsh
d0413da381
web: Set preserveAspectRatio to none on SVGs
...
Firefox would fudge with the dimensions of the SVG when we tried
to draw a scaled SVG to the canvas. Disabling preserveAspectRatio
prevents that. Fixes part of #24 .
2019-08-18 13:44:44 -07:00
Mike Welsh
fecb981b13
web: Fix color transforms in Firefox
...
Firefox required the color matrix filter to be inside and <svg>
tag. Also, set color-interpolation-filters to sRGB to ensure
color transforms match Flash's output.
2019-08-18 13:18:22 -07:00
Mike Welsh
4666d211a7
core: Add dyn to fix Rust 1.37 warnings
...
Omitting dyn on trait objects now emits a warning, so add missing
dyn where necessary.
2019-08-15 13:54:20 -07:00
Mike Welsh
746b9d8518
core: Support for DefineBitsJPEG3/4
...
TODO: Pull out all JPEG decoding into core, remove jpeg-decoder
dependency from backend crates.
2019-08-12 16:44:49 -07:00
Mike Welsh
a3998b657b
core: Remove invalid JPEG data from DefineBitsJPEG
...
DefineBitsJPEG tags can have some extraneous bytes inside the
stream. Splice these out when decoding the JPEG.
TODO: Docs say this should only happen for SWF versions before 8?
2019-08-12 15:45:40 -07:00
Mike Welsh
23db688e6f
core: Add DefineBitsLossless decoding function
...
Pulled out the code for decoding DefinieBitsLossless tags into
backend::render::define_bits_lossless_to_rgba. Switch to libflate
for zlib decoding.
2019-08-12 15:45:40 -07:00
Mike Welsh
1177388413
web: Dynamically resize and letterbox movie
2019-08-11 20:50:31 -07:00
Mike Welsh
2bfc8767d0
desktop: Add letterbox to viewport
...
Add getters to Player to allow access to the type Renderer.
Letter/pillarboxes added as window resized.
2019-08-11 18:07:02 -07:00
Mike Welsh
24fc403e06
core: Make player generic over backend
2019-08-09 22:34:15 -07:00
Mike Welsh
2accd5bdd4
core: Remove audio struct
2019-08-09 16:03:13 -07:00
Mike Welsh
3edc3c3d3e
web: Disable auto-play, add click-to-play
2019-08-09 14:50:20 -07:00
Mike Welsh
a2b95eb12a
Fix color transforms on web
...
The color matrix filter was not being applied to the vector art.
2019-08-08 15:59:32 -07:00
Mike Welsh
e64e306137
Rework audio to allow for streaming decoding
2019-08-08 15:59:32 -07:00
Mike Welsh
725cdae6c5
Begin AVM1 cleanup
2019-08-08 15:58:45 -07:00
Mike Welsh
ce5faefe1f
Work
2019-08-08 15:57:10 -07:00
Mike Welsh
fd8f58c6c2
Work
2019-07-10 21:04:59 -07:00
Mike Welsh
3263255e60
Add color filter SVG as child of canvas element
...
Avoid adding to body, which can affect document layout.
2019-06-25 15:50:22 -07:00
Mike Welsh
3cefeeba6a
Use twips for internal calculations
...
Switch from pixels to twips for internal calculations. swf crate
was updated to add a Twips wrapper-type. Ruffle will use this type
internally for transforms and shapes. This fixes some precision
errors in rendering (see heroes_of_cybertron.swf) and will match
what the Flash Player does internally more closely. (e.g.
DisplayObject x and y will be quantized to 1/20 pixel units). It
is up to the renderer to convert units from twip space to pixels
when rendering.
2019-05-17 13:40:56 -07:00
Mike Welsh
023406aa2b
web: Move requestAnimationFrame loop into Rust
2019-05-16 19:14:37 -07:00
Mike Welsh
4e3eecb016
core: Improve SVG strokes
...
Use stroke properties to apply stroke styles from the SWF.
2019-05-12 13:35:03 -04:00
Mike Welsh
79b3a7007d
core: Initial morph shape implementation
2019-05-12 12:55:48 -04:00
Mike Welsh
cc7ef196e9
web: Clean up Player interface
...
Use generational_arena indices for the JS-side Player handle.
2019-05-10 09:06:47 -07:00
Mike Welsh
efe3270ce0
web: Decode streams completely on preload (for now)
2019-05-09 12:43:26 -07:00
Mike Welsh
62ae3b0c46
Rename project
2019-05-08 09:46:19 -07:00
Mike Welsh
67b96119e3
Fix padding on 8-bit PNGs
2019-05-07 09:51:06 -07:00
Mike Welsh
2f2f4b0c0b
Quick palettized RGBA PNG support
2019-05-07 00:22:52 -07:00
Mike Welsh
ebbcc828ff
web: Skip SeekSamples in MP3 event sounds
2019-05-06 10:42:48 -07:00
Mike Welsh
e0acb7cb30
Fix crash when drawing an empty shape in Firefox
2019-05-06 10:37:25 -07:00
Mike Welsh
61ec4b2436
web: Add player.destroy() method
2019-05-06 03:52:27 -07:00
Mike Welsh
8262db3991
ADPCM decoder
2019-05-06 02:34:45 -07:00
Mike Welsh
e99b4a6fcf
web: Add support for uncompressed event sounds
2019-05-05 22:13:22 -07:00
Mike Welsh
cf2091477d
Support uncompressed event sounds
2019-05-05 22:04:35 -07:00
Mike Welsh
4a824069af
web: First pass of event sounds
2019-05-05 16:43:19 -07:00
Mike Welsh
1a4734896d
Event sounds and text on web
2019-05-05 15:55:27 -07:00
Mike Welsh
2480469c2c
First pass of static text
2019-05-04 11:45:11 -07:00
Mike Welsh
6e8082f01b
Reorganized backend structure
2019-05-02 19:56:17 -07:00
Mike Welsh
ae8df0486b
Use a handle for the JS<->Rust Player object
2019-05-02 17:17:02 -07:00
Mike Welsh
eb6c23d967
Work
2019-04-30 01:53:21 -07:00
Mike Welsh
663ad9f663
Work
2019-04-29 13:24:29 -07:00
Mike Welsh
ee64cc77bc
Reforactor
2019-04-27 23:08:59 -07:00
Mike Welsh
b7ac6dc2ce
Refactor
2019-04-27 18:15:43 -07:00