Noah Petherbridge
5893daba58
* Refactor texture caching in render.Engine: * New interface method: NewTexture(filename string, image.Image) * WASM immediately encodes the image to PNG and generates a JavaScript `Image()` object to load it with a data URI and keep it in memory. * SDL2 saves the bitmap to disk as it did before. * WASM: deprecate the sessionStorage for holding image data. Session storage methods panic if called. The image data is directly kept in Go memory as a js.Value holding an Image(). * Shared Memory workaround: the level.Chunk.ToBitmap() function is where chunk textures get cached, but it had no access to the render.Engine used in the game. The `pkg/shmem` package holds global pointers to common structures like the CurrentRenderEngine as a work-around. * Also shmem.Flash() so Doodle can make its d.Flash() function globally available, any sub-package can now flash text to the screen regardless of source code location. * JavaScript API for Doodads now has a global Flash() function available. * WASM: Handle window resize so Doodle can recompute its dimensions instead of scaling/shrinking the view.
40 lines
842 B
Go
40 lines
842 B
Go
package canvas
|
|
|
|
import (
|
|
"syscall/js"
|
|
)
|
|
|
|
// Canvas represents an HTML5 Canvas object.
|
|
type Canvas struct {
|
|
Value js.Value
|
|
ctx2d js.Value
|
|
}
|
|
|
|
// GetCanvas gets an HTML5 Canvas object from the DOM.
|
|
func GetCanvas(id string) Canvas {
|
|
canvasEl := js.Global().Get("document").Call("getElementById", id)
|
|
canvas2d := canvasEl.Call("getContext", "2d")
|
|
|
|
c := Canvas{
|
|
Value: canvasEl,
|
|
ctx2d: canvas2d,
|
|
}
|
|
|
|
canvasEl.Set("width", c.ClientW())
|
|
canvasEl.Set("height", c.ClientH())
|
|
|
|
return c
|
|
}
|
|
|
|
// ClientW returns the client width.
|
|
func (c Canvas) ClientW() int {
|
|
return js.Global().Get("window").Get("innerWidth").Int()
|
|
// return c.Value.Get("clientWidth").Int()
|
|
}
|
|
|
|
// ClientH returns the client height.
|
|
func (c Canvas) ClientH() int {
|
|
return js.Global().Get("window").Get("innerHeight").Int()
|
|
// return c.Value.Get("clientHeight").Int()
|
|
}
|