summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/interactive/widgets/entries.rs77
-rw-r--r--src/interactive/widgets/footer.rs7
-rw-r--r--src/interactive/widgets/header.rs7
-rw-r--r--src/interactive/widgets/main.rs14
-rw-r--r--src/interactive/widgets/mark.rs38
-rw-r--r--src/interactive/widgets/mod.rs12
6 files changed, 64 insertions, 91 deletions
diff --git a/src/interactive/widgets/entries.rs b/src/interactive/widgets/entries.rs
index ed2c001..b4274f2 100644
--- a/src/interactive/widgets/entries.rs
+++ b/src/interactive/widgets/entries.rs
@@ -1,7 +1,7 @@
use crate::interactive::{
path_of,
widgets::{
- EntryMarkMap, COLOR_BYTESIZE_SELECTED, COLOR_MARKED, COLOR_MARKED_DARK, COLOR_MARKED_DARKER,
+ get_name_color, EntryMarkMap,
},
DisplayOptions, EntryDataBundle,
};
@@ -11,7 +11,7 @@ use std::{borrow::Borrow, path::Path};
use tui::{
buffer::Buffer,
layout::Rect,
- style::{Color, Style},
+ style::{Color, Style, Modifier},
widgets::{Block, Borders, Text},
};
use tui_react::{fill_background_to_right, List, ListProps};
@@ -97,28 +97,18 @@ impl Entries {
is_dir,
exists,
}| {
- let (is_selected, style) = match selected {
- Some(idx) if *idx == *node_idx => (
- true,
- Style {
- fg: Color::Black,
- bg: if *is_focussed {
- Color::White
- } else {
- Color::DarkGray
- },
- ..Default::default()
- },
- ),
- _ => (
- false,
- Style {
- fg: Color::White,
- bg: Color::Reset,
- ..Default::default()
- },
- ),
+ let mut style = Style::default();
+ let is_selected = if let Some(idx) = selected {
+ *idx == *node_idx
+ } else {
+ false
};
+ if is_selected {
+ style.modifier.insert(Modifier::REVERSED);
+ }
+ if *is_focussed & is_selected {
+ style.modifier.insert(Modifier::BOLD);
+ }
let bytes = Text::Styled(
format!(
@@ -128,11 +118,7 @@ impl Entries {
)
.into(),
Style {
- fg: match (is_selected, *is_focussed) {
- (true, true) => COLOR_BYTESIZE_SELECTED,
- (true, false) => Color::Black,
- _ => Color::Green,
- },
+ fg: Color::Green,
..style
},
);
@@ -142,14 +128,7 @@ impl Entries {
display.byte_vis.display(w.size as f32 / total as f32)
)
.into(),
- Style {
- fg: match (is_selected, *is_focussed) {
- (true, true) => COLOR_MARKED_DARK,
- (true, false) => COLOR_MARKED_DARKER,
- _ => style.fg,
- },
- ..style
- },
+ style,
);
let name = Text::Styled(
@@ -162,24 +141,16 @@ impl Entries {
area.width,
)
.into(),
- Style {
- fg: match (
- !is_dir,
- exists,
- marked.map(|m| m.contains_key(node_idx)).unwrap_or(false),
- ) {
- (true, true, false) if !is_selected => Color::DarkGray,
- (true, true, false) => style.fg,
- (false, true, false) => style.fg,
-
- (true, true, true) => COLOR_MARKED_DARK,
- (false, true, true) => COLOR_MARKED,
-
+ {
+ let is_marked = marked.map(|m| m.contains_key(node_idx)).unwrap_or(false);
+ let fg = if !exists {
// non-existing - always red!
- (_, false, _) => Color::Red,
- },
- ..style
- },
+ Color::Red
+ } else {
+ get_name_color(style.fg, !is_dir, is_marked)
+ };
+ Style { fg, ..style }
+ }
);
vec![bytes, percentage, name]
},
diff --git a/src/interactive/widgets/footer.rs b/src/interactive/widgets/footer.rs
index 03b2d3a..16c4965 100644
--- a/src/interactive/widgets/footer.rs
+++ b/src/interactive/widgets/footer.rs
@@ -26,8 +26,6 @@ impl Footer {
message,
} = props.borrow();
- let bg_color = Color::White;
- let text_color = Color::Black;
let lines = [
Text::Raw(
format!(
@@ -46,7 +44,7 @@ impl Footer {
m.into(),
Style {
fg: Color::Red,
- bg: bg_color,
+ bg: Color::Reset,
modifier: Modifier::BOLD | Modifier::RAPID_BLINK,
},
)
@@ -54,8 +52,7 @@ impl Footer {
];
Paragraph::new(lines.iter().filter_map(|x| x.as_ref()))
.style(Style {
- fg: text_color,
- bg: bg_color,
+ modifier: Modifier::REVERSED,
..Default::default()
})
.draw(area, buf);
diff --git a/src/interactive/widgets/header.rs b/src/interactive/widgets/header.rs
index 2cacb02..fca6f8f 100644
--- a/src/interactive/widgets/header.rs
+++ b/src/interactive/widgets/header.rs
@@ -9,12 +9,12 @@ pub struct Header;
impl Header {
pub fn render(&self, bg_color: Color, area: Rect, buf: &mut Buffer) {
- let text_color = Color::Black;
- let standard = Style {
- fg: text_color,
+ let standard = Style{
+ fg: Color::Black,
bg: bg_color,
..Default::default()
};
+ assert_ne!(standard.bg, standard.fg);
let modified = |text: &'static str, modifier| {
Text::Styled(
text.into(),
@@ -43,7 +43,6 @@ impl Header {
];
Paragraph::new(lines.iter())
.style(Style {
- fg: text_color,
bg: bg_color,
..Default::default()
})
diff --git a/src/interactive/widgets/main.rs b/src/interactive/widgets/main.rs
index c1c16ad..abd13dd 100644
--- a/src/interactive/widgets/main.rs
+++ b/src/interactive/widgets/main.rs
@@ -1,7 +1,7 @@
use crate::interactive::{
widgets::{
Entries, EntriesProps, Footer, FooterProps, Header, HelpPane, HelpPaneProps, MarkPane,
- MarkPaneProps, COLOR_MARKED_LIGHT,
+ MarkPaneProps, COLOR_MARKED,
},
AppState, DisplayOptions, FocussedPane,
};
@@ -54,14 +54,14 @@ impl MainWindow {
bg: Color::Reset,
modifier: Modifier::empty(),
};
- let white = Style {
- fg: Color::White,
+ let bold = Style {
+ modifier: Modifier::BOLD,
..grey
};
match state.focussed {
- Main => (white, grey, grey),
- Help => (grey, white, grey),
- Mark => (grey, grey, white),
+ Main => (bold, grey, grey),
+ Help => (grey, bold, grey),
+ Mark => (grey, grey, bold),
}
};
@@ -76,7 +76,7 @@ impl MainWindow {
let marked = self.mark_pane.as_ref().map(|p| p.marked());
let bg_color = match (marked.map_or(true, |m| m.is_empty()), state.focussed) {
(false, FocussedPane::Mark) => Color::LightRed,
- (false, _) => COLOR_MARKED_LIGHT,
+ (false, _) => COLOR_MARKED,
(_, _) => Color::White,
};
Header.render(bg_color, header_area, buf);
diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs
index cbd34a6..49a4128 100644
--- a/src/interactive/widgets/mark.rs
+++ b/src/interactive/widgets/mark.rs
@@ -1,6 +1,6 @@
use crate::interactive::{
fit_string_graphemes_with_ellipsis, path_of,
- widgets::{COLOR_BYTESIZE_SELECTED, COLOR_MARKED_LIGHT},
+ widgets::get_name_color,
CursorDirection,
};
use dua::{
@@ -219,17 +219,21 @@ impl MarkPane {
format.display(marked.iter().map(|(_k, v)| v.size).sum::<u64>())
);
let selected = self.selected;
+ let has_focus = self.has_focus;
let entries = marked.values().sorted_by_key(|v| &v.index).enumerate().map(
|(idx, v): (usize, &EntryMark)| {
- let (default_style, is_selected) = match selected {
- Some(selected) if idx == selected => (
+ let default_style = match selected {
+ Some(selected) if idx == selected => {
+ let mut modifier = Modifier::REVERSED;
+ if has_focus {
+ modifier.insert(Modifier::BOLD);
+ }
Style {
- bg: Color::White,
+ modifier,
..Default::default()
- },
- true,
- ),
- _ => (Style::default(), false),
+ }
+ },
+ _ => Style::default(),
};
let (path, path_len) = {
let path = format!(
@@ -254,14 +258,11 @@ impl MarkPane {
_ => (path, num_path_graphemes),
}
};
+ let fg_path = get_name_color(Color::Reset, false, true); // TODO: determine whether directory
let path = Text::Styled(
path.into(),
Style {
- fg: if is_selected {
- Color::Black
- } else {
- COLOR_MARKED_LIGHT
- },
+ fg: fg_path,
..default_style
},
);
@@ -273,11 +274,7 @@ impl MarkPane {
)
.into(),
Style {
- fg: if is_selected {
- COLOR_BYTESIZE_SELECTED
- } else {
- Color::Green
- },
+ fg: Color::Green,
..default_style
},
);
@@ -290,7 +287,10 @@ impl MarkPane {
.saturating_sub(format.total_width())
)
.into(),
- default_style,
+ Style {
+ fg: fg_path,
+ ..default_style
+ },
);
vec![path, spacer, bytes]
},
diff --git a/src/interactive/widgets/mod.rs b/src/interactive/widgets/mod.rs
index ee6f34c..b9c72f5 100644
--- a/src/interactive/widgets/mod.rs
+++ b/src/interactive/widgets/mod.rs
@@ -14,8 +14,14 @@ pub use mark::*;
use tui::style::Color;
-pub const COLOR_BYTESIZE_SELECTED: Color = Color::DarkGray;
pub const COLOR_MARKED: Color = Color::Yellow;
-pub const COLOR_MARKED_LIGHT: Color = Color::LightYellow;
pub const COLOR_MARKED_DARK: Color = Color::Rgb(176, 126, 0);
-pub const COLOR_MARKED_DARKER: Color = Color::Rgb(106, 66, 0);
+
+fn get_name_color(fg: Color, is_file: bool, is_marked: bool) -> Color {
+ match (is_file, is_marked) {
+ (true, false) => Color::DarkGray,
+ (true, true) => COLOR_MARKED_DARK,
+ (false, true) => COLOR_MARKED,
+ _ => fg,
+ }
+}