ui: move note and profile rendering to notedeck_ui
We want to render notes in other apps like dave, so lets move our note rendering to notedeck_ui. We rework NoteAction so it doesn't have anything specific to notedeck_columns Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
79
crates/notedeck_ui/src/note/options.rs
Normal file
79
crates/notedeck_ui/src/note/options.rs
Normal file
@@ -0,0 +1,79 @@
|
||||
use crate::ProfilePic;
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
// Attributes can be applied to flags types
|
||||
#[repr(transparent)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct NoteOptions: u64 {
|
||||
const actionbar = 0b0000000000000001;
|
||||
const note_previews = 0b0000000000000010;
|
||||
const small_pfp = 0b0000000000000100;
|
||||
const medium_pfp = 0b0000000000001000;
|
||||
const wide = 0b0000000000010000;
|
||||
const selectable_text = 0b0000000000100000;
|
||||
const textmode = 0b0000000001000000;
|
||||
const options_button = 0b0000000010000000;
|
||||
const hide_media = 0b0000000100000000;
|
||||
|
||||
/// Scramble text so that its not distracting during development
|
||||
const scramble_text = 0b0000001000000000;
|
||||
|
||||
/// Whether the current note is a preview
|
||||
const is_preview = 0b0000010000000000;
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for NoteOptions {
|
||||
fn default() -> NoteOptions {
|
||||
NoteOptions::options_button | NoteOptions::note_previews | NoteOptions::actionbar
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! create_bit_methods {
|
||||
($fn_name:ident, $has_name:ident, $option:ident) => {
|
||||
#[inline]
|
||||
pub fn $fn_name(&mut self, enable: bool) {
|
||||
if enable {
|
||||
*self |= NoteOptions::$option;
|
||||
} else {
|
||||
*self &= !NoteOptions::$option;
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn $has_name(self) -> bool {
|
||||
(self & NoteOptions::$option) == NoteOptions::$option
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl NoteOptions {
|
||||
create_bit_methods!(set_small_pfp, has_small_pfp, small_pfp);
|
||||
create_bit_methods!(set_medium_pfp, has_medium_pfp, medium_pfp);
|
||||
create_bit_methods!(set_note_previews, has_note_previews, note_previews);
|
||||
create_bit_methods!(set_selectable_text, has_selectable_text, selectable_text);
|
||||
create_bit_methods!(set_textmode, has_textmode, textmode);
|
||||
create_bit_methods!(set_actionbar, has_actionbar, actionbar);
|
||||
create_bit_methods!(set_wide, has_wide, wide);
|
||||
create_bit_methods!(set_options_button, has_options_button, options_button);
|
||||
create_bit_methods!(set_hide_media, has_hide_media, hide_media);
|
||||
create_bit_methods!(set_scramble_text, has_scramble_text, scramble_text);
|
||||
create_bit_methods!(set_is_preview, has_is_preview, is_preview);
|
||||
|
||||
pub fn new(is_universe_timeline: bool) -> Self {
|
||||
let mut options = NoteOptions::default();
|
||||
options.set_hide_media(is_universe_timeline);
|
||||
options
|
||||
}
|
||||
|
||||
pub fn pfp_size(&self) -> i8 {
|
||||
if self.has_small_pfp() {
|
||||
ProfilePic::small_size()
|
||||
} else if self.has_medium_pfp() {
|
||||
ProfilePic::medium_size()
|
||||
} else {
|
||||
ProfilePic::default_size()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user