mirror of
https://github.com/damus-io/notedeck.git
synced 2024-09-16 11:53:30 +00:00
add hover to profile map demo
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
parent
7ec31d0eae
commit
f12ccc69a4
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -2557,7 +2557,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "nostrdb"
|
||||
version = "0.3.2"
|
||||
source = "git+https://github.com/damus-io/nostrdb-rs?rev=01d8bee4fea6e2e8f6bc3e4e6e3c989e43defe4b#01d8bee4fea6e2e8f6bc3e4e6e3c989e43defe4b"
|
||||
source = "git+https://github.com/damus-io/nostrdb-rs?rev=1489a5aee49996d8a6a54b4c3c9c8397e3e8d40f#1489a5aee49996d8a6a54b4c3c9c8397e3e8d40f"
|
||||
dependencies = [
|
||||
"bindgen",
|
||||
"cc",
|
||||
|
@ -31,7 +31,7 @@ serde_json = "1.0.89"
|
||||
env_logger = "0.10.0"
|
||||
puffin_egui = { version = "0.27.0", optional = true }
|
||||
puffin = { version = "0.19.0", optional = true }
|
||||
nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "01d8bee4fea6e2e8f6bc3e4e6e3c989e43defe4b" }
|
||||
nostrdb = { git = "https://github.com/damus-io/nostrdb-rs", rev = "1489a5aee49996d8a6a54b4c3c9c8397e3e8d40f" }
|
||||
#nostrdb = "0.3.2"
|
||||
hex = "0.4.3"
|
||||
base32 = "0.4.0"
|
||||
|
@ -100,12 +100,14 @@ fn paint_circle(ui: &mut egui::Ui, size: f32) -> egui::Response {
|
||||
|
||||
mod preview {
|
||||
use super::*;
|
||||
use crate::ui;
|
||||
use nostrdb::*;
|
||||
use std::collections::HashSet;
|
||||
|
||||
pub struct ProfilePicPreview {
|
||||
cache: ImageCache,
|
||||
urls: Vec<String>,
|
||||
ndb: Ndb,
|
||||
keys: Vec<ProfileKey>,
|
||||
}
|
||||
|
||||
impl ProfilePicPreview {
|
||||
@ -116,9 +118,9 @@ mod preview {
|
||||
let filters = vec![Filter::new().kinds(vec![0]).build()];
|
||||
let cache = ImageCache::new("cache/img".into());
|
||||
let mut pks = HashSet::new();
|
||||
let mut urls = HashSet::new();
|
||||
let mut keys = HashSet::new();
|
||||
|
||||
for query_result in ndb.query(&txn, filters, 1000).unwrap() {
|
||||
for query_result in ndb.query(&txn, filters, 2000).unwrap() {
|
||||
pks.insert(query_result.note.pubkey());
|
||||
}
|
||||
|
||||
@ -128,22 +130,53 @@ mod preview {
|
||||
} else {
|
||||
continue;
|
||||
};
|
||||
if let Some(url) = profile.record().profile().and_then(|p| p.picture()) {
|
||||
urls.insert(url.to_string());
|
||||
|
||||
if profile
|
||||
.record()
|
||||
.profile()
|
||||
.and_then(|p| p.picture())
|
||||
.is_none()
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
keys.insert(profile.key().expect("should not be owned"));
|
||||
}
|
||||
|
||||
let urls = urls.into_iter().collect();
|
||||
|
||||
ProfilePicPreview { cache, urls }
|
||||
let keys = keys.into_iter().collect();
|
||||
ProfilePicPreview { cache, ndb, keys }
|
||||
}
|
||||
}
|
||||
|
||||
impl View for ProfilePicPreview {
|
||||
fn ui(&mut self, ui: &mut egui::Ui) {
|
||||
ui.horizontal_wrapped(|ui| {
|
||||
for url in &self.urls {
|
||||
ui.add(ProfilePic::new(&mut self.cache, &url));
|
||||
let txn = Transaction::new(&self.ndb).unwrap();
|
||||
for key in &self.keys {
|
||||
let profile = self.ndb.get_profile_by_key(&txn, *key).unwrap();
|
||||
let url = profile
|
||||
.record()
|
||||
.profile()
|
||||
.expect("should have profile")
|
||||
.picture()
|
||||
.expect("should have picture");
|
||||
|
||||
let expand_size = 10.0;
|
||||
let anim_speed = 0.05;
|
||||
|
||||
let (rect, size) = ui::anim::hover_expand(
|
||||
ui,
|
||||
egui::Id::new(profile.key().unwrap()),
|
||||
ui::ProfilePic::default_size(),
|
||||
expand_size,
|
||||
anim_speed,
|
||||
);
|
||||
|
||||
ui.put(rect, ui::ProfilePic::new(&mut self.cache, url).size(size))
|
||||
.on_hover_ui_at_pointer(|ui| {
|
||||
ui.set_max_width(300.0);
|
||||
ui.add(ui::ProfilePreview::new(&profile, &mut self.cache));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use notedeck::account_login_view::AccountLoginView;
|
||||
use notedeck::app_creation::{
|
||||
generate_mobile_emulator_native_options, generate_native_options, setup_cc,
|
||||
};
|
||||
use notedeck::ui::{Preview, PreviewApp, ProfilePreview, RelayView, ProfilePic};
|
||||
use notedeck::ui::{Preview, PreviewApp, ProfilePic, ProfilePreview, RelayView};
|
||||
use std::env;
|
||||
|
||||
struct PreviewRunner {
|
||||
@ -73,5 +73,12 @@ async fn main() {
|
||||
|
||||
let runner = PreviewRunner::new(is_mobile);
|
||||
|
||||
previews!(runner, name, RelayView, AccountLoginView, ProfilePreview, ProfilePic);
|
||||
previews!(
|
||||
runner,
|
||||
name,
|
||||
RelayView,
|
||||
AccountLoginView,
|
||||
ProfilePreview,
|
||||
ProfilePic
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user