aboutsummaryrefslogtreecommitdiffstats
path: root/src/message_view.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-04-11 20:08:05 +0100
committerLibravatar cel 🌸 <cel@bunny.garden>2025-04-11 20:08:05 +0100
commit14f6aaf18a3311fee63b11d0ec9c12ba76b70fa1 (patch)
treee81fd9cbc19ac637332d9472a83190a1ea9c85b4 /src/message_view.rs
parent70532f715f93164fef4313a1bb5064a467811408 (diff)
downloadmacaw-main.tar.gz
macaw-main.tar.bz2
macaw-main.zip
feat: better fonts and colorsHEADmain
Diffstat (limited to 'src/message_view.rs')
-rw-r--r--src/message_view.rs69
1 files changed, 59 insertions, 10 deletions
diff --git a/src/message_view.rs b/src/message_view.rs
index 8378164..f5319bd 100644
--- a/src/message_view.rs
+++ b/src/message_view.rs
@@ -1,12 +1,13 @@
use std::{path::PathBuf, time::Duration};
use chrono::{NaiveDate, NaiveDateTime, TimeDelta};
+use iced::color;
+use iced::widget::text_editor;
use iced::{
border::Radius,
- widget::{
- button, column, container, image, row, scrollable, text, text_editor, text_editor::Content,
- },
- Border, Color, Element,
+ font::{Style, Weight},
+ widget::{button, column, container, image, row, scrollable, text, text_editor::Content},
+ Border, Color, Element, Font,
Length::{Fill, Shrink},
Theme,
};
@@ -164,13 +165,26 @@ impl MessageView {
let text_editor = text_editor(&self.new_message)
.placeholder("new message")
.on_action(Message::MessageCompose)
- .wrapping(text::Wrapping::WordOrGlyph);
+ .wrapping(text::Wrapping::WordOrGlyph)
+ .style(|theme, status| text_editor::Style {
+ background: color!(0xdcdcdc).into(),
+ border: Border {
+ color: Color::BLACK,
+ width: 0.0,
+ radius: 0.into(),
+ },
+ icon: color!(0x00000000),
+ placeholder: color!(0xacacac),
+ value: color!(0x000000),
+ selection: color!(0xffce07),
+ });
let message_send_input = row![
text_editor,
- button(Icon::NewBubble24).on_press(Message::SendMessage(self.new_message.text()))
+ // button(Icon::NewBubble24).on_press(Message::SendMessage(self.new_message.text()))
]
.padding(8);
column![
+ self.header(),
scrollable(messages_view)
.height(Fill)
.width(Fill)
@@ -181,6 +195,38 @@ impl MessageView {
.into()
}
+ pub fn header(&self) -> Element<'_, Message> {
+ // TODO: contact stored here for name
+ let mut bold = Font::with_name("K2D");
+ bold.weight = Weight::Bold;
+ let mut sweet = Font::with_name("Diolce");
+ sweet.style = Style::Italic;
+ let mut name_and_jid = column![];
+ if let Some(nick) = &self.chat.user.nick {
+ name_and_jid = name_and_jid.push(text(nick).font(bold).size(20));
+ }
+ let jid = self.chat.user.jid.as_bare().to_string();
+ name_and_jid = name_and_jid.push(text(jid).font(sweet));
+ let mut header = row![];
+ if let Some(avatar) = &self.chat.user.avatar {
+ let mut path = self.file_root.join(avatar);
+ path.set_extension("jpg");
+ header = header.push(container(image(path).width(48).height(48)));
+ }
+ header = header.push(name_and_jid);
+ container(
+ container(header.spacing(8).padding(8))
+ .style(|theme: &Theme| {
+ container::Style::default()
+ .background(theme.extended_palette().background.strong.color)
+ })
+ .width(Fill),
+ )
+ .padding(8)
+ .width(Fill)
+ .into()
+ }
+
pub fn message<'a>(&'a self, message: &'a MacawMessage, major: bool) -> Element<'a, Message> {
let timestamp = message.timestamp.naive_local();
let timestamp = timestamp.time().format("%H:%M").to_string();
@@ -191,7 +237,9 @@ impl MessageView {
} else {
message.from.jid.as_bare().to_string()
};
- let mut header = row![text(nick), text(timestamp)];
+ let mut bold = Font::with_name("K2D");
+ bold.weight = Weight::Bold;
+ let mut header = row![text(nick).font(bold), text(timestamp)].spacing(8);
if let Some(delivery) = message.delivery {
let icon = match delivery {
filamento::chat::Delivery::Sending => Some(Icon::Sending16),
@@ -206,21 +254,22 @@ impl MessageView {
header = header.push(icon);
}
}
- let message_right = column![header, text(&message.body.body)];
+ let message_right = column![header, text(&message.body.body)].spacing(8);
let mut major_message = row([]);
if let Some(avatar) = &message.from.avatar {
let mut path = self.file_root.join(avatar);
path.set_extension("jpg");
// info!("got avatar: {:?}", path);
- major_message = major_message.push(image(path).width(48).height(48));
+ major_message = major_message.push(container(image(path).width(48).height(48)));
}
major_message = major_message.push(message_right);
- major_message.into()
+ major_message.spacing(8).into()
} else {
row![
container(text(timestamp)).width(48),
text(&message.body.body)
]
+ .spacing(8)
.into()
}
}