This introduces a new filter construct called HybridFilter. This allows filters to have different remote filter than local ones. For example, adding kind0 to the remote for keeping profiles up to date on your timeline, but only subscribing to kind1 locally. Only home/contact filters use this feature for now. Fixes: https://github.com/damus-io/notedeck/issues/995 Signed-off-by: William Casarin <jb55@jb55.com>
65 lines
1.9 KiB
Rust
65 lines
1.9 KiB
Rust
pub mod anim;
|
|
pub mod app_images;
|
|
pub mod blur;
|
|
pub mod colors;
|
|
pub mod constants;
|
|
pub mod context_menu;
|
|
pub mod gif;
|
|
pub mod icons;
|
|
pub mod images;
|
|
pub mod jobs;
|
|
pub mod mention;
|
|
pub mod note;
|
|
pub mod profile;
|
|
mod username;
|
|
pub mod widgets;
|
|
|
|
pub use anim::{AnimationHelper, PulseAlpha};
|
|
pub use mention::Mention;
|
|
pub use note::{NoteContents, NoteOptions, NoteView};
|
|
pub use profile::{ProfilePic, ProfilePreview};
|
|
pub use username::Username;
|
|
|
|
use egui::{Label, Margin, RichText};
|
|
|
|
/// This is kind of like the Widget trait but is meant for larger top-level
|
|
/// views that are typically stateful.
|
|
///
|
|
/// The Widget trait forces us to add mutable
|
|
/// implementations at the type level, which screws us when generating Previews
|
|
/// for a Widget. I would have just Widget instead of making this Trait otherwise.
|
|
///
|
|
/// There is some precendent for this, it looks like there's a similar trait
|
|
/// in the egui demo library.
|
|
pub trait View {
|
|
fn ui(&mut self, ui: &mut egui::Ui);
|
|
}
|
|
|
|
pub fn padding<R>(
|
|
amount: impl Into<Margin>,
|
|
ui: &mut egui::Ui,
|
|
add_contents: impl FnOnce(&mut egui::Ui) -> R,
|
|
) -> egui::InnerResponse<R> {
|
|
egui::Frame::new()
|
|
.inner_margin(amount)
|
|
.show(ui, add_contents)
|
|
}
|
|
|
|
pub fn hline(ui: &egui::Ui) {
|
|
hline_with_width(ui, ui.available_rect_before_wrap().x_range());
|
|
}
|
|
|
|
pub fn hline_with_width(ui: &egui::Ui, range: egui::Rangef) {
|
|
// pixel perfect horizontal line
|
|
let rect = ui.available_rect_before_wrap();
|
|
#[allow(deprecated)]
|
|
let resize_y = ui.painter().round_to_pixel(rect.top()) - 0.5;
|
|
let stroke = ui.style().visuals.widgets.noninteractive.bg_stroke;
|
|
ui.painter().hline(range, resize_y, stroke);
|
|
}
|
|
|
|
pub fn secondary_label(ui: &mut egui::Ui, s: impl Into<String>) {
|
|
let color = ui.style().visuals.noninteractive().fg_stroke.color;
|
|
ui.add(Label::new(RichText::new(s).size(10.0).color(color)).selectable(false));
|
|
}
|