From 1fc84c7d1f775a65f5f2aee89f8e916ac63e93ed Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Fri, 19 Feb 2021 19:58:52 -0700 Subject: [PATCH] Can create canvas --- canvas/Cargo.lock | 39 +++++++++++++++++++++++++++++++++++++++ canvas/Cargo.toml | 10 ++++++++++ canvas/src/lib.rs | 36 ++++++++++++++++++++++++++++++++++++ color/src/lib.rs | 4 ++-- 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 canvas/Cargo.lock create mode 100644 canvas/Cargo.toml create mode 100644 canvas/src/lib.rs diff --git a/canvas/Cargo.lock b/canvas/Cargo.lock new file mode 100644 index 0000000..d06b056 --- /dev/null +++ b/canvas/Cargo.lock @@ -0,0 +1,39 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "canvas" +version = "0.1.0" +dependencies = [ + "color", +] + +[[package]] +name = "color" +version = "0.1.0" +dependencies = [ + "approx", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] diff --git a/canvas/Cargo.toml b/canvas/Cargo.toml new file mode 100644 index 0000000..23be4b2 --- /dev/null +++ b/canvas/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "canvas" +version = "0.1.0" +authors = ["Jon Janzen "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +color = { path = "../color" } diff --git a/canvas/src/lib.rs b/canvas/src/lib.rs new file mode 100644 index 0000000..e3d6ed5 --- /dev/null +++ b/canvas/src/lib.rs @@ -0,0 +1,36 @@ +use color::Color; + +struct Canvas { + width: usize, + height: usize, + pixels: Vec>, +} + +impl Canvas { + fn new(width: usize, height: usize) -> Canvas { + Canvas { + width, + height, + pixels : vec![vec![Color::new(0.0, 0.0, 0.0); width]; height], + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn create_canvas() { + let c = Canvas::new(10, 20); + assert_eq!(10, c.width); + assert_eq!(20, c.height); + + let black = Color::new(0.0, 0.0, 0.0); + for row in c.pixels { + for pixel in row { + assert_eq!(black, pixel); + } + } + } +} diff --git a/color/src/lib.rs b/color/src/lib.rs index 6d178aa..0ccb87d 100644 --- a/color/src/lib.rs +++ b/color/src/lib.rs @@ -3,8 +3,8 @@ extern crate approx; use std::ops; -#[derive(Debug)] -struct Color { +#[derive(Debug, Copy, Clone)] +pub struct Color { red: f32, green: f32, blue: f32,