ClockWidget (#10)
This commit is contained in:
@@ -2,12 +2,15 @@ use ratatui::{
|
||||
buffer::Buffer,
|
||||
crossterm::event::KeyCode,
|
||||
layout::{Constraint, Layout, Rect},
|
||||
widgets::{Paragraph, StatefulWidget, Widget},
|
||||
text::Line,
|
||||
widgets::{StatefulWidget, Widget},
|
||||
};
|
||||
use std::cmp::max;
|
||||
|
||||
use crate::{
|
||||
clock::{self, Clock},
|
||||
clock::{self, Clock, ClockWidget},
|
||||
events::{Event, EventHandler},
|
||||
utils::center,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -41,14 +44,21 @@ impl EventHandler for Countdown {
|
||||
|
||||
pub struct CountdownWidget;
|
||||
|
||||
impl StatefulWidget for &CountdownWidget {
|
||||
impl StatefulWidget for CountdownWidget {
|
||||
type State = Countdown;
|
||||
fn render(self, area: Rect, buf: &mut Buffer, state: &mut Self::State) {
|
||||
let h = Paragraph::new(state.headline.clone()).centered();
|
||||
let c = Paragraph::new(format!("{}", state.clock)).centered();
|
||||
let [v1, v2] = Layout::vertical([Constraint::Length(1), Constraint::Length(1)]).areas(area);
|
||||
let clock = ClockWidget::new();
|
||||
let headline = Line::raw(state.headline.clone());
|
||||
|
||||
h.render(v1, buf);
|
||||
c.render(v2, buf);
|
||||
let area = center(
|
||||
area,
|
||||
Constraint::Length(max(clock.get_width(), headline.width() as u16)),
|
||||
Constraint::Length(clock.get_height() + 2),
|
||||
);
|
||||
let [v1, _, v2] =
|
||||
Layout::vertical(Constraint::from_lengths([clock.get_height(), 1, 1])).areas(area);
|
||||
|
||||
clock.render(v1, buf, &mut state.clock);
|
||||
headline.centered().render(v2, buf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
use ratatui::{
|
||||
buffer::Buffer,
|
||||
layout::Rect,
|
||||
widgets::{Paragraph, Widget},
|
||||
layout::{Constraint, Layout, Rect},
|
||||
style::Stylize,
|
||||
text::Line,
|
||||
widgets::Widget,
|
||||
};
|
||||
|
||||
use crate::utils::center;
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq)]
|
||||
pub struct Pomodoro {
|
||||
headline: String,
|
||||
@@ -17,7 +21,17 @@ impl Pomodoro {
|
||||
|
||||
impl Widget for Pomodoro {
|
||||
fn render(self, area: Rect, buf: &mut Buffer) {
|
||||
let h = Paragraph::new(self.headline).centered();
|
||||
h.render(area, buf);
|
||||
let headline = Line::raw(self.headline.clone());
|
||||
|
||||
let area = center(
|
||||
area,
|
||||
Constraint::Length(headline.width() as u16),
|
||||
Constraint::Length(3),
|
||||
);
|
||||
|
||||
let [v1, _, v2] = Layout::vertical(Constraint::from_lengths([1, 1, 1])).areas(area);
|
||||
|
||||
headline.render(v2, buf);
|
||||
Line::raw("SOON").centered().italic().render(v1, buf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
use crate::{
|
||||
clock::{self, Clock, ClockWidget},
|
||||
events::{Event, EventHandler},
|
||||
utils::center,
|
||||
};
|
||||
use ratatui::{
|
||||
buffer::Buffer,
|
||||
crossterm::event::KeyCode,
|
||||
layout::{Constraint, Layout, Rect},
|
||||
widgets::{Paragraph, StatefulWidget, Widget},
|
||||
};
|
||||
|
||||
use crate::{
|
||||
clock::{self, Clock},
|
||||
events::{Event, EventHandler},
|
||||
text::Line,
|
||||
widgets::{StatefulWidget, Widget},
|
||||
};
|
||||
use std::cmp::max;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Timer {
|
||||
@@ -41,14 +43,21 @@ impl EventHandler for Timer {
|
||||
|
||||
pub struct TimerWidget;
|
||||
|
||||
impl StatefulWidget for TimerWidget {
|
||||
impl StatefulWidget for &TimerWidget {
|
||||
type State = Timer;
|
||||
fn render(self, area: Rect, buf: &mut Buffer, state: &mut Self::State) {
|
||||
let h = Paragraph::new(state.headline.clone()).centered();
|
||||
let c = Paragraph::new(format!("{}", state.clock)).centered();
|
||||
let [v1, v2] = Layout::vertical([Constraint::Length(1), Constraint::Length(1)]).areas(area);
|
||||
let clock = ClockWidget::new();
|
||||
let headline = Line::raw(state.headline.clone());
|
||||
|
||||
h.render(v1, buf);
|
||||
c.render(v2, buf)
|
||||
let area = center(
|
||||
area,
|
||||
Constraint::Length(max(clock.get_width(), headline.width() as u16)),
|
||||
Constraint::Length(clock.get_height() + 2),
|
||||
);
|
||||
let [v1, _, v2] =
|
||||
Layout::vertical(Constraint::from_lengths([clock.get_height(), 1, 1])).areas(area);
|
||||
|
||||
clock.render(v1, buf, &mut state.clock);
|
||||
headline.centered().render(v2, buf);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user