Fixing color schemes

This commit is contained in:
2026-01-30 20:15:43 +01:00
parent 44d1e9af24
commit eb3969b952
22 changed files with 2888 additions and 482 deletions

View File

@@ -7,7 +7,7 @@ use ratatui::Frame;
use crate::app::App;
use crate::model::{Word, WORDS};
use crate::state::DictFocus;
use crate::theme::{dict, search};
use crate::theme;
const CATEGORIES: &[&str] = &[
// Forth core
@@ -57,21 +57,23 @@ pub fn render(frame: &mut Frame, app: &App, area: Rect) {
fn render_header(frame: &mut Frame, area: Rect) {
use ratatui::widgets::Wrap;
let theme = theme::get();
let desc = "Forth uses a stack: values are pushed, functions (called words) consume and \
produce values. Read left to right: 3 4 + -> push 3, push 4, + pops both, \
pushes 7. This page lists all words with their signature ( inputs -- outputs ).";
let block = Block::default()
.borders(Borders::ALL)
.border_style(Style::new().fg(dict::BORDER_NORMAL))
.border_style(Style::new().fg(theme.dict.border_normal))
.title("Dictionary");
let para = Paragraph::new(desc)
.style(Style::new().fg(dict::HEADER_DESC))
.style(Style::new().fg(theme.dict.header_desc))
.wrap(Wrap { trim: false })
.block(block);
frame.render_widget(para, area);
}
fn render_categories(frame: &mut Frame, app: &App, area: Rect, dimmed: bool) {
let theme = theme::get();
let focused = app.ui.dict_focus == DictFocus::Categories && !dimmed;
let items: Vec<ListItem> = CATEGORIES
@@ -80,20 +82,20 @@ fn render_categories(frame: &mut Frame, app: &App, area: Rect, dimmed: bool) {
.map(|(i, name)| {
let is_selected = i == app.ui.dict_category;
let style = if dimmed {
Style::new().fg(dict::CATEGORY_DIMMED)
Style::new().fg(theme.dict.category_dimmed)
} else if is_selected && focused {
Style::new().fg(dict::CATEGORY_FOCUSED).add_modifier(Modifier::BOLD)
Style::new().fg(theme.dict.category_focused).add_modifier(Modifier::BOLD)
} else if is_selected {
Style::new().fg(dict::CATEGORY_SELECTED)
Style::new().fg(theme.dict.category_selected)
} else {
Style::new().fg(dict::CATEGORY_NORMAL)
Style::new().fg(theme.dict.category_normal)
};
let prefix = if is_selected && !dimmed { "> " } else { " " };
ListItem::new(format!("{prefix}{name}")).style(style)
})
.collect();
let border_color = if focused { dict::BORDER_FOCUSED } else { dict::BORDER_NORMAL };
let border_color = if focused { theme.dict.border_focused } else { theme.dict.border_normal };
let block = Block::default()
.borders(Borders::ALL)
.border_style(Style::new().fg(border_color))
@@ -103,6 +105,7 @@ fn render_categories(frame: &mut Frame, app: &App, area: Rect, dimmed: bool) {
}
fn render_words(frame: &mut Frame, app: &App, area: Rect, is_searching: bool) {
let theme = theme::get();
let focused = app.ui.dict_focus == DictFocus::Words;
// Filter words by search query or category
@@ -143,12 +146,12 @@ fn render_words(frame: &mut Frame, app: &App, area: Rect, is_searching: bool) {
let mut lines: Vec<RLine> = Vec::new();
for word in &words {
let name_bg = dict::WORD_BG;
let name_bg = theme.dict.word_bg;
let name_style = Style::new()
.fg(dict::WORD_NAME)
.fg(theme.dict.word_name)
.bg(name_bg)
.add_modifier(Modifier::BOLD);
let alias_style = Style::new().fg(dict::ALIAS).bg(name_bg);
let alias_style = Style::new().fg(theme.dict.alias).bg(name_bg);
let name_text = if word.aliases.is_empty() {
format!(" {}", word.name)
} else {
@@ -168,19 +171,19 @@ fn render_words(frame: &mut Frame, app: &App, area: Rect, is_searching: bool) {
]));
}
let stack_style = Style::new().fg(dict::STACK_SIG);
let stack_style = Style::new().fg(theme.dict.stack_sig);
lines.push(RLine::from(vec![
Span::raw(" "),
Span::styled(word.stack.to_string(), stack_style),
]));
let desc_style = Style::new().fg(dict::DESCRIPTION);
let desc_style = Style::new().fg(theme.dict.description);
lines.push(RLine::from(vec![
Span::raw(" "),
Span::styled(word.desc.to_string(), desc_style),
]));
let example_style = Style::new().fg(dict::EXAMPLE);
let example_style = Style::new().fg(theme.dict.example);
lines.push(RLine::from(vec![
Span::raw(" "),
Span::styled(format!("e.g. {}", word.example), example_style),
@@ -206,7 +209,7 @@ fn render_words(frame: &mut Frame, app: &App, area: Rect, is_searching: bool) {
let category = CATEGORIES[app.ui.dict_category];
format!("{category} ({} words)", words.len())
};
let border_color = if focused { dict::BORDER_FOCUSED } else { dict::BORDER_NORMAL };
let border_color = if focused { theme.dict.border_focused } else { theme.dict.border_normal };
let block = Block::default()
.borders(Borders::ALL)
.border_style(Style::new().fg(border_color))
@@ -216,10 +219,11 @@ fn render_words(frame: &mut Frame, app: &App, area: Rect, is_searching: bool) {
}
fn render_search_bar(frame: &mut Frame, app: &App, area: Rect) {
let theme = theme::get();
let style = if app.ui.dict_search_active {
Style::new().fg(search::ACTIVE)
Style::new().fg(theme.search.active)
} else {
Style::new().fg(search::INACTIVE)
Style::new().fg(theme.search.inactive)
};
let cursor = if app.ui.dict_search_active { "_" } else { "" };
let text = format!(" /{}{}", app.ui.dict_search_query, cursor);