Skip to content

Commit 142403e

Browse files
authored
Merge pull request #1 from Sellsword9/patch-1
I added color customization
2 parents b12043a + 6401a5f commit 142403e

File tree

5 files changed

+34
-19
lines changed

5 files changed

+34
-19
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ uninstall:
99
rm /usr/local/bin/tenki
1010

1111
clean:
12-
rm -rf target
12+
cargo clean -q
1313

1414
all: build install clean

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Usage: tenki [OPTIONS]
3131
Options:
3232
--mode <MODE> [default: rain] [possible values: rain, snow]
3333
--fps <FPS> [default: 30] 1-60
34+
--color <COLOR> [default: white] [red, green, blue, yellow, cyan, magenta, white, black]
3435
-l, --level <LEVEL> effect level, The lower, the stronger [4-1000] [default: 50]
3536
-h, --help Print help
3637
-V, --version Print version

src/app.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crossterm::{
1010
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
1111
};
1212
use rand::{rngs::SmallRng, RngCore, SeedableRng};
13-
use ratatui::{backend::CrosstermBackend, layout::Rect, Terminal};
13+
use ratatui::{backend::CrosstermBackend, layout::Rect, style::Color, Terminal};
1414
use tinyvec::ArrayVec;
1515

1616
use crate::{tui::{Tui, Event}, ui::ui, cli::Args};
@@ -71,6 +71,7 @@ pub struct Timer {
7171
pub hours: u8,
7272
pub minutes: u8,
7373
pub seconds: u8,
74+
pub color: Color,
7475
}
7576

7677
impl Timer {
@@ -103,15 +104,18 @@ pub struct State {
103104
}
104105

105106
impl State {
106-
pub fn new(size: Rect, mode: Mode, threshold: u64) -> Self {
107+
pub fn new(size: Rect, mode: Mode, threshold: u64, timer_color: Color) -> Self {
107108
let (buf, buf_line) = Self::init_buf(size);
108109

109110
State {
110111
buf,
111112
buf_line,
112113
rng: SmallRng::from_entropy(),
113114
ticks: 0u8,
114-
timer: Timer::default(),
115+
timer: Timer {
116+
color: timer_color,
117+
..Default::default()
118+
},
115119
threshold,
116120
mode,
117121
wind: Wind::None,
@@ -324,7 +328,11 @@ impl App {
324328

325329
let backend = CrosstermBackend::new(stdout);
326330
let terminal = Terminal::new(backend)?;
327-
let state = State::new(terminal.size()?, args.mode, args.level as u64);
331+
let state = State::new(
332+
terminal.size()?,
333+
args.mode,
334+
args.level as u64,
335+
args.timer_color);
328336

329337
Ok(Self {
330338
terminal,

src/cli.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
use std::str::FromStr;
2+
13
use clap::Parser;
24
use clap_num::number_range;
3-
5+
use ratatui::style::Color;
46
use crate::app::Mode;
57

68
#[derive(Parser)]
@@ -15,6 +17,10 @@ pub struct Args {
1517
/// effect level, The lower, the stronger [4-1000]
1618
#[arg(short, long, value_parser = level_range, default_value_t = 50)]
1719
pub level: u16,
20+
21+
/// color of the effect. [red, green, blue, yellow, cyan, magenta, white, black]
22+
#[arg(long, value_parser = Color::from_str, default_value = "white")]
23+
pub timer_color: Color,
1824
}
1925

2026
fn fps_range(s: &str) -> Result<u8, String> {

src/widget/timer.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,21 @@ static ASCII_9: [u8; 25] = [
8787
pub struct Timer(pub crate::app::Timer);
8888

8989
impl Timer {
90-
fn render_colon(area: Rect, buf: &mut Buffer) {
90+
fn render_colon(area: Rect, color: Color, buf: &mut Buffer) {
9191
let left = area.left();
9292
let top = area.top();
9393

94-
buf.get_mut(left + 1, top + 1).set_char(COLON_CHAR).set_fg(Color::Reset);
95-
buf.get_mut(left + 1, top + 3).set_char(COLON_CHAR).set_fg(Color::Reset);
94+
buf.get_mut(left + 1, top + 1).set_char(COLON_CHAR).set_fg(color);
95+
buf.get_mut(left + 1, top + 3).set_char(COLON_CHAR).set_fg(color);
9696
}
9797

98-
fn render_decimal(d: u8, area: Rect, buf: &mut Buffer) {
98+
fn render_decimal(d: u8, area: Rect, color: Color, buf: &mut Buffer) {
9999
let layout = Layout::new(Direction::Horizontal, Constraint::from_lengths([5, 1, 5])).split(area);
100-
Self::render_number(d / 10, layout[0], buf);
101-
Self::render_number(d % 10, layout[2], buf);
100+
Self::render_number(d / 10, layout[0], buf, color);
101+
Self::render_number(d % 10, layout[2], buf, color);
102102
}
103103

104-
fn render_number(number: u8, area: Rect, buf: &mut Buffer) {
104+
fn render_number(number: u8, area: Rect, buf: &mut Buffer, color: Color) {
105105
let left = area.left();
106106
let top = area.top();
107107

@@ -130,7 +130,7 @@ impl Timer {
130130
if *c > 0 {
131131
buf .get_mut(left + x as u16, top + y as u16)
132132
.set_char(TIMER_CHAR)
133-
.set_fg(Color::Reset);
133+
.set_fg(color);
134134
}
135135
})
136136
});
@@ -160,11 +160,11 @@ impl Widget for Timer {
160160
)
161161
.split(center_area);
162162

163-
Self::render_decimal(self.0.hours, layout[0], buf);
164-
Self::render_colon(layout[1], buf);
165-
Self::render_decimal(self.0.minutes, layout[2], buf);
166-
Self::render_colon(layout[3], buf);
167-
Self::render_decimal(self.0.seconds, layout[4], buf);
163+
Self::render_decimal(self.0.hours, layout[0], self.0.color, buf);
164+
Self::render_colon(layout[1], self.0.color, buf);
165+
Self::render_decimal(self.0.minutes, layout[2], self.0.color, buf);
166+
Self::render_colon(layout[3], self.0.color, buf);
167+
Self::render_decimal(self.0.seconds, layout[4], self.0.color , buf);
168168
}
169169
}
170170

0 commit comments

Comments
 (0)