Noah Petherbridge
12d34517e9
* Toolbar has icon buttons for the Pencil Tool, Line Tool, Rect Tool, Actor Tool and Link Tool. * Remove the tab buttons from the top of the Palette window. The palette tab is now toggled between Swatches and Doodads by the tool selected on the tool bar, instead of the tab buttons setting the tool. * Remove the "Link Doodads" button from the Doodad Palette. The Link Tool has its own dedicated toolbar button with the others.
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package sprites
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"image/png"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"git.kirsle.net/apps/doodle/lib/render"
|
|
"git.kirsle.net/apps/doodle/lib/ui"
|
|
"git.kirsle.net/apps/doodle/pkg/bindata"
|
|
"git.kirsle.net/apps/doodle/pkg/log"
|
|
)
|
|
|
|
// LoadImage loads a sprite as a ui.Image object. It checks Doodle's embedded
|
|
// bindata, then the filesystem before erroring out.
|
|
//
|
|
// NOTE: only .png images supported as of now. TODO
|
|
func LoadImage(e render.Engine, filename string) (*ui.Image, error) {
|
|
// Try the bindata first.
|
|
if data, err := bindata.Asset(filename); err == nil {
|
|
log.Debug("sprites.LoadImage: %s from bindata", filename)
|
|
|
|
img, err := png.Decode(bytes.NewBuffer(data))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tex, err := e.StoreTexture(filename, img)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return ui.ImageFromTexture(tex), nil
|
|
}
|
|
|
|
// Then try the file system.
|
|
if _, err := os.Stat(filename); !os.IsNotExist(err) {
|
|
log.Debug("sprites.LoadImage: %s from filesystem", filename)
|
|
|
|
data, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
img, err := png.Decode(bytes.NewBuffer(data))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tex, err := e.StoreTexture(filename, img)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return ui.ImageFromTexture(tex), nil
|
|
}
|
|
|
|
return nil, errors.New("no such sprite found")
|
|
}
|