diff options
Diffstat (limited to 'src/ratatui/widgets/canvas/map.rs')
| -rw-r--r-- | src/ratatui/widgets/canvas/map.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/ratatui/widgets/canvas/map.rs b/src/ratatui/widgets/canvas/map.rs new file mode 100644 index 00000000..d835dd31 --- /dev/null +++ b/src/ratatui/widgets/canvas/map.rs @@ -0,0 +1,48 @@ +use crate::ratatui::{ + style::Color, + widgets::canvas::{ + world::{WORLD_HIGH_RESOLUTION, WORLD_LOW_RESOLUTION}, + Painter, Shape, + }, +}; + +#[derive(Debug, Clone, Copy)] +pub enum MapResolution { + Low, + High, +} + +impl MapResolution { + fn data(self) -> &'static [(f64, f64)] { + match self { + MapResolution::Low => &WORLD_LOW_RESOLUTION, + MapResolution::High => &WORLD_HIGH_RESOLUTION, + } + } +} + +/// Shape to draw a world map with the given resolution and color +#[derive(Debug, Clone)] +pub struct Map { + pub resolution: MapResolution, + pub color: Color, +} + +impl Default for Map { + fn default() -> Map { + Map { + resolution: MapResolution::Low, + color: Color::Reset, + } + } +} + +impl Shape for Map { + fn draw(&self, painter: &mut Painter) { + for (x, y) in self.resolution.data() { + if let Some((x, y)) = painter.get_point(*x, *y) { + painter.paint(x, y, self.color); + } + } + } +} |
