1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
#![deny(missing_docs)] //! This crate is designed to make it easy to build interactive computer art //! with just a pixel buffer. For inspiration, consider looking at //! <https://shadertoy.com> and <http://www.iquilezles.org/www/index.htm>, //! there are a lot of cool art pieces to see and explanations of fun techniques! //! //! # Usage //! //! To make a piece of art, you create and configure a [`Canvas`] object, and //! then you ask it to [`render`] with your code. The canvas will do state //! management and hand you an image to modify. Whatever modifications you make //! to the image will be displayed on the screen. //! //! [`Canvas`]: struct.Canvas.html //! [`render`]: struct.Canvas.html#method.render //! //! # Example //! //! ```rust,no_run //! use pixel_canvas::{Canvas, Color, input::MouseState}; //! //! fn main() { //! // Configure the window that you want to draw in. You can add an event //! // handler to build interactive art. Input handlers for common use are //! // provided. //! let canvas = Canvas::new(512, 512) //! .title("Tile") //! .state(MouseState::new()) //! .input(MouseState::handle_input); //! // The canvas will render for you at up to 60fps. //! canvas.render(|mouse, image| { //! // Modify the `image` based on your state. //! let width = image.width() as usize; //! for (y, row) in image.chunks_mut(width).enumerate() { //! for (x, pixel) in row.iter_mut().enumerate() { //! let dx = x as i32 - mouse.x; //! let dy = y as i32 - mouse.y; //! let dist = dx * dx + dy * dy; //! *pixel = Color { //! r: if dist < 128 * 128 { dy as u8 } else { 0 }, //! g: if dist < 128 * 128 { dx as u8 } else { 0 }, //! b: (x * y) as u8, //! } //! } //! } //! }); //! } //! ``` pub mod canvas; pub mod color; pub mod image; pub mod input; pub mod math; pub mod prelude; pub mod vector; #[doc(inline)] pub use prelude::*;