Use new highlight colors for editor and pseudo messages
This commit is contained in:
parent
3fd08fd399
commit
01ee4b4ce8
3 changed files with 45 additions and 46 deletions
|
|
@ -23,17 +23,41 @@ pub fn style_placeholder() -> ContentStyle {
|
|||
ContentStyle::default().dark_grey()
|
||||
}
|
||||
|
||||
fn style_time(highlighted: bool) -> ContentStyle {
|
||||
if highlighted {
|
||||
ContentStyle::default().black().on_white()
|
||||
} else {
|
||||
ContentStyle::default().grey()
|
||||
}
|
||||
}
|
||||
|
||||
fn style_indent(highlighted: bool) -> ContentStyle {
|
||||
if highlighted {
|
||||
ContentStyle::default().black().on_white()
|
||||
} else {
|
||||
ContentStyle::default().dark_grey()
|
||||
}
|
||||
}
|
||||
|
||||
fn style_editor_highlight() -> ContentStyle {
|
||||
ContentStyle::default().black().on_cyan()
|
||||
}
|
||||
|
||||
fn style_pseudo_highlight() -> ContentStyle {
|
||||
ContentStyle::default().black().on_yellow()
|
||||
}
|
||||
|
||||
pub fn msg<M: Msg + ChatMsg>(highlighted: bool, indent: usize, msg: &M) -> BoxedWidget {
|
||||
let (nick, content) = msg.styled();
|
||||
HJoin::new(vec![
|
||||
Segment::new(
|
||||
Padding::new(time::widget(Some(msg.time()), highlighted))
|
||||
Padding::new(time::widget(Some(msg.time()), style_time(highlighted)))
|
||||
.stretch(true)
|
||||
.right(1),
|
||||
),
|
||||
Segment::new(Indent::new(indent, highlighted)),
|
||||
Segment::new(Indent::new(indent, style_indent(highlighted))),
|
||||
Segment::new(Layer::new(vec![
|
||||
Indent::new(1, false).into(),
|
||||
Indent::new(1, style_indent(false)).into(),
|
||||
Padding::new(Text::new(nick)).right(1).into(),
|
||||
])),
|
||||
// TODO Minimum content width
|
||||
|
|
@ -46,11 +70,11 @@ pub fn msg<M: Msg + ChatMsg>(highlighted: bool, indent: usize, msg: &M) -> Boxed
|
|||
pub fn msg_placeholder(highlighted: bool, indent: usize) -> BoxedWidget {
|
||||
HJoin::new(vec![
|
||||
Segment::new(
|
||||
Padding::new(time::widget(None, highlighted))
|
||||
Padding::new(time::widget(None, style_time(highlighted)))
|
||||
.stretch(true)
|
||||
.right(1),
|
||||
),
|
||||
Segment::new(Indent::new(indent, highlighted)),
|
||||
Segment::new(Indent::new(indent, style_indent(highlighted))),
|
||||
Segment::new(Text::new((PLACEHOLDER, style_placeholder()))),
|
||||
])
|
||||
.into()
|
||||
|
|
@ -68,13 +92,13 @@ pub fn editor<M: ChatMsg>(
|
|||
|
||||
let widget = HJoin::new(vec![
|
||||
Segment::new(
|
||||
Padding::new(time::widget(None, true))
|
||||
Padding::new(time::widget(None, style_editor_highlight()))
|
||||
.stretch(true)
|
||||
.right(1),
|
||||
),
|
||||
Segment::new(Indent::new(indent, true)),
|
||||
Segment::new(Indent::new(indent, style_editor_highlight())),
|
||||
Segment::new(Layer::new(vec![
|
||||
Indent::new(1, false).into(),
|
||||
Indent::new(1, style_indent(false)).into(),
|
||||
Padding::new(Text::new(nick)).right(1).into(),
|
||||
])),
|
||||
Segment::new(editor).priority(1).expanding(true),
|
||||
|
|
@ -89,13 +113,13 @@ pub fn pseudo<M: ChatMsg>(indent: usize, nick: &str, editor: &EditorState) -> Bo
|
|||
|
||||
HJoin::new(vec![
|
||||
Segment::new(
|
||||
Padding::new(time::widget(None, true))
|
||||
Padding::new(time::widget(None, style_pseudo_highlight()))
|
||||
.stretch(true)
|
||||
.right(1),
|
||||
),
|
||||
Segment::new(Indent::new(indent, true)),
|
||||
Segment::new(Indent::new(indent, style_pseudo_highlight())),
|
||||
Segment::new(Layer::new(vec![
|
||||
Indent::new(1, false).into(),
|
||||
Indent::new(1, style_indent(false)).into(),
|
||||
Padding::new(Text::new(nick)).right(1).into(),
|
||||
])),
|
||||
Segment::new(Text::new(content).wrap(true)).priority(1),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use async_trait::async_trait;
|
||||
use crossterm::style::{ContentStyle, Stylize};
|
||||
use crossterm::style::ContentStyle;
|
||||
use toss::frame::{Frame, Pos, Size};
|
||||
|
||||
use crate::ui::widgets::Widget;
|
||||
|
|
@ -7,22 +7,14 @@ use crate::ui::widgets::Widget;
|
|||
pub const INDENT: &str = "│ ";
|
||||
pub const INDENT_WIDTH: usize = 2;
|
||||
|
||||
pub fn style() -> ContentStyle {
|
||||
ContentStyle::default().dark_grey()
|
||||
}
|
||||
|
||||
pub fn style_inverted() -> ContentStyle {
|
||||
ContentStyle::default().black().on_white()
|
||||
}
|
||||
|
||||
pub struct Indent {
|
||||
level: usize,
|
||||
highlighted: bool,
|
||||
style: ContentStyle,
|
||||
}
|
||||
|
||||
impl Indent {
|
||||
pub fn new(level: usize, highlighted: bool) -> Self {
|
||||
Self { level, highlighted }
|
||||
pub fn new(level: usize, style: ContentStyle) -> Self {
|
||||
Self { level, style }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -35,14 +27,11 @@ impl Widget for Indent {
|
|||
async fn render(self: Box<Self>, frame: &mut Frame) {
|
||||
let size = frame.size();
|
||||
|
||||
let style = if self.highlighted {
|
||||
style_inverted()
|
||||
} else {
|
||||
style()
|
||||
};
|
||||
|
||||
for y in 0..size.height {
|
||||
frame.write(Pos::new(0, y.into()), (INDENT.repeat(self.level), style))
|
||||
frame.write(
|
||||
Pos::new(0, y.into()),
|
||||
(INDENT.repeat(self.level), self.style),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use crossterm::style::{ContentStyle, Stylize};
|
||||
use crossterm::style::ContentStyle;
|
||||
use time::format_description::FormatItem;
|
||||
use time::macros::format_description;
|
||||
use time::OffsetDateTime;
|
||||
|
|
@ -11,21 +11,7 @@ use crate::ui::widgets::BoxedWidget;
|
|||
const TIME_FORMAT: &[FormatItem<'_>] = format_description!("[year]-[month]-[day] [hour]:[minute]");
|
||||
const TIME_WIDTH: u16 = 16;
|
||||
|
||||
fn style() -> ContentStyle {
|
||||
ContentStyle::default().grey()
|
||||
}
|
||||
|
||||
fn style_inverted() -> ContentStyle {
|
||||
ContentStyle::default().black().on_white()
|
||||
}
|
||||
|
||||
pub fn widget(time: Option<OffsetDateTime>, highlighted: bool) -> BoxedWidget {
|
||||
let style = if highlighted {
|
||||
style_inverted()
|
||||
} else {
|
||||
style()
|
||||
};
|
||||
|
||||
pub fn widget(time: Option<OffsetDateTime>, style: ContentStyle) -> BoxedWidget {
|
||||
if let Some(time) = time {
|
||||
let text = time.format(TIME_FORMAT).expect("could not format time");
|
||||
Background::new(Text::new((text, style)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue