Merge remote-tracking branch 'bushmann/refactor-note-rendering' into notemerge

This commit is contained in:
Mike Dilger 2023-03-25 09:07:40 +13:00
commit e132b940a1
7 changed files with 919 additions and 376 deletions

View File

@ -7,6 +7,7 @@ use egui::{Context, Frame, RichText, ScrollArea, SelectableLabel, Ui, Vec2};
use nostr_types::Id;
mod note;
pub use note::NoteRenderData;
mod post;
struct FeedNoteParams {

View File

@ -1,22 +1,25 @@
use super::{GossipUi, Page};
use super::{GossipUi, NoteData, Page, RepostType};
use crate::feed::FeedKind;
use crate::globals::GLOBALS;
use eframe::egui::{self, Context};
use eframe::egui;
use egui::{RichText, Ui};
use linkify::{LinkFinder, LinkKind};
use nostr_types::{Event, IdHex, Tag};
use nostr_types::{IdHex, Tag};
/// returns None or a repost
pub(super) fn render_content(
app: &mut GossipUi,
ctx: &Context,
ui: &mut Ui,
tag_re: &regex::Regex,
event: &Event,
note: &NoteData,
as_deleted: bool,
content: &str,
) {
) -> Option<NoteData> {
let tag_re = app.tag_re.clone();
ui.style_mut().spacing.item_spacing.x = 0.0;
// Optional repost return
let mut append_repost: Option<NoteData> = None;
for span in LinkFinder::new().kinds(&[LinkKind::Url]).spans(content) {
if span.kind().is_some() {
if span.as_str().ends_with(".jpg")
@ -36,7 +39,7 @@ pub(super) fn render_content(
for mat in tag_re.find_iter(s) {
ui.label(&s[pos..mat.start()]);
let num: usize = s[mat.start() + 2..mat.end() - 1].parse::<usize>().unwrap();
if let Some(tag) = event.tags.get(num) {
if let Some(tag) = note.event.tags.get(num) {
match tag {
Tag::Pubkey { pubkey, .. } => {
let nam = match GLOBALS.people.get(pubkey) {
@ -51,27 +54,38 @@ pub(super) fn render_content(
};
}
Tag::Event { id, .. } => {
if ui.cursor().min == ui.max_rect().min {
ui.end_row();
}
let mut render_as_link = true;
if app.settings.show_first_mention && pos == 0 {
// try to find the mentioned note in our cache
let maybe_event = GLOBALS.events.get(id);
if let Some(event) = maybe_event {
if let Some(note_data) = super::NoteData::new(event) {
super::render_repost(app, ui, ctx, note_data);
render_as_link = false;
let mut render_link = true;
match note.repost {
Some(RepostType::MentionOnly)
| Some(RepostType::CommentMention)
| Some(RepostType::Kind6Mention) => {
for (i, event) in note.cached_mentions.iter() {
if *i == num {
// FIXME is there a way to consume just this entry in cached_mentions so
// we can avoid the clone?
if let Some(note_data) =
super::NoteData::new(event.clone(), true)
{
append_repost = Some(note_data);
render_link = false;
}
}
}
}
_ => (),
}
if render_as_link {
if render_link {
// insert a newline if the current line has text
if ui.cursor().min.x > ui.max_rect().min.y {
ui.end_row();
}
let idhex: IdHex = (*id).into();
let nam = format!("#{}", GossipUi::hex_id_short(&idhex));
if ui.link(&nam).clicked() {
app.set_page(Page::Feed(FeedKind::Thread {
id: *id,
referenced_by: event.id,
referenced_by: note.event.id,
}));
};
}
@ -101,4 +115,6 @@ pub(super) fn render_content(
}
ui.reset_style();
append_repost
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
use super::{FeedProperties, PostProperties, ThemeDef};
use super::{FeedProperties, NoteRenderData, ThemeDef};
use crate::ui::HighlightType;
use eframe::egui::style::{Selection, WidgetVisuals, Widgets};
use eframe::egui::{FontDefinitions, Margin, RichText, Style, TextFormat, TextStyle, Visuals};
@ -378,15 +378,15 @@ impl ThemeDef for ClassicTheme {
fn feed_scroll_stroke(_dark_mode: bool, _feed: &FeedProperties) -> Stroke {
Stroke::NONE
}
fn feed_post_separator_stroke(dark_mode: bool, _post: &PostProperties) -> Stroke {
fn feed_post_separator_stroke(dark_mode: bool, _post: &NoteRenderData) -> Stroke {
if dark_mode {
Stroke::new(1.0, Color32::from_gray(72))
} else {
Stroke::new(1.0, Color32::from_gray(192))
}
}
fn feed_post_outer_indent(_ui: &mut eframe::egui::Ui, _post: &PostProperties) {}
fn feed_post_inner_indent(ui: &mut eframe::egui::Ui, post: &PostProperties) {
fn feed_post_outer_indent(_ui: &mut eframe::egui::Ui, _post: &NoteRenderData) {}
fn feed_post_inner_indent(ui: &mut eframe::egui::Ui, post: &NoteRenderData) {
if post.is_thread {
let space = 100.0 * (10.0 - (1000.0 / (post.thread_position as f32 + 100.0)));
ui.add_space(space);
@ -399,24 +399,24 @@ impl ThemeDef for ClassicTheme {
}
}
}
fn feed_frame_inner_margin(_post: &PostProperties) -> Margin {
fn feed_frame_inner_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: 0.0,
left: 10.0,
top: 4.0,
right: 0.0,
bottom: 0.0,
right: 10.0,
bottom: 4.0,
}
}
fn feed_frame_outer_margin(_post: &PostProperties) -> Margin {
fn feed_frame_outer_margin(_post: &NoteRenderData) -> Margin {
Margin::default()
}
fn feed_frame_rounding(_post: &PostProperties) -> Rounding {
fn feed_frame_rounding(_post: &NoteRenderData) -> Rounding {
Rounding::default()
}
fn feed_frame_shadow(_dark_mode: bool, _post: &PostProperties) -> Shadow {
fn feed_frame_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::default()
}
fn feed_frame_fill(dark_mode: bool, post: &PostProperties) -> Color32 {
fn feed_frame_fill(dark_mode: bool, post: &NoteRenderData) -> Color32 {
if post.is_new {
if dark_mode {
Color32::from_rgb(60, 0, 0)
@ -431,7 +431,63 @@ impl ThemeDef for ClassicTheme {
}
}
}
fn feed_frame_stroke(_dark_mode: bool, _post: &PostProperties) -> Stroke {
fn feed_frame_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}
fn repost_separator_before_stroke(dark_mode: bool, _post: &NoteRenderData) -> Stroke {
if dark_mode {
Stroke::new(1.0, Color32::from_gray(72))
} else {
Stroke::new(1.0, Color32::from_gray(192))
}
}
fn repost_space_above_separator_before(_post: &NoteRenderData) -> f32 {
4.0
}
fn repost_space_below_separator_before(_post: &NoteRenderData) -> f32 {
8.0
}
fn repost_separator_after_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke {
Self::repost_separator_before_stroke(dark_mode, post)
}
fn repost_space_above_separator_after(_post: &NoteRenderData) -> f32 {
4.0
}
fn repost_space_below_separator_after(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_inner_margin(_post: &NoteRenderData) -> Margin {
// Margin {
// left: 10.0,
// top: 4.0,
// right: 10.0,
// bottom: 4.0,
// }
Margin::same(0.0)
}
fn repost_outer_margin(_post: &NoteRenderData) -> Margin {
// Margin {
// left: -10.0,
// top: -4.0,
// right: -10.0,
// bottom: -4.0,
// }
Margin::same(0.0)
}
fn repost_rounding(post: &NoteRenderData) -> Rounding {
Self::feed_frame_rounding(post)
}
fn repost_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::NONE
}
fn repost_fill(_dark_mode: bool, _post: &NoteRenderData) -> Color32 {
Color32::TRANSPARENT
}
fn repost_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}

View File

@ -1,4 +1,4 @@
use super::{FeedProperties, PostProperties, ThemeDef};
use super::{FeedProperties, NoteRenderData, ThemeDef};
use crate::ui::HighlightType;
use eframe::egui::style::{Selection, WidgetVisuals, Widgets};
use eframe::egui::{
@ -381,11 +381,11 @@ impl ThemeDef for DefaultTheme {
fn feed_scroll_stroke(_dark_mode: bool, _feed: &FeedProperties) -> Stroke {
Stroke::NONE
}
fn feed_post_separator_stroke(_dark_mode: bool, _post: &PostProperties) -> Stroke {
fn feed_post_separator_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}
fn feed_post_outer_indent(_ui: &mut eframe::egui::Ui, _post: &PostProperties) {}
fn feed_post_inner_indent(ui: &mut eframe::egui::Ui, post: &PostProperties) {
fn feed_post_outer_indent(_ui: &mut eframe::egui::Ui, _post: &NoteRenderData) {}
fn feed_post_inner_indent(ui: &mut eframe::egui::Ui, post: &NoteRenderData) {
if post.is_thread {
if post.thread_position > 0 {
let space = 150.0 * (10.0 - (1000.0 / (post.thread_position as f32 + 100.0)));
@ -421,7 +421,7 @@ impl ThemeDef for DefaultTheme {
}
}
}
fn feed_frame_inner_margin(_post: &PostProperties) -> Margin {
fn feed_frame_inner_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: 10.0,
top: 14.0,
@ -429,17 +429,17 @@ impl ThemeDef for DefaultTheme {
bottom: 6.0,
}
}
fn feed_frame_outer_margin(_post: &PostProperties) -> Margin {
fn feed_frame_outer_margin(_post: &NoteRenderData) -> Margin {
Margin::symmetric(0.0, 0.0)
}
fn feed_frame_rounding(_post: &PostProperties) -> Rounding {
fn feed_frame_rounding(_post: &NoteRenderData) -> Rounding {
Rounding::same(4.0)
}
fn feed_frame_shadow(_dark_mode: bool, _post: &PostProperties) -> Shadow {
fn feed_frame_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::default()
}
fn feed_frame_fill(dark_mode: bool, post: &PostProperties) -> Color32 {
if post.is_focused {
fn feed_frame_fill(dark_mode: bool, post: &NoteRenderData) -> Color32 {
if post.is_main_event {
if dark_mode {
Color32::from_rgb(16, 23, 33)
} else {
@ -459,10 +459,74 @@ impl ThemeDef for DefaultTheme {
}
}
}
fn feed_frame_stroke(_dark_mode: bool, _post: &PostProperties) -> Stroke {
fn feed_frame_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}
fn repost_separator_before_stroke(dark_mode: bool, _post: &NoteRenderData) -> Stroke {
if dark_mode {
Stroke::new(1.0, Color32::from_gray(60))
} else {
Stroke::new(1.0, Color32::from_gray(230))
}
}
fn repost_space_above_separator_before(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_space_below_separator_before(_post: &NoteRenderData) -> f32 {
10.0
}
fn repost_separator_after_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}
fn repost_space_above_separator_after(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_space_below_separator_after(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_inner_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: 5.0,
top: 14.0,
right: 6.0,
bottom: 6.0,
}
}
fn repost_outer_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: -5.0,
top: -14.0,
right: -6.0,
bottom: -3.0,
}
}
fn repost_rounding(post: &NoteRenderData) -> Rounding {
Self::feed_frame_rounding(post)
}
fn repost_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::NONE
}
fn repost_fill(dark_mode: bool, post: &NoteRenderData) -> Color32 {
if !post.is_comment_mention {
return Color32::TRANSPARENT;
}
let mut hsva: ecolor::HsvaGamma = Self::feed_frame_fill(dark_mode, post).into();
if dark_mode {
hsva.v = (hsva.v + 0.05).min(1.0); // lighten
} else {
hsva.v = (hsva.v - 0.05).max(0.0); // darken
}
let color: Color32 = hsva.into();
color
}
fn repost_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke {
Self::feed_frame_stroke(dark_mode, post)
}
fn round_image() -> bool {
true
}

View File

@ -1,3 +1,4 @@
use super::feed::NoteRenderData;
use super::HighlightType;
use eframe::egui::{
Color32, Context, FontData, FontDefinitions, FontTweak, Margin, Rounding, Stroke, Style,
@ -42,22 +43,6 @@ pub struct FeedProperties {
pub is_thread: bool,
}
pub struct PostProperties {
pub height: f32,
/// Post height
pub is_new: bool,
/// This message is the focus of the view (formerly called is_main_event)
pub is_focused: bool,
/// This message is part of a thread
pub is_thread: bool,
/// Is this the first post in the display?
pub is_first: bool,
/// Is this the last post in the display
pub is_last: bool,
/// Position in the thread, focused message = 0
pub thread_position: i32,
}
macro_rules! theme_dispatch {
($($variant:path, $class:ident, $name:literal),+) => {
@ -143,60 +128,132 @@ macro_rules! theme_dispatch {
}
}
pub fn feed_post_separator_stroke(&self, post: &PostProperties) -> Stroke {
pub fn feed_post_separator_stroke(&self, post: &NoteRenderData) -> Stroke {
match self.variant {
$( $variant => $class::feed_post_separator_stroke(self.dark_mode, post), )+
}
}
pub fn feed_post_outer_indent(&self, ui: &mut Ui, post: &PostProperties) {
pub fn feed_post_outer_indent(&self, ui: &mut Ui, post: &NoteRenderData) {
match self.variant {
$( $variant => $class::feed_post_outer_indent(ui, post), )+
}
}
pub fn feed_post_inner_indent(&self, ui: &mut Ui, post: &PostProperties) {
pub fn feed_post_inner_indent(&self, ui: &mut Ui, post: &NoteRenderData) {
match self.variant {
$( $variant => $class::feed_post_inner_indent(ui, post), )+
}
}
pub fn feed_frame_inner_margin(&self, post: &PostProperties) -> Margin {
pub fn feed_frame_inner_margin(&self, post: &NoteRenderData) -> Margin {
match self.variant {
$( $variant => $class::feed_frame_inner_margin(post), )+
}
}
pub fn feed_frame_outer_margin(&self, post: &PostProperties) -> Margin {
pub fn feed_frame_outer_margin(&self, post: &NoteRenderData) -> Margin {
match self.variant {
$( $variant => $class::feed_frame_outer_margin(post), )+
}
}
pub fn feed_frame_rounding(&self, post: &PostProperties) -> Rounding {
pub fn feed_frame_rounding(&self, post: &NoteRenderData) -> Rounding {
match self.variant {
$( $variant => $class::feed_frame_rounding(post), )+
}
}
pub fn feed_frame_shadow(&self, post: &PostProperties) -> Shadow {
pub fn feed_frame_shadow(&self, post: &NoteRenderData) -> Shadow {
match self.variant {
$( $variant => $class::feed_frame_shadow(self.dark_mode, post), )+
}
}
pub fn feed_frame_fill(&self, post: &PostProperties) -> Color32 {
pub fn feed_frame_fill(&self, post: &NoteRenderData) -> Color32 {
match self.variant {
$( $variant => $class::feed_frame_fill(self.dark_mode, post), )+
}
}
pub fn feed_frame_stroke(&self, post: &PostProperties) -> Stroke {
pub fn feed_frame_stroke(&self, post: &NoteRenderData) -> Stroke {
match self.variant {
$( $variant => $class::feed_frame_stroke(self.dark_mode, post), )+
}
}
pub fn repost_separator_before_stroke(&self, post: &NoteRenderData) -> Stroke {
match self.variant {
$( $variant => $class::repost_separator_before_stroke(self.dark_mode, post), )+
}
}
pub fn repost_space_above_separator_before(&self, post: &NoteRenderData) -> f32 {
match self.variant {
$( $variant => $class::repost_space_above_separator_before(post), )+
}
}
pub fn repost_space_below_separator_before(&self, post: &NoteRenderData) -> f32 {
match self.variant {
$( $variant => $class::repost_space_below_separator_before(post), )+
}
}
pub fn repost_separator_after_stroke(&self, post: &NoteRenderData) -> Stroke {
match self.variant {
$( $variant => $class::repost_separator_after_stroke(self.dark_mode, post), )+
}
}
pub fn repost_space_above_separator_after(&self, post: &NoteRenderData) -> f32 {
match self.variant {
$( $variant => $class::repost_space_above_separator_after(post), )+
}
}
pub fn repost_space_below_separator_after(&self, post: &NoteRenderData) -> f32 {
match self.variant {
$( $variant => $class::repost_space_below_separator_after(post), )+
}
}
pub fn repost_inner_margin(&self, post: &NoteRenderData) -> Margin {
match self.variant {
$( $variant => $class::repost_inner_margin(post), )+
}
}
pub fn repost_outer_margin(&self, post: &NoteRenderData) -> Margin {
match self.variant {
$( $variant => $class::repost_outer_margin(post), )+
}
}
pub fn repost_rounding(&self, post: &NoteRenderData) -> Rounding {
match self.variant {
$( $variant => $class::repost_rounding(post), )+
}
}
pub fn repost_shadow(&self, post: &NoteRenderData) -> Shadow {
match self.variant {
$( $variant => $class::repost_shadow(self.dark_mode, post), )+
}
}
pub fn repost_fill(&self, post: &NoteRenderData) -> Color32 {
match self.variant {
$( $variant => $class::repost_fill(self.dark_mode, post), )+
}
}
pub fn repost_stroke(&self, post: &NoteRenderData) -> Stroke {
match self.variant {
$( $variant => $class::repost_stroke(self.dark_mode, post), )+
}
}
pub fn round_image(&self) -> bool {
match self.variant {
$( $variant => $class::round_image(), )+
@ -241,15 +298,27 @@ pub trait ThemeDef: Send + Sync {
fn feed_scroll_rounding(feed: &FeedProperties) -> Rounding;
fn feed_scroll_fill(dark_mode: bool, feed: &FeedProperties) -> Color32;
fn feed_scroll_stroke(dark_mode: bool, feed: &FeedProperties) -> Stroke;
fn feed_post_separator_stroke(dark_mode: bool, post: &PostProperties) -> Stroke;
fn feed_post_outer_indent(ui: &mut Ui, post: &PostProperties);
fn feed_post_inner_indent(ui: &mut Ui, post: &PostProperties);
fn feed_frame_inner_margin(post: &PostProperties) -> Margin;
fn feed_frame_outer_margin(post: &PostProperties) -> Margin;
fn feed_frame_rounding(post: &PostProperties) -> Rounding;
fn feed_frame_shadow(dark_mode: bool, post: &PostProperties) -> Shadow;
fn feed_frame_fill(dark_mode: bool, post: &PostProperties) -> Color32;
fn feed_frame_stroke(dark_mode: bool, post: &PostProperties) -> Stroke;
fn feed_post_separator_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke;
fn feed_post_outer_indent(ui: &mut Ui, post: &NoteRenderData);
fn feed_post_inner_indent(ui: &mut Ui, post: &NoteRenderData);
fn feed_frame_inner_margin(post: &NoteRenderData) -> Margin;
fn feed_frame_outer_margin(post: &NoteRenderData) -> Margin;
fn feed_frame_rounding(post: &NoteRenderData) -> Rounding;
fn feed_frame_shadow(dark_mode: bool, post: &NoteRenderData) -> Shadow;
fn feed_frame_fill(dark_mode: bool, post: &NoteRenderData) -> Color32;
fn feed_frame_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke;
fn repost_separator_before_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke;
fn repost_space_above_separator_before(post: &NoteRenderData) -> f32;
fn repost_space_below_separator_before(post: &NoteRenderData) -> f32;
fn repost_separator_after_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke;
fn repost_space_above_separator_after(post: &NoteRenderData) -> f32;
fn repost_space_below_separator_after(post: &NoteRenderData) -> f32;
fn repost_inner_margin(post: &NoteRenderData) -> Margin;
fn repost_outer_margin(post: &NoteRenderData) -> Margin;
fn repost_rounding(post: &NoteRenderData) -> Rounding;
fn repost_shadow(dark_mode: bool, post: &NoteRenderData) -> Shadow;
fn repost_fill(dark_mode: bool, post: &NoteRenderData) -> Color32;
fn repost_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke;
// image rounding
fn round_image() -> bool;

View File

@ -1,8 +1,8 @@
use super::{FeedProperties, PostProperties, ThemeDef};
use super::{FeedProperties, NoteRenderData, ThemeDef};
use crate::ui::HighlightType;
use eframe::egui::style::{Selection, WidgetVisuals, Widgets};
use eframe::egui::{FontDefinitions, Margin, Style, TextFormat, TextStyle, Visuals};
use eframe::epaint::{Color32, FontFamily, FontId, Rounding, Shadow, Stroke};
use eframe::epaint::{ecolor, Color32, FontFamily, FontId, Rounding, Shadow, Stroke};
use std::collections::BTreeMap;
#[derive(Default)]
@ -380,17 +380,17 @@ impl ThemeDef for RoundyTheme {
fn feed_scroll_stroke(_dark_mode: bool, _feed: &FeedProperties) -> Stroke {
Stroke::NONE
}
fn feed_post_separator_stroke(_dark_mode: bool, _post: &PostProperties) -> Stroke {
fn feed_post_separator_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::new(1.0, Color32::TRANSPARENT)
}
fn feed_post_outer_indent(ui: &mut eframe::egui::Ui, post: &PostProperties) {
fn feed_post_outer_indent(ui: &mut eframe::egui::Ui, post: &NoteRenderData) {
if post.is_thread {
let space = 100.0 * (10.0 - (1000.0 / (post.thread_position as f32 + 100.0)));
ui.add_space(space);
}
}
fn feed_post_inner_indent(_ui: &mut eframe::egui::Ui, _post: &PostProperties) {}
fn feed_frame_inner_margin(_post: &PostProperties) -> Margin {
fn feed_post_inner_indent(_ui: &mut eframe::egui::Ui, _post: &NoteRenderData) {}
fn feed_frame_inner_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: 10.0,
right: 10.0,
@ -398,10 +398,10 @@ impl ThemeDef for RoundyTheme {
bottom: 5.0,
}
}
fn feed_frame_outer_margin(_post: &PostProperties) -> Margin {
fn feed_frame_outer_margin(_post: &NoteRenderData) -> Margin {
Margin::default()
}
fn feed_frame_rounding(post: &PostProperties) -> Rounding {
fn feed_frame_rounding(post: &NoteRenderData) -> Rounding {
if post.is_thread {
let mut rounding = Rounding::none();
if post.is_first && post.thread_position == 0 {
@ -413,10 +413,10 @@ impl ThemeDef for RoundyTheme {
Rounding::same(7.0)
}
}
fn feed_frame_shadow(_dark_mode: bool, _post: &PostProperties) -> Shadow {
fn feed_frame_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::NONE
}
fn feed_frame_fill(dark_mode: bool, post: &PostProperties) -> Color32 {
fn feed_frame_fill(dark_mode: bool, post: &NoteRenderData) -> Color32 {
if post.is_new {
if dark_mode {
Color32::from_rgb(45, 45, 46)
@ -431,8 +431,8 @@ impl ThemeDef for RoundyTheme {
}
}
}
fn feed_frame_stroke(dark_mode: bool, post: &PostProperties) -> Stroke {
if post.is_focused {
fn feed_frame_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke {
if post.is_main_event {
if dark_mode {
Stroke::new(1.0, Color32::from_rgb(64, 96, 64))
} else {
@ -447,6 +447,71 @@ impl ThemeDef for RoundyTheme {
}
}
fn repost_separator_before_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
// if dark_mode {
// Stroke::new(1.0, Color32::from_gray(72))
// } else {
// Stroke::new(1.0, Color32::from_gray(192))
// }
Stroke::NONE
}
fn repost_space_above_separator_before(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_space_below_separator_before(_post: &NoteRenderData) -> f32 {
8.0
}
fn repost_separator_after_stroke(_dark_mode: bool, _post: &NoteRenderData) -> Stroke {
Stroke::NONE
}
fn repost_space_above_separator_after(_post: &NoteRenderData) -> f32 {
0.0
}
fn repost_space_below_separator_after(_post: &NoteRenderData) -> f32 {
8.0
}
fn repost_inner_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: 10.0,
right: 10.0,
top: 10.0,
bottom: 10.0,
}
}
fn repost_outer_margin(_post: &NoteRenderData) -> Margin {
Margin {
left: -10.0,
right: -10.0,
top: -10.0,
bottom: -6.0,
}
}
fn repost_rounding(post: &NoteRenderData) -> Rounding {
Self::feed_frame_rounding(post)
}
fn repost_shadow(_dark_mode: bool, _post: &NoteRenderData) -> Shadow {
Shadow::NONE
}
fn repost_fill(dark_mode: bool, post: &NoteRenderData) -> Color32 {
if !post.is_comment_mention {
return Color32::TRANSPARENT;
}
let mut hsva: ecolor::HsvaGamma = Self::feed_frame_fill(dark_mode, post).into();
if dark_mode {
hsva.v = (hsva.v + 0.05).min(1.0); // lighten
} else {
hsva.v = (hsva.v - 0.05).max(0.0); // darken
}
let color: Color32 = hsva.into();
color
}
fn repost_stroke(dark_mode: bool, post: &NoteRenderData) -> Stroke {
Self::feed_frame_stroke(dark_mode, post)
}
fn round_image() -> bool {
true
}