mirror of https://github.com/fdehau/tui-rs
Cleanup API
parent
a36e20f217
commit
a5b632aeb0
@ -1,76 +0,0 @@
|
||||
use super::Shape;
|
||||
use style::Color;
|
||||
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use tui::style::Color;
|
||||
/// use tui::widgets::canvas::{Shape, Rectangle};
|
||||
///
|
||||
/// let rectangle = Rectangle { x: 4.0, y: 4.0, width: 4.0, height: 4.0, color: Color::Red };
|
||||
/// let points = rectangle.points().collect::<Vec<(f64, f64)>>();
|
||||
/// assert_eq!(&points, &[(4.0, 4.0), (5.0, 4.0), (6.0, 4.0), (7.0, 4.0), (4.0, 5.0), (7.0, 5.0),
|
||||
/// (4.0, 6.0), (7.0, 6.0), (4.0, 7.0), (5.0, 7.0), (6.0, 7.0), (7.0, 7.0)]);
|
||||
/// ```
|
||||
pub struct Rectangle {
|
||||
pub x: f64,
|
||||
pub y: f64,
|
||||
pub width: f64,
|
||||
pub height: f64,
|
||||
pub color: Color,
|
||||
}
|
||||
|
||||
pub struct RectangleIterator<'a> {
|
||||
rect: &'a Rectangle,
|
||||
x: f64,
|
||||
y: f64,
|
||||
right: f64,
|
||||
bottom: f64,
|
||||
}
|
||||
|
||||
impl<'a> Iterator for RectangleIterator<'a> {
|
||||
type Item = (f64, f64);
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.y < self.bottom {
|
||||
let pos = (self.x, self.y);
|
||||
let dx = if self.y == self.rect.y || self.y == self.bottom - 1.0 {
|
||||
1.0
|
||||
} else {
|
||||
self.rect.width - 1.0
|
||||
};
|
||||
self.x += dx;
|
||||
if self.x >= self.right {
|
||||
self.x = self.rect.x;
|
||||
self.y += 1.0;
|
||||
}
|
||||
Some(pos)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a Rectangle {
|
||||
type Item = (f64, f64);
|
||||
type IntoIter = RectangleIterator<'a>;
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
let right = self.x + self.width;
|
||||
let bottom = self.y + self.height;
|
||||
RectangleIterator {
|
||||
rect: self,
|
||||
x: self.x,
|
||||
y: self.y,
|
||||
right: right,
|
||||
bottom: bottom,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Shape<'a> for Rectangle {
|
||||
fn color(&self) -> Color {
|
||||
self.color
|
||||
}
|
||||
fn points(&'a self) -> Box<Iterator<Item = (f64, f64)> + 'a> {
|
||||
Box::new(self.into_iter())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue