use miette::{IntoDiagnostic, Result}; use std::{fs::File, io::BufReader, path::PathBuf, sync::Arc}; use cosmic::{ iced::{ alignment::Horizontal, border, font::{Family, Stretch, Style, Weight}, Background, Border, Color, ContentFit, Font, Length, Shadow, Vector, }, iced_widget::{ rich_text, scrollable::{ scroll_to, AbsoluteOffset, Direction, Scrollbar, }, span, stack, vertical_rule, }, prelude::*, widget::{ container, image, mouse_area, responsive, scrollable, text, Column, Container, Id, Row, Space, }, Task, }; use iced_video_player::{gst_pbutils, Position, Video, VideoPlayer}; use rodio::{Decoder, OutputStream, Sink}; use tracing::{debug, error, info, warn}; use url::Url; use crate::{ core::{service_items::ServiceItem, slide::Slide}, // ui::widgets::slide_text, BackgroundKind, }; const REFERENCE_WIDTH: f32 = 1920.0; const REFERENCE_HEIGHT: f32 = 1080.0; // #[derive(Default, Clone, Debug)] pub(crate) struct Presenter { pub service: Vec, pub current_slide: Slide, pub current_item: usize, pub current_slide_index: usize, pub absolute_slide_index: usize, pub total_slides: usize, pub video: Option