media/viewer: click anywhere to close
this should help mobile ... Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -400,9 +400,13 @@ fn fullscreen_media_viewer_ui(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaViewer::new(viewer_state)
|
let resp = MediaViewer::new(viewer_state)
|
||||||
.fullscreen(true)
|
.fullscreen(true)
|
||||||
.ui(img_cache, ui);
|
.ui(img_cache, ui);
|
||||||
|
|
||||||
|
if resp.clicked() {
|
||||||
|
options.set(AppOptions::FullscreenMedia, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -6,16 +6,17 @@ use notedeck::{ImageType, Images};
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct MediaViewerState {
|
pub struct MediaViewerState {
|
||||||
pub urls: Vec<String>,
|
pub urls: Vec<String>,
|
||||||
|
pub scene_rect: Option<Rect>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A panning, scrolling, optionally fullscreen, and tiling media viewer
|
/// A panning, scrolling, optionally fullscreen, and tiling media viewer
|
||||||
pub struct MediaViewer<'a> {
|
pub struct MediaViewer<'a> {
|
||||||
state: &'a MediaViewerState,
|
state: &'a mut MediaViewerState,
|
||||||
fullscreen: bool,
|
fullscreen: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> MediaViewer<'a> {
|
impl<'a> MediaViewer<'a> {
|
||||||
pub fn new(state: &'a MediaViewerState) -> Self {
|
pub fn new(state: &'a mut MediaViewerState) -> Self {
|
||||||
let fullscreen = false;
|
let fullscreen = false;
|
||||||
Self { state, fullscreen }
|
Self { state, fullscreen }
|
||||||
}
|
}
|
||||||
@@ -25,40 +26,46 @@ impl<'a> MediaViewer<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ui(&self, images: &mut Images, ui: &mut egui::Ui) {
|
pub fn ui(&mut self, images: &mut Images, ui: &mut egui::Ui) -> egui::Response {
|
||||||
if self.fullscreen {
|
if self.fullscreen {
|
||||||
egui::Window::new("Media Viewer")
|
egui::Window::new("Media Viewer")
|
||||||
.title_bar(false)
|
.title_bar(false)
|
||||||
.fixed_size(ui.ctx().screen_rect().size())
|
.fixed_size(ui.ctx().screen_rect().size())
|
||||||
.fixed_pos(ui.ctx().screen_rect().min)
|
.fixed_pos(ui.ctx().screen_rect().min)
|
||||||
.frame(egui::Frame::NONE)
|
.frame(egui::Frame::NONE)
|
||||||
.show(ui.ctx(), |ui| self.ui_content(images, ui));
|
.show(ui.ctx(), |ui| self.ui_content(images, ui))
|
||||||
|
.unwrap() // SAFETY: we are always open
|
||||||
|
.inner
|
||||||
|
.unwrap()
|
||||||
} else {
|
} else {
|
||||||
self.ui_content(images, ui);
|
self.ui_content(images, ui)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ui_content(&self, images: &mut Images, ui: &mut egui::Ui) {
|
fn ui_content(&mut self, images: &mut Images, ui: &mut egui::Ui) -> egui::Response {
|
||||||
let avail_rect = ui.available_rect_before_wrap();
|
let avail_rect = ui.available_rect_before_wrap();
|
||||||
|
//let id = ui.id().with("media_viewer");
|
||||||
|
|
||||||
// TODO: id_salt
|
let mut scene_rect = if let Some(scene_rect) = self.state.scene_rect {
|
||||||
let id = ui.id().with("media_viewer");
|
scene_rect
|
||||||
let mut scene_rect = ui.ctx().data(|d| d.get_temp(id)).unwrap_or(avail_rect);
|
} else {
|
||||||
let prev = scene_rect;
|
self.state.scene_rect = Some(avail_rect);
|
||||||
|
avail_rect
|
||||||
|
};
|
||||||
|
|
||||||
// Draw background
|
// Draw background
|
||||||
ui.painter()
|
ui.painter()
|
||||||
.rect_filled(avail_rect, 0.0, egui::Color32::from_black_alpha(128));
|
.rect_filled(avail_rect, 0.0, egui::Color32::from_black_alpha(128));
|
||||||
|
|
||||||
egui::Scene::new()
|
let resp = egui::Scene::new()
|
||||||
.zoom_range(0.0..=10.0) // enhance 🔬
|
.zoom_range(0.0..=10.0) // enhance 🔬
|
||||||
.show(ui, &mut scene_rect, |ui| {
|
.show(ui, &mut scene_rect, |ui| {
|
||||||
self.render_image_tiles(images, ui);
|
self.render_image_tiles(images, ui);
|
||||||
});
|
});
|
||||||
|
|
||||||
if scene_rect != prev {
|
self.state.scene_rect = Some(scene_rect);
|
||||||
ui.ctx().data_mut(|d| d.insert_temp(id, scene_rect));
|
|
||||||
}
|
resp.response
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -89,21 +96,11 @@ impl<'a> MediaViewer<'a> {
|
|||||||
let uv = Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0));
|
let uv = Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0));
|
||||||
|
|
||||||
// image actions
|
// image actions
|
||||||
/*
|
//let response = ui.interact(render_rect, carousel_id.with("img"), Sense::click());
|
||||||
let response = ui.interact(
|
|
||||||
render_rect,
|
|
||||||
carousel_id.with("img"),
|
|
||||||
Sense::click(),
|
|
||||||
);
|
|
||||||
|
|
||||||
|
/*
|
||||||
if response.clicked() {
|
if response.clicked() {
|
||||||
ui.data_mut(|data| {
|
} else if background_response.clicked() {
|
||||||
data.insert_temp(carousel_id.with("show_popup"), true);
|
|
||||||
});
|
|
||||||
} else if background_response.clicked() || response.clicked_elsewhere() {
|
|
||||||
ui.data_mut(|data| {
|
|
||||||
data.insert_temp(carousel_id.with("show_popup"), false);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user