media/viewer: provide image-click provenance
We will be using this for transitions Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -1,12 +1,36 @@
|
||||
use crate::{Images, MediaCacheType, TexturedImage};
|
||||
use poll_promise::Promise;
|
||||
|
||||
/// Tracks where media was on the screen so that
|
||||
/// we can do fun animations when opening the
|
||||
/// Media Viewer
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct MediaInfo {
|
||||
/// The original screen position where it
|
||||
/// was rendered from. This is not where
|
||||
/// it should be rendered in the scene.
|
||||
pub original_position: egui::Rect,
|
||||
pub url: String,
|
||||
}
|
||||
|
||||
/// Contains various information for when a user
|
||||
/// clicks a piece of media. It contains the current
|
||||
/// location on screen for each piece of media.
|
||||
///
|
||||
/// Viewers can use this to smoothly transition from
|
||||
/// the timeline to the viewer
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct ViewMediaInfo {
|
||||
pub clicked_index: usize,
|
||||
pub medias: Vec<MediaInfo>,
|
||||
}
|
||||
|
||||
/// Actions generated by media ui interactions
|
||||
pub enum MediaAction {
|
||||
/// An image was clicked on in a carousel, we have
|
||||
/// the opportunity to open into a fullscreen media viewer
|
||||
/// with a list of url values
|
||||
ViewMedias(Vec<String>),
|
||||
ViewMedias(ViewMediaInfo),
|
||||
|
||||
FetchImage {
|
||||
url: String,
|
||||
@@ -22,7 +46,14 @@ pub enum MediaAction {
|
||||
impl std::fmt::Debug for MediaAction {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::ViewMedias(urls) => f.debug_struct("ViewMedias").field("urls", urls).finish(),
|
||||
Self::ViewMedias(ViewMediaInfo {
|
||||
clicked_index,
|
||||
medias,
|
||||
}) => f
|
||||
.debug_struct("ViewMedias")
|
||||
.field("clicked_index", clicked_index)
|
||||
.field("media", medias)
|
||||
.finish(),
|
||||
Self::FetchImage {
|
||||
url,
|
||||
cache_type,
|
||||
@@ -44,9 +75,9 @@ impl std::fmt::Debug for MediaAction {
|
||||
|
||||
impl MediaAction {
|
||||
/// Handle view media actions
|
||||
pub fn on_view_media(&self, handler: impl FnOnce(Vec<String>)) {
|
||||
if let MediaAction::ViewMedias(urls) = self {
|
||||
handler(urls.clone())
|
||||
pub fn on_view_media(&self, handler: impl FnOnce(&ViewMediaInfo)) {
|
||||
if let MediaAction::ViewMedias(view_medias) = self {
|
||||
handler(view_medias)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ pub mod images;
|
||||
pub mod imeta;
|
||||
pub mod renderable;
|
||||
|
||||
pub use action::MediaAction;
|
||||
pub use action::{MediaAction, MediaInfo, ViewMediaInfo};
|
||||
pub use blur::{
|
||||
compute_blurhash, update_imeta_blurhashes, ImageMetadata, ObfuscationType, PixelDimensions,
|
||||
PointDimensions,
|
||||
|
||||
Reference in New Issue
Block a user