Cauldron2D.Easel

Editing a cauldron_2d atlas as data: a picture is a palette, frames of palette keys, the frame in hand and a history to undo through, and every operation on it is a pure function.

Installation

def deps do
[
{:cauldron_2d_easel, "~> 0.1"}
]
end
easel = Cauldron2D.Easel.new(16, 16, palette: [{"R", "#c33"}, {"W", :white}])
easel = easel |> Cauldron2D.Easel.paint({3, 4}, "R") |> Cauldron2D.Easel.fill({0, 0}, "W")
easel = Cauldron2D.Easel.undo(easel)
:ok = Cauldron2D.Easel.save(easel, "priv/art/ship.pic")
Cauldron2D.Easel the document: paint, line, rect, fill, erase; flip, rotate, shift; the palette; frames at a rate; undo and redo; .pic and .png in and out
Cauldron2D.Easel.Project an art directory: its arts, opening one, saving one, the manifest (atlas.txt) with each art's glyph, colour and rate, and installing the directory as an atlas

The document is what a .pic file holds (Linocut.Pic): palette lines, a blank line, the frames separated by ---. That makes an edit a change to a key in a grid, a diff readable, and a recolouring a change to one palette line. A .png is the frames side by side; reading one gives every distinct colour a key.

The front ends are separate packages, each holding an easel and drawing it: cauldron_2d_easel_drafter in the terminal, cauldron_2d_easel_web in a browser with LiveView, and cauldron_2d_easel_kino for looking at art in Livebook.

License

MIT