# WebAssembly Port

## Build and Test

Change to the wasm/ folder and type `make` to build `doodle.wasm`

To test it with a local Go server, cd to the wasm/ folder and run
`go run server.go` and visit http://localhost:8080/

Copy the `fonts` and `assets` folders from the project root to the
wasm/ directory so they're available over HTTP.

## wasm_exec.js

To update the wasm_exec.js to match your version of Go:

```bash
# Fedora: install golang-misc
sudo dnf install golang-misc

# Copy the wasm_exec.js
cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./
```

## Font Support

Fonts are implemented as CSS embedded fonts configured in
`wasm/index.html`

The font family name should match the filename, sans .ttf extension,
for example "DejaVuSans-Bold". Doodle's internal logic converts a
FontFilename string like "./fonts/DejaVuSans.ttf" into the base name
to use as the font family. It also has fallbacks for sans-serif and
serif in case of any problems.

## Known Bugs and Limitations

* git.kirsle.net/go/log
  * The detection of an interactive terminal is broken in WASM.
  * `terminal.IsTerminal(int(os.Stdout.Fd()))`
  * As a workaround, comment it out and hardcode to `false`
* Userdir
  * For WASM we'll want to use localStorage to store user drawings
    instead of the userdir.
* Wallpaper support
  * WASM can't use os.Open to read the wallpaper image, so will need
    another method to load the image.
  * Texture caching support isn't implemented yet to hold the four
    corner textures of a wallpaper.
  * As a workaround, added a `wallpaper.ready` boolean and relevant
    functions exit early for WASM so wallpapers don't render at all.
