add internal state field

This commit is contained in:
histausse 2022-02-13 00:15:13 +01:00
parent 58e5efa58d
commit 8ebc270fe7
Signed by: histausse
GPG key ID: 67486F107F62E9E9
3 changed files with 28 additions and 8 deletions

View file

@ -1,11 +1,21 @@
use crate::shapes::Shape; use crate::shapes::*;
/// An iterator containing the shapes to display /// An iterator containing the shapes to display
pub struct CircleShapes; pub struct CircleShapes {
modulo: u32,
factor: u32,
position: u32,
circle: Circle,
}
impl CircleShapes { impl CircleShapes {
pub fn new() -> CircleShapes { pub fn new(modulo: u32, factor: u32, circle: Circle) -> CircleShapes {
CircleShapes {} CircleShapes {
modulo,
factor,
position: 0,
circle,
}
} }
} }
@ -13,6 +23,11 @@ impl Iterator for CircleShapes {
type Item = Shape; type Item = Shape;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
None if self.position == 0 {
self.position += 1;
Some(Shape::Circle(self.circle))
} else {
None
}
} }
} }

View file

@ -26,17 +26,19 @@ pub fn start() {
context.begin_path(); context.begin_path();
let iter = CircleShapes::new(); let iter = CircleShapes::new(10, 2, Circle {center: Point {x: 75.0, y: 75.0}, radius: 70.0});
for shape in iter { for shape in iter {
drawing::draw_shape(shape, &context); drawing::draw_shape(shape, &context);
} }
/*
drawing::draw_circle(Circle {center: Point {x: 75.0, y: 75.0}, radius: 70.0}, &context); drawing::draw_circle(Circle {center: Point {x: 75.0, y: 75.0}, radius: 70.0}, &context);
drawing::draw_circle(Circle {center: Point {x: 75.0, y: 75.0}, radius: 35.0}, &context); drawing::draw_circle(Circle {center: Point {x: 75.0, y: 75.0}, radius: 35.0}, &context);
drawing::draw_circle(Circle {center: Point {x: 60.0, y: 65.0}, radius: 5.0}, &context); drawing::draw_circle(Circle {center: Point {x: 60.0, y: 65.0}, radius: 5.0}, &context);
drawing::draw_line(Line {p1: Point {x: 0.0, y: 0.0}, p2: Point {x: 150.0, y: 150.0}}, &context); drawing::draw_line(Line {p1: Point {x: 0.0, y: 0.0}, p2: Point {x: 150.0, y: 150.0}}, &context);
drawing::draw_line(Line {p1: Point {x: 0.0, y: 150.0}, p2: Point {x: 150.0, y: 0.0}}, &context); drawing::draw_line(Line {p1: Point {x: 0.0, y: 150.0}, p2: Point {x: 150.0, y: 0.0}}, &context);
*/
context.stroke(); context.stroke();
} }

View file

@ -1,13 +1,16 @@
#[derive(Copy, Clone)]
pub struct Point { pub struct Point {
pub x: f64, pub x: f64,
pub y: f64, pub y: f64,
} }
#[derive(Copy, Clone)]
pub struct Circle { pub struct Circle {
pub center: Point, pub center: Point,
pub radius: f64, pub radius: f64,
} }
#[derive(Copy, Clone)]
pub struct Line { pub struct Line {
pub p1: Point, pub p1: Point,
pub p2: Point, pub p2: Point,