use ratatui::prelude::*;
use throbber_widgets_tui::Throbber;
use crate::tui::global_throbber;
pub trait ThrobberInTitleExt: Sized {
fn render_with_throbber(self, f: &mut Frame, area: Rect, title_len: usize, throbber: Throbber);
fn render_buf_with_throbber(
&self,
buf: &mut Buffer,
area: Rect,
title_len: usize,
throbber: Throbber,
) where
Self: Clone;
}
impl<W: Widget> ThrobberInTitleExt for W {
fn render_with_throbber(self, f: &mut Frame, area: Rect, title_len: usize, throbber: Throbber) {
f.render_widget(self, area);
let throbber_x = area.x + title_len as u16 + 1;
let throbber_y = area.y;
if throbber_x < area.right().saturating_sub(1) {
let throbber_area = Rect::new(throbber_x, throbber_y, 1, 1);
let mut throbber_state = global_throbber::get_current_state();
f.render_stateful_widget(throbber, throbber_area, &mut throbber_state);
}
}
fn render_buf_with_throbber(
&self,
buf: &mut Buffer,
area: Rect,
title_len: usize,
throbber: Throbber,
) where
Self: Clone,
{
self.clone().render(area, buf);
let throbber_x = area.x + title_len as u16 + 1;
let throbber_y = area.y;
if throbber_x < area.right().saturating_sub(1) {
let throbber_area = Rect::new(throbber_x, throbber_y, 1, 1);
let mut throbber_state = global_throbber::get_current_state();
StatefulWidget::render(throbber, throbber_area, buf, &mut throbber_state);
}
}
}