aboutsummaryrefslogtreecommitdiffstats
path: root/src/ratatui/widgets/canvas/rectangle.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ratatui/widgets/canvas/rectangle.rs')
-rw-r--r--src/ratatui/widgets/canvas/rectangle.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/ratatui/widgets/canvas/rectangle.rs b/src/ratatui/widgets/canvas/rectangle.rs
new file mode 100644
index 00000000..07ac9137
--- /dev/null
+++ b/src/ratatui/widgets/canvas/rectangle.rs
@@ -0,0 +1,52 @@
+use crate::ratatui::{
+ style::Color,
+ widgets::canvas::{Line, Painter, Shape},
+};
+
+/// Shape to draw a rectangle from a `Rect` with the given color
+#[derive(Debug, Clone)]
+pub struct Rectangle {
+ pub x: f64,
+ pub y: f64,
+ pub width: f64,
+ pub height: f64,
+ pub color: Color,
+}
+
+impl Shape for Rectangle {
+ fn draw(&self, painter: &mut Painter) {
+ let lines: [Line; 4] = [
+ Line {
+ x1: self.x,
+ y1: self.y,
+ x2: self.x,
+ y2: self.y + self.height,
+ color: self.color,
+ },
+ Line {
+ x1: self.x,
+ y1: self.y + self.height,
+ x2: self.x + self.width,
+ y2: self.y + self.height,
+ color: self.color,
+ },
+ Line {
+ x1: self.x + self.width,
+ y1: self.y,
+ x2: self.x + self.width,
+ y2: self.y + self.height,
+ color: self.color,
+ },
+ Line {
+ x1: self.x,
+ y1: self.y,
+ x2: self.x + self.width,
+ y2: self.y,
+ color: self.color,
+ },
+ ];
+ for line in &lines {
+ line.draw(painter);
+ }
+ }
+}