feat: responsive design

This commit is contained in:
2024-11-02 11:22:42 +00:00
parent 58132d2cf5
commit 7e67c3d8e7
11 changed files with 229 additions and 80 deletions

View File

@ -1,7 +1,7 @@
use crate::route::RouteServices;
use crate::services::image_cache::ImageCache;
use crate::services::ndb_wrapper::SubWrapper;
use egui::{Color32, Image, Pos2, Response, Rounding, Sense, Ui, Vec2, Widget};
use egui::{vec2, Color32, Image, Pos2, Response, Rounding, Sense, Ui, Vec2, Widget};
use nostrdb::NdbProfile;
pub struct Avatar<'a> {
@ -49,26 +49,31 @@ impl<'a> Avatar<'a> {
self.size = Some(size);
self
}
fn placeholder(ui: &mut Ui, size: f32) -> Response {
let (response, painter) = ui.allocate_painter(vec2(size, size), Sense::click());
painter.circle_filled(
Pos2::new(size / 2., size / 2.),
size / 2.,
Color32::from_rgb(200, 200, 200),
);
response
}
}
impl<'a> Widget for Avatar<'a> {
fn ui(self, ui: &mut Ui) -> Response {
let size_v = self.size.unwrap_or(40.);
let size = Vec2::new(size_v, size_v);
if !ui.is_rect_visible(ui.cursor()) {
return Self::placeholder(ui, size_v);
}
match self.image {
Some(img) => img
.fit_to_exact_size(size)
.rounding(Rounding::same(size_v))
.ui(ui),
None => {
let (response, painter) = ui.allocate_painter(size, Sense::click());
painter.circle_filled(
Pos2::new(size_v / 2., size_v / 2.),
size_v / 2.,
Color32::from_rgb(200, 200, 200),
);
response
}
None => Self::placeholder(ui, size_v),
}
}
}