note/action: add ScrollInfo
I might need this... lets add it just in case Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -51,7 +51,7 @@ pub use muted::{MuteFun, Muted};
|
|||||||
pub use name::NostrName;
|
pub use name::NostrName;
|
||||||
pub use note::{
|
pub use note::{
|
||||||
BroadcastContext, ContextSelection, NoteAction, NoteContext, NoteContextSelection, NoteRef,
|
BroadcastContext, ContextSelection, NoteAction, NoteContext, NoteContextSelection, NoteRef,
|
||||||
RootIdError, RootNoteId, RootNoteIdBuf, ZapAction,
|
RootIdError, RootNoteId, RootNoteIdBuf, ScrollInfo, ZapAction,
|
||||||
};
|
};
|
||||||
pub use notecache::{CachedNote, NoteCache};
|
pub use notecache::{CachedNote, NoteCache};
|
||||||
pub use persist::*;
|
pub use persist::*;
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
use super::context::ContextSelection;
|
use super::context::ContextSelection;
|
||||||
use crate::{zaps::NoteZapTargetOwned, Images, MediaCacheType, TexturedImage};
|
use crate::{zaps::NoteZapTargetOwned, Images, MediaCacheType, TexturedImage};
|
||||||
|
use egui::Vec2;
|
||||||
use enostr::{NoteId, Pubkey};
|
use enostr::{NoteId, Pubkey};
|
||||||
use poll_promise::Promise;
|
use poll_promise::Promise;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct ScrollInfo {
|
||||||
|
pub velocity: Vec2,
|
||||||
|
pub offset: Vec2,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum NoteAction {
|
pub enum NoteAction {
|
||||||
/// User has clicked the quote reply action
|
/// User has clicked the quote reply action
|
||||||
@@ -28,6 +35,9 @@ pub enum NoteAction {
|
|||||||
|
|
||||||
/// User clicked on media
|
/// User clicked on media
|
||||||
Media(MediaAction),
|
Media(MediaAction),
|
||||||
|
|
||||||
|
/// User scrolled the timeline
|
||||||
|
Scroll(ScrollInfo),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NoteAction {
|
impl NoteAction {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
mod action;
|
mod action;
|
||||||
mod context;
|
mod context;
|
||||||
|
|
||||||
pub use action::{MediaAction, NoteAction, ZapAction, ZapTargetAmount};
|
pub use action::{MediaAction, NoteAction, ScrollInfo, ZapAction, ZapTargetAmount};
|
||||||
pub use context::{BroadcastContext, ContextSelection, NoteContextSelection};
|
pub use context::{BroadcastContext, ContextSelection, NoteContextSelection};
|
||||||
|
|
||||||
use crate::JobPool;
|
use crate::JobPool;
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ fn execute_note_action(
|
|||||||
let mut router_action = None;
|
let mut router_action = None;
|
||||||
|
|
||||||
match action {
|
match action {
|
||||||
|
NoteAction::Scroll(ref scroll_info) => {
|
||||||
|
tracing::trace!("timeline scroll {scroll_info:?}")
|
||||||
|
}
|
||||||
|
|
||||||
NoteAction::Reply(note_id) => {
|
NoteAction::Reply(note_id) => {
|
||||||
router_action = Some(RouterAction::route_to(Route::reply(note_id)));
|
router_action = Some(RouterAction::route_to(Route::reply(note_id)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use std::f32::consts::PI;
|
|||||||
use tracing::{error, warn};
|
use tracing::{error, warn};
|
||||||
|
|
||||||
use crate::timeline::{TimelineCache, TimelineKind, TimelineTab, ViewFilter};
|
use crate::timeline::{TimelineCache, TimelineKind, TimelineTab, ViewFilter};
|
||||||
use notedeck::{note::root_note_id_from_selected_id, MuteFun, NoteAction, NoteContext};
|
use notedeck::{note::root_note_id_from_selected_id, MuteFun, NoteAction, NoteContext, ScrollInfo};
|
||||||
use notedeck_ui::{
|
use notedeck_ui::{
|
||||||
anim::{AnimationHelper, ICON_EXPANSION_MULTIPLE},
|
anim::{AnimationHelper, ICON_EXPANSION_MULTIPLE},
|
||||||
show_pointer, NoteOptions, NoteView,
|
show_pointer, NoteOptions, NoteView,
|
||||||
@@ -184,7 +184,18 @@ fn timeline_ui(
|
|||||||
.data_mut(|d| d.insert_temp(show_top_button_id, true));
|
.data_mut(|d| d.insert_temp(show_top_button_id, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
scroll_output.inner
|
scroll_output.inner.or_else(|| {
|
||||||
|
// if we're scrolling, return that as a response. We need this
|
||||||
|
// for auto-closing the side menu
|
||||||
|
|
||||||
|
let velocity = scroll_output.state.velocity();
|
||||||
|
let offset = scroll_output.state.offset;
|
||||||
|
if velocity.length_sq() > 0.0 {
|
||||||
|
Some(NoteAction::Scroll(ScrollInfo { velocity, offset }))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goto_top_button(center: Pos2) -> impl egui::Widget {
|
fn goto_top_button(center: Pos2) -> impl egui::Widget {
|
||||||
|
|||||||
Reference in New Issue
Block a user