use bevy::prelude::Component;
use image::DynamicImage;
use ratatui::widgets::Widget;
use ratatui::{prelude::*, widgets::WidgetRef};
use crate::widget_halfblocks::RatatuiCameraWidgetHalfblocks;
use crate::widget_luminance::RatatuiCameraWidgetLuminance;
use crate::widget_none::RatatuiCameraWidgetNone;
use crate::{RatatuiCameraEdgeDetection, RatatuiCameraStrategy};
#[derive(Component)]
pub struct RatatuiCameraWidget {
pub camera_image: DynamicImage,
pub sobel_image: Option<DynamicImage>,
pub strategy: RatatuiCameraStrategy,
pub edge_detection: Option<RatatuiCameraEdgeDetection>,
}
impl Widget for &RatatuiCameraWidget {
fn render(self, area: Rect, buf: &mut Buffer) {
match self.strategy {
RatatuiCameraStrategy::HalfBlocks => {
RatatuiCameraWidgetHalfblocks::new(&self.camera_image).render_ref(area, buf)
}
RatatuiCameraStrategy::Luminance(ref strategy_config) => {
RatatuiCameraWidgetLuminance::new(
&self.camera_image,
&self.sobel_image,
strategy_config,
&self.edge_detection,
)
.render_ref(area, buf);
}
RatatuiCameraStrategy::None => {
RatatuiCameraWidgetNone::new(
&self.camera_image,
&self.sobel_image,
&self.edge_detection,
)
.render_ref(area, buf);
}
}
}
}