Paint
Make drawings, animations, and games with Gleam!
Paint is a tiny embedded domain specific language (inspired by Gloss). Make pictures out of basic shapes then style, transform, and combine them using the provided functions.
import paint
fn main() {
let my_picture = paint.combine([
paint.circle(50.0),
paint.circle(30.0) |> paint.fill(paint.colour_rgb(0, 200, 200)),
paint.rectangle(100.0, 50.0) |> paint.rotate(angle_deg(30.0)),
paint.text("Hello world", 20) |> paint.translate_y(-65.0),
])
paint.display_on_canvas(fn(_canvas_config) { my_picture }, "#canvas_id")
}
Want to learn more? Read the docs or browse the visual examples.
Currently, there is only a HTML canvas backend for displaying the pictures. Hopefully, I will have time to add other backends in the future (such as SVG). Feel free to contribute!
Logo
Lucy is borrowed from the Gleam branding page and the brush is made by Delapouite (game icons).
Changelog
The API is considered unstable until a 1.*.*
release is published.
Changes between versions can be found in the file CHANGELOG.md
.
TODOs
- I’m not super happy with the API for the transformations. (Especially that scale affects the stroke width). Would be fun to investigate an API more similar to Haskell diagrams and Diagrammer.
- Replace the color functions with gleam-community/colour
- Support (bitmap) images
- Split the library into multiple files (would make integration with other libraries like Lustre more convenient).
-
Allowing arbitrary css selectors instead of requiring ids in
interact_...
anddisplay_...
-
Improve input handling for
interact_on_canvas
- Add another backend?