use crate::widgets::SlideThumbnail;
use dais_document::page::RenderedPage;
pub struct CurrentSlidePanel {
thumbnail: SlideThumbnail,
last_image_rect: egui::Rect,
}
impl CurrentSlidePanel {
pub fn new() -> Self {
Self { thumbnail: SlideThumbnail::new(), last_image_rect: egui::Rect::NOTHING }
}
pub fn update(&mut self, ctx: &egui::Context, page: &RenderedPage, page_index: usize) {
self.thumbnail.update(ctx, page, page_index);
}
pub fn show(&mut self, ui: &mut egui::Ui, area: egui::Rect) -> (egui::Response, egui::Rect) {
self.show_with_sense(ui, area, egui::Sense::click_and_drag())
}
pub fn show_with_sense(
&mut self,
ui: &mut egui::Ui,
area: egui::Rect,
sense: egui::Sense,
) -> (egui::Response, egui::Rect) {
let padding = egui::vec2(8.0, 8.0);
let content_rect = area.shrink2(padding);
let mut child_ui = ui.new_child(egui::UiBuilder::new().max_rect(content_rect));
let available = content_rect.size().max(egui::vec2(1.0, 1.0));
let (response, image_rect) =
self.thumbnail.show_with_sense(&mut child_ui, available, sense);
self.last_image_rect = image_rect;
(response, image_rect)
}
pub fn image_rect(&self) -> egui::Rect {
self.last_image_rect
}
}
impl Default for CurrentSlidePanel {
fn default() -> Self {
Self::new()
}
}